diff -r 594d59766373 -r 7d48bed6ce0c satui/satapp/src/satappmenuprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/satui/satapp/src/satappmenuprovider.cpp Tue Aug 31 15:45:17 2010 +0300 @@ -0,0 +1,347 @@ +/* +* 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: Provides and maintains SAT main view (selection list) +* +*/ + +// qt +#include +#include +#include +#include +// hb +#include +#include +#include +#include +#include +#include +#include +// satapp +#include "satappmenuprovider.h" +#include "satappaction.h" +#include "satappconstant.h" + +// constants +const char *SATAPP_DOCML = ":/xml/satapp.docml"; +const char *SATAPP_SETUPMENU_VIEW = "setupmenu_view"; +const char *SATAPP_SELECTITEM_VIEW = "selectitem_view"; +const char *SATAPP_MENUITEM = "s:ListWidget"; +const char *SATAPP_SELECTITEM = "t:ListWidget"; +const char *SATAPP_SUBTITLE = "t:label"; + + +// ---------------------------------------------------------------------------- +// SatAppMenuProvider::SatAppMenuProvider +// ---------------------------------------------------------------------------- +// +SatAppMenuProvider::SatAppMenuProvider(HbMainWindow *window,QObject *parent) + : QObject(parent), mMainWindow(window),mSetupMenuView(0), + mSelectItemView(0),mSoftKeyQuitAction(0),mSoftKeyBackAction(0), + mListWidget(0),mSelectListWidget(0),mSubTitle(0),mCurrentAction(0) +{ + qDebug("SATAPP: SatAppMenuProvider::SatAppMenuProvider"); +} + +// ---------------------------------------------------------------------------- +// SatAppMenuProvider::~SatAppMenuProvider +// ---------------------------------------------------------------------------- +// +SatAppMenuProvider::~SatAppMenuProvider() +{ + qDebug("SATAPP: SatAppMenuProvider::~SatAppMenuProvider >"); + resetState(); + // delete all objects created from DOCML. + while (!mObjects.isEmpty()) { + delete mObjects.takeFirst(); + } + // delete actions + delete mSoftKeyQuitAction; + delete mSoftKeyBackAction; + qDebug("SATAPP: SatAppMenuProvider::~SatAppMenuProvider <"); +} + +// ---------------------------------------------------------------------------- +// SatAppMenuProvider::takeScreenShot +// ---------------------------------------------------------------------------- +// +QPixmap SatAppMenuProvider::takeScreenShot() +{ + qDebug("SATAPP: SatAppMenuProvider::takeScreenShot"); + return QPixmap::grabWidget(mMainWindow, mMainWindow->rect()); +} + +// ---------------------------------------------------------------------------- +// SatAppMenuProvider::loadMainView +// ---------------------------------------------------------------------------- +// +void SatAppMenuProvider::loadMainView() +{ + qDebug("SATAPP: SatAppMenuProvider::loadMainView >"); + + // create actions + mSoftKeyQuitAction = new HbAction(Hb::QuitNaviAction,this); + mSoftKeyBackAction = new HbAction(Hb::BackNaviAction,this); + + bool docmlLoad = false; + HbDocumentLoader loader; + // ownership of the objects are transferred to caller + mObjects = loader.load(SATAPP_DOCML,&docmlLoad); + Q_ASSERT(docmlLoad); + qDebug("SATAPP: SatAppMenuProvider main view found"); + // load setupmenu view + mSetupMenuView = qobject_cast(loader.findWidget + (SATAPP_SETUPMENU_VIEW)); + // find setupmenu view items + mListWidget = qobject_cast + ( loader.findWidget(SATAPP_MENUITEM )); + // connect setupmenu view menu + HbAction *menuAction = mSetupMenuView->menu()->addAction( + hbTrId("txt_common_menu_exit")); + SAT_ASSERT(connect(menuAction, SIGNAL(triggered()), + mMainWindow, SLOT(close()))); + SAT_ASSERT(connect(mSoftKeyQuitAction, SIGNAL(triggered()), + mMainWindow, SLOT(close()))); + // set this view as current view + mMainWindow->addView(mSetupMenuView); + mMainWindow->setCurrentView(mSetupMenuView); + + // load selectitem view + mSelectItemView = qobject_cast(loader.findWidget + (SATAPP_SELECTITEM_VIEW)); + // find selectitem view items + mSubTitle = qobject_cast + ( loader.findWidget(SATAPP_SUBTITLE) ); + mSelectListWidget = qobject_cast + ( loader.findWidget(SATAPP_SELECTITEM )); + // connect selectitem view menu + HbAction *menuBack = mSelectItemView->menu()->addAction( + hbTrId("txt_common_opt_back")); + SAT_ASSERT(connect(menuBack, SIGNAL(triggered()), + mSoftKeyBackAction, SIGNAL(triggered()))); + HbAction *menuQuit = mSelectItemView->menu()->addAction( + hbTrId("txt_common_menu_exit")); + + SAT_ASSERT(connect(menuQuit, SIGNAL(triggered()), + mMainWindow, SLOT(close()))); + qDebug("SATAPP: SatAppMenuProvider::loadMainView <"); + +} + +// ---------------------------------------------------------------------------- +// switchView +// ---------------------------------------------------------------------------- +// +void SatAppMenuProvider::switchView() +{ + qDebug("SATAPP: SatAppMenuProvider::switchView >"); + if (mCurrentAction && ESatSelectItemAction == mCurrentAction->action()) { + // switch to select item view + mMainWindow->removeView(mMainWindow->currentView()); + mMainWindow->addView(mSelectItemView); + mMainWindow->setCurrentView(mSelectItemView); + } else { + // switch to main menu view + mMainWindow->removeView(mMainWindow->currentView()); + mMainWindow->addView(mSetupMenuView); + mMainWindow->setCurrentView(mSetupMenuView); + } + qDebug("SATAPP: SatAppMenuProvider::switchView <"); +} + + +// ---------------------------------------------------------------------------- +// SatAppMenuProvider::setUpMenu +// constructs a menu in the main SAT application view +// ---------------------------------------------------------------------------- +// +void SatAppMenuProvider::setUpMenu(SatAppAction &action) +{ + qDebug("SATAPP: SatAppMenuProvider::setUpMenu >"); + if (!mSetupMenuView) { + loadMainView(); + } + resetState(); + mCurrentAction = &action; + switchView(); + action.setResponse(ESatSuccess); + + // The text is the application name + // should be shown on the menu area always + QString text = action.value(KeyText).toString(); + if (!text.isEmpty()) { + mSetupMenuView->setTitle(text); + mSelectItemView->setTitle(text); + } + qDebug() << "SATAPP: SetUpMenu title=" << text; + + // build the menu + QList menu = action.value(KeyMenu).toList(); + mListWidget->clear(); + for(int i = 0; i < menu.count(); i++ ) { + mListWidget->addItem(menu.at(i).toString()); + } + qDebug() << "SATAPP: SetUpMenu menu=" << menu; + + // back-key quits the application + mSetupMenuView->setNavigationAction(mSoftKeyQuitAction); + // completes action with ESatSuccess and selected item + connectItem(); + + qDebug("SATAPP: SatAppMenuProvider::setUpMenu <"); +} + + +// ---------------------------------------------------------------------------- +// SatAppMenuProvider::selectItem +// Constructs a SETECT ITEM view +// ---------------------------------------------------------------------------- +// +void SatAppMenuProvider::selectItem( SatAppAction &action) +{ + qDebug("SATAPP: SatAppMenuProvider::selectItem >"); + + if (!mSetupMenuView) { + loadMainView(); + } + + resetState(); + mCurrentAction = &action; + switchView(); + action.setResponse(ESatSuccess); + + // Set sub title + QString text = action.value(KeyText).toString(); + if (!text.isEmpty()) { + mSubTitle->setPlainText(text); + } else { + mSubTitle->setPlainText(hbTrId("txt_long_caption_sim_services")); + } + qDebug() << "SATAPP: selectItem text=" << text; + + // Set List widget + QList menu = action.value(KeyMenu).toList(); + mSelectListWidget->clear(); + for(int i = 0; i < menu.count(); i++ ) { + mSelectListWidget->addItem(menu.at( i ).toString()); + } + qDebug() << "SATAPP: selectItem menu=" << menu; + + // timeout completes action with ESatNoResponseFromUser + QTimer::singleShot(KDefaultSelectionTimeoutMseconds, + mCurrentAction,SLOT(completeWithNoResponse())); + // back-key completes action with ESatBackwardModeRequestedByUser + mSelectItemView->setNavigationAction(mSoftKeyBackAction); + SAT_ASSERT(connect(mSoftKeyBackAction, SIGNAL(triggered()), + mCurrentAction, SLOT(completeWithBackRequested()))); + SAT_ASSERT(connect(mSelectItemView->menu()->actions().at(1), + SIGNAL(triggered()), + mCurrentAction, SLOT(completeWithSessionTerminated()))); + + // completes action with ESatSuccess and selected item + connectItem(); + + qDebug("SATAPP: SatAppMenuProvider::selectItem <"); +} + +// ---------------------------------------------------------------------------- +// SatAppMenuProvider::resetState +// terminates ongoing events and clears the screen +// ---------------------------------------------------------------------------- +// +void SatAppMenuProvider::resetState() +{ + qDebug("SATAPP: SatAppMenuProvider::resetState >"); + mCurrentAction = 0; + disconnectItem(); + qDebug("SATAPP: SatAppMenuProvider::resetState <"); +} + +// ---------------------------------------------------------------------------- +// SatAppMenuProvider::menuItemSelected +// (Menu item selected). +// ---------------------------------------------------------------------------- +// +void SatAppMenuProvider::menuItemSelected(HbListWidgetItem *item) +{ + qDebug("SATAPP: SatAppMenuProvider::menuItemSelected >"); + Q_ASSERT(mCurrentAction); + if (ESatSetUpMenuAction == mCurrentAction->action()) { + int index = mListWidget->row(item); + mCurrentAction->set(KeySelection,index); + mCurrentAction->set(KeyHelpRequested,false); + mCurrentAction->completeWithSuccess(); + } else if(ESatSelectItemAction == mCurrentAction->action()) { + int index = mSelectListWidget->row(item); + mCurrentAction->set(KeySelection,index); + mCurrentAction->completeWithSuccess(); + } + qDebug("SATAPP: SatAppMenuProvider::menuItemSelected <"); +} + + +// ---------------------------------------------------------------------------- +// SatAppMenuProvider::connectItem +// (Connect listwidget item). +// ---------------------------------------------------------------------------- +// +void SatAppMenuProvider::connectItem() +{ + qDebug("SATAPP: SatAppMenuProvider::connectItem >"); + Q_ASSERT(mCurrentAction); + if (ESatSetUpMenuAction == mCurrentAction->action()) { + SAT_ASSERT(connect( + mListWidget, SIGNAL(activated(HbListWidgetItem *)), + this, SLOT(menuItemSelected(HbListWidgetItem *)))); + SAT_ASSERT(connect( + mListWidget, + SIGNAL(longPressed(HbListWidgetItem *, const QPointF &)), + this, SLOT(menuItemSelected(HbListWidgetItem *)))); + } else if(mCurrentAction->action()== ESatSelectItemAction) { + SAT_ASSERT(connect( + mSelectListWidget, SIGNAL(activated(HbListWidgetItem *)), + this, SLOT(menuItemSelected(HbListWidgetItem *)))); + SAT_ASSERT(connect( + mSelectListWidget, + SIGNAL(longPressed(HbListWidgetItem*, const QPointF &)), + this, SLOT(menuItemSelected(HbListWidgetItem *)))); + } + qDebug("SATAPP: SatAppMenuProvider::connectItem <"); +} + +// ---------------------------------------------------------------------------- +// SatAppMenuProvider::disconnectItem +// (Disconnect listwidget item). +// ---------------------------------------------------------------------------- +// +void SatAppMenuProvider::disconnectItem() +{ + qDebug("SATAPP: SatAppMenuProvider::disconnectItem >"); + // setup menu view + disconnect(mListWidget, SIGNAL( activated(HbListWidgetItem *)), + this, SLOT( menuItemSelected( HbListWidgetItem *))); + disconnect( + mListWidget, SIGNAL(longPressed(HbListWidgetItem*, const QPointF &)), + this, SLOT(menuItemSelected(HbListWidgetItem *))); + // select item view + disconnect(mSelectListWidget, SIGNAL( activated(HbListWidgetItem *)), + this, SLOT( menuItemSelected( HbListWidgetItem *))); + disconnect( + mSelectListWidget, + SIGNAL(longPressed(HbListWidgetItem*, const QPointF &)), + this, SLOT(menuItemSelected(HbListWidgetItem *))); + qDebug("SATAPP: SatAppMenuProvider::disconnectItem <"); +} + +//End of file