diff -r f00a6757af32 -r 5f0182e07bfb homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsviewappsettingsstate.cpp --- /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 +#include +#include +#include +#include +#include +#include + +#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(event); + QVariantMap data = menuEvent->data(); + + const int entryId = data.value(Hs::itemIdKey).toInt(); + QSharedPointer 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(loader.instance()); + + mActionConfirm = new HbAction(Hb::ConfirmNaviAction, mView); + connect(mActionConfirm, SIGNAL(triggered()), SIGNAL(exit())); + + if (mView) { + QScopedPointer 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; +}