Compare commits

..

No commits in common. "master" and "0.3.8" have entirely different histories.

9 changed files with 273 additions and 396 deletions

View File

@ -1,26 +0,0 @@
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 [![Build Status](https://travis-ci.org/NeoTheFox/RepRaptor.svg?branch=master)](https://travis-ci.org/NeoTheFox/RepRaptor) # 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,8 +1,9 @@
[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=RepRaptor Exec=/usr/bin/RepRaptor
Icon=repraptor Icon=/usr/share/icons/repraptor.png
Terminal=false Terminal=false
Type=Application Type=Application
Categories=Utility;Application; Categories=Utility;Application;

View File

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

View File

@ -40,7 +40,6 @@ 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));
@ -80,10 +79,6 @@ 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();
@ -92,8 +87,6 @@ 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)
{ {
@ -126,6 +119,7 @@ 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);
@ -146,8 +140,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); connect(senderWorker, &Sender::dataReceived, parserWorker, &Parser::parse, Qt::QueuedConnection);
connect(senderWorker, &Sender::dataReceived, this, &MainWindow::readSerial); connect(senderWorker, &Sender::dataReceived, this, &MainWindow::readSerial, Qt::QueuedConnection);
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);
@ -188,9 +182,6 @@ 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)
{ {
@ -217,30 +208,11 @@ void MainWindow::open()
sdprinting = false; sdprinting = false;
QString filename; QString filename;
QDir home; QDir home;
if(lastDir == "") filename = QFileDialog::getOpenFileName(this,
{ tr("Open GCODE"),
filename = QFileDialog::getOpenFileName(this, home.home().absolutePath(),
tr("Open GCODE"), "GCODE (*.g *.gco *.gcode *.nc)");
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))
{ {
@ -632,16 +604,15 @@ 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
terminalCursor.movePosition(QTextCursor::End); QTextCursor cursor = ui->terminal->textCursor();
cursor.movePosition(QTextCursor::End);
//Paste the text //Paste the text
terminalCursor.insertText(text); cursor.insertText(text);
//Scroll to the bottom //Apply
ui->terminal->verticalScrollBar()->setValue( ui->terminal->setTextCursor(cursor);
ui->terminal->verticalScrollBar()->maximum());
} }
void MainWindow::checkStatus() void MainWindow::checkStatus()
@ -956,8 +927,6 @@ 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,7 +59,6 @@ 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);
@ -67,7 +66,6 @@ protected:
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
QString lastDir;
bool opened; bool opened;
bool firstrun; bool firstrun;
bool autolock; bool autolock;
@ -79,7 +77,6 @@ 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;
@ -159,6 +156,7 @@ 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.9" #define REPRAPTOR_VERSION "0.3.8"
#endif #endif
namespace RepRaptor namespace RepRaptor

View File

@ -25,8 +25,6 @@ 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
@ -62,8 +60,6 @@ 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>603</width> <width>483</width>
<height>491</height> <height>341</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -19,321 +19,261 @@
</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="QTabWidget" name="tabWidget"> <widget class="QGroupBox" name="internalGroup">
<property name="minimumSize"> <property name="title">
<size> <string>Internal</string>
<width>200</width>
<height>400</height>
</size>
</property> </property>
<property name="currentIndex"> <layout class="QGridLayout" name="gridLayout">
<number>0</number> <item row="1" column="0">
</property> <widget class="QLabel" name="label">
<widget class="QWidget" name="tab_general"> <property name="text">
<attribute name="title"> <string>Sender</string>
<string>General</string> </property>
</attribute> </widget>
<layout class="QFormLayout" name="formLayout"> </item>
<item row="0" column="0"> <item row="3" column="1" colspan="2">
<widget class="QGroupBox" name="internalGroup"> <widget class="QComboBox" name="flowcontrolbox">
<property name="title"> <property name="toolTip">
<string>Internal</string> <string/>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> </widget>
<item row="1" column="1"> </item>
<widget class="QDoubleSpinBox" name="senderbox"> <item row="3" column="0">
<property name="toolTip"> <widget class="QLabel" name="label_11">
<string>A good default is 2, lower = fater, higher = less CPU load. 0 would execute as soon as possible.</string> <property name="text">
</property> <string>Flow control</string>
<property name="toolTipDuration"> </property>
<number>-1</number> </widget>
</property> </item>
<property name="locale"> <item row="5" column="0">
<locale language="English" country="UnitedStates"/> <widget class="QCheckBox" name="dtrbox">
</property> <property name="text">
<property name="minimum"> <string>DTR</string>
<double>0.000000000000000</double> </property>
</property> </widget>
<property name="maximum"> </item>
<double>999.990000000000009</double> <item row="2" column="2">
</property> <widget class="QLabel" name="label_4">
<property name="singleStep"> <property name="text">
<double>1.000000000000000</double> <string>ms</string>
</property> </property>
<property name="value"> </widget>
<double>2.000000000000000</double> </item>
</property> <item row="1" column="1">
</widget> <widget class="QDoubleSpinBox" name="senderbox">
</item> <property name="toolTip">
<item row="2" column="1"> <string>A good default is 2, lower = fater, higher = less CPU load. 0 would execute as soon as possible.</string>
<widget class="QSpinBox" name="statusbox"> </property>
<property name="toolTip"> <property name="toolTipDuration">
<string>A good default is 5000. More = less interruptions, less = better temperature monitoring</string> <number>-1</number>
</property> </property>
<property name="toolTipDuration"> <property name="locale">
<number>-1</number> <locale language="English" country="UnitedStates"/>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>1500</number> <double>0.000000000000000</double>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>99999</number> <double>999.990000000000009</double>
</property> </property>
</widget> <property name="singleStep">
</item> <double>1.000000000000000</double>
<item row="2" column="0"> </property>
<widget class="QLabel" name="label_2"> <property name="value">
<property name="text"> <double>2.000000000000000</double>
<string>Status</string> </property>
</property> </widget>
</widget> </item>
</item> <item row="2" column="1">
<item row="10" column="0"> <widget class="QSpinBox" name="statusbox">
<widget class="QCheckBox" name="checksumbox"> <property name="toolTip">
<property name="enabled"> <string>A good default is 5000. More = less interruptions, less = better temperature monitoring</string>
<bool>true</bool> </property>
</property> <property name="toolTipDuration">
<property name="text"> <number>-1</number>
<string>Checksums</string> </property>
</property> <property name="minimum">
</widget> <number>1500</number>
</item> </property>
<item row="9" column="0" colspan="3"> <property name="maximum">
<widget class="QCheckBox" name="sdbox"> <number>99999</number>
<property name="text"> </property>
<string>Check SD printing status</string> </widget>
</property> </item>
</widget> <item row="1" column="2">
</item> <widget class="QLabel" name="label_3">
<item row="0" column="0" colspan="3"> <property name="text">
<widget class="QLabel" name="label_7"> <string>ms</string>
<property name="minimumSize"> </property>
<size> </widget>
<width>0</width> </item>
<height>28</height> <item row="9" column="0">
</size> <widget class="QCheckBox" name="checksumbox">
</property> <property name="enabled">
<property name="text"> <bool>true</bool>
<string>This settings are applied after restart</string> </property>
</property> <property name="text">
<property name="textFormat"> <string>Checksums</string>
<enum>Qt::AutoText</enum> </property>
</property> </widget>
<property name="wordWrap"> </item>
<bool>true</bool> <item row="0" column="0" colspan="3">
</property> <widget class="QLabel" name="label_7">
<property name="margin"> <property name="minimumSize">
<number>1</number> <size>
</property> <width>0</width>
</widget> <height>28</height>
</item> </size>
<item row="4" column="0"> </property>
<widget class="QLabel" name="label_11"> <property name="text">
<property name="text"> <string>This settings are applied after restart</string>
<string>Flow control</string> </property>
</property> <property name="textFormat">
</widget> <enum>Qt::AutoText</enum>
</item> </property>
<item row="6" column="0"> <property name="wordWrap">
<widget class="QCheckBox" name="dtrbox"> <bool>true</bool>
<property name="text"> </property>
<string>DTR</string> <property name="margin">
</property> <number>1</number>
</widget> </property>
</item> </widget>
<item row="2" column="2"> </item>
<widget class="QLabel" name="label_4"> <item row="2" column="0">
<property name="text"> <widget class="QLabel" name="label_2">
<string>ms</string> <property name="text">
</property> <string>Status</string>
</widget> </property>
</item> </widget>
<item row="1" column="2"> </item>
<widget class="QLabel" name="label_3"> <item row="8" column="0" colspan="3">
<property name="text"> <widget class="QCheckBox" name="sdbox">
<string>ms</string> <property name="text">
</property> <string>Check SD printing status</string>
</widget> </property>
</item> </widget>
<item row="1" column="0"> </item>
<widget class="QLabel" name="label"> <item row="7" column="0" colspan="3">
<property name="text"> <widget class="QCheckBox" name="lockbox">
<string>Sender</string> <property name="text">
</property> <string>Lock controls when printing</string>
</widget> </property>
</item> </widget>
<item row="4" column="1" colspan="2"> </item>
<widget class="QComboBox" name="flowcontrolbox"> <item row="6" column="0">
<property name="toolTip"> <widget class="QCheckBox" name="traybox">
<string/> <property name="enabled">
</property> <bool>true</bool>
</widget> </property>
</item> <property name="toolTip">
<item row="8" column="0" colspan="3"> <string>Show tray icon</string>
<widget class="QCheckBox" name="lockbox"> </property>
<property name="text"> <property name="text">
<string>Lock controls when printing</string> <string>Tray icon</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="0"> </layout>
<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>
</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>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <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 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>
</item>
<item row="2" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>