]> vaikene.ee Git - evaf/blobdiff - src/plugins/SdiWindow/sdiwindow.cpp
Mac OS changes and switched to c++11.
[evaf] / src / plugins / SdiWindow / sdiwindow.cpp
index eb1a449ab3f84dc6884972f3da38e0a82481da4f..25a86acab2639b0505ebf10fc35f6b938b5a4ca1 100644 (file)
@@ -3,7 +3,7 @@
  * @brief SdiWindow module's implementation
  * @author Enar Vaikene
  *
- * Copyright (c) 2011 Enar Vaikene
+ * Copyright (c) 2011-2019 Enar Vaikene
  *
  * This file is part of the eVaf C++ cross-platform application development framework.
  *
@@ -32,7 +32,7 @@ namespace eVaf {
 namespace SdiWindow {
 namespace Internal {
     /// iSdiWindow interface instance singleton
-    static iSdiWindow * mSdiWindow = 0;
+    static iSdiWindow * mSdiWindow = nullptr;
 } // namespace eVaf::SdiWindow::Internal
 } // namespace eVaf::SdiWindow
 } // namespace eVaf
@@ -53,6 +53,7 @@ SdiWindow::iSdiWindow * SdiWindow::iSdiWindow::instance()
 SdiWindow::Internal::MainWindow::MainWindow(QWidget * parent, Qt::WindowFlags flags)
     : QWidget(parent, flags)
     , mReady(false)
+    , mMainPanel(nullptr)
 {
     setObjectName(QString("%1-%2").arg(VER_MODULE_NAME_STR).arg(__FUNCTION__));
 
@@ -73,7 +74,7 @@ SdiWindow::Internal::MainWindow::MainWindow(QWidget * parent, Qt::WindowFlags fl
 
 SdiWindow::Internal::MainWindow::~MainWindow()
 {
-    mSdiWindow = 0;
+    mSdiWindow = nullptr;
 
     // Save geometry
     saveSettings();
@@ -125,7 +126,7 @@ void SdiWindow::Internal::MainWindow::done()
     mPanels.clear();
     mMinimizedPanels.clear();
     mPanelNames.clear();
-    mMainPanel = 0;
+    mMainPanel = nullptr;
     mMainPanelName.clear();
 
     EVAF_INFO("%s finalized", qPrintable(objectName()));
@@ -159,7 +160,7 @@ Gui::Panel * SdiWindow::Internal::MainWindow::panel(QString const & name) const
     QHash<QString, Gui::Panel *>::const_iterator it = mPanelNames.constFind(name);
     if (it != mPanelNames.constEnd())
         return it.value();
-    return 0;
+    return nullptr;
 }
 
 bool SdiWindow::Internal::MainWindow::showPanel(QString const & name)
@@ -291,6 +292,20 @@ void SdiWindow::Internal::MainWindow::panelDestroyed(QObject * obj)
             }
         }
     }
+    {
+        QVector<Gui::Panel *>::iterator it = mMinimizedPanels.begin();
+        while (it != mMinimizedPanels.end())
+        {
+            if (*it == obj)
+            {
+                it = mMinimizedPanels.erase(it);
+            }
+            else
+            {
+                ++it;
+            }
+        }
+    }
 
     // Do the same with panel names
     {
@@ -305,8 +320,9 @@ void SdiWindow::Internal::MainWindow::panelDestroyed(QObject * obj)
         }
     }
 
+    // If it was the main panel, set the main panel to NULL
     if (mMainPanel == obj) {
-        mMainPanel = 0;
+        mMainPanel = nullptr;
     }
 }
 
@@ -315,17 +331,16 @@ void SdiWindow::Internal::MainWindow::panelDestroyed(QObject * obj)
 
 SdiWindow::Internal::SdiWindowPlugin::SdiWindowPlugin()
     : Plugins::iPlugin()
+    , mWindow(new MainWindow)
 {
     setObjectName(VER_MODULE_NAME_STR);
 
-    mWindow = new MainWindow;
-
     EVAF_INFO("%s created", qPrintable(objectName()));
 }
 
 SdiWindow::Internal::SdiWindowPlugin::~SdiWindowPlugin()
 {
-    delete mWindow;
+    mWindow.reset();
 
     EVAF_INFO("%s destroyed", qPrintable(objectName()));
 }