--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/loadgen/ui/hb/src/mainview.cpp Tue Aug 31 15:15:20 2010 +0300
@@ -0,0 +1,399 @@
+/*
+* 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 "mainview.h"
+#include "enginewrapper.h"
+#include "notifications.h"
+#include "loadgen.hrh"
+#include <hblabel.h>
+#include <hbmenu.h>
+#include <hbaction.h>
+#include <hbmessagebox.h>
+#include <hbmainwindow.h>
+#include <hbapplication.h>
+//#include <hbcommonnote.h>
+//#include <hbconfirmationquery.h>
+#include <hbprogressdialog.h>
+#include <hbtextedit.h>
+#include <hblistview.h>
+#include <hbselectiondialog.h>
+
+#include <QGraphicsLinearLayout>
+#include <QStandardItemModel>
+#include <QStandardItem>
+#include <QSignalMapper>
+
+// ---------------------------------------------------------------------------
+
+MainView::MainView(HbMainWindow &mainWindow) :
+ mMainWindow(mainWindow),
+ mEngineWrapper(0),
+ mIsLoadListEmpty(true),
+ mStopAll(NULL),
+ mSuspendAll(NULL),
+ mResumeAll(NULL)
+
+{
+}
+
+// ---------------------------------------------------------------------------
+
+MainView::~MainView()
+{
+ if (mEngineWrapper != 0) {
+ delete mEngineWrapper;
+ }
+ delete mListModel;
+ delete mListView;
+ delete mSm;
+}
+
+// ---------------------------------------------------------------------------
+
+void MainView::init(HbApplication &app)
+{
+ this->setTitle("Load Gener.");
+ mEngineWrapper = new EngineWrapper(mMainWindow, *this);
+ int error = mEngineWrapper->init();
+ Q_ASSERT_X(error == 1, "LoadGen", "Engine initialization failed");
+ createMenu(app);
+ loadListIinit();
+}
+
+// ---------------------------------------------------------------------------
+
+void MainView::createMenu(HbApplication &app)
+{
+ HbMenu *menu = this->menu();
+
+ // signal mapper for identifying the different command actions
+ // in executeCommand() handler function:
+ mSm = new QSignalMapper(this);
+ connect(mSm, SIGNAL(mapped(int)), this, SLOT(executeMenuCommand(int)));
+
+ if (menu != NULL) {
+ // Temp work-around for menu item bug in Orbit Wk38,
+ // sub menu cannot contain more than 6 functional action items!
+ // two sub menus created to fix this problem.
+ mLoadSubMenu1 = menu->addMenu("New loads");
+ mLoadSubMenu2 = menu->addMenu("More new loads");
+ mCpuLoadAction = mLoadSubMenu1->addAction("CPU load");
+ connect(mCpuLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
+ mSm->setMapping(mCpuLoadAction, ELoadGenCmdNewLoadCPULoad);
+
+ mMemoryEatLoadAction = mLoadSubMenu1->addAction("Eat memory");
+ connect(mMemoryEatLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
+ mSm->setMapping(mMemoryEatLoadAction, ELoadGenCmdNewLoadEatMemory);
+
+ mPhoneCallLoadAction = mLoadSubMenu1->addAction("Phone calls");
+ connect(mPhoneCallLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
+ mSm->setMapping(mPhoneCallLoadAction, ELoadGenCmdNewLoadPhoneCall);
+
+ mMessagesLoadAction = mLoadSubMenu1->addAction("Messages");
+ connect(mMessagesLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
+ mSm->setMapping(mMessagesLoadAction, ELoadGenCmdNewLoadMessages);
+//TODO to be fixed using replacement for downloadmanager
+/*
+ mNetConnLoadAction = mLoadSubMenu1->addAction("Network conn.");
+ connect(mNetConnLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
+ mSm->setMapping(mNetConnLoadAction, ELoadGenCmdNewLoadNetConn);
+*/
+ mKeyPressLoadAction = mLoadSubMenu2->addAction("Key presses");
+ connect(mKeyPressLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
+ mSm->setMapping(mKeyPressLoadAction, ELoadGenCmdNewLoadKeyPress);
+
+ mAppsLoadAction = mLoadSubMenu2->addAction("Applications");
+ connect(mAppsLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
+ mSm->setMapping(mAppsLoadAction, ELoadGenCmdNewLoadApplications);
+
+ mPhotoCapturesLoadAction = mLoadSubMenu2->addAction("Photo captures");
+ connect(mPhotoCapturesLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
+ mSm->setMapping(mPhotoCapturesLoadAction, ELoadGenCmdNewLoadPhotoCaptures);
+
+ mBtActionsLoadAction = mLoadSubMenu2->addAction("Bluetooth actions");
+ connect(mBtActionsLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
+ mSm->setMapping(mBtActionsLoadAction, ELoadGenCmdNewLoadBluetooth);
+
+ mPointerEventsLoadAction = mLoadSubMenu2->addAction("Pointer events");
+ connect(mPointerEventsLoadAction, SIGNAL( triggered() ), mSm, SLOT(map()));
+ mSm->setMapping(mPointerEventsLoadAction, ELoadGenCmdNewLoadPointerEvent);
+
+ mActionPerfMon = menu->addAction("Launch PerfMon");
+ connect(mActionPerfMon, SIGNAL(triggered()), this, SLOT( launchPerfMon()));
+
+ mActionAbout = menu->addAction("About");
+ connect(mActionAbout, SIGNAL(triggered()), this, SLOT( showAboutPopup()));
+
+ mActionExit = menu->addAction("Exit");
+ connect(mActionExit, SIGNAL(triggered()), &app, SLOT(quit()));
+
+ // menu dynamic update
+ connect(menu, SIGNAL(aboutToShow()), this, SLOT(updateMenu()));
+ }
+}
+
+// ---------------------------------------------------------------------------
+
+void MainView::loadListIinit()
+{
+ // Create list view and model for it
+ mListView = new HbListView(this);
+ mListModel = new QStandardItemModel(this);
+ mListView->setModel(mListModel);
+ mListView->setSelectionMode(HbListView::NoSelection);
+ mListView->setVisible( false ); //HighlightMode(HbItemHighlight::Hidden);
+
+ QStandardItem *item = new QStandardItem(QString("No loads activated. (Select new load from menu to generate new load)"));
+ mListModel->setItem(0, item);
+
+ connect(mListView,
+ SIGNAL(longPressed(HbAbstractViewItem*, QPointF)),
+ this,
+ SLOT(handleLoadListEvent(HbAbstractViewItem*, QPointF)));
+
+
+ // Create layout and add list view there:
+ QGraphicsLinearLayout *mainlayout = new QGraphicsLinearLayout(Qt::Vertical, this);
+ mainlayout->addItem(mListView);
+ mainlayout->setAlignment(mListView, Qt::AlignCenter);
+ setLayout(mainlayout);
+}
+
+// ---------------------------------------------------------------------------
+
+void MainView::showAboutPopup()
+{
+ Notifications::about();
+}
+
+// ---------------------------------------------------------------------------
+
+void MainView::executeMenuCommand(int cmd)
+{
+ mEngineWrapper->startNewLoad(cmd);
+}
+
+// ---------------------------------------------------------------------------
+
+void MainView::handleLoadListEvent(HbAbstractViewItem */*listViewItem*/, const QPointF &/*coords*/)
+{
+ const QStringList items = (QStringList() << "Stop" << "Resume/Suspend" << "Edit");
+ HbSelectionDialog *dlg = new HbSelectionDialog();
+ dlg->setAttribute(Qt::WA_DeleteOnClose);
+ dlg->setStringItems(items);
+ dlg->setSelectionMode(HbAbstractItemView::SingleSelection);
+ dlg->open(this, SLOT(ItemActionPopupClosed(HbAction*)));
+}
+
+// ---------------------------------------------------------------------------
+
+void MainView::ItemActionPopupClosed(HbAction* action)
+{
+ HbSelectionDialog *dlg = static_cast<HbSelectionDialog*>(sender());
+ if(!action && dlg->selectedItems().count()){
+ int userSelectionIndex = dlg->selectedItems().at(0).toInt();
+ // all operations for selected list item only. Query selected load list item index from model.
+ if (userSelectionIndex == 0) {
+ // stop selected load from the load list:
+ stopLoad(false);
+ }
+ else if (userSelectionIndex == 1) {
+ // Suspend or Resume
+ mEngineWrapper->suspendOrResumeSelectedOrHighlightedItems();
+ }
+ else {
+ // current selected row number from the load list.
+ int selectedRow = mListView->selectionModel()->currentIndex().row();
+ // edit load setttings:
+ mEngineWrapper->loadEdit(selectedRow);
+ }
+ }
+}
+
+// --------------------------------------------------------------------------
+
+void MainView::stopAllLoads()
+{
+ stopLoad(true);
+}
+
+// ---------------------------------------------------------------------------
+
+bool MainView::stopLoad(bool stopAll)
+{
+ int success = false;
+ if (mListView != NULL) {
+ if (stopAll == true) {
+ success = mEngineWrapper->stopLoad(stopAll);
+ mIsLoadListEmpty = true;
+ }
+ else {
+ success = mEngineWrapper->stopLoad(stopAll);
+ }
+ }
+ return success;
+}
+
+// ---------------------------------------------------------------------------
+
+void MainView::updateMenu()
+{
+ if (mIsLoadListEmpty != true) {
+ if (mStopAll == NULL) {
+ mStopAll = new HbAction("Stop all", menu());
+ connect(mStopAll, SIGNAL(triggered()), this, SLOT(stopAllLoads()));
+ menu()->insertAction(mActionAbout, mStopAll);
+ }
+ else{
+ mStopAll->setVisible(true);
+ }
+ if (mSuspendAll == NULL) {
+ mSuspendAll = new HbAction("Suspend all", menu());
+ connect(mSuspendAll, SIGNAL(triggered()), this, SLOT(suspendAllLoads()));
+ menu()->insertAction(mActionAbout, mSuspendAll);
+ }
+ else{
+ mSuspendAll->setVisible(true);
+ }
+ if (mResumeAll == NULL) {
+ mResumeAll = new HbAction("Resume all", menu());
+ connect(mResumeAll, SIGNAL(triggered()), this, SLOT(resumeAllLoads()));
+ menu()->insertAction(mActionAbout, mResumeAll);
+ }
+ else{
+ mResumeAll->setVisible(true);
+ }
+ }
+ else if (mIsLoadListEmpty == true) {
+ if (mStopAll != NULL && mStopAll->text() == "Stop all") {
+ mStopAll->setVisible(false);
+ }
+ if (mSuspendAll != NULL && mSuspendAll->text() == "Suspend all") {
+ mSuspendAll->setVisible(false);
+ }
+ if (mResumeAll != NULL && mResumeAll->text() == "Resume all") {
+ mSuspendAll->setVisible(false);
+ }
+ }
+}
+
+
+// ---------------------------------------------------------------------------
+
+int MainView::currentItemIndex()
+{
+ return mListView->selectionModel()->currentIndex().row();
+}
+
+// ---------------------------------------------------------------------------
+
+void MainView::setCurrentItemIndex(int index)
+{
+ QModelIndex newIndex = mListView->model()->index(index, 0);
+ mListView->selectionModel()->setCurrentIndex(newIndex,
+ QItemSelectionModel::SelectCurrent);
+ //mListView->setCurrentIndex( index ); //setCurrentRow(index);
+}
+
+// ---------------------------------------------------------------------------
+
+void MainView::launchPerfMon()
+{
+ mEngineWrapper->launchPerfMonApp();
+}
+
+// ---------------------------------------------------------------------------
+
+QList<int> MainView::listSelectionIndexes()
+ {
+ QList<int> indices;
+ if (mListView != NULL) {
+ QItemSelectionModel *selectionModel = mListView->selectionModel();
+ if (selectionModel->hasSelection()) {
+ QModelIndexList modelIndexes = selectionModel->selectedIndexes();
+ QModelIndex index;
+ foreach (index, modelIndexes) {
+ indices.append(index.row());
+ }
+ }
+ }
+ return indices;
+ }
+
+// --------------------------------------------------------------------------------------------
+
+void MainView::suspendAllLoads()
+{
+ mEngineWrapper->suspendAllLoadItems();
+}
+
+// ---------------------------------------------------------------------------
+
+void MainView::resumeAllLoads()
+{
+ mEngineWrapper->resumeAllLoadItems();
+}
+
+void MainView::clearListSelection()
+{
+ if (mListView != NULL) {
+ mListView->clearSelection();
+ }
+}
+
+// ---------------------------------------------------------------------------
+
+void MainView::setLoadListData(QStringList& items)
+{
+ QString loadItem;
+ QString iconName;
+
+ if (mListView) {
+ mListView->setSelectionMode(HbListView::MultiSelection);
+ mListView->setVisible(true); //setHighlightMode(HbItemHighlight::AlwaysVisible);
+ if(mListModel->rowCount())
+ {
+ mListModel->removeRows(0,mListModel->rowCount());
+ }
+// mListModel->clear();
+ }
+ if (items.count() > 0) {
+ mIsLoadListEmpty = false;
+ }
+ else if (items.count() == 0) {
+ mIsLoadListEmpty = true;
+ }
+ for (int i = 0; i < items.count(); i++) {
+ QStandardItem *item = new QStandardItem();
+ loadItem = items.at(i);
+ if (loadItem.startsWith("1")) {
+ iconName = ":/paused.svg";
+ }
+ else {
+ iconName = ":/active.svg";
+ }
+ // remove icon indicator info from string
+ // to show in load in load list
+ loadItem.remove(0,2);
+ item->setText(loadItem);
+ item->setIcon(QIcon(iconName));
+ // set new load to correct row in load list
+ mListModel->insertRow(i, item);
+ }
+}
+
+// ---------------------------------------------------------------------------