diff --git a/sdk/libraries/core/application/MainWindow.cpp b/sdk/libraries/core/application/MainWindow.cpp index 82c6c52da99282a86768e0c1aee2e28ca0d83522..e3ac820f6947482bd37c2174f59ee7c959e134ec 100644 --- a/sdk/libraries/core/application/MainWindow.cpp +++ b/sdk/libraries/core/application/MainWindow.cpp @@ -57,8 +57,12 @@ MainWindow::MainWindow(QString title) { // prepare GUI centralViewer = nullptr; + centralLayout = nullptr; showStatusBar(false); + setCentralWidget(new QWidget(this)); + centralLayout = new QGridLayout(this->centralWidget()); + // add permanent widget to the status bar (toggle console and progress bar) QWidget* statusBarAdditionalWidget = new QWidget(); @@ -198,6 +202,8 @@ bool MainWindow::addViewer(Viewer* theViewer) { return true; } + theViewer->setToolbarAutoVisibility(true); + return false; } @@ -213,9 +219,8 @@ bool MainWindow::removeViewer(Viewer* viewer) { } // remove it properly - disconnect(viewer, SIGNAL(selectionChanged()), this, SLOT(refresh())); - viewers.removeAll(viewer); - delete viewer; + viewer->getWidget(this)->hide(); + viewer->setToolbarAutoVisibility(false); return true; } @@ -260,16 +265,23 @@ void MainWindow::addDockViewer(Qt::DockWidgetArea dockingArea, Viewer* theViewer // ------------- setCentralViewer ----------------- void MainWindow::setCentralViewer(Viewer* theViewer) { - if (theViewer->getWidget(this) && addViewer(theViewer)) { - // remove actual central viewer properly - if (centralViewer && (theViewer != centralViewer)) { - removeViewer(centralViewer); - } - - // set the central widget - setCentralWidget(theViewer->getWidget(this)); - centralViewer = theViewer; - } + bool notExist; + if (theViewer->getWidget(this)) { + notExist = addViewer(theViewer); + // remove actual central viewer properly + if (centralViewer && (theViewer != centralViewer)) { + removeViewer(centralViewer); + } + + if (notExist) { + centralLayout->addWidget(theViewer->getWidget(this)); + } + else { + theViewer->getWidget(this)->show(); + } + + centralViewer = theViewer; + } } // ------------- getCentralViewer ----------------- diff --git a/sdk/libraries/core/application/MainWindow.h b/sdk/libraries/core/application/MainWindow.h index 37125e148c9eeab6fb6fbd1c2690fd1b76b07476..0724a61e81a99f4db39ef94e2525363b00366ff3 100644 --- a/sdk/libraries/core/application/MainWindow.h +++ b/sdk/libraries/core/application/MainWindow.h @@ -38,6 +38,7 @@ #include #include #include +#include namespace camitk { @@ -197,7 +198,7 @@ protected: * @note MainWindow, like QMainWindow with its central widget contains an unique central viewer. */ Viewer* centralViewer; - + QGridLayout* centralLayout; private: diff --git a/sdk/libraries/core/viewer/MedicalImageViewer.h b/sdk/libraries/core/viewer/MedicalImageViewer.h index bd4bf54e756b5e2fb589500565a29653ec32b0ef..29040b276dbf16074b909b880fc51b6ddd1b3813 100644 --- a/sdk/libraries/core/viewer/MedicalImageViewer.h +++ b/sdk/libraries/core/viewer/MedicalImageViewer.h @@ -105,7 +105,7 @@ public: * * By default the toolbar is automatically update */ - virtual void setToolbarAutoVisibility(bool); + virtual void setToolbarAutoVisibility(bool) override; /// @} /// called to change the layout, i.e. which viewer is visible diff --git a/sdk/libraries/core/viewer/Viewer.h b/sdk/libraries/core/viewer/Viewer.h index 9d68720e895803d0a4b637435580986c94a28b69..2a72680c6b1d71ccc98b1b6684fbad9b03b531e2 100644 --- a/sdk/libraries/core/viewer/Viewer.h +++ b/sdk/libraries/core/viewer/Viewer.h @@ -86,6 +86,10 @@ public: return nullptr; }; + virtual void setToolbarAutoVisibility(bool toolbarVisibility) { + return; + }; + /// Update the whole tree of the representation of the Component. /// Is actually useful (and defined) in Explorer. virtual void refreshInterfaceNode(Component* comp) {}; @@ -109,6 +113,7 @@ protected: /// clear the selection void clearSelection(); + bool autoUpdateToolbarVisibility; }; }