Compare commits

...

197 Commits

Author SHA1 Message Date
cf81418938 Merge pull request #8 from probonopd/patch-1
Build and upload AppImage for Linux
2017-03-27 15:08:22 +04:00
probonopd
9a3af3047f Update RepRaptor.desktop 2017-03-25 14:03:19 +01:00
probonopd
f94938b372 Update .travis.yml 2017-03-25 13:55:45 +01:00
60bb57f374 Switched settingswindow.ui to tabbed mode 2017-03-06 15:10:33 +03:00
98b10de3f4 Bumped version 2016-04-16 13:11:29 +03:00
1589d1a4ae New PPA name to fix build 2016-04-16 12:59:36 +03:00
5c790251c1 Added log buffe settings (should also fix the memory leak) 2016-04-16 12:56:30 +03:00
094d7a04b3 Updated printMsg to prevent possible bugs 2016-04-16 12:41:14 +03:00
1533625411 Added travis icon 2015-12-04 10:22:13 +01:00
747b9ebe62 Cleanup for travis 2015-12-04 10:20:13 +01:00
b5b4af8a2e forgot --yes for travis 2015-12-04 10:17:22 +01:00
549d7a76f5 changed travis qt to 55 2015-12-04 10:15:12 +01:00
de6e25391a More travis scripting 2015-12-04 10:08:04 +01:00
705e6ef5b6 Travis package change 2015-12-04 10:02:32 +01:00
c64598d640 Changed travis qmake 2015-12-04 09:57:47 +01:00
bd76f479e7 Second attempt at travis config 2015-12-04 09:55:36 +01:00
a0fb0d588b Fixed apt name 2015-12-04 09:51:58 +01:00
5ae242b4e4 Added travis config 2015-12-04 09:44:13 +01:00
8469e2a6b6 Remember last folder 2015-05-20 17:02:55 +03:00
10365239a5 Remember Step and EStep 2015-05-15 14:37:57 +03:00
7eabc94adf Added "wait" supression 2015-05-02 14:22:54 +03:00
c90153a750 Code cleanup 2015-05-02 14:06:54 +03:00
f7ff8882f2 Release version updated 2015-03-29 14:03:12 +03:00
169cb07d28 Minor refactoring 2015-03-28 21:39:20 +03:00
ce33d5a804 Added new error type 2015-03-28 21:34:49 +03:00
deceb81c8b Flush user buffer upon printing 2015-03-27 23:29:01 +03:00
2d6d09743e Fixed crash in SD window
Fixed '\r\n' at the end of string and pressing "ok" with no selection
2015-03-26 21:12:38 +03:00
ecc6e5570d Ui tweaks 2015-03-26 18:17:24 +03:00
136c2f1077 Set parent for QSettings 2015-03-26 18:10:44 +03:00
a6b57d0da0 Set parent for QSettings 2015-03-26 18:10:11 +03:00
74ec8c9806 Prevent SD printing if no files available 2015-03-26 17:59:47 +03:00
83a5f0eb1d Handle "Not SD printing" 2015-03-26 17:32:48 +03:00
b986c98f9c Optimized priority 2015-03-26 15:33:32 +03:00
c4ba7c8e4f Moved set priority 2015-03-26 15:22:43 +03:00
ae27a3cc96 Merged 2015-03-26 14:42:08 +03:00
7f57b698a1 Merge branch 'master' of https://github.com/NeoTheFox/RepRaptor 2015-03-26 14:40:06 +03:00
6e52256bd9 Better user history 2015-03-26 14:39:00 +03:00
70963c8f59 No need for QPixmap 2015-03-25 23:00:05 +03:00
3cc2dcabb5 Added check for empty filename 2015-03-25 22:36:49 +03:00
1294d65618 Added tray icon 2015-03-25 16:54:08 +03:00
7e18e2fd2f Added tooltips 2015-03-25 15:32:58 +03:00
933163257d Set dialog title 2015-03-24 16:18:12 +03:00
c7b4ba29de Corrected event 2015-03-24 16:16:01 +03:00
dd59c0c54a Added warning on closeEvent 2015-03-24 16:13:43 +03:00
908f49389a Sender priority tweak 2015-03-24 15:09:43 +03:00
2fdd05cac1 Auto-capitalize manual commands 2015-03-23 16:04:41 +03:00
b0190ded97 Made dirty hack less dirty 2015-03-23 14:28:18 +03:00
ec902e01b6 Update settings on change 2015-03-22 14:42:25 +03:00
2e24c28bbf Got rid of compilation warnings
More refactoring
2015-03-21 18:42:44 +03:00
7e354a56d7 More error messages 2015-03-21 16:36:14 +03:00
9fff9d6743 Typo fix 2015-03-21 16:16:53 +03:00
157f3e5535 Refactoring 2015-03-21 01:16:15 +03:00
5f1c9d68f7 Refactoring
Converted old signals and slots to new style
Cleanup
2015-03-21 01:11:50 +03:00
f38e1bf069 Unsupported by OS error handling 2015-03-21 00:57:03 +03:00
6cd2ac8d2e Editable baudrate
Minor UI fixes
2015-03-21 00:52:28 +03:00
b24017e138 Moved to the next version development 2015-03-20 21:44:34 +03:00
c99f298348 Added version and build info 2015-03-20 01:53:24 +03:00
e28c4d71fc Flush user buffer before requesting SD files list 2015-03-19 21:45:59 +03:00
2f4519634a Static cast int to enum 2015-03-19 19:36:29 +03:00
c94afa3986 Added settings for flow control 2015-03-19 19:31:36 +03:00
a5a74d5581 Removed hardware control 2015-03-19 19:02:54 +03:00
17ba5d7e11 Updated README.md with AUR 2015-03-18 19:10:28 +03:00
1b8ca64fc9 Missed typo 2015-03-18 13:27:49 +03:00
c6aab765b5 Merge branch 'master' of https://github.com/NeoTheFox/RepRaptor
Conflicts:
	sender.cpp
	sender.h
2015-03-18 13:25:35 +03:00
079594f6dc Added DTR switch 2015-03-18 13:03:49 +03:00
61f1fc66c2 Merge pull request #7 from J0eC00l/master
Typo fix + additions to .gitignore
2015-03-18 01:06:02 +03:00
Joe Cool
866aa1bc3d merge 2015-03-17 22:53:31 +01:00
Joe Cool
7bc963e526 typo 2015-03-17 22:51:15 +01:00
82b444f066 Fixed range 2015-03-17 14:52:16 +03:00
7831246599 Added feedrate settings 2015-03-17 14:42:05 +03:00
16b3adf8dc Set readyRecieve to true upon connection 2015-03-16 22:00:09 +03:00
16de411b2d Added warning if baudrate set failed 2015-03-16 21:19:33 +03:00
Joe Cool
376428070c Added generated files to .gitignore,
Fixed typo [recieved -> received]
2015-03-16 00:33:46 +01:00
1162748acd More comments 2015-03-15 19:54:40 +03:00
9fa7e3d2c8 Set temperature by pressing return 2015-03-15 19:40:13 +03:00
71bb8a7fa3 Updated README.md 2015-03-15 17:15:09 +03:00
654c0b6546 Made QSerialPortInfo protected 2015-03-15 16:50:51 +03:00
bdb3660134 Removed unneeded concurrent module 2015-03-15 16:42:50 +03:00
12edb52d0c Updated README.md
More comments
2015-03-14 18:28:57 +03:00
a5a8dc662b Cleanup and comments 2015-03-14 18:19:44 +03:00
53283605e0 Added comments and reorganized 2015-03-14 18:15:31 +03:00
a30e869e61 More cleanup
Set parent for all QTimers
2015-03-14 18:00:34 +03:00
5db118ebf6 Cleaned up old sender 2015-03-14 15:08:14 +03:00
8803269616 Tweaked UI 2015-03-14 03:14:09 +03:00
0942248989 QTimer has a resolution of ms 2015-03-14 03:04:53 +03:00
aa05845e51 Fixed interval setting type 2015-03-14 02:45:37 +03:00
690388624f Checksum optimizations 2015-03-14 02:42:00 +03:00
d62be051dd Optimizations and bugfixes 2015-03-14 02:34:35 +03:00
e57406ee6b Set parent of QTimer for it to work correctly; 2015-03-14 01:55:55 +03:00
3f0d2a135f Monor structure tweaks 2015-03-14 01:11:54 +03:00
fb02f184ed Merge pull request #6 from NeoTheFox/activedev
Activedev merged
2015-03-14 01:06:16 +03:00
228d7abd78 Bugfixes and cleanup 2015-03-14 00:28:20 +03:00
b4ce73c959 Moved sender to other thread 2015-03-13 23:55:12 +03:00
fea7f342c1 Initial sender move 2015-03-13 22:19:00 +03:00
314f853e40 Moved checksum algorithm 2015-03-13 14:49:08 +03:00
d007eb32d9 Merge pull request #5 from quillford/master
Changed Step to Step increment
2015-03-13 13:22:58 +03:00
quillford
0942f54ab7 Centered temperatrue input fields 2015-03-12 16:14:24 -07:00
quillford
0b6b327b0e Disable/Enable Temperature UI with other elements 2015-03-12 15:55:10 -07:00
quillford
d33612959b Centered speed and flow 2015-03-12 15:30:59 -07:00
quillford
81b1a73fbb Changed case of buttons 2015-03-12 15:20:41 -07:00
quillford
20ab52821b Renamed Status to Temperature 2015-03-12 15:14:19 -07:00
quillford
c9f84dc22d Changed Step to Step increment 2015-03-12 15:06:09 -07:00
527ecae540 Merge pull request #4 from quillford/master
Changed the Open button to Open File
2015-03-13 00:23:19 +03:00
quillford
0d1cd46bc9 Changed the Open button to Open File 2015-03-12 14:17:00 -07:00
5f8d344cc4 Merge pull request #3 from quillford/master
Fixed typos in about page
2015-03-13 00:06:12 +03:00
quillford
936e316e48 Fixed typos in about page 2015-03-12 14:03:08 -07:00
5331f73cc0 Renamed Release button to motors off
Added flow control
2015-03-12 21:44:49 +03:00
cb32e983ac Merge pull request #2 from quillford/master
Added .gco file extension support
2015-03-12 21:12:40 +03:00
quillford
003d5a6bab Added .gco file extension support 2015-03-12 11:11:34 -07:00
e17e6d2087 Be more tolerant to no heated bed 2015-03-12 21:02:19 +03:00
6017309bd9 Merge branch 'master' of https://github.com/NeoTheFox/RepRaptor 2015-03-12 21:01:27 +03:00
367cbb1c0d Merge pull request #1 from quillford/master
Fixed updating temp in UI for smoothieware
2015-03-12 21:00:31 +03:00
quillford
de87588d62 Fixed updating temp in UI for smoothieware
Smoothie outputs "ok T:" instead of just "T:"
2015-03-12 10:59:02 -07:00
a8e8bbd333 rolled back 2015-03-12 20:33:29 +03:00
f10324ac81 Fix for marlin - do not expect Ok after every line 2015-03-12 20:18:17 +03:00
da63af5709 Reverted 2015-03-11 21:04:22 +03:00
ba4d605aae Second attempt to fix windows crash 2015-03-11 21:01:52 +03:00
b19ee6d8fb Attempt to fix Win32 bug 2015-03-11 20:46:23 +03:00
da4d7aaf06 Multiplatform separator 2015-03-11 18:35:46 +03:00
5caf1db1fa Added some missing packages to instructions 2015-03-11 03:04:24 +03:00
d95b278a62 Removed link to old dev builds (no longer supported) 2015-03-11 03:02:14 +03:00
3149332c82 Updated README.md 2015-03-11 03:01:26 +03:00
d0ff271d82 Ajusted 2015-03-10 23:31:43 +03:00
e2586dd157 Removed unneeded target 2015-03-10 23:07:00 +03:00
2d0bbd3efb Limit recent files to 10 2015-03-10 23:04:51 +03:00
f920d00c0a Added recent files menu 2015-03-10 22:37:53 +03:00
ff1e5698ef Changed minimum temperature interval 2015-03-10 21:04:45 +03:00
6ae1651c0a Added history of user commands 2015-03-10 18:39:09 +03:00
bf79613ffb Cleanup 2015-03-10 00:29:34 +03:00
a59f9b79e7 Cleanup 2015-03-10 00:26:32 +03:00
ee019e42f8 Added timer not to send extra SD checks 2015-03-10 00:22:35 +03:00
47644cccb8 Icon renamed to work with PPA 2015-03-09 22:54:34 +03:00
9fa65d922f Default settings tweaks 2015-03-09 22:31:23 +03:00
a1dea35dc9 Updated README.md 2015-03-09 21:35:02 +03:00
d8ba1b1880 Changed prefix to /usr 2015-03-09 19:48:53 +03:00
003eea17b5 Icon target 2015-03-09 19:14:35 +03:00
e375f0e9ca More tweaks for PPA 2015-03-09 19:12:23 +03:00
ccf8b362b6 Added PPA 2015-03-09 18:03:11 +03:00
e8a062c0d3 Ajusted to build debian packages 2015-03-09 17:45:01 +03:00
87a967e9fd Added .gitignore 2015-03-09 17:21:39 +03:00
993669d8a3 Fixed ignore list 2015-03-09 17:20:13 +03:00
b6b76b9433 Typo fixed 2015-03-09 17:17:09 +03:00
07794afabb Linux makefile generation and install 2015-03-09 17:14:53 +03:00
7cfd1aedb3 Previos Qt versions fixes 2015-03-09 16:25:53 +03:00
e62bfe3949 Settings cleanup 2015-03-09 16:04:56 +03:00
172215b3cb Cleanup 2015-03-09 16:03:18 +03:00
32cece30fb Ui tweaks 2015-03-08 21:41:52 +03:00
218a5c3897 Priority tweak 2015-03-08 21:41:43 +03:00
3dd344f51b Ui tweaks
Ajusted priority
2015-03-08 20:00:27 +03:00
b759337f4d Ui tweaks 2015-03-08 18:33:16 +03:00
4b29cc979d Disabled EEPROM editor for firmwares different from Repetier 2015-03-08 18:22:49 +03:00
2c09580633 Additional checks 2015-03-08 17:54:44 +03:00
c2ed9f3ba3 Optimal parsing 2015-03-08 17:38:08 +03:00
ed810d23e6 UI tweaks 2015-03-08 02:10:33 +03:00
0b25c5709d Fixed SD status reporting with new parser 2015-03-08 01:50:05 +03:00
a83a677bfa Cleanup 2015-03-08 00:18:29 +03:00
7dd5da143e Moved all the parsing to other thread (MAJOR boost in speed) 2015-03-08 00:12:14 +03:00
e904d4499e Bugfixes in EEPROM editor 2015-03-07 20:20:16 +03:00
a89153adc8 Better EEPROM input validation 2015-03-07 17:47:29 +03:00
d50d077508 Ui polish and input validation 2015-03-07 17:21:54 +03:00
e9edde0932 EEPROM editing for Repetier enabled 2015-03-07 16:09:57 +03:00
e7ad6a0013 Added firmware to options (EEPROM editor)
Some preparations to support EEPROM editor
Only enable checksums and EEPROM editor for debug right now
2015-03-07 01:48:17 +03:00
c174c93ed8 More settings and UI bugfixes 2015-03-06 21:57:46 +03:00
1f287f3b58 Optimizations, added Marlin error handling 2015-03-06 19:40:02 +03:00
ec04f3340b SD printing progress fix 2015-03-06 18:04:34 +03:00
763bc62b26 Getting ready for checksum support 2015-03-06 17:44:32 +03:00
3bb5133ea9 Added option to enable\disable controls autolock 2015-03-06 15:13:12 +03:00
af4c29ecdd Replaced some parsers with regexp 2015-03-05 19:39:48 +03:00
dbc69f2264 Merge branch 'master' of https://github.com/NeoTheFox/RepRaptor 2015-03-05 13:42:50 +03:00
f27e5f92f0 Ui tweaks
Minor optimization of temperature parsing
2015-03-05 13:36:48 +03:00
608f9b6ebd README.md update 2015-03-05 00:39:53 +03:00
1e774b0321 Minor quick fix (uncommented M105 at connect) 2015-03-04 23:20:32 +03:00
fad2c570bc Minor UI tweaks
Cleanup
2015-03-04 21:45:04 +03:00
77505f5325 Ui fix 2015-03-04 15:25:44 +03:00
946bfb3d2c Implemented flow control, speed control and emergency stop 2015-03-04 15:21:02 +03:00
c68fc4dca5 Ui tweaks
Added "About Qt"
2015-03-04 14:38:35 +03:00
f3487fae38 UI tweaks
Fixed settings
2015-03-04 14:29:09 +03:00
41d396fe2a Cleanup 2015-03-04 00:13:11 +03:00
d0c4a73cc9 Source reorganization 2015-03-04 00:10:32 +03:00
d8197ef617 Minor ui tweaks 2015-03-04 00:06:44 +03:00
4ec43e3176 Formating tweaks 2015-03-03 23:35:41 +03:00
c0ca93a6a2 Ui tweaks 2015-03-03 22:52:56 +03:00
7a654b6ec6 minor tweaks 2015-03-03 22:50:19 +03:00
983aed1916 Echo on/off
Protocol perfomance tweaks
2015-03-03 22:33:44 +03:00
caf9a47fb9 Fixed protocol 2015-03-03 21:52:37 +03:00
a8744c5cd8 Moved all commands to injector 2015-03-03 19:06:45 +03:00
96081a7588 Async step change fix due to bug in some QT versions 2015-03-03 18:31:26 +03:00
868530ab52 Updated UI and added asymetric step selection 2015-03-03 18:02:59 +03:00
35fe77e08c Settings tweak for SD printing 2015-03-03 16:40:45 +03:00
7dbe5c64eb SD card fixes 2015-03-03 16:31:54 +03:00
34c23b69e4 SD card printing UI 2015-03-03 16:26:26 +03:00
8a43041ed6 Initial SD printing support 2015-03-03 14:51:38 +03:00
3fb77294f3 Merge branch 'master' of https://github.com/NeoTheFox/RepRaptor 2015-03-03 13:21:52 +03:00
1418b230f5 Fixed homeall 2015-03-03 13:21:10 +03:00
f6e1c117d8 Added comments 2015-03-03 11:30:51 +03:00
aed98997a0 Moved temperature parsing to QFuture 2015-03-03 10:54:22 +03:00
8423eda54a Old qt (5.2) fixes 2015-03-02 19:53:13 +03:00
39 changed files with 3384 additions and 896 deletions

8
.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
RepRaptor
Makefile
*.user
*.o
ui_*.h
moc_*
qrc_*
*~

26
.travis.yml Normal file
View File

@ -0,0 +1,26 @@
language: cpp
compiler: gcc
sudo: require
dist: trusty
before_install:
- sudo add-apt-repository ppa:beineri/opt-qt58-trusty -y
- sudo apt-get update -qq
install:
- sudo apt-get -y install qt58base qt58serialport qt58tools
- source /opt/qt58/bin/qt58-env.sh
script:
- qmake PREFIX=/usr
- make -j4
- sudo make INSTALL_ROOT=appdir install ; sudo chown -R $USER appdir ; find appdir/
after_success:
- wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
- chmod a+x linuxdeployqt*.AppImage
- unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
- ./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -bundle-non-qt-libs
- ./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -appimage
- find ./appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq
- curl --upload-file ./RepRaptor*.AppImage https://transfer.sh/RepRaptor-git.$(git rev-parse --short HEAD)-x86_64.AppImage

View File

@ -1,16 +1,24 @@
![RepRaptor logo](http://reprap.org/mediawiki/images/b/b0/RepRaptor_logo2.png)
# RepRaptor
# RepRaptor [![Build Status](https://travis-ci.org/NeoTheFox/RepRaptor.svg?branch=master)](https://travis-ci.org/NeoTheFox/RepRaptor)
A Qt RepRap gcode sender/host controller aimed to be fast and minimalistic.
Right now the project is in early stage.
Right now the project is in early stage. This means some features are still absent, but it is already usable.
## Screenshots
![RepRaptor printing a file](http://reprap.org/mediawiki/images/2/2d/RepRaptor_screenshot0.png)
![Screenshot](http://reprap.org/mediawiki/images/6/6c/RepRaptor-v0.2.png)
## Building on Ubuntu 14.04.2
## Install via PPA
Since 0.3 release PPA is available for Ubuntu 14.04 and Linux Mint 17 (and later).
```
sudo add-apt-repository ppa:soniczerops/repraptor-dev
sudo apt-get update
sudo apt-get install repraptor
```
## Building on Ubuntu 14.04
```
sudo apt-get install libqt5serialport5-dev git build-essential
sudo apt-get install qt5-default libqt5serialport libqt5serialport5-dev git build-essential libudev-dev
git clone https://github.com/NeoTheFox/RepRaptor && cd RepRaptor
@ -18,10 +26,15 @@ qmake RepRaptor.pro
make
```
And if you want to install system-wide
```
sudo make install
```
## Links
- [Binary release downloads](https://github.com/NeoTheFox/RepRaptor/releases)
- [Binary release downloads (Windows, Linux)](https://github.com/NeoTheFox/RepRaptor/releases)
- [RepRap wiki](http://reprap.org/wiki/RepRaptor)
- [Windows dev builds](http://reprap.org/wiki/File:RepRaptor-000-windows.zip)
- [AUR](https://aur.archlinux.org/packages/repraptor-git/)
[![Support via Gratipay](https://cdn.rawgit.com/gratipay/gratipay-badge/2.3.0/dist/gratipay.svg)](https://gratipay.com/NeoTheFox/)

8
RepRaptor.desktop Executable file
View File

@ -0,0 +1,8 @@
[Desktop Entry]
Name=RepRaptor
Comment=A Qt RepRap gcode sender/host controller aimed to be fast and minimalistic.
Exec=RepRaptor
Icon=repraptor
Terminal=false
Type=Application
Categories=Utility;Application;

View File

@ -1,6 +1,7 @@
#-------------------------------------------------
#
# Project created by QtCreator 2015-02-26T16:14:20
# Licenced on terms of GNU GPL v2 licence
#
#-------------------------------------------------
@ -12,28 +13,63 @@ TARGET = RepRaptor
TEMPLATE = app
CONFIG += static
unix {
#VARIABLES
isEmpty(PREFIX) {
PREFIX = /usr
}
BINDIR = $$PREFIX/bin
DATADIR =$$PREFIX/share
DEFINES += DATADIR=\\\"$$DATADIR\\\" PKGDATADIR=\\\"$$PKGDATADIR\\\"
#MAKE INSTALL
INSTALLS += target desktop icon
target.path =$$BINDIR
desktop.path = $$DATADIR/applications
desktop.files += $${TARGET}.desktop
icon.path = $$DATADIR/icons
icon.files += icons/repraptor.png
}
SOURCES += main.cpp\
mainwindow.cpp \
settingswindow.cpp \
aboutwindow.cpp \
errorwindow.cpp \
erroricon.cpp
erroricon.cpp \
sdwindow.cpp \
eepromwindow.cpp \
parser.cpp \
sender.cpp
HEADERS += mainwindow.h \
settingswindow.h \
aboutwindow.h \
errorwindow.h \
erroricon.h
erroricon.h \
sdwindow.h \
repraptor.h \
eepromwindow.h \
parser.h \
sender.h
FORMS += mainwindow.ui \
settingswindow.ui \
aboutwindow.ui \
errorwindow.ui
errorwindow.ui \
sdwindow.ui \
eepromwindow.ui
RESOURCES += \
graphics.qrc
DISTFILES += \
LICENCE \
README.md
README.md \
RepRaptor.desktop \
.travis.yml

View File

@ -6,6 +6,11 @@ AboutWindow::AboutWindow(QWidget *parent) :
ui(new Ui::AboutWindow)
{
ui->setupUi(this);
QString info;
info += "RepRaptor v" + qApp->applicationVersion() + ", ";
info += "built with Qt " + QString(QT_VERSION_STR) + " on ";
info += QString(__DATE__) + ", " + QString(__TIME__);
ui->versionLabel->setText(info);
}
AboutWindow::~AboutWindow()

View File

@ -3,6 +3,8 @@
#include <QDialog>
#include "repraptor.h"
namespace Ui {
class AboutWindow;
}

View File

@ -6,56 +6,25 @@
<rect>
<x>0</x>
<y>0</y>
<width>424</width>
<height>308</height>
<width>359</width>
<height>363</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>About</string>
<string>About RepRaptor</string>
</property>
<property name="windowIcon">
<iconset resource="graphics.qrc">
<normaloff>:/icons/about.png</normaloff>:/icons/about.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>About RepRaptor</string>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QTextBrowser" name="textBrowser">
<property name="acceptDrops">
<bool>false</bool>
</property>
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/icons/logo.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;RepRaptor&lt;/span&gt; is a free and open source software for controlling RepRap and similar mashines. This software is distributed by terms of &lt;a href=&quot;https://www.gnu.org/licenses/gpl-2.0.html&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;GPL v2 licence.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;RepRaptor's main goal is to be as simple as possible and fast, yet functional. This software is being developed as a primary host software for &lt;span style=&quot; font-weight:600;&quot;&gt;MGTU MIREA&lt;/span&gt; university's 3D printing labratory by&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;mailto:repraptor-dev@repraptor.33mail.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;Nickolay (aka &amp;quot;NeoTheFox&amp;quot;) Mardanov.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;https://github.com/NeoTheFox/RepRaptor&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;GitHub&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://www.reprap.org&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;RepRap&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
<property name="openLinks">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<item row="3" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@ -65,9 +34,46 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QTextBrowser" name="textBrowser">
<property name="acceptDrops">
<bool>false</bool>
</property>
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/icons/logo.png&quot; /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt; RepRaptor&lt;/span&gt; is free and open source software for controlling RepRap and similar machines. This software is distributed by terms of &lt;a href=&quot;https://www.gnu.org/licenses/gpl-2.0.html&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;GPL v2 licence.&lt;/span&gt;&lt;/a&gt; Some graphical images (Fugue Icons) are distributed by terms of &lt;a href=&quot;https://creativecommons.org/licenses/by/3.0/deed.ru&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;Creative Commons 3 licence&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; RepRaptor's main goal is to be as simple as possible and fast, yet functional. This software is being developed as a primary host software for &lt;span style=&quot; font-weight:600;&quot;&gt;MGTU MIREA&lt;/span&gt; university's 3D printing laboratory by&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;mailto:repraptor-dev@repraptor.33mail.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;Nickolay (aka &amp;quot;NeoTheFox&amp;quot;) Mardanov.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;https://github.com/NeoTheFox/RepRaptor&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;GitHub&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://www.reprap.org&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;RepRap wiki&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
<property name="openLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="versionLabel">
<property name="text">
<string>Build info</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<resources>
<include location="graphics.qrc"/>
</resources>
<connections>
<connection>
<sender>buttonBox</sender>

139
eepromwindow.cpp Normal file
View File

@ -0,0 +1,139 @@
#include "eepromwindow.h"
#include "ui_eepromwindow.h"
EEPROMWindow::EEPROMWindow(QStringList eepromLines, QWidget *parent) :
QDialog(parent),
ui(new Ui::EEPROMWindow)
{
ui->setupUi(this);
QSettings settings;
firmware = settings.value("printer/firmware").toInt();
QLayout *layout = new QVBoxLayout();
if(firmware == Repetier)
{
int j = 0;
foreach (QString str, eepromLines)
{
str.remove("EPR:"); // Clear the unneeded part
repetierEEPROMline currentLine; //Storage for EEPROM values
QStringList tmp = str.split(' ');
currentLine.T = tmp.at(0).toInt();
currentLine.P = tmp.at(1).toInt();
currentLine.S = tmp.at(2);
lines.append(currentLine);
QString msg;
for(int i = 3; i < tmp.size(); i++) msg+=(tmp.at(i) + " "); //Rejoin the rest
QLayout *line = new QGridLayout();
QLabel *label = new QLabel(msg, this);
QLineEdit *edit = new QLineEdit(currentLine.S,this);
QFrame* hline = new QFrame();
hline->setFrameShape(QFrame::HLine);
hline->setFrameShadow(QFrame::Sunken);
line->addWidget(hline);
edit->setObjectName("e"+QString::number(j)); //Name the LineEdit, so when it emits signal we know where it came from
QRegExpValidator *doublevalidator = new QRegExpValidator(
QRegExp("^\\-?\\d+\\.?\\d+(e\\-?\\d+)?$",
Qt::CaseInsensitive), this);
doublevalidator->setLocale(QLocale::English);
switch(currentLine.T) // set right validator for the line
{
case 0:
edit->setValidator(new QIntValidator(-128, 255, this));
case 1:
case 2:
edit->setValidator(new QIntValidator(this));
break;
case 3:
edit->setValidator(doublevalidator);
break;
default:
break;
}
connect(edit, &QLineEdit::textChanged, this, &EEPROMWindow::lineChanged);
line->addWidget(label);
line->addWidget(edit);
line->setMargin(2);
layout->addItem(line);
j++; // increase counter
}
for(int i = 0; i < lines.size(); i++) changed.append(false);
ui->eepromWidgets->setLayout(layout);
}
else if(firmware == Marlin)
{
}
}
EEPROMWindow::~EEPROMWindow()
{
delete ui;
}
void EEPROMWindow::lineChanged(QString s)
{
if(firmware == Repetier)
{
int num = sender()->objectName().remove(0, 1).toInt();
lines[num].S = s;
changed[num] = true;
}
else if(firmware == Marlin)
{
}
}
void EEPROMWindow::on_buttonBox_accepted()
{
QStringList gcode;
if(firmware == Repetier)
{
for(int i=0; i < changed.size(); i++)
{
if(changed.at(i))
{
QString command;
command+=QString("M206");
command+=QString("T");
command+=QString::number(lines.at(i).T);
command+=QString("P");
command+=QString::number(lines.at(i).P);
if(lines.at(i).T == 3) command+=QString("X");
else command+=QString("S");
command+=lines.at(i).S;
gcode.append(command);
}
}
}
else if(firmware == Marlin)
{
}
emit changesComplete(gcode);
}

37
eepromwindow.h Normal file
View File

@ -0,0 +1,37 @@
#ifndef EEPROMWINDOW_H
#define EEPROMWINDOW_H
#include <QDialog>
#include <QtWidgets>
#include "repraptor.h"
using namespace RepRaptor;
namespace Ui {
class EEPROMWindow;
}
class EEPROMWindow : public QDialog
{
Q_OBJECT
public:
explicit EEPROMWindow(QStringList eepromLines, QWidget *parent = 0);
~EEPROMWindow();
private:
Ui::EEPROMWindow *ui;
QVector <repetierEEPROMline> lines;
QVector <bool> changed;
int firmware;
signals:
void changesComplete(QStringList changed);
private slots:
void on_buttonBox_accepted();
void lineChanged(QString s);
};
#endif // EEPROMWINDOW_H

93
eepromwindow.ui Normal file
View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>EEPROMWindow</class>
<widget class="QDialog" name="EEPROMWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>287</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>EEPROM Editor</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="eepromWidgets">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>267</width>
<height>251</height>
</rect>
</property>
</widget>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>EEPROMWindow</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>227</x>
<y>282</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>EEPROMWindow</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>277</x>
<y>288</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -4,16 +4,18 @@ ErrorIcon::ErrorIcon(QWidget *parent) : QWidget(parent)
{
framenum = 0;
frame = ":icons/error_a.png";
animation.setInterval(300);
animation.start();
animation = new QTimer(this);
animation->setInterval(300);
animation->start();
connect(&animation, SIGNAL(timeout()), this, SLOT(changeFrame()));
connect(animation, &QTimer::timeout, this, &ErrorIcon::changeFrame);
}
void ErrorIcon::paintEvent(QPaintEvent *pe)
void ErrorIcon::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawPixmap(0,0,128,87,QPixmap(frame));
QPixmap pframe(frame);
painter.drawPixmap(0,0,pframe.width(),pframe.height(),pframe);
}
void ErrorIcon::changeFrame()
@ -33,6 +35,6 @@ void ErrorIcon::changeFrame()
ErrorIcon::~ErrorIcon()
{
animation->stop();
}

View File

@ -11,12 +11,12 @@ class ErrorIcon : public QWidget
public:
explicit ErrorIcon(QWidget *parent = 0);
~ErrorIcon();
QTimer animation;
QTimer *animation;
QString frame;
int framenum;
protected:
virtual void paintEvent(QPaintEvent *pe);
virtual void paintEvent(QPaintEvent *);
signals:

View File

@ -1,11 +1,29 @@
#include "errorwindow.h"
#include "ui_errorwindow.h"
ErrorWindow::ErrorWindow(QWidget *parent, QString errorText) :
using namespace RepRaptor;
ErrorWindow::ErrorWindow(QWidget *parent, QString errorText, int errType):
QDialog(parent),
ui(new Ui::ErrorWindow)
{
ui->setupUi(this);
switch(errType)
{
case SerialPortError:
ui->label->setText(tr("Serial port error:"));
break;
case OpenFileError:
ui->label->setText(tr("File open error:"));
break;
case HardwareFailure:
ui->label->setText(tr("Hardware failure:"));
break;
default:
ui->label->setText(tr("Unknown error type:"));
break;
}
ui->errorlabel->setText(errorText);
}

View File

@ -4,6 +4,7 @@
#include <QDialog>
#include "erroricon.h"
#include "repraptor.h"
namespace Ui {
class ErrorWindow;
@ -14,7 +15,7 @@ class ErrorWindow : public QDialog
Q_OBJECT
public:
explicit ErrorWindow(QWidget *parent = 0, QString errorText = "Unknown error");
explicit ErrorWindow(QWidget *parent = 0, QString errorText = "Unknown error", int errType = 0);
~ErrorWindow();
private:

View File

@ -1,8 +1,14 @@
<RCC>
<qresource prefix="/">
<file>icons/icon.png</file>
<file>icons/repraptor.png</file>
<file>icons/logo.png</file>
<file>icons/error_a.png</file>
<file>icons/error_b.png</file>
<file>icons/g.png</file>
<file>icons/sd.png</file>
<file>icons/settings.png</file>
<file>icons/about.png</file>
<file>icons/exit.png</file>
<file>icons/eeprom.png</file>
</qresource>
</RCC>

BIN
icons/about.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 B

BIN
icons/eeprom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

BIN
icons/exit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 B

BIN
icons/g.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
icons/sd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
icons/settings.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

View File

@ -1,13 +1,16 @@
#include "mainwindow.h"
#include "repraptor.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//Set some props in order to fetch and save QSettings
QCoreApplication::setOrganizationName("NeoTheFox");
QCoreApplication::setOrganizationDomain("https://github.com/NeoTheFox");
QCoreApplication::setApplicationName("RepRaptor");
QCoreApplication::setApplicationVersion(REPRAPTOR_VERSION);
MainWindow w;
w.show();

File diff suppressed because it is too large Load Diff

View File

@ -3,20 +3,27 @@
#include <QMainWindow>
#include <QFileDialog>
#include <QSystemTrayIcon>
#include <QtSerialPort/QtSerialPort>
#include <QFile>
#include <QFuture>
#include <QThread>
#include <QVector>
#include <QTextStream>
#include <QTimer>
#include <QSettings>
#include <QElapsedTimer>
#include <QMessageBox>
#include <QRegExp>
#include <QMap>
#include "settingswindow.h"
#include "aboutwindow.h"
#include "errorwindow.h"
#include "sdwindow.h"
#include "repraptor.h"
#include "eepromwindow.h"
#include "parser.h"
#include "sender.h"
using namespace RepRaptor;
namespace Ui {
class MainWindow;
@ -30,43 +37,81 @@ public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
Parser *parserWorker;
Sender *senderWorker;
QThread *parserThread;
QThread *senderThread;
protected:
QMap <QString, QString> macros;
QFile gfile;
QVector<QString> gcode;
QTimer sendTimer;
QTimer statusTimer;
QTimer tempWarning;
QElapsedTimer sinceLastTemp;
QQueue <QString> userCommands;
QTimer *progressSDTimer;
QTimer *statusTimer;
QSystemTrayIcon *trayIcon;
QMenu *recentMenu;
QMenu *trayIconMenu;
QElapsedTimer *sinceLastTemp;
QElapsedTimer *sinceLastSDStatus;
QSettings settings;
QStringList recentFiles;
QStringList EEPROMSettings;
QStringList userHistory;
QSerialPortInfo printerinfo;
QTextCursor terminalCursor;
void closeEvent(QCloseEvent *event);
bool eventFilter(QObject *target, QEvent *event);
private:
Ui::MainWindow *ui;
void parseFile(QFile &file);
QSerialPort printer;
QSerialPortInfo printerinfo;
QString lastDir;
bool opened;
bool firstrun;
bool autolock;
bool printing;
bool sending;
bool paused;
bool commandDone;
bool checkingTemperature;
bool injectingCommand;
int currentLine;
QString userCommand;
bool sdprinting;
bool echo;
bool chekingSDStatus;
bool trayIconEnabled;
bool supressWait;
int firmware;
int feedrate;
int extruderFeedrate;
int userHistoryPos;
unsigned long int sdBytes;
private slots:
void open();
void serialconnect();
void serialupdate();
bool sendLine(QString line);
void readSerial();
void updatesettings();
void readSerial(QByteArray data);
void printMsg(QString text);
void printMsg(const char* text);
void sendNext();
void checkStatus();
void updateRecent();
void injectCommand(QString command);
void parseStatus(QByteArray data);
void initSDprinting(QStringList sdFiles);
void selectSDfile(QString file);
void checkSDStatus();
void updateSDStatus(SDProgress p);
void requestEEPROMSettings();
void openEEPROMeditor();
void sendEEPROMsettings(QStringList changes);
void updateTemperature(TemperatureReadings r);
void EEPROMSettingReceived(QString esetting);
void receivedError();
void receivedSDDone();
void receivedNotSDPrinting();
void parseFile(QString filename);
void recentClicked();
void updateFileProgress(FileProgress);
void baudrateSetFailed(int b);
void trayIconClicked(QSystemTrayIcon::ActivationReason reason);
void xplus();
void yplus();
@ -93,12 +138,38 @@ private slots:
void on_btmpoff_clicked();
void on_sendBtn_clicked();
void on_pauseBtn_clicked();
void on_haltbtn_clicked();
void on_actionAbout_Qt_triggered();
void on_speedslider_valueChanged(int value);
void on_speededit_textChanged(const QString &arg1);
void on_speedsetbtn_clicked();
void on_flowedit_textChanged(const QString &arg1);
void on_flowslider_valueChanged(int value);
void on_flowbutton_clicked();
void on_checktemp_stateChanged(int arg1);
void on_actionSettings_triggered();
void on_stepspin_valueChanged(const QString &arg1);
void on_estepspin_valueChanged(const QString &arg1);
void on_releasebtn_clicked();
void on_actionAbout_triggered();
void serialError(QSerialPort::SerialPortError error);
void on_actionPrint_from_SD_triggered();
void on_actionSet_SD_printing_mode_triggered();
void on_actionEEPROM_editor_triggered();
signals:
void sdReady();
void startedReadingEEPROM();
void openPort(QSerialPortInfo i);
void closePort();
void startPrinting();
void stopPrinting();
void pause(bool p);
void setBaudrate(int b);
void setFile(QVector <QString> f);
void injectCommand(QString command);
void flushInjectionBuffer();
};
#endif // MAINWINDOW_H

File diff suppressed because it is too large Load Diff

123
parser.cpp Normal file
View File

@ -0,0 +1,123 @@
#include "parser.h"
Parser::Parser(QObject *parent):
QObject(parent)
{
//Init regexp
temperatureRegxp.setCaseSensitivity(Qt::CaseInsensitive);
temperatureRegxp.setPatternSyntax(QRegExp::RegExp);
temperatureRegxp.setPattern("\\d+\\.\\d+"); // Find float in string
//Init values
readingFiles = false;
readingEEPROM = false;
EEPROMReadingStarted = false;
//Load settings
QSettings settings;
firmware = settings.value("printer/firmware").toInt();
}
Parser::~Parser()
{
}
void Parser::parse(QByteArray data)
{
if(!data.isEmpty()) //Dont need to process empty strings
{
if(readingFiles) //SD files list reading mode
{
if(!data.contains("End file list")) SDFilesList.append(data.remove(data.size()-2, 2));
else
{
readingFiles = false;
emit receivedSDFilesList(SDFilesList);
}
return;
}
if(readingEEPROM) // EEPROM reading mode
{
if(firmware == Repetier)
{
if(data.startsWith("EPR"))
{
emit receivedEEPROMLine(QString(data));
EEPROMReadingStarted = true;
}
else if(EEPROMReadingStarted)
{
readingEEPROM = false;
EEPROMReadingStarted = false;
emit recievingEEPROMDone();
}
return;
}
}
/*
if(data.startsWith("ok"))
{
QStringList tmp = QString(data).split(' ');
if(tmp.size() > 1)
emit receivedOkNum(tmp.at(1).toInt());
else emit receivedOkNum(0);
}
*/
else if(data.contains("T:"))
{
TemperatureReadings r;
if(temperatureRegxp.indexIn(QString(data)) != -1)
r.e = temperatureRegxp.cap(0).toDouble();
else r.e = 0;
if(temperatureRegxp.indexIn(QString(data), temperatureRegxp.matchedLength()) != -1)
r.b = temperatureRegxp.cap(0).toDouble();
else r.b = 0;
r.raw = QString(data);
emit receivedTemperature(r);
}
//else if(data.startsWith("wait")) emit receivedOkWait();
else if(data.startsWith("rs") || data.toLower().startsWith("resend"))
emit receivedResend(data.split(':').at(1).toInt());
else if(data.startsWith("!!")) emit receivedError();
else if(data.startsWith("Done")) emit receivedSDDone();
else if(data.startsWith("start")) emit receivedStart();
else if(data.startsWith("SD pr"))
{
SDProgress p;
QRegExp rxp("\\d+/\\d+");
QStringList tmp;
if(rxp.indexIn(data) != -1)
{
tmp = rxp.cap(0).split('/');
p.progress = tmp.at(0).toLong();
p.total = tmp.at(1).toLong();
}
else return;
emit receivedSDUpdate(p);
}
else if(data.startsWith("Not SD ")) emit receivedNotSDPrinting();
else if(data.contains("Begin file list"))
{
SDFilesList.clear();
readingFiles = true; //start reading files from SD
}
//else if(data.contains("REPETIER")) emit receivedFirmware(Repetier);
//else if(data.contains("MARLIN")) emit receivedFirmware(Marlin);
}
}
void Parser::setEEPROMReadingMode()
{
readingEEPROM = true;
}

48
parser.h Normal file
View File

@ -0,0 +1,48 @@
#ifndef PARSETHREAD_H
#define PARSETHREAD_H
#include <QThread>
#include <QSettings>
#include "repraptor.h"
using namespace RepRaptor;
class Parser : public QObject
{
Q_OBJECT
public:
explicit Parser(QObject *parent = 0);
~Parser();
protected:
QByteArray data;
QStringList SDFilesList;
QRegExp temperatureRegxp;
int firmware;
bool readingFiles;
bool readingEEPROM;
bool EEPROMReadingStarted;
signals:
void receivedTemperature(TemperatureReadings);
void receivedSDUpdate(SDProgress);
void receivedNotSDPrinting();
void receivedEEPROMLine(QString);
void recievingEEPROMDone();
void receivedSDFilesList(QStringList);
void receivedOkWait();
void receivedOkNum(int);
void receivedStart();
void receivedResend(int);
void receivedError();
void receivedFirmware(int);
void receivedSDDone();
public slots:
void parse(QByteArray data);
void setEEPROMReadingMode();
};
#endif // PARSETHREAD_H

52
repraptor.h Normal file
View File

@ -0,0 +1,52 @@
/////////////////////////////////////////////////
//This file contains RepRaptor - specific stuff//
/////////////////////////////////////////////////
#ifndef REPRAPTOR_H
#define REPRAPTOR_H
#ifndef REPRAPTOR_VERSION
#define REPRAPTOR_VERSION "0.3.9"
#endif
namespace RepRaptor
{
typedef struct
{
double e, b;
QString raw;
} TemperatureReadings;
enum Firmware
{
Marlin,
Repetier,
OtherFirmware
};
enum ErrorType
{
SerialPortError,
OpenFileError,
HardwareFailure
};
typedef struct
{
int T, P;
QString S;
} repetierEEPROMline;
typedef struct
{
unsigned long int progress, total;
} SDProgress;
typedef struct
{
unsigned int T, P;
} FileProgress;
}
#endif // REPRAPTOR_H

33
sdwindow.cpp Normal file
View File

@ -0,0 +1,33 @@
#include "sdwindow.h"
#include "ui_sdwindow.h"
SDWindow::SDWindow(QStringList files, QWidget *parent) :
QDialog(parent),
ui(new Ui::SDWindow)
{
ui->setupUi(this);
ui->fileslist->setSelectionMode(QListView::SingleSelection);
if(!files.isEmpty())
{
ui->fileslist->addItems(files);
ui->fileslist->setCurrentItem(ui->fileslist->itemAt(0,0));
}
}
SDWindow::~SDWindow()
{
delete ui;
}
void SDWindow::on_buttonBox_accepted()
{
if(ui->fileslist->count() > 0) emit fileSelected(ui->fileslist->currentItem()->text());
}
void SDWindow::on_fileslist_doubleClicked(const QModelIndex &)
{
if(ui->fileslist->count() > 0) emit fileSelected(ui->fileslist->currentItem()->text());
this->close();
}

30
sdwindow.h Normal file
View File

@ -0,0 +1,30 @@
#ifndef SDWINDOW_H
#define SDWINDOW_H
#include <QDialog>
namespace Ui {
class SDWindow;
}
class SDWindow : public QDialog
{
Q_OBJECT
public:
explicit SDWindow(QStringList files, QWidget *parent = 0);
~SDWindow();
signals:
void fileSelected(QString filename);
private slots:
void on_buttonBox_accepted();
void on_fileslist_doubleClicked(const QModelIndex &);
private:
Ui::SDWindow *ui;
};
#endif // SDWINDOW_H

99
sdwindow.ui Normal file
View File

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SDWindow</class>
<widget class="QDialog" name="SDWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>274</width>
<height>302</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Print from SD</string>
</property>
<property name="windowIcon">
<iconset resource="graphics.qrc">
<normaloff>:/icons/sd.png</normaloff>:/icons/sd.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Select file:</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QListWidget" name="fileslist">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="autoScroll">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="graphics.qrc"/>
</resources>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>SDWindow</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>SDWindow</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

224
sender.cpp Normal file
View File

@ -0,0 +1,224 @@
#include "sender.h"
Sender::Sender(QObject *parent) : QObject(parent)
{
//Initial values
currentLine=0;
totalLineNum=0;
baudrate=115200;
resendNum = 0;
resending = false;
sendingChecksum=false;
paused=false;
sending=false;
readyReceive = false;
printer = new QSerialPort(this);
sendTimer = new QTimer(this);
//Fetch settings
QSettings settings(this);
sendTimer->setInterval(settings.value("core/senderinterval", 2).toInt());
sendingChecksum = settings.value("core/checksums", 0).toBool();
dtr = settings.value("core/dtr", 1).toBool();
flowcontrol = settings.value("core/flowcontrol", 0).toInt();
sendTimer->start();
connect(printer, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(receivedError(QSerialPort::SerialPortError)));
connect(printer, &QSerialPort::readyRead, this, &Sender::receivedData);
connect(sendTimer, &QTimer::timeout, this, &Sender::sendNext);
}
Sender::~Sender()
{
closePort();
sendTimer->stop();
}
//Mainloop of sending
void Sender::sendNext()
{
if(printer->isWritable() && readyReceive)
{
//Checksums
if(sendingChecksum && resending)
{
if(resendNum < sentCommands.size())
{
sendLine(sentCommands.at(resendNum));
resendNum++;
}
else if(resendNum == sentCommands.size())
{
resending = false;
resendNum = 0;
}
else if(resendNum > sentCommands.size())
{
sendLine("M110 N0");
totalLineNum = 0;
resendNum = 0;
sentCommands.clear();
}
return;
}
if(!userCommands.isEmpty()) //Inject user command
{
sendLine(userCommands.dequeue());
readyReceive = false;
return;
}
else if(sending && !paused) //Send line of gcode
{
FileProgress p;
if(currentLine >= gcode.size()) //check if we are at the end of array
{
sending = false;
currentLine = 0;
if(sendingChecksum) sendLine("M110 N0");
p.P = gcode.size();
p.T = gcode.size();
emit reportProgress(p);
return;
}
sendLine(gcode.at(currentLine));
currentLine++;
readyReceive=false;
p.P = currentLine;
p.T = gcode.size();
emit reportProgress(p);
}
}
}
bool Sender::sendLine(QString line)
{
sentCommands.clear();
if(printer->isOpen())
{
if(sendingChecksum)
{
if(line.contains("M110")) totalLineNum = 0;
sentCommands.append(line);
//Checksum algorithm from RepRap wiki
line = "N"+QString::number(totalLineNum)+line+"*";
int cs = 0;
for(int i = 0; line.at(i) != '*'; i++) cs = cs ^ line.at(i).toLatin1();
cs &= 0xff;
line += QString::number(cs);
totalLineNum++;
}
if(printer->write(line.toUtf8()+'\n')) return true;
else return false;
}
else return false;
}
void Sender::openPort(QSerialPortInfo i)
{
printer->setPort(i);
if(!printer->isOpen() && printer->open(QIODevice::ReadWrite))
{
//Moved here to be compatible with Qt 5.2.1
printer->setDataTerminalReady(dtr);
if(!printer->setBaudRate(baudrate))
emit baudrateSetFailed(baudrate);
printer->setFlowControl(static_cast<QSerialPort::FlowControl>(flowcontrol));
}
readyReceive = true;
}
void Sender::closePort()
{
if(printer->isOpen()) printer->close();
}
void Sender::startPrinting()
{
currentLine = 0;
paused = false;
sending = true;
}
void Sender::stopPrinting()
{
currentLine = 0;
paused = false;
sending = false;
}
void Sender::pause(bool p)
{
paused = p;
}
void Sender::setBaudrate(int b)
{
baudrate = b;
}
void Sender::setFile(QVector <QString> f)
{
gcode = f;
}
void Sender::injectCommand(QString command)
{
if(!userCommands.contains(command)) userCommands.enqueue(command);
}
void Sender::receivedOkWait()
{
readyReceive = true;
}
void Sender::receivedOkNum(int)
{
readyReceive = true;
}
void Sender::receivedStart()
{
readyReceive = true;
}
void Sender::flushInjectionBuffer()
{
userCommands.clear();
}
void Sender::receivedResend(int r)
{
if(sendingChecksum)
{
resending = true;
resendNum = r;
}
else currentLine--;
}
void Sender::receivedData()
{
if(printer->canReadLine())
{
QByteArray data = printer->readLine();
if(data == "") return;
emit dataReceived(data);
//Yeah, yeah, I know. This class is called "Sender", but checking this here is faster.
if(data.startsWith("ok") || data.startsWith("wait")) readyReceive=true;
}
}
void Sender::receivedError(QSerialPort::SerialPortError error)
{
if(error > 0)
{
closePort();
emit errorReceived(error);
}
}

71
sender.h Normal file
View File

@ -0,0 +1,71 @@
#ifndef SENDER_H
#define SENDER_H
#include <QObject>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QQueue>
#include <QTimer>
#include <QSettings>
#include <QVector>
#include "repraptor.h"
using namespace RepRaptor;
class Sender : public QObject
{
Q_OBJECT
public:
explicit Sender(QObject *parent = 0);
~Sender();
protected:
QSerialPort *printer;
QTimer *sendTimer;
long int currentLine;
long int totalLineNum;
long int resendNum;
long int baudrate;
long int flowcontrol;
bool paused;
bool sending;
bool dtr;
bool readyReceive;
bool sendingChecksum;
bool resending;
QQueue <QString> userCommands;
QStringList sentCommands;
QVector <QString> gcode;
bool sendLine(QString s);
signals:
void errorReceived(QSerialPort::SerialPortError error);
void dataReceived(QByteArray data);
void reportProgress(FileProgress p);
void baudrateSetFailed(int b);
public slots:
void openPort(QSerialPortInfo i);
void closePort();
void startPrinting();
void stopPrinting();
void pause(bool p);
void setBaudrate(int b);
void setFile(QVector <QString> f);
void injectCommand(QString);
void flushInjectionBuffer();
void receivedOkWait();
void receivedOkNum(int);
void receivedStart();
void receivedResend(int r);
void sendNext();
void receivedData();
void receivedError(QSerialPort::SerialPortError error);
};
#endif // SENDER_H

View File

@ -1,151 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QGroupBox" name="hardwaregroup">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>181</width>
<height>65</height>
</rect>
</property>
<property name="title">
<string>Hardware</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Bed Size</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="xsize">
<property name="text">
<string>200</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_2">
<property name="text">
<string>X</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLineEdit" name="ysize">
<property name="text">
<string>200</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QPushButton" name="savebtn">
<property name="geometry">
<rect>
<x>220</x>
<y>270</y>
<width>80</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Save</string>
</property>
</widget>
<widget class="QPushButton" name="cancelbtn">
<property name="geometry">
<rect>
<x>310</x>
<y>270</y>
<width>80</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Cancel</string>
</property>
</widget>
<widget class="QGroupBox" name="intervalgroup">
<property name="geometry">
<rect>
<x>10</x>
<y>90</y>
<width>181</width>
<height>96</height>
</rect>
</property>
<property name="title">
<string>Intervals</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Sender</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="sendinterval">
<property name="maximum">
<number>9999</number>
</property>
<property name="value">
<number>50</number>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_5">
<property name="text">
<string>ms</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Status</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="statusinterval">
<property name="maximum">
<number>9999</number>
</property>
<property name="value">
<number>3000</number>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_6">
<property name="text">
<string>ms</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -6,17 +6,39 @@ SettingsWindow::SettingsWindow(QWidget *parent) :
ui(new Ui::SettingsWindow)
{
ui->setupUi(this);
ui->flowcontrolbox->addItem(tr("No control"));
ui->flowcontrolbox->addItem(tr("Hardware control"));
ui->flowcontrolbox->addItem(tr("Software control"));
ui->senderbox->setValue(settings.value("core/senderinterval").toFloat());
//bool firstrun = !settings.value("core/firstrun").toBool(); //firstrun is inverted!
if(settings.value("core/statusinterval").toInt()) ui->statusbox->setValue(settings.value("core/statusinterval").toInt());
else ui->senderbox->setValue(3000);
settings.setParent(this);
ui->flowcontrolbox->setCurrentIndex(settings.value("core/flowcontrol", 0).toInt());
ui->senderbox->setValue(settings.value("core/senderinterval", 2).toInt());
ui->traybox->setChecked(settings.value("core/trayiconenabled", 1).toBool());
ui->statusbox->setValue(settings.value("core/statusinterval", 2000).toInt());
ui->bedxbox->setValue(settings.value("printer/bedx", 200).toInt());
ui->bedybox->setValue(settings.value("printer/bedy", 200).toInt());
ui->feedrateBox->setValue(settings.value("printer/feedrate", 1500).toInt());
ui->extruderFeedrateBox->setValue(settings.value("printer/extruderfeedrate", 200).toInt());
ui->lockbox->setChecked(settings.value("core/lockcontrols", 0).toBool());
ui->checksumbox->setChecked(settings.value("core/checksums", 0).toBool());
ui->sdbox->setChecked(settings.value("core/checksdstatus", 1).toBool());
ui->dtrbox->setChecked(settings.value("core/dtr", 1).toBool());
ui->supresswaitbox->setChecked(settings.value("user/supresswait").toBool());
ui->bufferbox->setValue(settings.value("core/logbuffersize", 1000).toInt());
if(settings.value("printer/bedx").toInt()) ui->bedxbox->setValue(settings.value("printer/bedx").toInt());
else ui->bedxbox->setValue(200);
ui->firmwarecombo->addItem("Marlin"); //0
ui->firmwarecombo->addItem("Repetier"); //1
ui->firmwarecombo->addItem("Other"); //2
if(settings.value("printer/bedy").toInt()) ui->bedybox->setValue(settings.value("printer/bedy").toInt());
else ui->bedybox->setValue(200);
ui->firmwarecombo->setCurrentIndex(settings.value("printer/firmware", OtherFirmware).toInt());
#ifdef QT_DEBUG
ui->checksumbox->setEnabled(true);
#else
ui->checksumbox->setDisabled(true);
#endif
}
@ -27,8 +49,21 @@ SettingsWindow::~SettingsWindow()
void SettingsWindow::on_buttonBox_accepted()
{
settings.setValue("core/flowcontrol", ui->flowcontrolbox->currentIndex());
settings.setValue("core/trayiconenabled", ui->traybox->isChecked());
settings.setValue("core/senderinterval", ui->senderbox->value());
settings.setValue("core/statusinterval", ui->statusbox->value());
settings.setValue("printer/bedy", ui->bedybox->value());
settings.setValue("printer/bedx", ui->bedxbox->value());
settings.setValue("printer/feedrate", ui->feedrateBox->value());
settings.setValue("printer/extruderfeedrate", ui->extruderFeedrateBox->value());
settings.setValue("core/lockcontrols", ui->lockbox->isChecked());
settings.setValue("core/checksums", ui->checksumbox->isChecked());
settings.setValue("core/checksdstatus", ui->sdbox->isChecked());
settings.setValue("core/dtr", ui->dtrbox->isChecked());
settings.setValue("printer/firmware", ui->firmwarecombo->currentIndex());
settings.setValue("user/supresswait", ui->supresswaitbox->isChecked());
settings.setValue("core/logbuffersize", ui->bufferbox->value());
emit updatesettings();
}

View File

@ -3,6 +3,9 @@
#include <QDialog>
#include <QSettings>
#include "repraptor.h"
using namespace RepRaptor;
namespace Ui {
class SettingsWindow;
@ -24,6 +27,10 @@ private slots:
private:
Ui::SettingsWindow *ui;
signals:
void updatesettings();
};
#endif // SETTINGSWINDOW_H

View File

@ -6,161 +6,351 @@
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
<width>603</width>
<height>491</height>
</rect>
</property>
<property name="windowTitle">
<string>Settings</string>
</property>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry">
<rect>
<x>30</x>
<y>260</y>
<width>341</width>
<height>32</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
<widget class="QGroupBox" name="intervalsGroup">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>201</width>
<height>96</height>
</rect>
</property>
<property name="title">
<string>Intervals</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Sender</string>
</property>
<property name="windowIcon">
<iconset resource="graphics.qrc">
<normaloff>:/icons/settings.png</normaloff>:/icons/settings.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="minimumSize">
<size>
<width>200</width>
<height>400</height>
</size>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab_general">
<attribute name="title">
<string>General</string>
</attribute>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QGroupBox" name="internalGroup">
<property name="title">
<string>Internal</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="senderbox">
<property name="toolTip">
<string>A good default is 2, lower = fater, higher = less CPU load. 0 would execute as soon as possible.</string>
</property>
<property name="toolTipDuration">
<number>-1</number>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>999.990000000000009</double>
</property>
<property name="singleStep">
<double>1.000000000000000</double>
</property>
<property name="value">
<double>2.000000000000000</double>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="statusbox">
<property name="toolTip">
<string>A good default is 5000. More = less interruptions, less = better temperature monitoring</string>
</property>
<property name="toolTipDuration">
<number>-1</number>
</property>
<property name="minimum">
<number>1500</number>
</property>
<property name="maximum">
<number>99999</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Status</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QCheckBox" name="checksumbox">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Checksums</string>
</property>
</widget>
</item>
<item row="9" column="0" colspan="3">
<widget class="QCheckBox" name="sdbox">
<property name="text">
<string>Check SD printing status</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="3">
<widget class="QLabel" name="label_7">
<property name="minimumSize">
<size>
<width>0</width>
<height>28</height>
</size>
</property>
<property name="text">
<string>This settings are applied after restart</string>
</property>
<property name="textFormat">
<enum>Qt::AutoText</enum>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="margin">
<number>1</number>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Flow control</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QCheckBox" name="dtrbox">
<property name="text">
<string>DTR</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_4">
<property name="text">
<string>ms</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_3">
<property name="text">
<string>ms</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Sender</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="2">
<widget class="QComboBox" name="flowcontrolbox">
<property name="toolTip">
<string/>
</property>
</widget>
</item>
<item row="8" column="0" colspan="3">
<widget class="QCheckBox" name="lockbox">
<property name="text">
<string>Lock controls when printing</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QCheckBox" name="traybox">
<property name="enabled">
<bool>true</bool>
</property>
<property name="toolTip">
<string>Show tray icon</string>
</property>
<property name="text">
<string>Tray icon</string>
</property>
</widget>
</item>
<item row="11" column="0" colspan="2">
<widget class="QCheckBox" name="supresswaitbox">
<property name="text">
<string>Supress &quot;wait&quot; responce</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Log buffer</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="bufferbox">
<property name="maximum">
<number>100000</number>
</property>
<property name="value">
<number>1000</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_3">
<property name="text">
<string>ms</string>
</property>
<widget class="QWidget" name="tab_network">
<attribute name="title">
<string>Network</string>
</attribute>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Status</string>
</property>
<widget class="QWidget" name="tab_hardware">
<attribute name="title">
<string>Hardware</string>
</attribute>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>249</width>
<height>171</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Printer</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="1">
<widget class="QSpinBox" name="bedxbox">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_6">
<property name="text">
<string>X</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QSpinBox" name="bedybox">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Bed size</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Firmware</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="3">
<widget class="QComboBox" name="firmwarecombo"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Feedrate</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QSpinBox" name="feedrateBox">
<property name="toolTip">
<string>Speed of axis movements (only affect buttons)</string>
</property>
<property name="maximum">
<number>99999</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Extruder
feedrate</string>
</property>
<property name="margin">
<number>1</number>
</property>
</widget>
</item>
<item row="3" column="1" colspan="2">
<widget class="QSpinBox" name="extruderFeedrateBox">
<property name="toolTip">
<string>Extruder speed (only affect buttons)</string>
</property>
<property name="maximum">
<number>99999</number>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="statusbox">
<property name="toolTip">
<string>A good default is 5000. More = less interruptions, less = better temperature monitoring</string>
</property>
<property name="toolTipDuration">
<number>-1</number>
</property>
<property name="minimum">
<number>500</number>
</property>
<property name="maximum">
<number>99999</number>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_4">
<property name="text">
<string>ms</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="senderbox">
<property name="toolTip">
<string>A good default is 2, lower = fater, higher = less CPU load. 0 would execute as soon as possible.</string>
</property>
<property name="toolTipDuration">
<number>-1</number>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>999.990000000000009</double>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>10</x>
<y>110</y>
<width>201</width>
<height>66</height>
</rect>
</property>
<property name="title">
<string>Printer</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="2">
<widget class="QLabel" name="label_6">
<property name="text">
<string>X</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="bedxbox">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Bed size</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QSpinBox" name="bedybox">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item row="1" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<resources>
<include location="graphics.qrc"/>
</resources>
<connections>
<connection>
<sender>buttonBox</sender>
@ -169,8 +359,8 @@
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
<x>243</x>
<y>376</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
@ -185,11 +375,11 @@
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
<x>243</x>
<y>376</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<x>252</x>
<y>274</y>
</hint>
</hints>