From: Enar Väikene <enar@vaikene.net>
Date: Thu, 17 Nov 2011 07:44:03 +0000 (+0200)
Subject: Added iApp::exec() function, which enters the Qt event loop and runs the application.
X-Git-Url: https://www.vaikene.ee/gitweb/index.html?a=commitdiff_plain;h=8958311b9f05fc65cdf9e528db8b4b32a94eb24a;p=evaf

Added iApp::exec() function, which enters the Qt event loop and runs the application.
* Sets the application ready;
* Calls QCoreApplication::exec();
* Sets the application back to not ready.
Changed main application to use the iApp::exec() instead of QApplication::exec().
---

diff --git a/src/libs/Common/app.cpp b/src/libs/Common/app.cpp
index 21818f9..60ee5bf 100644
--- a/src/libs/Common/app.cpp
+++ b/src/libs/Common/app.cpp
@@ -274,6 +274,14 @@ QString const App::xmlFileName() const
     return mXmlFile;
 }
 
+int App::exec()
+{
+    setReady(true);
+    int rval = QCoreApplication::exec();
+    setReady(false);
+    return rval;
+}
+
 void App::restart()
 {
     QCoreApplication::exit(RC_Restart);
@@ -283,3 +291,15 @@ void App::quit(bool err)
 {
     QCoreApplication::exit(err ? RC_Error : RC_Quit);
 }
+
+void App::setReady(bool value)
+{
+    if (mReady != value) {
+        mReady = value;
+        iEventQueue::instance()->broadcastEvent(new Event(mReady ? mEvReady : mEvTerminating));
+        if (mReady)
+            emit ready();
+        else
+            emit terminating();
+    }
+}
diff --git a/src/libs/Common/app.h b/src/libs/Common/app.h
index 8fb0dca..34f7a5d 100644
--- a/src/libs/Common/app.h
+++ b/src/libs/Common/app.h
@@ -61,6 +61,8 @@ public:
 
     virtual QString const xmlFileName() const;
 
+    virtual int exec();
+
     virtual void restart();
 
     virtual void quit(bool err = false);
@@ -82,7 +84,7 @@ public:
     virtual QString const qtPluginsDir() const;
 
 
-private:
+private: // Members
 
     /// Flag indicating that the eVaf application is ready
     bool mReady;
@@ -123,6 +125,11 @@ private:
     uint mEvReady;
     uint mEvTerminating;
 
+
+private: // Methods
+
+    void setReady(bool value);
+
 };
 
 } // namespace eVaf::Common::Internal
diff --git a/src/libs/Common/iapp.h b/src/libs/Common/iapp.h
index 098abaf..31390e3 100644
--- a/src/libs/Common/iapp.h
+++ b/src/libs/Common/iapp.h
@@ -129,6 +129,15 @@ public:
      */
     virtual QString const xmlFileName() const = 0;
 
+    /**
+     * Enters the main event loop of the Qt application.
+     * @return Value returned by the Qt application
+     *
+     * This function enters the event loop of the Qt application. Use this function to start event handling
+     * instead of calling QCoreApplication::exec() or QApplication::exec() functions directly.
+     */
+    virtual int exec() = 0;
+
     /**
      * Requests the eVaf application to restart.
      *
diff --git a/src/libs/Common/version.h b/src/libs/Common/version.h
index 5feecd6..30d4175 100644
--- a/src/libs/Common/version.h
+++ b/src/libs/Common/version.h
@@ -25,12 +25,12 @@
 /**
  * Module/library version number in the form major,minor,release,build
  */
-#define VER_FILE_VERSION                0,1,3,6
+#define VER_FILE_VERSION                0,1,4,7
 
 /**
  * Module/library version number in the string format (shall end with \0)
  */
-#define VER_FILE_VERSION_STR            "0.1.3.6\0"
+#define VER_FILE_VERSION_STR            "0.1.4.7\0"
 
 /**
  * Module/library name (shall end with \0)
diff --git a/src/main/CLI/main.cpp b/src/main/CLI/main.cpp
index 4e8fe7e..0c3cbb6 100644
--- a/src/main/CLI/main.cpp
+++ b/src/main/CLI/main.cpp
@@ -281,7 +281,7 @@ int main(int argc, char ** argv)
 
         // Run the application
         EVAF_INFO("Running %s", VER_MODULE_NAME_STR);
-        rval = app.exec();
+        rval = Common::iApp::instance()->exec();
 
         quit = rval != Common::iApp::RC_Restart;
 
diff --git a/src/main/CLI/version.h b/src/main/CLI/version.h
index 25d61e2..17994d6 100644
--- a/src/main/CLI/version.h
+++ b/src/main/CLI/version.h
@@ -25,12 +25,12 @@
 /**
  * Module/library version number in the form major,minor,release,build
  */
-#define VER_FILE_VERSION                0,1,1,2
+#define VER_FILE_VERSION                0,1,2,3
 
 /**
  * Module/library version number in the string format (shall end with \0)
  */
-#define VER_FILE_VERSION_STR            "0.1.1.2\0"
+#define VER_FILE_VERSION_STR            "0.1.2.3\0"
 
 /**
  * Module/library name (shall end with \0)
diff --git a/src/main/GUI/main.cpp b/src/main/GUI/main.cpp
index c30e7ad..f0e765f 100644
--- a/src/main/GUI/main.cpp
+++ b/src/main/GUI/main.cpp
@@ -409,7 +409,7 @@ int main(int argc, char ** argv)
 
         // Run the application
         EVAF_INFO("Running %s", VER_MODULE_NAME_STR);
-        rval = app.exec();
+        rval = Common::iApp::instance()->exec();
 
         quit = rval != Common::iApp::RC_Restart;