diff --git a/src/mainwindow.h b/src/mainwindow.h --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -61,6 +61,7 @@ private: GCodeEditorWidget *m_gcodeEditor; KTextEditor::View *m_currEditorView; + int m_currInstance; LateralArea m_lateral; QList m_openFiles; QString m_theme; @@ -77,6 +78,7 @@ void setupActions(); void setupLateralArea(); void toggleGCodeActions(); + void updateBedSize(const QSize &newSize); void updateClientFactory(KTextEditor::View *view); signals: diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -36,6 +36,7 @@ MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent) , m_currEditorView(nullptr) + , m_currInstance(0) , m_theme(getTheme()) , m_instances(new QTabWidget(this)) { @@ -188,6 +189,12 @@ newInstanceWidget->printFile(file); }); + connect(newInstanceWidget, &AtCoreInstanceWidget::bedSizeChanged, this, [this](const QSize & newSize) { + if (m_currInstance == m_instances->currentIndex()) { + updateBedSize(newSize); + } + }); + connect(newInstanceWidget, &AtCoreInstanceWidget::connectionChanged, this, &MainWindow::atCoreInstanceNameChange); if (m_instances->count() > 1) { @@ -250,6 +257,12 @@ auto *viewer3D = new Viewer3D(this); connect(viewer3D, &Viewer3D::droppedUrls, this, &MainWindow::processDropEvent); + //Connect for bed size + connect(m_instances, &QTabWidget::currentChanged, this, [this](int index) { + m_currInstance = index; + auto tempWidget = qobject_cast(m_instances->widget(index)); + updateBedSize(tempWidget->bedSize()); + }); connect(m_gcodeEditor, &GCodeEditorWidget::currentFileChanged, this, [viewer3D](const QUrl & url) { viewer3D->drawModel(url.toLocalFile()); @@ -473,3 +486,8 @@ return dialog->exec(); } + +void MainWindow::updateBedSize(const QSize &newSize) +{ + m_lateral.get("3d")->setBedSize(newSize); +} diff --git a/src/widgets/3dview/viewer3d.h b/src/widgets/3dview/viewer3d.h --- a/src/widgets/3dview/viewer3d.h +++ b/src/widgets/3dview/viewer3d.h @@ -31,20 +31,25 @@ class Viewer3D : public QWidget { Q_OBJECT + Q_PROPERTY(QSize bedSize READ bedSize WRITE setBedSize NOTIFY bedSizeChanged) public slots: void dropCatch(const QVariant &var); + void setBedSize(const QSize &newBedSize); public: explicit Viewer3D(QWidget *parent = nullptr); ~Viewer3D() override; + QSize bedSize(); void drawModel(QString file); private: LineMesh *_lineMesh; QQmlApplicationEngine _engine; QQuickView *_view; + QSize _bedSize = QSize(50, 50); signals: void droppedUrls(QList fileList); + void bedSizeChanged(QSize bedSize); }; diff --git a/src/widgets/3dview/viewer3d.cpp b/src/widgets/3dview/viewer3d.cpp --- a/src/widgets/3dview/viewer3d.cpp +++ b/src/widgets/3dview/viewer3d.cpp @@ -78,3 +78,16 @@ QObject *fileName = object->findChild(QStringLiteral("fileName")); fileName->setProperty("text", QVariant(file)); } + +void Viewer3D::setBedSize(const QSize &newBedSize) +{ + if (newBedSize != _bedSize) { + _bedSize = newBedSize; + emit bedSizeChanged(_bedSize); + } +} + +QSize Viewer3D::bedSize() +{ + return _bedSize; +} diff --git a/src/widgets/atcoreinstancewidget.h b/src/widgets/atcoreinstancewidget.h --- a/src/widgets/atcoreinstancewidget.h +++ b/src/widgets/atcoreinstancewidget.h @@ -51,6 +51,7 @@ public slots: bool isPrinting(); + QSize bedSize(); void printFile(const QUrl &fileName); void updateProfileData(); @@ -79,6 +80,7 @@ QToolBar *m_toolBar; QWidget *m_advancedTab; QWidget *m_connectWidget; + QSize m_bedSize; void buildConnectionToolbar(); void buildToolbar(); void checkTemperature(uint sensorType, uint number, float temp); @@ -97,6 +99,7 @@ void togglePrintButtons(bool shown); signals: + void bedSizeChanged(QSize bedSize); void connectionChanged(QString name); void disableDisconnect(bool b); void extruderCountChanged(int count); diff --git a/src/widgets/atcoreinstancewidget.cpp b/src/widgets/atcoreinstancewidget.cpp --- a/src/widgets/atcoreinstancewidget.cpp +++ b/src/widgets/atcoreinstancewidget.cpp @@ -29,6 +29,7 @@ , m_printAction(nullptr) , m_stopAction(nullptr) , m_toolBar(nullptr) + , m_bedSize(200, 200) { m_theme = palette().text().color().value() >= QColor(Qt::lightGray).value() ? QString("dark") : QString("light") ; m_iconSize = QSize(fontMetrics().lineSpacing(), fontMetrics().lineSpacing()); @@ -230,6 +231,17 @@ m_bedExtWidget->setExtruderMaxTemperature(m_profileData["hotendTemp"].toInt()); //AddFan Support to profile m_printWidget->updateFanCount(2); + //Adjust bed size + QSize newSize; + if (m_profileData["isCartesian"].toBool()) { + newSize = QSize(m_profileData["dimensionX"].toInt(), m_profileData["dimensionY"].toInt()); + } else { + newSize = QSize(m_profileData["radius"].toInt(), 0); + } + if (newSize != m_bedSize) { + m_bedSize = newSize; + emit bedSizeChanged(m_bedSize); + } } } else { m_core.closeConnection(); @@ -564,6 +576,12 @@ , {"postPause", m_settings.value(QStringLiteral("postPause"), QStringLiteral(""))} , {"heatedBed", m_settings.value(QStringLiteral("heatedBed"), true)} , {"name", profile} + , {"isCartesian", m_settings.value(QStringLiteral("isCartesian"), true)} + , {"dimensionX", m_settings.value(QStringLiteral("dimensionX"), QStringLiteral("200"))} + , {"dimensionY", m_settings.value(QStringLiteral("dimensionY"), QStringLiteral("200"))} + , {"dimensionZ", m_settings.value(QStringLiteral("dimensionZ"), QStringLiteral("180"))} + , {"radius", m_settings.value(QStringLiteral("radius"), QStringLiteral("200"))} + , {"z_delta_dimension", m_settings.value(QStringLiteral("z_delta_dimension"), QStringLiteral("180"))} }; m_settings.endGroup(); m_settings.endGroup(); @@ -626,3 +644,8 @@ } } } + +QSize AtCoreInstanceWidget::bedSize() +{ + return m_bedSize; +}