diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -18,6 +18,7 @@ */ #include "mainwindow.h" #include +#include #include #include #include @@ -86,13 +87,32 @@ auto newInstanceWidget = new AtCoreInstanceWidget(); QString name = QString::number(m_instances->addTab(newInstanceWidget, i18n("Connect a printer"))); newInstanceWidget->setObjectName(name); - newInstanceWidget->setOpenFiles(m_openFiles); + newInstanceWidget->setFileCount(m_openFiles.size()); connect(this, &MainWindow::profilesChanged, newInstanceWidget, &AtCoreInstanceWidget::updateProfileData); connect(newInstanceWidget, &AtCoreInstanceWidget::requestProfileDialog, [ this ] { std::unique_ptr pd(new ProfilesDialog); pd->exec(); emit(profilesChanged()); }); + + connect(newInstanceWidget, &AtCoreInstanceWidget::requestFileChooser, [ newInstanceWidget, this ] { + switch (m_openFiles.size()){ + case 0: + QMessageBox::warning(this, i18n("Error"), + i18n("There's no GCode File open. \n Please select a file and try again."), + QMessageBox::Ok); + break; + case 1: + newInstanceWidget->printFile(m_openFiles.at(0)); + break; + default: + ChooseFileDialog dialog(this,m_openFiles); + if(dialog.exec() == QDialog::Accepted){ + newInstanceWidget->printFile(dialog.choosenFile()); + } + } + }); + connect(newInstanceWidget, &AtCoreInstanceWidget::connectionChanged, this, &MainWindow::atCoreInstanceNameChange); if(m_instances->count() > 1) { @@ -203,7 +223,7 @@ for(int i=0; i < tabs; ++i){ auto instance = qobject_cast(m_instances->widget(i)); - instance->setOpenFiles(m_openFiles); + instance->setFileCount(m_openFiles.size()); } } } diff --git a/src/widgets/atcoreinstancewidget.h b/src/widgets/atcoreinstancewidget.h --- a/src/widgets/atcoreinstancewidget.h +++ b/src/widgets/atcoreinstancewidget.h @@ -53,21 +53,22 @@ ~AtCoreInstanceWidget(); void startConnection(const QString& serialPort, const QMap& profile); bool connected(); - void setOpenFiles(const QList& files); + void setFileCount(int count); public slots: void updateProfileData(); + void printFile(const QUrl& fileName); private: AtCore m_core; + int m_fileCount; QToolBar *m_toolBar; QComboBox *m_comboPort; QComboBox *m_comboProfile; QPushButton *m_connectButton; QToolBar *m_connectToolBar; QWidget *m_connectWidget; QMap profileData; - QList m_files; QAction *m_printAction; QAction *m_stopAction; QSettings m_settings; @@ -83,7 +84,6 @@ SdWidget *m_sdWidget; StatusWidget *m_statusWidget; void initConnectsToAtCore(); - void printFile(const QUrl& fileName); void pausePrint(); void stopPrint(); void disableMotors(); @@ -101,4 +101,5 @@ void disableDisconnect(bool b); void extruderCountChanged(int count); void requestProfileDialog(); + void requestFileChooser(); }; diff --git a/src/widgets/atcoreinstancewidget.cpp b/src/widgets/atcoreinstancewidget.cpp --- a/src/widgets/atcoreinstancewidget.cpp +++ b/src/widgets/atcoreinstancewidget.cpp @@ -22,16 +22,15 @@ #include #include #include -#include "choosefiledialog.h" AtCoreInstanceWidget::AtCoreInstanceWidget(QWidget *parent): QWidget(parent), + m_fileCount(0), m_toolBar(nullptr), m_printAction(nullptr), m_stopAction(nullptr) { m_theme = palette().text().color().value() >= QColor(Qt::lightGray).value() ? QString("dark") : QString("light") ; - QHBoxLayout *HLayout = new QHBoxLayout; m_bedExtWidget = new BedExtruderWidget; HLayout->addWidget(m_bedExtWidget); @@ -150,7 +149,7 @@ connect(disableMotorsAction, &QAction::triggered, this, &AtCoreInstanceWidget::disableMotors); m_toolBar->addAction(disableMotorsAction); - togglePrintButtons(m_files.size()); + togglePrintButtons(m_fileCount); } void AtCoreInstanceWidget::buildConnectionToolbar() @@ -334,23 +333,11 @@ } } -void AtCoreInstanceWidget::print(){ - switch (m_files.size()){ - case 0: - QMessageBox::warning(this, i18n("Error"), - i18n("There's no GCode File open. \n Please select a file and try again."), - QMessageBox::Ok); - break; - case 1: - printFile(m_files.at(0)); - break; - default: - auto dialog = new ChooseFileDialog(this, m_files); - if(dialog->exec() == QDialog::Accepted){ - printFile(dialog->choosenFile()); - } - } +void AtCoreInstanceWidget::print() +{ + emit (requestFileChooser()); } + void AtCoreInstanceWidget::pausePrint() { if(m_core.state() == AtCore::BUSY) { @@ -497,10 +484,10 @@ return (m_core.state() != AtCore::DISCONNECTED); } -void AtCoreInstanceWidget::setOpenFiles(const QList& files) +void AtCoreInstanceWidget::setFileCount(int count) { - m_files = files; - togglePrintButtons(m_files.size()); + m_fileCount = count; + togglePrintButtons(m_fileCount); } void AtCoreInstanceWidget::updateSerialPort(const QStringList &ports)