homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmainwindow.cpp
changeset 62 341166945d65
parent 51 4785f57bf3d4
child 63 52b0f64eeb51
--- a/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmainwindow.cpp	Thu Jun 24 13:11:40 2010 +0100
+++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmainwindow.cpp	Fri Jun 25 19:19:22 2010 +0300
@@ -21,10 +21,22 @@
 #include "hsmainwindow.h"
 #include "hsmenuview.h"
 
+#include <qservicemanager.h>
 /*!
  Constructor
  */
-HsMainWindow::HsMainWindow()
+QTM_USE_NAMESPACE
+
+
+/*
+ * A word about HsMainWindow class.
+ * This is not an utility class. It was designed to isolate HbMainWindow connected code, so
+ * it can be substitued in MT for application library. Unfortunately it seems to be the best
+ * way to cope with HbMainWindow problem in MT.  
+ */
+
+
+HsMainWindow::HsMainWindow() : mActivityClient(NULL)
 {
 }
 
@@ -43,17 +55,64 @@
 {
     HbMainWindow *const hbW(
         HbInstance::instance()->allMainWindows().value(0));
+    
+    connect( hbW, SIGNAL(viewReady()), SIGNAL(viewIsReady()),
+        Qt::UniqueConnection );
 
     HbView *const view = menuView.view();
     
     if (!hbW->views().contains(view)) {
         hbW->addView(view);
     }
-    if (hbW->currentView() && !hbW->currentView()->isContentFullScreen()) {
-        // quick trick to know if we are not comming from IDLE
-        hbW->setCurrentView(view, true, Hb::ViewSwitchUseAltEvent);
-    } else {
-        hbW->setCurrentView(view);
-    }    
+    hbW->setCurrentView(view);
 }
 
+
+/*!
+ Grabs screenshot from actual main window
+ \retval QPixmap& containing screenshot
+*/
+QPixmap HsMainWindow::grabScreenshot()
+	{
+	HbMainWindow *const hbW(
+	    HbInstance::instance()->allMainWindows().value(0));
+	return QPixmap::grabWidget(hbW, hbW->rect()); 
+	}
+
+/*!
+ Saves applib activity with current view screenshot
+*/
+void HsMainWindow::saveActivity()
+{
+#ifdef Q_OS_SYMBIAN
+
+    if (!mActivityClient) {
+        QServiceManager serviceManager;
+        mActivityClient = serviceManager.loadInterface("com.nokia.qt.activities.ActivityClient");
+        if (!mActivityClient) {
+            qWarning("Cannot initialize critical com.nokia.qt.activities.ActivityClient service.");
+        }
+    }
+
+    if (mActivityClient) {
+        bool retok;
+        bool ok = QMetaObject::invokeMethod(mActivityClient, "removeActivity",
+            Q_RETURN_ARG(bool, retok), Q_ARG(QString, appLibActivity()));
+        if (!ok) {
+            qWarning("remove appLibActivity failed");
+        }
+
+        QVariant variant;
+        QVariantHash metadata;
+        metadata.insert("screenshot", grabScreenshot());
+
+        ok = QMetaObject::invokeMethod(mActivityClient, "addActivity", Q_RETURN_ARG(bool, retok),
+            Q_ARG(QString, appLibActivity() ), Q_ARG(QVariant, QVariant(variant)),
+            Q_ARG(QVariantHash, metadata));
+        if (!ok) {
+            qWarning("add appLibActivity failed");
+        }
+    }
+#endif//Q_OS_SYMBIAN   
+}
+