loadgen/ui/hb/src/mainview.cpp
branchRCL_3
changeset 21 b3cee849fa46
--- /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);
+	}
+}	
+
+// ---------------------------------------------------------------------------