memspyui/ui/hb/src/memspythreadview.cpp
changeset 17 4f2773374eff
child 19 4b22a598b890
equal deleted inserted replaced
15:e11368ed4880 17:4f2773374eff
       
     1 /*
       
     2  * Copyright (c) 2009 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:
       
    15  *  
       
    16  */
       
    17 
       
    18 #include <HbAbstractViewItem>
       
    19 #include <HbMenu>
       
    20 #include <QAction>
       
    21 
       
    22 #include "memspythreadview.h"
       
    23 #include "viewmanager.h"
       
    24 
       
    25 MemSpyThreadModel::MemSpyThreadModel(EngineWrapper &engine, ProcessId threadId, QObject *parent) :
       
    26 	QAbstractListModel(parent),
       
    27 	mThreads(engine.getThreads(threadId))
       
    28 {
       
    29 	mPriorityMap.insert(ThreadPriorityNull, tr("[Null]"));
       
    30 	mPriorityMap.insert(ThreadPriorityMuchLess, tr("[Much Less]"));
       
    31 	mPriorityMap.insert(ThreadPriorityLess, tr("[Less]"));
       
    32 	mPriorityMap.insert(ThreadPriorityNormal, tr("[Normal]"));
       
    33 	mPriorityMap.insert(ThreadPriorityMore, tr("[More]"));
       
    34 	mPriorityMap.insert(ThreadPriorityMuchMore, tr("[Much More]"));
       
    35 	mPriorityMap.insert(ThreadPriorityRealTime, tr("[Real Time]"));
       
    36 	mPriorityMap.insert(ThreadPriorityAbsoluteVeryLow, tr("[Abs. Very Low]"));
       
    37 	mPriorityMap.insert(ThreadPriorityAbsoluteLowNormal, tr("[Abs. Low Normal]"));
       
    38 	mPriorityMap.insert(ThreadPriorityAbsoluteLow, tr("[Abs. Low]"));
       
    39 	mPriorityMap.insert(ThreadPriorityAbsoluteBackgroundNormal, tr("[Abs. Background Normal]"));
       
    40 	mPriorityMap.insert(ThreadPriorityAbsoluteBackground, tr("[Abs. Background]"));
       
    41 	mPriorityMap.insert(ThreadPriorityAbsoluteForegroundNormal, tr("[Abs. Foreground Normal]"));
       
    42 	mPriorityMap.insert(ThreadPriorityAbsoluteForeground, tr("[Abs. Foreground]"));
       
    43 	mPriorityMap.insert(ThreadPriorityAbsoluteHighNormal, tr("[Abs. Hight Normal]"));
       
    44 	mPriorityMap.insert(ThreadPriorityAbsoluteHigh, tr("[Abs. High]"));
       
    45 	mPriorityMap.insert(ThreadPriorityAbsoluteRealTime1, tr("[Abs. RT 1]"));
       
    46 	mPriorityMap.insert(ThreadPriorityAbsoluteRealTime2, tr("[Abs. RT 2]"));
       
    47 	mPriorityMap.insert(ThreadPriorityAbsoluteRealTime3, tr("[Abs. RT 3]"));
       
    48 	mPriorityMap.insert(ThreadPriorityAbsoluteRealTime4, tr("[Abs. RT 4]"));
       
    49 	mPriorityMap.insert(ThreadPriorityAbsoluteRealTime5, tr("[Abs. RT 5]"));
       
    50 	mPriorityMap.insert(ThreadPriorityAbsoluteRealTime6, tr("[Abs. RT 6]"));
       
    51 	mPriorityMap.insert(ThreadPriorityAbsoluteRealTime7, tr("[Abs. RT 7]"));
       
    52 	mPriorityMap.insert(ThreadPriorityAbsoluteRealTime8, tr("[Abs. RT 8]"));
       
    53 }
       
    54 
       
    55 MemSpyThreadModel::~MemSpyThreadModel()
       
    56 {
       
    57 	qDeleteAll(mThreads);
       
    58 }
       
    59 	
       
    60 int MemSpyThreadModel::rowCount(const QModelIndex &parent) const
       
    61 {
       
    62 	Q_UNUSED(parent);
       
    63 	return mThreads.count();
       
    64 }
       
    65 	
       
    66 QVariant MemSpyThreadModel::data(const QModelIndex &index, int role) const
       
    67 {
       
    68 	if (role == Qt::DisplayRole) {
       
    69 		QStringList lines;
       
    70 		lines << mThreads.at(index.row())->name();
       
    71 		lines << mPriorityMap.value(mThreads.at(index.row())->priority(), tr("[Unknown]"));
       
    72 		return lines;
       
    73 	}
       
    74 	
       
    75 	if (role == Qt::UserRole)
       
    76 		return mThreads.at(index.row())->id();
       
    77 	
       
    78 	return QVariant();
       
    79 }
       
    80 
       
    81 MemSpyThreadView::MemSpyThreadView(EngineWrapper &engine, ViewManager &viewManager) : 
       
    82 	MemSpyView(engine, viewManager), 
       
    83 	mContextMenu(0), 
       
    84 	mPriorityMenu(0),
       
    85 	mThreadId(0)
       
    86 {
       
    87 }
       
    88 
       
    89 MemSpyThreadView::~MemSpyThreadView()
       
    90 {
       
    91 	delete mContextMenu;
       
    92 	delete mPriorityMenu;
       
    93 }
       
    94 
       
    95 void MemSpyThreadView::initialize(const QVariantMap& params)
       
    96 {
       
    97 	MemSpyView::initialize(params);
       
    98 	
       
    99 	ProcessId pid = qVariantValue<ProcessId>(params["pid"]);
       
   100 	setTitle(tr("Threads").arg(pid));
       
   101 	
       
   102 	mListView.setModel(new MemSpyThreadModel(mEngine, pid, this));
       
   103 	mListView.setLongPressEnabled(true);
       
   104 	
       
   105 	connect(&mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
       
   106 	connect(&mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)),
       
   107 	        this, SLOT(catchLongPress(HbAbstractViewItem*,QPointF)));
       
   108 	
       
   109 	mContextMenu = new HbMenu;
       
   110 	mPriorityMenu = mContextMenu->addMenu("Change Priority");
       
   111 	
       
   112 	mPriorityMenu->addAction(tr("Abs. Very Low"), this, SLOT(changePriority()));
       
   113 	mPriorityMenu->addAction(tr("Abs. Low Normal"), this, SLOT(changePriority()));
       
   114 	mPriorityMenu->addAction(tr("Abs. Low"), this, SLOT(changePriority()));
       
   115 	mPriorityMenu->addAction(tr("Abs. Background Normal"), this, SLOT(changePriority()));
       
   116 	mPriorityMenu->addAction(tr("Abs. Background"), this, SLOT(changePriority()));
       
   117 	mPriorityMenu->addAction(tr("Abs. Foreground Normal"), this, SLOT(changePriority()));
       
   118 	mPriorityMenu->addAction(tr("Abs. Foreground"), this, SLOT(changePriority()));
       
   119 	mPriorityMenu->addAction(tr("Abs. High Normal"), this, SLOT(changePriority()));
       
   120 	mPriorityMenu->addAction(tr("Abs. High"), this, SLOT(changePriority()));
       
   121 	mPriorityMenu->addAction(tr("Abs. Real Time 1"), this, SLOT(changePriority()));
       
   122 	mPriorityMenu->addAction(tr("Abs. Real Time 2"), this, SLOT(changePriority()));
       
   123 	mPriorityMenu->addAction(tr("Abs. Real Time 3"), this, SLOT(changePriority()));
       
   124 	mPriorityMenu->addAction(tr("Abs. Real Time 4"), this, SLOT(changePriority()));
       
   125 	mPriorityMenu->addAction(tr("Abs. Real Time 5"), this, SLOT(changePriority()));
       
   126 	mPriorityMenu->addAction(tr("Abs. Real Time 6"), this, SLOT(changePriority()));
       
   127 	mPriorityMenu->addAction(tr("Abs. Real Time 7"), this, SLOT(changePriority()));
       
   128 	mPriorityMenu->addAction(tr("Abs. Real Time 8"), this, SLOT(changePriority()));
       
   129 }
       
   130 
       
   131 void MemSpyThreadView::itemClicked(const QModelIndex& index)
       
   132 {
       
   133 	QVariantMap map;
       
   134 	map["tid"] = index.data(Qt::UserRole);
       
   135 	mViewManager.showView(ThreadDetailView, map);
       
   136 }
       
   137 
       
   138 void MemSpyThreadView::catchLongPress(HbAbstractViewItem *item, const QPointF &coords)
       
   139 {
       
   140 	mThreadId = qVariantValue<ThreadId>(item->data(Qt::UserRole));
       
   141 	mContextMenu->setPreferredPos(coords);
       
   142 	mContextMenu->open();
       
   143 }
       
   144 
       
   145 void MemSpyThreadView::changePriority()
       
   146 {
       
   147 	QAction *s = qobject_cast<QAction*>(sender());
       
   148 	int index = mPriorityMenu->actions().indexOf(s);
       
   149 	
       
   150 	ThreadPriority priorities[] = {
       
   151 		ThreadPriorityAbsoluteVeryLow,
       
   152 		ThreadPriorityAbsoluteLowNormal,
       
   153 		ThreadPriorityAbsoluteLow,
       
   154 		ThreadPriorityAbsoluteBackgroundNormal,
       
   155 		ThreadPriorityAbsoluteBackground,
       
   156 		ThreadPriorityAbsoluteForegroundNormal,
       
   157 		ThreadPriorityAbsoluteForeground,
       
   158 		ThreadPriorityAbsoluteHighNormal,
       
   159 		ThreadPriorityAbsoluteHigh,
       
   160 		ThreadPriorityAbsoluteRealTime1,
       
   161 		ThreadPriorityAbsoluteRealTime2,
       
   162 		ThreadPriorityAbsoluteRealTime3,
       
   163 		ThreadPriorityAbsoluteRealTime4,
       
   164 		ThreadPriorityAbsoluteRealTime5,
       
   165 		ThreadPriorityAbsoluteRealTime6,
       
   166 		ThreadPriorityAbsoluteRealTime7, 
       
   167 		ThreadPriorityAbsoluteRealTime8 };
       
   168 	
       
   169 	mEngine.setThreadPriority(mThreadId, priorities[index]);
       
   170 }