piprofilerui/ui/hb/src/pimainview.cpp
changeset 51 b048e15729d6
parent 44 5db69f4c3d06
child 52 36d60d12b4af
--- a/piprofilerui/ui/hb/src/pimainview.cpp	Mon Aug 23 15:50:54 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,564 +0,0 @@
-/*
-* 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: 
-*
-*/
-
-
-#include <hbdocumentloader.h>
-#include <hbmainwindow.h>
-#include <hbapplication.h>
-#include <hbaction.h>
-#include <qgraphicslayout.h>
-#include <qvariant.h>
-#include <qobject.h>
-#include <qlist.h>
-#include <hbmessagebox.h>
-#include <hblabel.h>
-#include <hbwidget.h>
-#include <qstringlist.h>
-#include <qsignalmapper.h>
-#include <hblistwidget.h>
-#include <hblistwidgetitem.h>
-#include <hbmenu.h>
-#include <hbtoolbar.h>
-#include <hbdialog.h>
-#include <hbprogressdialog.h>
-#include <hbtextitem.h>
-#include <hbindicator.h>
-#include <qdebug.h>
-
-#include "pimainview.h"
-#include "piprofilerengine.h"
-#include "notifications.h"
-#include "pimainwindow.h"
-
-const char *INVALIDCONFIGURATIONFILE = "Invalid configuration file";
-const char *APPLICATIONNAME = "PI Profiler";
-
-// actions that are found from xml
-const char *ACTIONEXIT = "actionExit";
-const char *ACTIONSTARTPROFILING = "actionStartProfiling";
-const char *ACTIONSTARTTIMEDPROFILING = "actionStartTimedProfiling";
-const char *ACTIONSETTINGS = "actionSettings";
-const char *ACTIONABOUT = "actionAbout";
-
-// UI components that are found from xml
-
-const char *LISTWIDGETPLUGINS = "listPlugins";
-const char *TEXTMANDATORYPLUGINS = "Mandatory plug-ins:";
-const char *TEXTOPTIONALPLUGINS = "Optional plug-ins:";
-
-// ---------------------------------------------------------------------------
-
-PIMainView::PIMainView() :
-    application(0), mMainWindow(0), mEngine(0), mPluginList(0), mContextMenu(0), mActionExit(0),
-        mActionExitAndLeaveProfilingOn(0), mActionAbout(0), mActionStartTimedProfiling(0),
-        mActionSettings(0), mActionStopProfiling(0), mListPlugins(0), mProfilingNote(0)
-{
-
-}
-
-// ---------------------------------------------------------------------------
-
-PIMainView::~PIMainView()
-{
-}
-
-// ---------------------------------------------------------------------------
-
-void PIMainView::init(PIMainWindow *mainWindow, HbApplication* app, HbDocumentLoader &loader,
-    PIProfilerEngine *engine)
-{
-
-    application = app;
-    mMainWindow = mainWindow;
-
-    // Load items from xml file
-    loadItemsFromResources(loader);
-
-    // Set list widget items
-    mListPlugins->setClampingStyle(HbScrollArea::BounceBackClamping);
-    mListPlugins->setFrictionEnabled(true);
-
-    // Create stop profiling action
-    mActionStopProfiling = new HbAction("Stop Profiling", this);
-
-    // Create exit and leave profiling on action
-    mActionExitAndLeaveProfilingOn = new HbAction("Close UI\n(Continue profiling)", this);
-
-    mEngine = engine;
-
-    // Connect signals and slots
-    this->connectSignalsAndSlots(app);
-
-    // Create icons
-    mIconDisabled = HbIcon(":/gfx/disabled.svg");
-    mIconEnabled = HbIcon(":/gfx/enabled.svg");
-
-    // update timed profiling text according to settings
-    updateTimedProfilingText();
-}
-
-// ---------------------------------------------------------------------------
-
-
-void PIMainView::connectSignalsAndSlots(HbApplication* app)
-{
-
-    // Menu items:
-    connect(mActionExit, SIGNAL(triggered()), app, SLOT( quit() ));
-    connect(mActionSettings, SIGNAL(triggered()), this, SLOT( openSettingsView() ));
-    connect(mActionAbout, SIGNAL(triggered()), this, SLOT( showAboutPopup() ));
-    connect(mActionStartProfiling, SIGNAL(triggered()), this, SLOT( startProfiling() ));
-    connect(mActionStartTimedProfiling, SIGNAL(triggered()), this, SLOT( startTimedProfiling() ));
-
-    // List widget actions
-    connect(mListPlugins, SIGNAL(activated(HbListWidgetItem*)), this,
-        SLOT(enableOrDisablePlugin(HbListWidgetItem*)));
-    connect(mListPlugins, SIGNAL(longPressed(HbListWidgetItem*, QPointF)), this,
-        SLOT(showContexMenu(HbListWidgetItem*, QPointF)));
-
-    connect(
-        mEngine,
-        SIGNAL(profilingStatusChanged(ProfilerEngineStatus, const QString&, ProfilingMode, ProfilingOutput)),
-        this,
-        SLOT(profilingStatusChanged(ProfilerEngineStatus, const QString&, ProfilingMode, ProfilingOutput)));
-
-    connect(mMainWindow, SIGNAL(returnedFromSettings()), this, SLOT( updateTimedProfilingText() ));
-    connect(mActionExitAndLeaveProfilingOn, SIGNAL(triggered()), this,
-        SLOT( exitAndLeaveProfilingOn() ));
-    connect(mActionStopProfiling, SIGNAL(triggered()), this, SLOT( stopProfiling() ));
-
-}
-
-// ---------------------------------------------------------------------------
-
-
-void PIMainView::loadItemsFromResources(HbDocumentLoader &loader)
-{
-
-    // ACTIONS:
-
-    // Exit
-    QObject *object = loader.findObject(ACTIONEXIT);
-    Q_ASSERT_X((object != 0), APPLICATIONNAME, INVALIDCONFIGURATIONFILE);
-    this->mActionExit = qobject_cast<HbAction *> (object);
-
-    // About
-    object = loader.findObject(ACTIONABOUT);
-    Q_ASSERT_X((object != 0), APPLICATIONNAME, INVALIDCONFIGURATIONFILE);
-    this->mActionAbout = qobject_cast<HbAction *> (object);
-
-    // Settings
-    object = loader.findObject(ACTIONSETTINGS);
-    Q_ASSERT_X((object != 0), APPLICATIONNAME, INVALIDCONFIGURATIONFILE);
-    this->mActionSettings = qobject_cast<HbAction *> (object);
-
-    // Start profiling
-    object = loader.findObject(ACTIONSTARTPROFILING);
-    Q_ASSERT_X((object != 0), APPLICATIONNAME, INVALIDCONFIGURATIONFILE);
-    this->mActionStartProfiling = qobject_cast<HbAction *> (object);
-
-    // Start timed profiling
-    object = loader.findObject(ACTIONSTARTTIMEDPROFILING);
-    Q_ASSERT_X((object != 0), APPLICATIONNAME, INVALIDCONFIGURATIONFILE);
-    this->mActionStartTimedProfiling = qobject_cast<HbAction *> (object);
-
-    QGraphicsWidget *widget = loader.findWidget(LISTWIDGETPLUGINS);
-    Q_ASSERT_X((widget != 0), "Launcher", "Invalid launcher.xml file");
-    this->mListPlugins = qobject_cast<HbListWidget *> (widget);
-}
-
-// ---------------------------------------------------------------------------
-
-void PIMainView::showAboutPopup()
-{
-
-    Notifications::showMessageBox("Version 2.2.1 - 10th August 2010. \n"
-            "Copyright © 2010 Nokia Corporation "
-            "and/or its subsidiary(-ies). "
-            "All rights reserved.");
-
-}
-// ---------------------------------------------------------------------------
-
-void PIMainView::setPluginList(QList<PluginAttributes> *pluginList)
-{
-
-    this->mPluginList = pluginList;
-    this->updatePlugInLists();
-
-}
-
-// ---------------------------------------------------------------------------
-
-void PIMainView::openSettingsView()
-{
-    mMainWindow->activateSettingsView();
-}
-
-// ---------------------------------------------------------------------------
-
-void PIMainView::updatePlugInLists()
-{
-
-    mListPlugins->clear();
-
-    // Create Compulsory and Optional labels into list widget:
-    HbListWidgetItem *compulsory = new HbListWidgetItem();
-    compulsory->setText(TEXTMANDATORYPLUGINS);
-    mListPlugins->addItem(compulsory);
-
-    HbListWidgetItem *optional = new HbListWidgetItem();
-    optional->setText(TEXTOPTIONALPLUGINS);
-    mListPlugins->addItem(optional);
-
-    HbIcon *icon;
-
-    // Go thru pluginlist and add list item for each plug-in into list widget 
-    for (int index = 0; index < mPluginList->size(); index++) {
-        QString plugInName = mPluginList->at(index).mName;
-
-        // get icon for item 
-        if (mPluginList->at(index).mEnabled) {
-            icon = &mIconEnabled;
-        }
-        else {
-            icon = &mIconDisabled;
-        }
-
-        // Create list widget item
-        // TODO ensure that this does not leak memory
-        HbListWidgetItem *newItem = new HbListWidgetItem();
-        newItem->setIcon(*icon);
-        newItem->setText(plugInName);
-        newItem->setData(mPluginList->at(index).mUid);
-
-        // check if plug-in is compulsory or optional
-        if (mPluginList->at(index).mIsHidden) {
-            mListPlugins->insertItem(mListPlugins->row(optional), newItem);
-        }
-        else {
-            mListPlugins->addItem(newItem);
-
-        }
-    }
-
-}
-// ---------------------------------------------------------------------------
-
-void PIMainView::enableOrDisablePlugin(HbListWidgetItem *widget)
-{
-
-    // if widget is not found, set currently highlighted item as widget
-    // (in that case this method is called from context menu)
-    if (widget == 0) {
-        widget = mListPlugins->currentItem();
-    }
-
-    // if this method is called from list widget's activated signal, do nothing
-    // if context menu is open.
-    else {
-        if (mContextMenu != 0) {
-            return;
-        }
-    }
-    bool ok = false;
-    int widgetUid = widget->data().toInt(&ok);
-    if (!ok) {
-        qWarning("PIProfiler: Unable to find plug-in uid");
-        return;
-    }
-
-    // go thru plug-in array and find checked plug-in
-    for (int index = 0; index < mPluginList->size(); index++) {
-
-        if (mPluginList->at(index).mUid == widgetUid) {
-            PluginAttributes pluginAttributes = mPluginList->at(index);
-
-            // if plug-in is hidden it cannot be disabled
-            if (pluginAttributes.mIsHidden) {
-                return;
-            }
-
-            // change enable status and set icon correct
-            if (pluginAttributes.mEnabled) {
-                pluginAttributes.mEnabled = false;
-                widget->setIcon(mIconDisabled);
-            }
-            else {
-                pluginAttributes.mEnabled = true;
-                widget->setIcon(mIconEnabled);
-            }
-
-            // save plug-in settings
-            if (mEngine->savePluginSettings(pluginAttributes)) {
-                mPluginList->replace(index, pluginAttributes);
-            }
-            else {
-                // if saving operation failed, revert icon back
-                if (pluginAttributes.mEnabled) {
-                    widget->setIcon(mIconEnabled);
-                }
-                else {
-                    pluginAttributes.mEnabled = true;
-                    widget->setIcon(mIconDisabled);
-                }
-                Notifications::showErrorNote(
-                    "Error occured while saving settings to Profiler engine.");
-            }
-            break;
-        }
-
-    }
-
-}
-
-// ---------------------------------------------------------------------------
-
-void PIMainView::showContexMenu(HbListWidgetItem *widget, const QPointF &point)
-{
-
-    bool ok = false;
-    int uid = widget->data().toInt(&ok);
-
-    if (!ok) {
-        return;
-    }
-
-    for (int index = 0; index < mPluginList->size(); index++) {
-
-        if (mPluginList->at(index).mUid == uid) {
-
-            // Create Context menu:
-            mContextMenu = new HbMenu();
-            mContextMenu->setPreferredPos(point, HbPopup::TopLeftCorner);
-            mContextMenu->setDismissPolicy(HbPopup::TapOutside);
-            mContextMenu->setAttribute(Qt::WA_DeleteOnClose);
-
-            // Enable/disable plug-in
-            if (!mPluginList->at(index).mIsHidden) {
-                HbAction *enableAction;
-                if (mPluginList->at(index).mEnabled) {
-                    enableAction = mContextMenu->addAction(QString("Disable"));
-                }
-                else {
-                    enableAction = mContextMenu->addAction(QString("Enable"));
-                }
-                connect(enableAction, SIGNAL(triggered()), this, SLOT( enableOrDisablePlugin() ));
-            }
-
-            //FIXME take these into use once expanding and collapsing data form groups works. 
-            // Plug-in specific settings 
-            /*if (mPluginList->at(index).mItemCount != 0 || mPluginList->at(index).mSampleRate != -1) {
-             HbAction *pluginSettingsAction = mContextMenu->addAction(QString(
-             "Plug-in settings"));
-             connect(pluginSettingsAction, SIGNAL(triggered()), this,
-             SLOT(openPluginSpecificSettings()));
-             }*/
-
-            // Plug in info
-            HbAction *infoAction = mContextMenu->addAction(QString("Plug-in info"));
-            connect(infoAction, SIGNAL(triggered()), this, SLOT( openSampleInfo() ));
-
-            connect(mContextMenu, SIGNAL(aboutToClose()), this, SLOT( contextMenuClosed() ));
-            mContextMenu->open(this, SLOT(contextMenuClosed()));
-            break;
-        }
-    }
-
-}
-
-// ---------------------------------------------------------------------------
-
-void PIMainView::openSampleInfo()
-{
-
-    // Show plug-in specific info
-    bool ok = false;
-    int uid = mListPlugins->currentItem()->data().toInt(&ok);
-    if (!ok) {
-        return;
-    }
-    Notifications::showInformationNote(this->getPluginAttributes(uid).mDescription);
-}
-// ---------------------------------------------------------------------------
-
-PluginAttributes PIMainView::getPluginAttributes(int uid)
-{
-    // Get plug-in attributes from the plug-in list based on uid number
-    for (int index = 0; index < mPluginList->size(); index++) {
-        if (mPluginList->at(index).mUid == uid) {
-            return mPluginList->at(index);
-        }
-    }
-    return PluginAttributes();
-}
-
-// ---------------------------------------------------------------------------
-
-void PIMainView::contextMenuClosed()
-{
-    mContextMenu = 0;
-}
-
-// ---------------------------------------------------------------------------
-
-void PIMainView::startProfiling()
-{
-
-    showProfilingNote();
-    if (!mEngine->startProfiling()) {
-        Notifications::showErrorNote("Unable to start profiling");
-        mProfilingNote->close();
-        mProfilingNote = 0;
-    }
-}
-
-// ---------------------------------------------------------------------------
-void PIMainView::startTimedProfiling()
-{
-    showProfilingNote();
-    if (!mEngine->startTimedProfiling()) {
-        Notifications::showErrorNote("Unable to start profiling");
-        mProfilingNote->close();
-        mProfilingNote = 0;
-    }
-}
-
-// ---------------------------------------------------------------------------
-
-
-void PIMainView::stopProfiling()
-{
-    mProfilingNote = 0;
-    mEngine->stopProfiling();
-}
-
-// ---------------------------------------------------------------------------
-
-void PIMainView::profilingStatusChanged(ProfilerEngineStatus status, const QString &text,
-    ProfilingMode profilingMode, ProfilingOutput outputMode)
-{
-
-    if (status == PI_FINISHED_SUCCEFULLY) {
-        // Profiling finished successfully
-
-        // close profiling note
-        if (mProfilingNote != 0) {
-            mProfilingNote->close();
-            mProfilingNote = 0;
-        }
-
-        // Show info text
-        Notifications::showInformationNote(text);
-        return;
-    }
-
-    if (mProfilingNote == 0) {
-        // if profiling note is not yet shown, create it
-        showProfilingNote();
-    }
-
-    if (status == PI_ERROR) {
-        // if errors occured, close profiling note and show error message
-        if (mProfilingNote != 0) {
-            mProfilingNote->close();
-            mProfilingNote = 0;
-        }
-        Notifications::showErrorNote(text);
-    }
-
-    else if (status == PI_PROFILING) {
-        // if profiling is on-going, update info text according to output:
-
-        HbLabel *titleLabel = new HbLabel("Profiling...", mProfilingNote);
-        titleLabel->setAlignment(Qt::AlignCenter);
-
-        HbTextItem *textItem = new HbTextItem(text, mProfilingNote);
-        textItem->setAlignment(Qt::AlignCenter);
-
-        mProfilingNote->setHeadingWidget(titleLabel);
-        mProfilingNote->setContentWidget(textItem);
-    }
-
-}
-
-// ---------------------------------------------------------------------------
-
-void PIMainView::showProfilingNote()
-{
-    // Create new dialog 
-    mProfilingNote = new HbDialog();
-    mProfilingNote->setAttribute(Qt::WA_DeleteOnClose);
-
-    // Make it modal.
-    mProfilingNote->setModal(true);
-
-    // set dismiss policy
-    mProfilingNote->setDismissPolicy(HbPopup::NoDismiss);
-    mProfilingNote->setTimeout(0); //
-    mProfilingNote->setBackgroundFaded(true);
-
-    // create label and text item for popup
-    HbTextItem *titleLabel = new HbTextItem("Profiling...", mProfilingNote);
-    HbTextItem *label = new HbTextItem("Starting to profile", mProfilingNote);
-
-    label->setAlignment(Qt::AlignCenter);
-    titleLabel->setAlignment(Qt::AlignCenter);
-    mProfilingNote->setHeadingWidget(titleLabel);
-    mProfilingNote->setContentWidget(label);
-
-    // set actions
-    mProfilingNote->setPrimaryAction(mActionStopProfiling);
-    mProfilingNote->setSecondaryAction(mActionExitAndLeaveProfilingOn);
-
-    mProfilingNote->open();
-}
-
-// ---------------------------------------------------------------------------
-
-void PIMainView::updateTimedProfilingText()
-{
-    QString text = "Start timed profiling(";
-    QString number;
-    number.setNum(mEngine->getTimeLimit(), 10);
-    text.append(number);
-    text.append("s)");
-    mActionStartTimedProfiling->setText(text);
-
-}
-
-// ---------------------------------------------------------------------------
-
-void PIMainView::exitAndLeaveProfilingOn()
-{
-    mEngine->leaveProfilingOnAfterClosing();
-    application->quit();
-}
-// ---------------------------------------------------------------------------
-
-void PIMainView::openPluginSpecificSettings()
-{
-    HbListWidgetItem *listItem = mListPlugins->currentItem();
-    bool ok = false;
-    int uid = listItem->data().toInt(&ok);
-    if (ok) {
-        mMainWindow->activateSettingsView(uid);
-    }
-}
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------