]> vaikene.ee Git - evaf/commitdiff
Changed the way how the main window is used.
authorEnar Väikene <enar.vaikene@mt.com>
Tue, 27 Sep 2011 07:48:57 +0000 (10:48 +0300)
committerEnar Väikene <enar.vaikene@mt.com>
Tue, 27 Sep 2011 07:48:57 +0000 (10:48 +0300)
* The main window widget is no more accessable from other modules
* Modules should use addWidget() and addLayout() methods to add widgets
  and layouts to the main window.
* Any widgets and layouts added to the main window are deleted in the done()
  method.

Fixes the issue where the main window widget tried to delete its children and failed, because
modules that created them were already unloaded.

src/apps/PswGen/GUI/gui.cpp
src/apps/PswGen/GUI/version.h
src/plugins/SdiWindow/isdiwindow.h
src/plugins/SdiWindow/sdiwindow.cpp
src/plugins/SdiWindow/sdiwindow.h
src/plugins/SdiWindow/version.h

index f29c4aee6b7620e88ad003474ff4cdbe4ca5bbd6..23a3c881c2591c82d5f3a4f81a0c2051e9d9672f 100644 (file)
@@ -74,8 +74,11 @@ bool Module::init(QString const & args)
     SdiWindow::iSdiWindow * win = evafQueryInterface<SdiWindow::iSdiWindow>("iSdiWindow");
     EVAF_TEST_X(win, "No iSdiWindow interface");
 
+    QWidget * masterWidget = new QWidget;
+    win->addWidget(masterWidget);
+
     QVBoxLayout * v = new QVBoxLayout;
-    win->widget()->setLayout(v);
+    masterWidget->setLayout(v);
 
     QGridLayout * g = new QGridLayout;
     v->addLayout(g);
@@ -105,7 +108,7 @@ bool Module::init(QString const & args)
     }
     connect(wName, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));
     g->addWidget(wName, 1, 1, 1, 2);
-    win->widget()->setFocusProxy(wName);
+    masterWidget->setFocusProxy(wName);
 
     l = new QLabel(tr("&Length of the password:", VER_MODULE_NAME_STR));
     l->setAlignment(Qt::AlignRight);
@@ -143,15 +146,15 @@ bool Module::init(QString const & args)
     connect(wCopy, SIGNAL(clicked()), this, SLOT(copyClicked()));
     h->addWidget(wCopy);
 
-    QAction * a = new QAction(win->widget());
+    QAction * a = new QAction(masterWidget);
     a->setShortcut(Qt::Key_Return);
     connect(a, SIGNAL(triggered()), this, SLOT(generateClicked()));
-    win->widget()->addAction(a);
+    masterWidget->addAction(a);
 
-    a = new QAction(win->widget());
+    a = new QAction(masterWidget);
     a->setShortcut(Qt::Key_Escape);
     connect(a, SIGNAL(triggered()), qApp, SLOT(quit()));
-    win->widget()->addAction(a);
+    masterWidget->addAction(a);
 
     mReady = true;
 
index 2bb77c6a0cad7659f8dbb03380447bd9b4c82cc5..c4fbd22ae82790bd7bd737a64380c992675f066e 100644 (file)
 /**
  * Module/library version number in the form major,minor,release,build
  */
-#define VER_FILE_VERSION                0,1,2,3
+#define VER_FILE_VERSION                0,1,3,4
 
 /**
  * Module/library version number in the string format (shall end with \0)
  */
-#define VER_FILE_VERSION_STR            "0.1.2.3\0"
+#define VER_FILE_VERSION_STR            "0.1.3.4\0"
 
 /**
  * Module/library name (shall end with \0)
index a5794db626de520b49cb2c54fb5aadc9ff31da4a..8cd4343666db997ef1f1118a73fa637873029454 100644 (file)
@@ -25,6 +25,9 @@
 #include <QObject>
 #include <QString>
 
+class QWidget;
+class QLayout;
+
 namespace eVaf {
 namespace SdiWindow {
 
@@ -32,7 +35,7 @@ namespace SdiWindow {
  * Main window interface for eVaf applications implementing the Single Document Interface.
  *
  * The iSdiWindow interface provides access to the SDI main window. The SDI main window is
- * an empty window that the application needs to fill with widgets.
+ * an empty window that the application can fill with widgets.
  */
 class SDIWINDOW_EXPORT iSdiWindow : public QObject
 {
@@ -57,13 +60,20 @@ public:
     static iSdiWindow * instance();
 
     /**
-     * Returns the main window widget
-     * @return The main window widget
+     * Adds the widget to the end of the main window layout
+     * @param widget The widget
+     *
+     * This function adds the widget to the end of the main window layout.
+     */
+    virtual void addWidget(QWidget * widget) = 0;
+
+    /**
+     * Adds the layout to the end of the main window layout
+     * @param layout The layout
      *
-     * This function provides access to the main window widget. The main window is an empty QWidget and
-     * needs to be filled with additional widgets in order to provide some functionality.
+     * This function adds the new layout to the end of the main window layout.
      */
-    virtual QWidget * widget() const = 0;
+    virtual void addLayout(QLayout * layout) = 0;
 
 };
 
index a804dfc14cc64dc70a8739612dc8decf3a0636a7..4be6efe4f333b9b075db4e6dbdd6e2f52a38ccf5 100644 (file)
@@ -63,6 +63,10 @@ MainWindow::MainWindow(QWidget * parent, Qt::WindowFlags flags)
     // Apply the size specified in a) properties; or b) on the command line
     setWindowSize();
 
+    // Create the default layout
+    mLayout = new QVBoxLayout;
+    setLayout(mLayout);
+
     EVAF_INFO("%s created", qPrintable(objectName()));
 }
 
@@ -89,9 +93,25 @@ void MainWindow::done()
 {
     close();
 
+    // Delete all the items added to the main window
+    while (mItemsAdded.count() > 0)
+        delete mItemsAdded.takeAt(0);
+
     EVAF_INFO("%s finalized", qPrintable(objectName()));
 }
 
+void MainWindow::addWidget(QWidget * widget)
+{
+    mLayout->addWidget(widget);
+    mItemsAdded.append(widget);
+}
+
+void MainWindow::addLayout(QLayout * layout)
+{
+    mLayout->addLayout(layout);
+    mItemsAdded.append(layout);
+}
+
 void MainWindow::saveSettings()
 {
     static int ver[4] = {VER_FILE_VERSION};
index d886cca5d842914472e0e92b939abb7e7e04e78c..b2c3bc6c2fbdd69a1120d997091dd1bd586e489c 100644 (file)
@@ -27,6 +27,9 @@
 #include <QObject>
 #include <QString>
 #include <QWidget>
+#include <QList>
+
+class QVBoxLayout;
 
 namespace eVaf {
 namespace SdiWindow {
@@ -49,6 +52,10 @@ public:
 
     void done();
 
+    void addWidget(QWidget * widget);
+
+    void addLayout(QLayout * layout);
+
 
 private: // Methods
 
@@ -57,6 +64,16 @@ private: // Methods
     void saveSettings();
 
     void restoreSettings();
+
+
+private: // Members
+
+    /// The layout of the window
+    QVBoxLayout * mLayout;
+
+    /// Widgets and layouts added to the main window
+    QList<QObject *> mItemsAdded;
+
 };
 
 /**
@@ -78,7 +95,9 @@ public:
 
     bool isReady() const { return mReady; }
 
-    virtual QWidget * widget() const { return wWindow; }
+    virtual void addWidget(QWidget * widget) { wWindow->addWidget(widget); }
+
+    virtual void addLayout(QLayout * layout) { wWindow->addLayout(layout); }
 
 
 private: // Members
index 7945a0c42a0e587ee6f41c24d4c0b65208d9ba37..4eb90ddf7d2bfdf4d62be5a50f2c00f740d275c6 100644 (file)
 /**
  * Module/library version number in the form major,minor,release,build
  */
-#define VER_FILE_VERSION                0,1,1,1
+#define VER_FILE_VERSION                0,2,1,2
 
 /**
  * Module/library version number in the string format (shall end with \0)
  */
-#define VER_FILE_VERSION_STR            "0.1.1.1\0"
+#define VER_FILE_VERSION_STR            "0.2.1.2\0"
 
 /**
  * Module/library name (shall end with \0)