diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -77,7 +77,6 @@ event->ignore(); } } - disconnect(m_gcodeEditor, &GCodeEditorWidget::updateClientFactory, this, &MainWindow::updateClientFactory); } void MainWindow::dragEnterEvent(QDragEnterEvent *event) @@ -213,12 +212,20 @@ m_gcodeEditor = new GCodeEditorWidget(this); connect(m_gcodeEditor, &GCodeEditorWidget::updateClientFactory, this, &MainWindow::updateClientFactory); + connect(m_gcodeEditor, &GCodeEditorWidget::fileClosed, [this](const QUrl & file) { m_openFiles.removeAll(file); }); auto *viewer3D = new Viewer3D(this); connect(viewer3D, &Viewer3D::droppedUrls, this, &MainWindow::processDropEvent); + + connect(m_gcodeEditor, &GCodeEditorWidget::currentFileChanged, [this, viewer3D](const QUrl & url) { + qDebug() << viewer3D->currentFile() << url.toString() << m_openFiles; + if (m_openFiles.contains(url) || !viewer3D->currentFile().isEmpty()) { + viewer3D->drawModel(url.toString()); + } + }); setupButton("3d", i18n("&3D"), QIcon::fromTheme("draw-cuboid", QIcon(QString(":/%1/3d").arg(m_theme))), viewer3D); setupButton("gcode", i18n("&GCode"), QIcon::fromTheme("accessories-text-editor", QIcon(":/icon/edit")), m_gcodeEditor); setupButton("video", i18n("&Video"), QIcon::fromTheme("camera-web", QIcon(":/icon/video")), new VideoMonitorWidget(this)); 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 @@ -39,11 +39,13 @@ explicit Viewer3D(QWidget *parent = nullptr); ~Viewer3D() override; void drawModel(QString file); + QString currentFile(); private: LineMesh *_lineMesh; QQmlApplicationEngine _engine; QQuickView *_view; + QString _file; signals: void droppedUrls(QList fileList); 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 @@ -35,12 +35,13 @@ Viewer3D::Viewer3D(QWidget *parent) : QWidget(parent) , _lineMesh(new LineMesh) + , _file() { Q_INIT_RESOURCE(viewer3d); QDirIterator it(QStringLiteral(":"), QDirIterator::Subdirectories); while (it.hasNext()) { - qDebug() << it.next(); + it.next(); } qmlRegisterType("GridMesh", 1, 0, "GridMesh"); @@ -69,6 +70,16 @@ void Viewer3D::drawModel(QString file) { QObject *object = _view->rootObject(); - QObject *fileName = object->findChild(QStringLiteral("fileName")); - fileName->setProperty("text", QVariant(file)); + _file = file; + if (!file.isEmpty()) { + QObject *fileName = object->findChild(QStringLiteral("fileName")); + fileName->setProperty("text", QVariant(file)); + } else { + qDebug() << "Clear the View"; + } +} + +QString Viewer3D::currentFile() +{ + return _file; } diff --git a/src/widgets/gcodeeditorwidget.h b/src/widgets/gcodeeditorwidget.h --- a/src/widgets/gcodeeditorwidget.h +++ b/src/widgets/gcodeeditorwidget.h @@ -48,5 +48,6 @@ signals: void updateClientFactory(KTextEditor::View *view); + void currentFileChanged(const QUrl &file); void fileClosed(const QUrl &file); }; diff --git a/src/widgets/gcodeeditorwidget.cpp b/src/widgets/gcodeeditorwidget.cpp --- a/src/widgets/gcodeeditorwidget.cpp +++ b/src/widgets/gcodeeditorwidget.cpp @@ -99,8 +99,10 @@ void GCodeEditorWidget::currentIndexChanged(int index) { if (index != -1) { + emit currentFileChanged(urlTab.key(m_tabwidget->widget(index))); emit updateClientFactory(qobject_cast(m_tabwidget->currentWidget())); } else { emit(updateClientFactory(nullptr)); + emit currentFileChanged(QUrl()); } }