Compare commits

...

22 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
9 changed files with 394 additions and 271 deletions

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,5 +1,5 @@
![RepRaptor logo](http://reprap.org/mediawiki/images/b/b0/RepRaptor_logo2.png) ![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. A Qt RepRap gcode sender/host controller aimed to be fast and minimalistic.
Right now the project is in early stage. This means some features are still absent, but it is already usable. Right now the project is in early stage. This means some features are still absent, but it is already usable.

View File

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

View File

@ -71,4 +71,5 @@ RESOURCES += \
DISTFILES += \ DISTFILES += \
LICENCE \ LICENCE \
README.md \ README.md \
RepRaptor.desktop RepRaptor.desktop \
.travis.yml

View File

@ -40,6 +40,7 @@ MainWindow::MainWindow(QWidget *parent) :
recentMenu->setTitle("Recent files"); recentMenu->setTitle("Recent files");
ui->menuFile->insertMenu(ui->actionSettings, recentMenu); ui->menuFile->insertMenu(ui->actionSettings, recentMenu);
ui->menuFile->insertSeparator(ui->actionSettings); ui->menuFile->insertSeparator(ui->actionSettings);
terminalCursor = ui->terminal->textCursor();
//Init baudrate combobox //Init baudrate combobox
ui->baudbox->addItem(QString::number(4800)); ui->baudbox->addItem(QString::number(4800));
@ -79,6 +80,10 @@ MainWindow::MainWindow(QWidget *parent) :
ui->checktemp->setChecked(checkingTemperature); ui->checktemp->setChecked(checkingTemperature);
ui->etmpspin->setValue(settings.value("user/extrudertemp", 210).toInt()); ui->etmpspin->setValue(settings.value("user/extrudertemp", 210).toInt());
ui->btmpspin->setValue(settings.value("user/bedtemp", 60).toInt()); ui->btmpspin->setValue(settings.value("user/bedtemp", 60).toInt());
ui->stepspin->setValue(settings.value("user/step", 1).toInt());
ui->estepspin->setValue(settings.value("user/estep", 1).toInt());
ui->terminal->document()->setMaximumBlockCount(
settings.value("core/logbuffersize", 1000).toInt());
echo = settings.value("core/echo", 0).toBool(); echo = settings.value("core/echo", 0).toBool();
autolock = settings.value("core/lockcontrols", 0).toBool(); autolock = settings.value("core/lockcontrols", 0).toBool();
chekingSDStatus = settings.value("core/checksdstatus", 1).toBool(); chekingSDStatus = settings.value("core/checksdstatus", 1).toBool();
@ -87,6 +92,8 @@ MainWindow::MainWindow(QWidget *parent) :
feedrate = settings.value("feedrate", 1500).toInt(); feedrate = settings.value("feedrate", 1500).toInt();
extruderFeedrate = settings.value("extruderfeedrate", 200).toInt(); extruderFeedrate = settings.value("extruderfeedrate", 200).toInt();
trayIconEnabled = settings.value("core/trayiconenabled", 1).toBool(); trayIconEnabled = settings.value("core/trayiconenabled", 1).toBool();
supressWait = settings.value("user/supresswait", 0).toBool();
lastDir.append(settings.value("user/lastdir", "").toString());
int size = settings.beginReadArray("user/recentfiles"); int size = settings.beginReadArray("user/recentfiles");
for(int i = 0; i < size; ++i) for(int i = 0; i < size; ++i)
{ {
@ -119,7 +126,6 @@ MainWindow::MainWindow(QWidget *parent) :
//Parser thread signal-slots and init //Parser thread signal-slots and init
parserWorker->moveToThread(parserThread); parserWorker->moveToThread(parserThread);
connect(parserThread, &QThread::finished, parserWorker, &QObject::deleteLater); connect(parserThread, &QThread::finished, parserWorker, &QObject::deleteLater);
connect(this, &MainWindow::receivedData, parserWorker, &Parser::parse);
connect(this, &MainWindow::startedReadingEEPROM, parserWorker, &Parser::setEEPROMReadingMode); connect(this, &MainWindow::startedReadingEEPROM, parserWorker, &Parser::setEEPROMReadingMode);
connect(parserWorker, &Parser::receivedTemperature, this, &MainWindow::updateTemperature); connect(parserWorker, &Parser::receivedTemperature, this, &MainWindow::updateTemperature);
connect(parserWorker, &Parser::receivedSDFilesList, this, &MainWindow::initSDprinting); connect(parserWorker, &Parser::receivedSDFilesList, this, &MainWindow::initSDprinting);
@ -140,8 +146,8 @@ MainWindow::MainWindow(QWidget *parent) :
connect(parserWorker, &Parser::receivedResend, senderWorker, &Sender::receivedResend); connect(parserWorker, &Parser::receivedResend, senderWorker, &Sender::receivedResend);
connect(parserWorker, &Parser::receivedStart, senderWorker, &Sender::receivedStart); connect(parserWorker, &Parser::receivedStart, senderWorker, &Sender::receivedStart);
connect(senderWorker, &Sender::errorReceived, this, &MainWindow::serialError); connect(senderWorker, &Sender::errorReceived, this, &MainWindow::serialError);
connect(senderWorker, &Sender::dataReceived, parserWorker, &Parser::parse, Qt::QueuedConnection); connect(senderWorker, &Sender::dataReceived, parserWorker, &Parser::parse);
connect(senderWorker, &Sender::dataReceived, this, &MainWindow::readSerial, Qt::QueuedConnection); connect(senderWorker, &Sender::dataReceived, this, &MainWindow::readSerial);
connect(senderWorker, &Sender::reportProgress, this, &MainWindow::updateFileProgress); connect(senderWorker, &Sender::reportProgress, this, &MainWindow::updateFileProgress);
connect(senderWorker, &Sender::baudrateSetFailed, this, &MainWindow::baudrateSetFailed); connect(senderWorker, &Sender::baudrateSetFailed, this, &MainWindow::baudrateSetFailed);
connect(this, &MainWindow::setFile, senderWorker, &Sender::setFile); connect(this, &MainWindow::setFile, senderWorker, &Sender::setFile);
@ -182,6 +188,9 @@ MainWindow::~MainWindow()
settings.setValue("core/checktemperature", ui->checktemp->isChecked()); settings.setValue("core/checktemperature", ui->checktemp->isChecked());
settings.setValue("user/extrudertemp", ui->etmpspin->value()); settings.setValue("user/extrudertemp", ui->etmpspin->value());
settings.setValue("user/bedtemp", ui->btmpspin->value()); settings.setValue("user/bedtemp", ui->btmpspin->value());
settings.setValue("user/step", ui->stepspin->value());
settings.setValue("user/estep", ui->estepspin->value());
settings.setValue("user/lastdir", lastDir);
settings.beginWriteArray("user/recentfiles"); settings.beginWriteArray("user/recentfiles");
for(int i = 0; i < recentFiles.size(); ++i) for(int i = 0; i < recentFiles.size(); ++i)
{ {
@ -208,11 +217,30 @@ void MainWindow::open()
sdprinting = false; sdprinting = false;
QString filename; QString filename;
QDir home; QDir home;
filename = QFileDialog::getOpenFileName(this, if(lastDir == "")
tr("Open GCODE"), {
home.home().absolutePath(), filename = QFileDialog::getOpenFileName(this,
"GCODE (*.g *.gco *.gcode *.nc)"); tr("Open GCODE"),
home.home().absolutePath(),
"GCODE (*.g *.gco *.gcode *.nc)");
}
else
{
filename = QFileDialog::getOpenFileName(this,
tr("Open GCODE"),
lastDir,
"GCODE (*.g *.gco *.gcode *.nc)");
}
if(filename.isEmpty() || filename.isNull()) return; if(filename.isEmpty() || filename.isNull()) return;
//Remember the last folder
lastDir.clear();
lastDir.append(filename);
int filenameChars = 0;
for(int i = filename.count()-1; filename.at(i) != QDir::separator(); i--)
{
filenameChars++; //Count how many characters are in the filename
}
lastDir.remove(lastDir.count()-filenameChars, filenameChars);//remove filename
gfile.setFileName(filename); gfile.setFileName(filename);
if(!recentFiles.contains(filename)) if(!recentFiles.contains(filename))
{ {
@ -604,15 +632,16 @@ void MainWindow::readSerial(QByteArray data)
void MainWindow::printMsg(QString text) void MainWindow::printMsg(QString text)
{ {
if(supressWait && text.startsWith("wait")) return;
//Get the cursor and set it to the end //Get the cursor and set it to the end
QTextCursor cursor = ui->terminal->textCursor(); terminalCursor.movePosition(QTextCursor::End);
cursor.movePosition(QTextCursor::End);
//Paste the text //Paste the text
cursor.insertText(text); terminalCursor.insertText(text);
//Apply //Scroll to the bottom
ui->terminal->setTextCursor(cursor); ui->terminal->verticalScrollBar()->setValue(
ui->terminal->verticalScrollBar()->maximum());
} }
void MainWindow::checkStatus() void MainWindow::checkStatus()
@ -927,6 +956,8 @@ void MainWindow::updatesettings()
statusTimer->setInterval(settings.value("core/statusinterval", 3000).toInt()); statusTimer->setInterval(settings.value("core/statusinterval", 3000).toInt());
feedrate = settings.value("feedrate", 1500).toInt(); feedrate = settings.value("feedrate", 1500).toInt();
extruderFeedrate = settings.value("extruderfeedrate", 200).toInt(); extruderFeedrate = settings.value("extruderfeedrate", 200).toInt();
ui->terminal->document()->setMaximumBlockCount(
settings.value("core/logbuffersize", 1000).toInt());
} }
//Needed for keypress handling //Needed for keypress handling

View File

@ -59,6 +59,7 @@ protected:
QStringList EEPROMSettings; QStringList EEPROMSettings;
QStringList userHistory; QStringList userHistory;
QSerialPortInfo printerinfo; QSerialPortInfo printerinfo;
QTextCursor terminalCursor;
void closeEvent(QCloseEvent *event); void closeEvent(QCloseEvent *event);
bool eventFilter(QObject *target, QEvent *event); bool eventFilter(QObject *target, QEvent *event);
@ -66,6 +67,7 @@ protected:
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
QString lastDir;
bool opened; bool opened;
bool firstrun; bool firstrun;
bool autolock; bool autolock;
@ -77,6 +79,7 @@ private:
bool echo; bool echo;
bool chekingSDStatus; bool chekingSDStatus;
bool trayIconEnabled; bool trayIconEnabled;
bool supressWait;
int firmware; int firmware;
int feedrate; int feedrate;
int extruderFeedrate; int extruderFeedrate;
@ -156,7 +159,6 @@ private slots:
signals: signals:
void sdReady(); void sdReady();
void receivedData(QByteArray);
void startedReadingEEPROM(); void startedReadingEEPROM();
void openPort(QSerialPortInfo i); void openPort(QSerialPortInfo i);

View File

@ -6,7 +6,7 @@
#define REPRAPTOR_H #define REPRAPTOR_H
#ifndef REPRAPTOR_VERSION #ifndef REPRAPTOR_VERSION
#define REPRAPTOR_VERSION "0.3.8" #define REPRAPTOR_VERSION "0.3.9"
#endif #endif
namespace RepRaptor namespace RepRaptor

View File

@ -25,6 +25,8 @@ SettingsWindow::SettingsWindow(QWidget *parent) :
ui->checksumbox->setChecked(settings.value("core/checksums", 0).toBool()); ui->checksumbox->setChecked(settings.value("core/checksums", 0).toBool());
ui->sdbox->setChecked(settings.value("core/checksdstatus", 1).toBool()); ui->sdbox->setChecked(settings.value("core/checksdstatus", 1).toBool());
ui->dtrbox->setChecked(settings.value("core/dtr", 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());
ui->firmwarecombo->addItem("Marlin"); //0 ui->firmwarecombo->addItem("Marlin"); //0
ui->firmwarecombo->addItem("Repetier"); //1 ui->firmwarecombo->addItem("Repetier"); //1
@ -60,6 +62,8 @@ void SettingsWindow::on_buttonBox_accepted()
settings.setValue("core/checksdstatus", ui->sdbox->isChecked()); settings.setValue("core/checksdstatus", ui->sdbox->isChecked());
settings.setValue("core/dtr", ui->dtrbox->isChecked()); settings.setValue("core/dtr", ui->dtrbox->isChecked());
settings.setValue("printer/firmware", ui->firmwarecombo->currentIndex()); settings.setValue("printer/firmware", ui->firmwarecombo->currentIndex());
settings.setValue("user/supresswait", ui->supresswaitbox->isChecked());
settings.setValue("core/logbuffersize", ui->bufferbox->value());
emit updatesettings(); emit updatesettings();
} }

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>483</width> <width>603</width>
<height>341</height> <height>491</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -19,261 +19,321 @@
</property> </property>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QGroupBox" name="internalGroup"> <widget class="QTabWidget" name="tabWidget">
<property name="title"> <property name="minimumSize">
<string>Internal</string> <size>
<width>200</width>
<height>400</height>
</size>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <property name="currentIndex">
<item row="1" column="0"> <number>0</number>
<widget class="QLabel" name="label">
<property name="text">
<string>Sender</string>
</property>
</widget>
</item>
<item row="3" column="1" colspan="2">
<widget class="QComboBox" name="flowcontrolbox">
<property name="toolTip">
<string/>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Flow control</string>
</property>
</widget>
</item>
<item row="5" 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="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="1" column="2">
<widget class="QLabel" name="label_3">
<property name="text">
<string>ms</string>
</property>
</widget>
</item>
<item row="9" 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="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="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Status</string>
</property>
</widget>
</item>
<item row="8" column="0" colspan="3">
<widget class="QCheckBox" name="sdbox">
<property name="text">
<string>Check SD printing status</string>
</property>
</widget>
</item>
<item row="7" column="0" colspan="3">
<widget class="QCheckBox" name="lockbox">
<property name="text">
<string>Lock controls when printing</string>
</property>
</widget>
</item>
<item row="6" 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>
</layout>
</widget>
</item>
<item row="0" column="1">
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
<property name="title"> <widget class="QWidget" name="tab_general">
<string>Printer</string> <attribute name="title">
</property> <string>General</string>
<layout class="QGridLayout" name="gridLayout_2"> </attribute>
<item row="1" column="1"> <layout class="QFormLayout" name="formLayout">
<widget class="QSpinBox" name="bedxbox"> <item row="0" column="0">
<property name="minimum"> <widget class="QGroupBox" name="internalGroup">
<number>1</number> <property name="title">
</property> <string>Internal</string>
<property name="maximum"> </property>
<number>9999</number> <layout class="QGridLayout" name="gridLayout">
</property> <item row="1" column="1">
</widget> <widget class="QDoubleSpinBox" name="senderbox">
</item> <property name="toolTip">
<item row="1" column="2"> <string>A good default is 2, lower = fater, higher = less CPU load. 0 would execute as soon as possible.</string>
<widget class="QLabel" name="label_6"> </property>
<property name="text"> <property name="toolTipDuration">
<string>X</string> <number>-1</number>
</property> </property>
</widget> <property name="locale">
</item> <locale language="English" country="UnitedStates"/>
<item row="1" column="3"> </property>
<widget class="QSpinBox" name="bedybox"> <property name="minimum">
<property name="minimum"> <double>0.000000000000000</double>
<number>1</number> </property>
</property> <property name="maximum">
<property name="maximum"> <double>999.990000000000009</double>
<number>9999</number> </property>
</property> <property name="singleStep">
</widget> <double>1.000000000000000</double>
</item> </property>
<item row="1" column="0"> <property name="value">
<widget class="QLabel" name="label_5"> <double>2.000000000000000</double>
<property name="text"> </property>
<string>Bed size</string> </widget>
</property> </item>
</widget> <item row="2" column="1">
</item> <widget class="QSpinBox" name="statusbox">
<item row="0" column="0"> <property name="toolTip">
<widget class="QLabel" name="label_8"> <string>A good default is 5000. More = less interruptions, less = better temperature monitoring</string>
<property name="text"> </property>
<string>Firmware</string> <property name="toolTipDuration">
</property> <number>-1</number>
</widget> </property>
</item> <property name="minimum">
<item row="0" column="1" colspan="3"> <number>1500</number>
<widget class="QComboBox" name="firmwarecombo"/> </property>
</item> <property name="maximum">
<item row="2" column="0"> <number>99999</number>
<widget class="QLabel" name="label_9"> </property>
<property name="text"> </widget>
<string>Feedrate</string> </item>
</property> <item row="2" column="0">
</widget> <widget class="QLabel" name="label_2">
</item> <property name="text">
<item row="2" column="1" colspan="2"> <string>Status</string>
<widget class="QSpinBox" name="feedrateBox"> </property>
<property name="toolTip"> </widget>
<string>Speed of axis movements (only affect buttons)</string> </item>
</property> <item row="10" column="0">
<property name="maximum"> <widget class="QCheckBox" name="checksumbox">
<number>99999</number> <property name="enabled">
</property> <bool>true</bool>
</widget> </property>
</item> <property name="text">
<item row="3" column="0"> <string>Checksums</string>
<widget class="QLabel" name="label_10"> </property>
<property name="text"> </widget>
<string>Extruder </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>
<widget class="QWidget" name="tab_network">
<attribute name="title">
<string>Network</string>
</attribute>
</widget>
<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> feedrate</string>
</property> </property>
<property name="margin"> <property name="margin">
<number>1</number> <number>1</number>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1" colspan="2"> <item row="3" column="1" colspan="2">
<widget class="QSpinBox" name="extruderFeedrateBox"> <widget class="QSpinBox" name="extruderFeedrateBox">
<property name="toolTip"> <property name="toolTip">
<string>Extruder speed (only affect buttons)</string> <string>Extruder speed (only affect buttons)</string>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>99999</number> <number>99999</number>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget>
</widget>
</widget> </widget>
</item> </item>
<item row="2" column="0" colspan="2"> <item row="1" column="0">
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>