--- /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 <QObject>
+#include <QTimer>
+#include <QPixmap>
+#include <QtDebug>
+// hb
+#include <hbmainwindow.h>
+#include <hbdocumentloader.h>
+#include <hbview.h>
+#include <hbmenu.h>
+#include <hblabel.h>
+#include <hbaction.h>
+#include <hblistwidget.h>
+// 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<HbView *>(loader.findWidget
+ (SATAPP_SETUPMENU_VIEW));
+ // find setupmenu view items
+ mListWidget = qobject_cast<HbListWidget *>
+ ( 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<HbView *>(loader.findWidget
+ (SATAPP_SELECTITEM_VIEW));
+ // find selectitem view items
+ mSubTitle = qobject_cast<HbLabel *>
+ ( loader.findWidget(SATAPP_SUBTITLE) );
+ mSelectListWidget = qobject_cast<HbListWidget *>
+ ( 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<QVariant> 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<QVariant> 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