diff --git a/src/widgets/atcoreinstancewidget.h b/src/widgets/atcoreinstancewidget.h --- a/src/widgets/atcoreinstancewidget.h +++ b/src/widgets/atcoreinstancewidget.h @@ -56,7 +56,7 @@ void updateProfileData(); private: - AtCore m_core; + AtCore *m_core; BedExtruderWidget *m_bedExtWidget; CommandWidget *m_commandWidget; int m_fileCount; diff --git a/src/widgets/atcoreinstancewidget.cpp b/src/widgets/atcoreinstancewidget.cpp --- a/src/widgets/atcoreinstancewidget.cpp +++ b/src/widgets/atcoreinstancewidget.cpp @@ -25,6 +25,7 @@ AtCoreInstanceWidget::AtCoreInstanceWidget(QWidget *parent): QWidget(parent) + , m_core(new AtCore(this)) , m_fileCount(0) , m_printAction(nullptr) , m_stopAction(nullptr) @@ -94,7 +95,7 @@ AtCoreInstanceWidget::~AtCoreInstanceWidget() { - m_core.closeConnection(); + m_core->closeConnection(); } void AtCoreInstanceWidget::buildToolbar() @@ -112,14 +113,14 @@ auto homeAll = new QAction(i18n("All")); connect(homeAll, &QAction::triggered, this, [this] { - m_core.home(); + m_core->home(); }); m_toolBar->addAction(homeAll); for (auto homes : std::map {{"X", AtCore::X}, {"Y", AtCore::Y}, {"Z", AtCore::Z}}) { auto home = new QAction(homes.first); connect(home, &QAction::triggered, this, [this, homes] { - m_core.home(uchar(homes.second)); + m_core->home(uchar(homes.second)); }); m_toolBar->addAction(home); } @@ -129,20 +130,20 @@ m_printAction = new QAction(QIcon::fromTheme("media-playback-start", style()->standardIcon(QStyle::SP_MediaPlay)), i18n("Print")); connect(m_printAction, &QAction::triggered, this, [this] { - if (m_core.state() == AtCore::BUSY) + if (m_core->state() == AtCore::BUSY) { m_logWidget->appendLog(i18n("Pause Print")); pausePrint(); return; } - if (m_core.state() == AtCore::IDLE) + if (m_core->state() == AtCore::IDLE) { print(); - } else if (m_core.state() == AtCore::PAUSE) + } else if (m_core->state() == AtCore::PAUSE) { m_logWidget->appendLog(i18n("Resume Print")); - m_core.resume(); + m_core->resume(); } }); m_toolBar->addAction(m_printAction); @@ -196,7 +197,7 @@ void AtCoreInstanceWidget::connectButtonClicked() { - if (m_core.state() == AtCore::DISCONNECTED) { + if (m_core->state() == AtCore::DISCONNECTED) { if (m_comboProfile->currentText().isEmpty()) { QMessageBox::information( this @@ -218,11 +219,11 @@ //Get profile data before connecting. m_profileData = readProfile(); //then connect - if (m_core.initSerial(m_comboPort->currentText(), m_profileData["bps"].toInt())) { + if (m_core->initSerial(m_comboPort->currentText(), m_profileData["bps"].toInt())) { QString fw = m_profileData["firmware"].toString(); m_logWidget->appendLog(i18n("Firmware: %1", fw)); if (fw != QString("Auto-Detect")) { - m_core.loadFirmwarePlugin(fw); + m_core->loadFirmwarePlugin(fw); } emit(connectionChanged(m_profileData["name"].toString())); m_profileData["heatedBed"].toBool() ? m_bedExtWidget->setBedMaxTemperature(m_profileData["bedTemp"].toInt()) : @@ -244,62 +245,62 @@ } } } else { - m_core.closeConnection(); + m_core->closeConnection(); emit(connectionChanged(i18n("Connect a Printer"))); } } void AtCoreInstanceWidget::initConnectsToAtCore() { //connect log to atcoreMessages - connect(&m_core, &AtCore::atcoreMessage, m_logWidget, &LogWidget::appendLog); - m_core.setSerialTimerInterval(100); + connect(m_core, &AtCore::atcoreMessage, m_logWidget, &LogWidget::appendLog); + m_core->setSerialTimerInterval(100); // Handle device changes - connect(&m_core, &AtCore::portsChanged, this, &AtCoreInstanceWidget::updateSerialPort); + connect(m_core, &AtCore::portsChanged, this, &AtCoreInstanceWidget::updateSerialPort); // Handle AtCore status change - connect(&m_core, &AtCore::stateChanged, this, &AtCoreInstanceWidget::handlePrinterStatusChanged); + connect(m_core, &AtCore::stateChanged, this, &AtCoreInstanceWidget::handlePrinterStatusChanged); // If the number of extruders from the printer change, we need to update the radiobuttons on the widget connect(this, &AtCoreInstanceWidget::extruderCountChanged, m_bedExtWidget, &BedExtruderWidget::setExtruderCount); // Bed and Extruder temperatures management - connect(m_bedExtWidget, &BedExtruderWidget::bedTemperatureChanged, &m_core, &AtCore::setBedTemp); - connect(m_bedExtWidget, &BedExtruderWidget::extTemperatureChanged, &m_core, &AtCore::setExtruderTemp); + connect(m_bedExtWidget, &BedExtruderWidget::bedTemperatureChanged, m_core, &AtCore::setBedTemp); + connect(m_bedExtWidget, &BedExtruderWidget::extTemperatureChanged, m_core, &AtCore::setExtruderTemp); //command Widget connect(m_commandWidget, &CommandWidget::commandPressed, this, [this](const QString & command) { m_logWidget->appendLog(i18n("Push: %1", command)); - m_core.pushCommand(command); + m_core->pushCommand(command); }); connect(m_commandWidget, &CommandWidget::messagePressed, [this](const QString & message) { m_logWidget->appendLog(i18n("Display: %1", message)); - m_core.showMessage(message); + m_core->showMessage(message); }); // Fan, Flow and Speed management - connect(m_printWidget, &PrintWidget::fanSpeedChanged, &m_core, &AtCore::setFanSpeed); - connect(m_printWidget, &PrintWidget::flowRateChanged, &m_core, &AtCore::setFlowRate); - connect(m_printWidget, &PrintWidget::printSpeedChanged, &m_core, &AtCore::setPrinterSpeed); + connect(m_printWidget, &PrintWidget::fanSpeedChanged, m_core, &AtCore::setFanSpeed); + connect(m_printWidget, &PrintWidget::flowRateChanged, m_core, &AtCore::setFlowRate); + connect(m_printWidget, &PrintWidget::printSpeedChanged, m_core, &AtCore::setPrinterSpeed); //Movement Widget connect(m_movementWidget, &MovementWidget::absoluteMove, this, [this](const QLatin1Char & axis, const double value) { m_logWidget->appendLog(GCode::description(GCode::G1)); - m_core.move(axis, value); + m_core->move(axis, value); }); connect(m_movementWidget, &MovementWidget::unitsChanged, this, [this](int units) { auto selection = static_cast(units); - m_core.setUnits(selection); + m_core->setUnits(selection); }); connect(m_movementWidget, &MovementWidget::relativeMove, this, [this](const QLatin1Char & axis, const double value) { m_logWidget->appendLog(i18n("Relative Move: %1, %2", axis, QString::number(value))); - m_core.setRelativePosition(); - m_core.move(axis, value); - m_core.setAbsolutePosition(); + m_core->setRelativePosition(); + m_core->move(axis, value); + m_core->setAbsolutePosition(); }); //Sd Card Stuff - connect(&m_core, &AtCore::sdCardFileListChanged, m_sdWidget, &SdWidget::updateFilelist); - connect(m_sdWidget, &SdWidget::requestSdList, &m_core, &AtCore::sdFileList); - connect(&m_core, &AtCore::sdMountChanged, m_statusWidget, &StatusWidget::setSD); + connect(m_core, &AtCore::sdCardFileListChanged, m_sdWidget, &SdWidget::updateFilelist); + connect(m_sdWidget, &SdWidget::requestSdList, m_core, &AtCore::sdFileList); + connect(m_core, &AtCore::sdMountChanged, m_statusWidget, &StatusWidget::setSD); connect(m_sdWidget, &SdWidget::printSdFile, this, [this](const QString & fileName) { if (fileName.isEmpty()) { @@ -309,7 +310,7 @@ , i18n("You must Select a file from the list") ); } else { - m_core.print(fileName, true); + m_core->print(fileName, true); togglePrintButtons(true); } }); @@ -322,7 +323,7 @@ , i18n("You must Select a file from the list") ); } else { - m_core.sdDelete(fileName); + m_core->sdDelete(fileName); } }); } @@ -344,9 +345,9 @@ ); return; } - if (m_core.state() == AtCore::IDLE) { + if (m_core->state() == AtCore::IDLE) { m_logWidget->appendLog(i18n("Printing:%1", fileName.toLocalFile())); - m_core.print(fileName.toLocalFile()); + m_core->print(fileName.toLocalFile()); } } @@ -357,41 +358,41 @@ void AtCoreInstanceWidget::pausePrint() { - if (m_core.state() == AtCore::BUSY) { - m_core.pause(m_profileData["postPause"].toString()); - } else if (m_core.state() == AtCore::PAUSE) { - m_core.resume(); + if (m_core->state() == AtCore::BUSY) { + m_core->pause(m_profileData["postPause"].toString()); + } else if (m_core->state() == AtCore::PAUSE) { + m_core->resume(); } } void AtCoreInstanceWidget::stopPrint() { - m_core.stop(); + m_core->stop(); } void AtCoreInstanceWidget::disableMotors() { - m_core.disableMotors(0); + m_core->disableMotors(0); } void AtCoreInstanceWidget::handlePrinterStatusChanged(AtCore::STATES newState) { static QString stateString; switch (newState) { case AtCore::CONNECTING: { - m_core.setSerialTimerInterval(0); + m_core->setSerialTimerInterval(0); m_connectButton->setText(i18n("Disconnect")); m_connectButton->setIcon(QIcon::fromTheme("network-disconnect", QIcon(QString(":/%1/disconnect").arg(m_theme)))); m_connectToolBar->setHidden(true); m_toolBar->setHidden(false); stateString = i18n("Connecting..."); m_logWidget->appendLog(i18n("Attempting to Connect")); - connect(&m_core, &AtCore::receivedMessage, m_logWidget, &LogWidget::appendRLog); - connect(&m_core, &AtCore::pushedCommand, m_logWidget, &LogWidget::appendSLog); + connect(m_core, &AtCore::receivedMessage, m_logWidget, &LogWidget::appendRLog); + connect(m_core, &AtCore::pushedCommand, m_logWidget, &LogWidget::appendSLog); } break; case AtCore::IDLE: { - stateString = i18n("Connected to %1", m_core.connectedPort()); - emit extruderCountChanged(m_core.extruderCount()); + stateString = i18n("Connected to %1", m_core->connectedPort()); + emit extruderCountChanged(m_core->extruderCount()); m_logWidget->appendLog(stateString); emit disableDisconnect(false); enableControls(true); @@ -402,10 +403,10 @@ } break; case AtCore::DISCONNECTED: { stateString = i18n("Not Connected"); - disconnect(&m_core, &AtCore::receivedMessage, m_logWidget, &LogWidget::appendRLog); - disconnect(&m_core, &AtCore::pushedCommand, m_logWidget, &LogWidget::appendSLog); + disconnect(m_core, &AtCore::receivedMessage, m_logWidget, &LogWidget::appendRLog); + disconnect(m_core, &AtCore::pushedCommand, m_logWidget, &LogWidget::appendSLog); m_logWidget->appendLog(i18n("Serial disconnected")); - m_core.setSerialTimerInterval(100); + m_core->setSerialTimerInterval(100); m_connectButton->setText(i18n("Connect")); m_connectButton->setIcon(QIcon::fromTheme("network-connect", QIcon(QString(":/%1/connect").arg(m_theme)))); m_connectToolBar->setHidden(false); @@ -419,12 +420,12 @@ case AtCore::STARTPRINT: { stateString = i18n("Starting Print"); m_statusWidget->showPrintArea(true); - connect(&m_core, &AtCore::printProgressChanged, m_statusWidget, &StatusWidget::updatePrintProgress); + connect(m_core, &AtCore::printProgressChanged, m_statusWidget, &StatusWidget::updatePrintProgress); } break; case AtCore::FINISHEDPRINT: { stateString = i18n("Finished Print"); m_statusWidget->showPrintArea(false); - disconnect(&m_core, &AtCore::printProgressChanged, m_statusWidget, &StatusWidget::updatePrintProgress); + disconnect(m_core, &AtCore::printProgressChanged, m_statusWidget, &StatusWidget::updatePrintProgress); m_printAction->setText(i18n("Print")); m_printAction->setIcon(QIcon::fromTheme("media-playback-start", QIcon(QString(":/%1/start").arg(m_theme)))); m_logWidget->appendLog(i18n("Finished Print Job")); @@ -509,7 +510,7 @@ bool AtCoreInstanceWidget::connected() { - return (m_core.state() != AtCore::DISCONNECTED); + return (m_core->state() != AtCore::DISCONNECTED); } void AtCoreInstanceWidget::setFileCount(int count) @@ -542,7 +543,7 @@ m_comboProfile->clear(); m_comboProfile->addItems(profiles); - if (m_core.state() != AtCore::DISCONNECTED) { + if (m_core->state() != AtCore::DISCONNECTED) { m_profileData = readProfile(); bool hBed = m_profileData["heatedBed"].toBool(); m_bedExtWidget->setBedThermoHidden(!hBed); @@ -560,7 +561,7 @@ bool AtCoreInstanceWidget::isPrinting() { - return (m_core.state() == AtCore::BUSY); + return (m_core->state() == AtCore::BUSY); } QMap AtCoreInstanceWidget::readProfile() @@ -595,23 +596,23 @@ return; } m_plotWidget->addPlot(i18n("Actual Bed")); - connect(&m_core.temperature(), &Temperature::bedTemperatureChanged, [this](const float & temp) { + connect(&m_core->temperature(), &Temperature::bedTemperatureChanged, [this](const float & temp) { checkTemperature(0x00, 0, temp); m_plotWidget->appendPoint(i18n("Actual Bed"), temp); m_bedExtWidget->updateBedTemp(temp); }); m_plotWidget->addPlot(i18n("Target Bed")); - connect(&m_core.temperature(), &Temperature::bedTargetTemperatureChanged, [this](const float & temp) { + connect(&m_core->temperature(), &Temperature::bedTargetTemperatureChanged, [this](const float & temp) { checkTemperature(0x01, 0, temp); m_plotWidget->appendPoint(i18n("Target Bed"), temp); m_bedExtWidget->updateBedTargetTemp(int(temp)); }); } else { if (m_plotWidget->plots().contains(i18n("Actual Bed"))) { m_plotWidget->removePlot(i18n("Actual Bed")); - disconnect(&m_core.temperature(), &Temperature::bedTemperatureChanged, this, nullptr); + disconnect(&m_core->temperature(), &Temperature::bedTemperatureChanged, this, nullptr); m_plotWidget->removePlot(i18n("Target Bed")); - disconnect(&m_core.temperature(), &Temperature::bedTargetTemperatureChanged, this, nullptr); + disconnect(&m_core->temperature(), &Temperature::bedTargetTemperatureChanged, this, nullptr); } } } @@ -624,23 +625,23 @@ } //Add Extruder. m_plotWidget->addPlot(i18n("Actual Ext.1")); - connect(&m_core.temperature(), &Temperature::extruderTemperatureChanged, this, [this](const float & temp) { + connect(&m_core->temperature(), &Temperature::extruderTemperatureChanged, this, [this](const float & temp) { checkTemperature(0x02, 0, temp); m_plotWidget->appendPoint(i18n("Actual Ext.1"), temp); m_bedExtWidget->updateExtTemp(temp); }); m_plotWidget->addPlot(i18n("Target Ext.1")); - connect(&m_core.temperature(), &Temperature::extruderTargetTemperatureChanged, this, [this](const float & temp) { + connect(&m_core->temperature(), &Temperature::extruderTargetTemperatureChanged, this, [this](const float & temp) { checkTemperature(0x03, 0, temp); m_plotWidget->appendPoint(i18n("Target Ext.1"), temp); m_bedExtWidget->updateExtTargetTemp(int(temp)); }); } else { if (m_plotWidget->plots().contains(i18n("Actual Ext.1"))) { m_plotWidget->removePlot(i18n("Actual Ext.1")); - disconnect(&m_core.temperature(), &Temperature::extruderTemperatureChanged, this, nullptr); + disconnect(&m_core->temperature(), &Temperature::extruderTemperatureChanged, this, nullptr); m_plotWidget->removePlot(i18n("Target Ext.1")); - disconnect(&m_core.temperature(), &Temperature::extruderTargetTemperatureChanged, this, nullptr); + disconnect(&m_core->temperature(), &Temperature::extruderTargetTemperatureChanged, this, nullptr); } } }