satui/satapp/src/satappmenuprovider.cpp
branchRCL_3
changeset 20 987c9837762f
parent 19 7d48bed6ce0c
child 21 0a6dd2dc9970
equal deleted inserted replaced
19:7d48bed6ce0c 20:987c9837762f
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: Provides and maintains SAT main view (selection list)
       
    15 *
       
    16 */
       
    17 
       
    18 // qt
       
    19 #include <QObject>
       
    20 #include <QTimer>
       
    21 #include <QPixmap>
       
    22 #include <QtDebug>
       
    23 // hb
       
    24 #include <hbmainwindow.h>
       
    25 #include <hbdocumentloader.h>
       
    26 #include <hbview.h>
       
    27 #include <hbmenu.h>
       
    28 #include <hblabel.h>
       
    29 #include <hbaction.h>
       
    30 #include <hblistwidget.h>
       
    31 // satapp
       
    32 #include "satappmenuprovider.h"
       
    33 #include "satappaction.h"
       
    34 #include "satappconstant.h"
       
    35 
       
    36 // constants
       
    37 const char *SATAPP_DOCML = ":/xml/satapp.docml";
       
    38 const char *SATAPP_SETUPMENU_VIEW = "setupmenu_view";
       
    39 const char *SATAPP_SELECTITEM_VIEW = "selectitem_view";
       
    40 const char *SATAPP_MENUITEM = "s:ListWidget";
       
    41 const char *SATAPP_SELECTITEM = "t:ListWidget";
       
    42 const char *SATAPP_SUBTITLE = "t:label";
       
    43 
       
    44 
       
    45 // ----------------------------------------------------------------------------
       
    46 // SatAppMenuProvider::SatAppMenuProvider
       
    47 // ----------------------------------------------------------------------------
       
    48 //
       
    49 SatAppMenuProvider::SatAppMenuProvider(HbMainWindow *window,QObject *parent)
       
    50     : QObject(parent), mMainWindow(window),mSetupMenuView(0),
       
    51       mSelectItemView(0),mSoftKeyQuitAction(0),mSoftKeyBackAction(0),
       
    52       mListWidget(0),mSelectListWidget(0),mSubTitle(0),mCurrentAction(0)
       
    53 {
       
    54     qDebug("SATAPP: SatAppMenuProvider::SatAppMenuProvider");
       
    55 }
       
    56 
       
    57 // ----------------------------------------------------------------------------
       
    58 // SatAppMenuProvider::~SatAppMenuProvider
       
    59 // ----------------------------------------------------------------------------
       
    60 //
       
    61 SatAppMenuProvider::~SatAppMenuProvider()
       
    62 {
       
    63     qDebug("SATAPP: SatAppMenuProvider::~SatAppMenuProvider >");
       
    64     resetState();
       
    65     // delete all objects created from DOCML.
       
    66     while (!mObjects.isEmpty()) {
       
    67         delete mObjects.takeFirst();
       
    68     }
       
    69     // delete actions
       
    70     delete mSoftKeyQuitAction;
       
    71     delete mSoftKeyBackAction;
       
    72     qDebug("SATAPP: SatAppMenuProvider::~SatAppMenuProvider <");
       
    73 }
       
    74 
       
    75 // ----------------------------------------------------------------------------
       
    76 // SatAppMenuProvider::takeScreenShot
       
    77 // ----------------------------------------------------------------------------
       
    78 //
       
    79 QPixmap SatAppMenuProvider::takeScreenShot()
       
    80 {
       
    81     qDebug("SATAPP: SatAppMenuProvider::takeScreenShot");
       
    82     return QPixmap::grabWidget(mMainWindow, mMainWindow->rect());
       
    83 }
       
    84 
       
    85 // ----------------------------------------------------------------------------
       
    86 // SatAppMenuProvider::loadMainView
       
    87 // ----------------------------------------------------------------------------
       
    88 //
       
    89 void SatAppMenuProvider::loadMainView()
       
    90 {
       
    91     qDebug("SATAPP: SatAppMenuProvider::loadMainView >");
       
    92 
       
    93     // create actions
       
    94     mSoftKeyQuitAction = new HbAction(Hb::QuitNaviAction,this);
       
    95     mSoftKeyBackAction = new HbAction(Hb::BackNaviAction,this);
       
    96 
       
    97     bool docmlLoad = false;
       
    98     HbDocumentLoader loader;
       
    99     // ownership of the objects are transferred to caller
       
   100     mObjects = loader.load(SATAPP_DOCML,&docmlLoad);
       
   101     Q_ASSERT(docmlLoad);
       
   102     qDebug("SATAPP: SatAppMenuProvider main view found");
       
   103     // load setupmenu view
       
   104     mSetupMenuView = qobject_cast<HbView *>(loader.findWidget
       
   105             (SATAPP_SETUPMENU_VIEW));
       
   106     // find setupmenu view items
       
   107     mListWidget = qobject_cast<HbListWidget *>
       
   108         ( loader.findWidget(SATAPP_MENUITEM ));
       
   109     // connect setupmenu view menu
       
   110     HbAction *menuAction = mSetupMenuView->menu()->addAction(
       
   111         hbTrId("txt_common_menu_exit"));
       
   112     SAT_ASSERT(connect(menuAction, SIGNAL(triggered()),
       
   113         mMainWindow, SLOT(close())));
       
   114     SAT_ASSERT(connect(mSoftKeyQuitAction, SIGNAL(triggered()),
       
   115         mMainWindow, SLOT(close())));
       
   116     // set this view as current view
       
   117     mMainWindow->addView(mSetupMenuView);
       
   118     mMainWindow->setCurrentView(mSetupMenuView);
       
   119 
       
   120     // load selectitem view
       
   121     mSelectItemView = qobject_cast<HbView *>(loader.findWidget
       
   122             (SATAPP_SELECTITEM_VIEW));
       
   123     // find selectitem view items
       
   124     mSubTitle = qobject_cast<HbLabel *>
       
   125         ( loader.findWidget(SATAPP_SUBTITLE) );
       
   126     mSelectListWidget = qobject_cast<HbListWidget *>
       
   127         ( loader.findWidget(SATAPP_SELECTITEM ));
       
   128     // connect selectitem view menu
       
   129     HbAction *menuBack = mSelectItemView->menu()->addAction(
       
   130         hbTrId("txt_common_opt_back"));
       
   131     SAT_ASSERT(connect(menuBack, SIGNAL(triggered()),
       
   132         mSoftKeyBackAction, SIGNAL(triggered())));
       
   133     HbAction *menuQuit = mSelectItemView->menu()->addAction(
       
   134         hbTrId("txt_common_menu_exit"));
       
   135 
       
   136     SAT_ASSERT(connect(menuQuit, SIGNAL(triggered()),
       
   137         mMainWindow, SLOT(close())));
       
   138     qDebug("SATAPP: SatAppMenuProvider::loadMainView <");
       
   139 
       
   140 }
       
   141 
       
   142 // ----------------------------------------------------------------------------
       
   143 // switchView
       
   144 // ----------------------------------------------------------------------------
       
   145 //
       
   146 void SatAppMenuProvider::switchView()
       
   147 {
       
   148     qDebug("SATAPP: SatAppMenuProvider::switchView >");
       
   149     if (mCurrentAction && ESatSelectItemAction == mCurrentAction->action()) {
       
   150         // switch to select item view
       
   151         mMainWindow->removeView(mMainWindow->currentView());
       
   152         mMainWindow->addView(mSelectItemView);
       
   153         mMainWindow->setCurrentView(mSelectItemView);
       
   154     } else {
       
   155         // switch to main menu view
       
   156         mMainWindow->removeView(mMainWindow->currentView());
       
   157         mMainWindow->addView(mSetupMenuView);
       
   158         mMainWindow->setCurrentView(mSetupMenuView);
       
   159     }
       
   160     qDebug("SATAPP: SatAppMenuProvider::switchView <");
       
   161 }
       
   162 
       
   163 
       
   164 // ----------------------------------------------------------------------------
       
   165 // SatAppMenuProvider::setUpMenu
       
   166 // constructs a menu in the main SAT application view
       
   167 // ----------------------------------------------------------------------------
       
   168 //
       
   169 void SatAppMenuProvider::setUpMenu(SatAppAction &action)
       
   170 {
       
   171     qDebug("SATAPP: SatAppMenuProvider::setUpMenu >");
       
   172     if (!mSetupMenuView) {
       
   173         loadMainView();
       
   174     }
       
   175     resetState();
       
   176     mCurrentAction = &action;
       
   177     switchView();
       
   178     action.setResponse(ESatSuccess);
       
   179 
       
   180     // The text is the application name
       
   181     // should be shown on the menu area always
       
   182     QString text = action.value(KeyText).toString();
       
   183     if (!text.isEmpty()) {
       
   184         mSetupMenuView->setTitle(text);
       
   185         mSelectItemView->setTitle(text);
       
   186     }
       
   187     qDebug() << "SATAPP: SetUpMenu title=" << text;
       
   188 
       
   189     // build the menu
       
   190     QList<QVariant> menu = action.value(KeyMenu).toList();
       
   191     mListWidget->clear();
       
   192     for(int i = 0; i < menu.count(); i++ ) {
       
   193         mListWidget->addItem(menu.at(i).toString());
       
   194     }
       
   195     qDebug() << "SATAPP: SetUpMenu menu=" << menu;
       
   196 
       
   197     // back-key quits the application
       
   198     mSetupMenuView->setNavigationAction(mSoftKeyQuitAction);
       
   199     // completes action with ESatSuccess and selected item
       
   200     connectItem();
       
   201 
       
   202     qDebug("SATAPP: SatAppMenuProvider::setUpMenu <");
       
   203 }
       
   204 
       
   205 
       
   206 // ----------------------------------------------------------------------------
       
   207 // SatAppMenuProvider::selectItem
       
   208 // Constructs a SETECT ITEM view
       
   209 // ----------------------------------------------------------------------------
       
   210 //
       
   211 void SatAppMenuProvider::selectItem( SatAppAction &action)
       
   212 {
       
   213     qDebug("SATAPP: SatAppMenuProvider::selectItem >");
       
   214     
       
   215     if (!mSetupMenuView) {
       
   216         loadMainView();
       
   217     }
       
   218     
       
   219     resetState();
       
   220     mCurrentAction = &action;
       
   221     switchView();
       
   222     action.setResponse(ESatSuccess);
       
   223 
       
   224     // Set sub title
       
   225     QString text = action.value(KeyText).toString();
       
   226     if (!text.isEmpty()) {
       
   227         mSubTitle->setPlainText(text);
       
   228     } else {
       
   229         mSubTitle->setPlainText(hbTrId("txt_long_caption_sim_services"));
       
   230     }
       
   231     qDebug() << "SATAPP: selectItem text=" << text;
       
   232 
       
   233     // Set List widget
       
   234     QList<QVariant> menu = action.value(KeyMenu).toList();
       
   235     mSelectListWidget->clear();
       
   236     for(int i = 0; i < menu.count(); i++ ) {
       
   237         mSelectListWidget->addItem(menu.at( i ).toString());
       
   238     }
       
   239     qDebug() << "SATAPP: selectItem menu=" << menu;
       
   240 
       
   241     // timeout completes action with ESatNoResponseFromUser
       
   242     QTimer::singleShot(KDefaultSelectionTimeoutMseconds,
       
   243         mCurrentAction,SLOT(completeWithNoResponse()));
       
   244     // back-key completes action with ESatBackwardModeRequestedByUser
       
   245     mSelectItemView->setNavigationAction(mSoftKeyBackAction);
       
   246     SAT_ASSERT(connect(mSoftKeyBackAction, SIGNAL(triggered()),
       
   247         mCurrentAction, SLOT(completeWithBackRequested())));
       
   248     SAT_ASSERT(connect(mSelectItemView->menu()->actions().at(1), 
       
   249         SIGNAL(triggered()),
       
   250         mCurrentAction, SLOT(completeWithSessionTerminated())));
       
   251     
       
   252     // completes action with ESatSuccess and selected item
       
   253     connectItem();
       
   254 
       
   255     qDebug("SATAPP: SatAppMenuProvider::selectItem <");
       
   256 }
       
   257 
       
   258 // ----------------------------------------------------------------------------
       
   259 // SatAppMenuProvider::resetState
       
   260 // terminates ongoing events and clears the screen
       
   261 // ----------------------------------------------------------------------------
       
   262 //
       
   263 void SatAppMenuProvider::resetState()
       
   264 {
       
   265     qDebug("SATAPP: SatAppMenuProvider::resetState >");
       
   266     mCurrentAction = 0;
       
   267     disconnectItem();
       
   268     qDebug("SATAPP: SatAppMenuProvider::resetState <");
       
   269 }
       
   270 
       
   271 // ----------------------------------------------------------------------------
       
   272 // SatAppMenuProvider::menuItemSelected
       
   273 // (Menu item selected).
       
   274 // ----------------------------------------------------------------------------
       
   275 //
       
   276 void SatAppMenuProvider::menuItemSelected(HbListWidgetItem *item)
       
   277 {
       
   278     qDebug("SATAPP: SatAppMenuProvider::menuItemSelected >");
       
   279     Q_ASSERT(mCurrentAction);
       
   280     if (ESatSetUpMenuAction == mCurrentAction->action()) {
       
   281         int index = mListWidget->row(item);
       
   282         mCurrentAction->set(KeySelection,index);
       
   283         mCurrentAction->set(KeyHelpRequested,false);
       
   284         mCurrentAction->completeWithSuccess();
       
   285     } else if(ESatSelectItemAction == mCurrentAction->action()) {
       
   286         int index = mSelectListWidget->row(item);
       
   287         mCurrentAction->set(KeySelection,index);
       
   288         mCurrentAction->completeWithSuccess();
       
   289     }
       
   290     qDebug("SATAPP: SatAppMenuProvider::menuItemSelected <");
       
   291 }
       
   292 
       
   293 
       
   294 // ----------------------------------------------------------------------------
       
   295 // SatAppMenuProvider::connectItem
       
   296 // (Connect listwidget item).
       
   297 // ----------------------------------------------------------------------------
       
   298 //
       
   299 void SatAppMenuProvider::connectItem()
       
   300 {
       
   301     qDebug("SATAPP: SatAppMenuProvider::connectItem >");
       
   302     Q_ASSERT(mCurrentAction);
       
   303     if (ESatSetUpMenuAction == mCurrentAction->action()) {
       
   304         SAT_ASSERT(connect(
       
   305             mListWidget, SIGNAL(activated(HbListWidgetItem *)), 
       
   306             this, SLOT(menuItemSelected(HbListWidgetItem *))));
       
   307         SAT_ASSERT(connect(
       
   308             mListWidget, 
       
   309             SIGNAL(longPressed(HbListWidgetItem *, const QPointF &)), 
       
   310             this, SLOT(menuItemSelected(HbListWidgetItem *))));
       
   311     } else if(mCurrentAction->action()== ESatSelectItemAction) {
       
   312         SAT_ASSERT(connect(
       
   313             mSelectListWidget, SIGNAL(activated(HbListWidgetItem *)), 
       
   314             this, SLOT(menuItemSelected(HbListWidgetItem *))));
       
   315         SAT_ASSERT(connect(
       
   316             mSelectListWidget, 
       
   317             SIGNAL(longPressed(HbListWidgetItem*, const QPointF &)), 
       
   318             this, SLOT(menuItemSelected(HbListWidgetItem *))));
       
   319     }
       
   320     qDebug("SATAPP: SatAppMenuProvider::connectItem <");
       
   321 }
       
   322 
       
   323 // ----------------------------------------------------------------------------
       
   324 // SatAppMenuProvider::disconnectItem
       
   325 // (Disconnect listwidget item).
       
   326 // ----------------------------------------------------------------------------
       
   327 //
       
   328 void SatAppMenuProvider::disconnectItem()
       
   329 {
       
   330     qDebug("SATAPP: SatAppMenuProvider::disconnectItem >");
       
   331     // setup menu view
       
   332     disconnect(mListWidget, SIGNAL( activated(HbListWidgetItem *)),
       
   333           this, SLOT( menuItemSelected( HbListWidgetItem *)));        
       
   334     disconnect(
       
   335         mListWidget, SIGNAL(longPressed(HbListWidgetItem*, const QPointF &)), 
       
   336         this, SLOT(menuItemSelected(HbListWidgetItem *)));
       
   337     // select item view
       
   338     disconnect(mSelectListWidget, SIGNAL( activated(HbListWidgetItem *)),
       
   339           this, SLOT( menuItemSelected( HbListWidgetItem *)));
       
   340     disconnect(
       
   341         mSelectListWidget, 
       
   342         SIGNAL(longPressed(HbListWidgetItem*, const QPointF &)), 
       
   343         this, SLOT(menuItemSelected(HbListWidgetItem *)));
       
   344     qDebug("SATAPP: SatAppMenuProvider::disconnectItem <");
       
   345 }
       
   346 
       
   347 //End of file