controlpanelui/src/cpapplication/src/cpmainview.cpp
changeset 40 593f946f4fec
parent 21 2883a5458389
--- a/controlpanelui/src/cpapplication/src/cpmainview.cpp	Fri Jun 25 17:12:20 2010 +0800
+++ b/controlpanelui/src/cpapplication/src/cpmainview.cpp	Wed Sep 29 10:09:58 2010 +0800
@@ -22,16 +22,28 @@
 #include <hbdataform.h>
 #include <cpitemdatahelper.h>
 #include <cplogger.h>
+#include <hbactivitymanager.h>
+#include <hbapplication.h>
+#include <hbinstance.h>
+#include <QPixMap>
+#include <QMetaType>
+#include "cpcategorysettingformitemdata.h"
 
 //CpMainView implementation
 CpMainView::CpMainView(HbMainWindow *mainWindow/*= 0*/)
 : CpBaseSettingView(0,0), 
   mMainModel(0), 
   mItemDataHelper(0), 
-  mMainWindow(mainWindow)
+  mMainWindow(mainWindow),
+  mActivityManager(0)
 { 
     //delay loading
-    connect(mMainWindow,SIGNAL(viewReady()),this,SLOT(initializeMainModel()));
+    //connect(mMainWindow,SIGNAL(viewReady()),this,SLOT(initializeMainModel()));
+    // AUTO SAVE ACTIVITY OF CONTROLPANEL
+    HbApplication *app= qobject_cast<HbApplication *>(qApp);
+    mActivityManager = app->activityManager();
+    initializeMainModel();    
+    connect(this, SIGNAL(aboutToClose()),this, SLOT(saveActivity()));
 }
 
 CpMainView::~CpMainView()
@@ -56,9 +68,95 @@
             mMainModel = new CpMainModel;
             mMainModel->initialize(*mItemDataHelper);
             form->setModel(mMainModel);
+            connect(form, SIGNAL(activated(QModelIndex)), this, SLOT(onDataFormItemActivated(QModelIndex)));
             
-            connect(form,SIGNAL(activated(QModelIndex)),this,SLOT(onDataFormItemActivated(QModelIndex)));
+            connect(mMainWindow, SIGNAL(aboutToChangeView(HbView *, HbView *)), this, SLOT(onAboutToChangeView(HbView *, HbView *)));
         }
     }   
+    loadActivity();
 }
+
+void CpMainView::loadActivity()
+{
+    if (mMainModel == 0) {
+        return;            
+    } 
+    QVariant data = mActivityManager->activityData(QString("ControlPanelView"));
+    if (data.canConvert<QList<QVariant> >())
+    {
+        QList<QVariant> isExpanded = qvariant_cast<QList<QVariant> >(data);
+        HbDataFormModelItem *root = mMainModel->invisibleRootItem();
+        int groupCount = 0;
+        
+        if (root) {
+         groupCount = root->childCount();
+        }
+        
+        if (groupCount == isExpanded.count()) {
+            for (int i = 0; i < groupCount; i++) {
+                HbDataFormModelItem *groupItem = root->childAt(i);
+                QModelIndex index = mMainModel->indexFromItem(groupItem);
+                HbDataForm *form = qobject_cast<HbDataForm *>(widget());
+                if (form) {
+                    if (isExpanded.at(i).toBool()) {
+                        onDataFormItemActivated(index);
+                    }
+                    form->setExpanded(index,isExpanded.at(i).toBool());
+                }
+            }
+        }
+        
+        mActivityManager->removeActivity("ControlPanelView");
+    }
+}
+
+void CpMainView::saveActivity()
+{
+    HbDataFormModelItem *root = mMainModel->invisibleRootItem();
+    int groupCount = 0;
+    QList<QVariant> isExpanded;
+    if (root) {
+        groupCount = root->childCount();
+    }
+    for (int i = 0; i < groupCount; i++) {
+        HbDataFormModelItem *groupItem = root->childAt(i);
+        QModelIndex index = mMainModel->indexFromItem(groupItem);
+        HbDataForm *form = qobject_cast<HbDataForm *>(widget());    
+        isExpanded << form->isExpanded(index);
+    }
+    
+    HbMainWindow *mainWindow = hbInstance->allMainWindows().first();
+    HbView *view = mainWindow->currentView();
+    if(this == view)
+        {
+        mScreenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect());
+        }
+    
+    QVariantHash metadata;
+    metadata.insert("screenshot", mScreenshot);
+    QVariant data(isExpanded);
+
+    mActivityManager->addActivity("ControlPanelView", data, metadata);
+}
+
+void CpMainView::onDataFormItemActivated(const QModelIndex &index)
+{
+    CPFW_LOG("CpMainView::onDataFormItemActivated");
+    HbDataFormModelItem *modelItem = mMainModel->itemFromIndex(index);
+    if (modelItem != 0 && modelItem->type() == HbDataFormModelItem::GroupItem) {
+        CpSettingFormItemData *itemData = static_cast<CpSettingFormItemData *>(modelItem);
+        if (CpCategorySettingFormItemData *categoryItemData = qobject_cast<CpCategorySettingFormItemData *>(itemData)) {
+            categoryItemData->initialize(*mItemDataHelper);
+        }    
+    }
+        
+}
+void CpMainView::onAboutToChangeView(HbView * oldView, HbView *newView)
+{
+    Q_UNUSED(newView);
+    if (this == oldView) {
+        mScreenshot = QPixmap::grabWidget(mMainWindow, mMainWindow->rect());
+        }
+    }
+
 // End of File