stateproviders/ftustateprovider/src/ftuwizardmenustate.cpp
changeset 0 c464cd7e2753
child 2 66c26770985f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stateproviders/ftustateprovider/src/ftuwizardmenustate.cpp	Mon Apr 19 14:01:47 2010 +0300
@@ -0,0 +1,283 @@
+/*
+* Copyright (c) 2009 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:  Implementation of the wizard menu state.
+*
+*/
+
+
+#include "ftuwizardmenustate.h"
+#include "ftucontentservice.h"
+#include <ftuwizard.h>
+
+#include <hbmainwindow.h>
+#include <hbview.h>
+#include <hblabel.h>
+#include <hbicon.h>
+#include <hbinstance.h>
+#include <hblistview.h>
+
+#include <hbdocumentloader.h>
+
+#include <QStandardItemModel>
+#include <QDate>
+#include <hbaction.h>
+
+const int progressCompelete = 100;
+const char* emptyLine = " ";
+
+#define WMS_LOG qDebug() << "ftu:FtuWizardMenuState"
+
+const char *FTUSTATEPROVIDER_DOCML = ":/xml/ftustateprovider.docml";
+const char *TOC_VIEW = "tocView";
+const char *TOC_INFOTEXT_LABEL = "tocInfoTextLabel";
+const char *TOC_LIST_VIEW = "tocListView";
+
+
+
+// ---------------------------------------------------------------------------
+// FtuWizardMenuState::FtuWizardMenuState
+// ---------------------------------------------------------------------------
+//
+FtuWizardMenuState::FtuWizardMenuState(QState *parent) :
+    QState(parent),
+    mMainWindow(NULL),
+    mTocView(NULL),
+    mInfoText(NULL),
+    mListView(NULL),
+	mDocumentLoader(NULL),
+    mModel(NULL)   
+{
+    mMainWindow = hbInstance->allMainWindows().at(0);
+    mModel = new QStandardItemModel(this);
+
+	mDocumentLoader = new HbDocumentLoader();
+	bool ok = false;
+	mDocumentLoader->load(FTUSTATEPROVIDER_DOCML, &ok);
+	QGraphicsWidget *widget = mDocumentLoader->findWidget(TOC_VIEW);
+	Q_ASSERT_X(ok && (widget != 0), "ftustateprovider", "invalid DocML file");
+	mTocView = qobject_cast<HbView*>(widget);
+
+    mTocView->setTitle(qtTrId("txt_ftu_title_setup"));
+
+	mMainWindow->addView(mTocView);
+    // Set as initial view.
+    mMainWindow->setCurrentView(mTocView);
+    mExitAction = new HbAction(Hb::QuitNaviAction, this);
+    mTocView->setNavigationAction(mExitAction);
+    QObject::connect( mExitAction, SIGNAL(triggered()), this, SLOT(exitApp()));
+}
+
+// ---------------------------------------------------------------------------
+// FtuWizardMenuState::~FtuWizardMenuState
+// ---------------------------------------------------------------------------
+//
+FtuWizardMenuState::~FtuWizardMenuState()
+{
+	if(mModel)
+	{
+		delete mModel;
+	}
+	delete mDocumentLoader;
+}
+
+// ---------------------------------------------------------------------------
+// FtuWizardMenuState::onEntry
+// ---------------------------------------------------------------------------
+//
+void FtuWizardMenuState::onEntry(QEvent *event)
+{    
+    WMS_LOG << "::onEntry";
+    QState::onEntry(event);
+
+    if(!mInfoText)
+    {    
+        createInfoText();
+    }    
+    if(!mListView)
+    {
+        createTocList();
+    }
+
+    // If this is not the current view, we're getting back from plugin view
+    if(mMainWindow->currentView() != mTocView)
+    {
+        mMainWindow->setCurrentView(mTocView, true);
+    }
+
+    mMainWindow->show();
+}
+
+// ---------------------------------------------------------------------------
+// FtuWizardMenuState::onExit
+// ---------------------------------------------------------------------------
+//
+void FtuWizardMenuState::onExit(QEvent *event)
+{
+    QState::onExit(event);
+}
+
+// ---------------------------------------------------------------------------
+// FtuWizardMenuState::content
+// ---------------------------------------------------------------------------
+//
+FtuContentService *FtuWizardMenuState::content() const
+{
+    return property(FTU_CONTENT_SERVICE_KEY).value<FtuContentService*>();
+}
+
+// ---------------------------------------------------------------------------
+// FtuWizardMenuState::updatedAsString
+// ---------------------------------------------------------------------------
+//
+QString FtuWizardMenuState::updatedAsString(const QDate& date) const
+{
+    QString status;
+
+    if(date == QDate().currentDate() )
+    { 	
+        status.append(qtTrId("txt_ftu_list_update_today"));
+    }
+    else
+    {
+        status.append(qtTrId("txt_ftu_list_update_date").arg(date.toString()));
+    }
+    return status;
+}
+
+// ---------------------------------------------------------------------------
+// FtuWizardMenuState::addWizardToListModel
+// ---------------------------------------------------------------------------
+//
+void FtuWizardMenuState::addWizardToListModel(int aIndex)
+{    
+    WMS_LOG << "::addWizardToListModel idx : " << aIndex;
+    FtuContentService* ftuContentService = content();
+
+    FtuWizard* addedWizard = ftuContentService->wizard(aIndex);
+    if(addedWizard)
+    {    
+        // Connect for progress updates.
+        connect(addedWizard, SIGNAL(progressUpdated(FtuWizard *, bool, int)), 
+                this, SLOT(updateProgress(FtuWizard *, bool, int)));
+
+    	const FtuWizardSetting& settings = addedWizard->wizardSettings();
+	    QStandardItem* newItem = new QStandardItem();
+	    HbIcon icon (settings.mTocDefaultIcon.absoluteFilePath());
+        QStringList data;
+        data << settings.mTocLabel;
+        QDate date = addedWizard->wizardCompletedDate();
+        if(date.isNull())
+        {
+            data << emptyLine;
+        }
+        else
+        {
+            data << updatedAsString(date);
+        }
+
+        newItem->setBackground(QBrush(Qt::lightGray));
+        newItem->setData(icon, Qt::DecorationRole);
+        newItem->setData(QVariant(data), Qt::DisplayRole);
+
+        mModel->appendRow(newItem);        
+    }
+}
+
+// ---------------------------------------------------------------------------
+// FtuWizardMenuState::createTocList
+// ---------------------------------------------------------------------------
+//
+void FtuWizardMenuState::createTocList()
+{
+    if (!mListView)
+    {
+		mListView = qobject_cast<HbListView *>(mDocumentLoader->findWidget(
+															TOC_LIST_VIEW));
+	    connect(mListView,
+                SIGNAL(activated(const QModelIndex)),
+                this,
+                SLOT(activateWizard(const QModelIndex)));
+
+        mListView->setModel(mModel);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// FtWizardMenuState::createInfoText
+// ---------------------------------------------------------------------------
+//
+void FtuWizardMenuState::createInfoText()
+{
+    mInfoText = qobject_cast<HbLabel *>(mDocumentLoader->findWidget(TOC_INFOTEXT_LABEL));                               
+    mInfoText->setPlainText(qtTrId("txt_ftu_subtitle_toc"));
+}
+
+// ---------------------------------------------------------------------------
+// FtuWizardMenuState::activateWizard
+// ---------------------------------------------------------------------------
+//
+void FtuWizardMenuState::activateWizard(const QModelIndex index)
+{
+    // Set the active wizard index
+    content()->setActiveWizard(index.row());
+    // signal to activated state
+    emit wizardSelected();
+}
+
+// ---------------------------------------------------------------------------
+// FtuWizardMenuState::updateProgress
+// ---------------------------------------------------------------------------
+//
+void FtuWizardMenuState::updateProgress(FtuWizard *caller, bool show, 
+                                           int progress)
+{
+    Q_UNUSED(show)
+    QList<FtuWizard*> wizards = content()->wizards();
+    int index = -1;
+    
+    // Get the index of the wizard
+    for(int i = 0 ; i < wizards.size() ; ++i)
+    {
+        if(caller == wizards[i])
+        {
+            WMS_LOG << "::updateProgress wizard found at: " << i;
+            index = i;
+        }
+    }
+    if(index != -1)
+    {  
+        QStringList data;
+        data << wizards[index]->wizardSettings().mTocLabel;           
+        
+        if(progress < progressCompelete)
+        {
+            QString progressStr;
+            QString progressNumber;
+            progressNumber.setNum(progress);
+            progressStr = qtTrId("txt_ftu_list_progress_status").arg(progressNumber);
+            data << progressStr;
+        }
+        else
+        {         
+            QDate date = wizards[index]->wizardCompletedDate();
+            data << updatedAsString(date);            
+        }
+        mModel->item(index)->setData(QVariant(data), Qt::DisplayRole);
+    }
+}
+
+void FtuWizardMenuState::exitApp()
+    {
+    qApp->exit();
+    }