homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsviewappsettingsstate.cpp
branchRCL_3
changeset 82 5f0182e07bfb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsviewappsettingsstate.cpp	Tue Aug 31 15:06:34 2010 +0300
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Menu Application Library state.
+ *
+*/
+#include <QScopedPointer>
+#include <hbmainwindow.h>
+#include <hbview.h>
+#include <hbinstance.h>
+#include <qstatemachine.h>
+#include <hbaction.h>
+#include <qpluginloader.h>
+
+#include "hsdomainmodel_global.h"
+#include "hsapp_defs.h"
+#include "hsmenuevent.h"
+#include "hsviewappsettingsstate.h"
+#include "hsmenuentryremovedhandler.h"
+#include "caentry.h"
+#include "canotifier.h"
+#include "canotifierfilter.h"
+
+#include "hsmenuservice.h"
+
+/*!
+ \class HsViewAppSettingsState
+ \ingroup HsViewAppSettingsState
+ \brief State for showing Application Settings HbView from provided plugin
+ */
+
+/*!
+ \var HsViewAppSettingsState::mView
+ View.
+ Owned.
+ */
+
+/*!
+ \var HsViewAppSettingsState::mPreviousView
+ Previous view.
+ Not owned.
+ */
+
+/*!
+ \var HsViewAppSettingsState::mActionConfirm
+ Confirm action. Owned.
+ */
+
+/*!
+ Constructor
+ \param parent Parent state.
+ \retval void
+ */
+HsViewAppSettingsState::HsViewAppSettingsState(QState *parent) :
+        QState(parent),
+        mView(0), 
+        mPreviousView(0), 
+        mActionConfirm(0)
+{
+    construct();
+}
+
+/*!
+ Constructs contained objects.
+ */
+void HsViewAppSettingsState::construct()
+{
+    setObjectName("/ViewAppSettingsState");
+    if (this->parent()) {
+        setObjectName(this->parent()->objectName() + objectName());
+    }
+}
+
+/*!
+ Destructor.
+ */
+HsViewAppSettingsState::~HsViewAppSettingsState()
+{
+}
+
+/*!
+ onEntry method invoked on entering the state
+ \param event: event
+ \retval void
+ */
+void HsViewAppSettingsState::onEntry(QEvent *event)
+{
+    HSMENUTEST_FUNC_ENTRY("HsViewAppSettingsState::onEntry");
+    QState::onEntry(event);
+    qDebug("CollectionState::onEntry()");
+    HsMenuEvent *menuEvent = static_cast<HsMenuEvent *>(event);
+    QVariantMap data = menuEvent->data();
+    
+    const int entryId = data.value(Hs::itemIdKey).toInt();   
+    QSharedPointer<const CaEntry> entry = CaService::instance()->getEntry(entryId);    
+    
+    QString pluginPath;
+    pluginPath = pluginPath.append("/resource/qt/plugins/appsettings/")
+        .append(entry->attribute(Hs::appSettingsPlugin)).append(".qtplugin");
+    QPluginLoader loader(pluginPath);
+    mView = qobject_cast<HbView *>(loader.instance()); 
+    
+    mActionConfirm = new HbAction(Hb::ConfirmNaviAction, mView);
+    connect(mActionConfirm, SIGNAL(triggered()), SIGNAL(exit()));
+    
+    if (mView) {    
+        QScopedPointer<HsMenuEntryRemovedHandler> entryObserver(
+            new HsMenuEntryRemovedHandler(entryId, this, SIGNAL(exit())));
+        
+        entryObserver.take()->setParent(mView);
+        
+        QObject::connect(this, SIGNAL(initialize(QString)), mView, SLOT(initialize(QString)));        
+        mView->setParent(this);
+        emit initialize(entry->attribute(Hs::applicationUidEntryKey));        
+        // Add View to main window
+        HbMainWindow *hbMainWindow = mainWindow();
+        // add confirm action
+        mView->setNavigationAction(mActionConfirm);
+    
+        hbMainWindow->addView(mView);
+        // record the current view in order to activate it once done
+        mPreviousView = hbMainWindow->currentView();
+        hbMainWindow->setCurrentView(mView);
+        hbMainWindow->show();
+    }
+
+    
+    HSMENUTEST_FUNC_EXIT("HsViewAppSettingsState::onEntry");
+}
+
+
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (only returns HbMainWindow)
+/*!
+ Returns pointer to tha main window.
+ \return Pointer to the main window.
+ */
+HbMainWindow *HsViewAppSettingsState::mainWindow() const
+{
+    return HbInstance::instance()->allMainWindows().value(0);
+}
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
+
+
+void HsViewAppSettingsState::onExit(QEvent *event)
+{
+    
+    QState::onExit(event);
+    // Remove mView from main window and restore previous view.
+    HbMainWindow *hbMainWindow = mainWindow();
+    hbMainWindow->setCurrentView(mPreviousView);
+    hbMainWindow->removeView(mView);
+
+    
+    delete mActionConfirm;
+    mActionConfirm = NULL;
+    delete mView;
+    mView = NULL;
+}