diff -r 48060abbbeaf -r b3cee849fa46 memspyui/ui/hb/src/memspythreadview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/memspyui/ui/hb/src/memspythreadview.cpp Tue Aug 31 15:15:20 2010 +0300 @@ -0,0 +1,204 @@ +/* + * 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: + * + */ + +#include +#include +#include + +#include "memspythreadview.h" +#include "viewmanager.h" + +MemSpyThreadModel::MemSpyThreadModel(EngineWrapper &engine, ProcessId processId, QObject *parent) : + QAbstractListModel(parent), + mProcessId(processId), + mEngine(engine), + mThreads(engine.getThreads(processId)) +{ + mPriorityMap.insert(ThreadPriorityNull, tr("[Null]")); + mPriorityMap.insert(ThreadPriorityMuchLess, tr("[Much Less]")); + mPriorityMap.insert(ThreadPriorityLess, tr("[Less]")); + mPriorityMap.insert(ThreadPriorityNormal, tr("[Normal]")); + mPriorityMap.insert(ThreadPriorityMore, tr("[More]")); + mPriorityMap.insert(ThreadPriorityMuchMore, tr("[Much More]")); + mPriorityMap.insert(ThreadPriorityRealTime, tr("[Real Time]")); + mPriorityMap.insert(ThreadPriorityAbsoluteVeryLow, tr("[Abs. Very Low]")); + mPriorityMap.insert(ThreadPriorityAbsoluteLowNormal, tr("[Abs. Low Normal]")); + mPriorityMap.insert(ThreadPriorityAbsoluteLow, tr("[Abs. Low]")); + mPriorityMap.insert(ThreadPriorityAbsoluteBackgroundNormal, tr("[Abs. Background Normal]")); + mPriorityMap.insert(ThreadPriorityAbsoluteBackground, tr("[Abs. Background]")); + mPriorityMap.insert(ThreadPriorityAbsoluteForegroundNormal, tr("[Abs. Foreground Normal]")); + mPriorityMap.insert(ThreadPriorityAbsoluteForeground, tr("[Abs. Foreground]")); + mPriorityMap.insert(ThreadPriorityAbsoluteHighNormal, tr("[Abs. Hight Normal]")); + mPriorityMap.insert(ThreadPriorityAbsoluteHigh, tr("[Abs. High]")); + mPriorityMap.insert(ThreadPriorityAbsoluteRealTime1, tr("[Abs. RT 1]")); + mPriorityMap.insert(ThreadPriorityAbsoluteRealTime2, tr("[Abs. RT 2]")); + mPriorityMap.insert(ThreadPriorityAbsoluteRealTime3, tr("[Abs. RT 3]")); + mPriorityMap.insert(ThreadPriorityAbsoluteRealTime4, tr("[Abs. RT 4]")); + mPriorityMap.insert(ThreadPriorityAbsoluteRealTime5, tr("[Abs. RT 5]")); + mPriorityMap.insert(ThreadPriorityAbsoluteRealTime6, tr("[Abs. RT 6]")); + mPriorityMap.insert(ThreadPriorityAbsoluteRealTime7, tr("[Abs. RT 7]")); + mPriorityMap.insert(ThreadPriorityAbsoluteRealTime8, tr("[Abs. RT 8]")); +} + +MemSpyThreadModel::~MemSpyThreadModel() +{ + qDeleteAll(mThreads); +} + +int MemSpyThreadModel::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return mThreads.count(); +} + +QVariant MemSpyThreadModel::data(const QModelIndex &index, int role) const +{ + if (role == Qt::DisplayRole) { + QStringList lines; + lines << mThreads.at(index.row())->name(); + lines << mPriorityMap.value(mThreads.at(index.row())->priority(), tr("[Unknown]")); + return lines; + } + + if (role == Qt::UserRole) + return mThreads.at(index.row())->id(); + + return QVariant(); +} + +void MemSpyThreadModel::refresh() +{ + beginResetModel(); + QList data = mEngine.getThreads(mProcessId); + qDeleteAll(mThreads); + mThreads = data; + endResetModel(); +} + +MemSpyThreadView::MemSpyThreadView(EngineWrapper &engine, ViewManager &viewManager) : + MemSpyListView(engine, viewManager), + mContextMenu(0), + mPriorityMenu(0), + mThreadId(0), + mModel(0) +{ +} + +MemSpyThreadView::~MemSpyThreadView() +{ + delete mContextMenu; + delete mPriorityMenu; +} + +void MemSpyThreadView::initialize(const QVariantMap& params) +{ + ProcessId pid = qVariantValue(params["pid"]); + setTitle(tr("Threads")); + + mProcessName = params["pname"].toString(); + + MemSpyView::initialize(params); + + mModel = new MemSpyThreadModel(mEngine, pid, this); + mListView.setModel(mModel); + + connect(&mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemClicked(QModelIndex))); + connect(&mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), + this, SLOT(catchLongPress(HbAbstractViewItem*,QPointF))); + + mContextMenu = new HbMenu; + mPriorityMenu = mContextMenu->addMenu("Change Priority"); + + mPriorityMenu->addAction(tr("Abs. Very Low"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Low Normal"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Low"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Background Normal"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Background"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Foreground Normal"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Foreground"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. High Normal"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. High"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Real Time 1"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Real Time 2"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Real Time 3"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Real Time 4"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Real Time 5"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Real Time 6"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Real Time 7"), this, SLOT(changePriority())); + mPriorityMenu->addAction(tr("Abs. Real Time 8"), this, SLOT(changePriority())); +} + + +bool MemSpyThreadView::isBreadCrumbVisible() const +{ + return true; +} + +QString MemSpyThreadView::getBreadCrumbText() const +{ + return tr("Processes > %1").arg(mProcessName); +} + +void MemSpyThreadView::itemClicked(const QModelIndex& index) +{ + QVariantMap map; + map["tid"] = index.data(Qt::UserRole); + map.insert("pname", mProcessName); + map.insert("tname", index.data(Qt::DisplayRole).toStringList().at(0)); + + mViewManager.showView(ThreadDetailIndexView, map); +} + +void MemSpyThreadView::catchLongPress(HbAbstractViewItem *item, const QPointF &coords) +{ + mThreadId = qVariantValue(item->modelIndex().data(Qt::UserRole)); + mContextMenu->setPreferredPos(coords); + mContextMenu->open(); +} + +void MemSpyThreadView::changePriority() +{ + QAction *s = qobject_cast(sender()); + int index = mPriorityMenu->actions().indexOf(s); + + ThreadPriority priorities[] = { + ThreadPriorityAbsoluteVeryLow, + ThreadPriorityAbsoluteLowNormal, + ThreadPriorityAbsoluteLow, + ThreadPriorityAbsoluteBackgroundNormal, + ThreadPriorityAbsoluteBackground, + ThreadPriorityAbsoluteForegroundNormal, + ThreadPriorityAbsoluteForeground, + ThreadPriorityAbsoluteHighNormal, + ThreadPriorityAbsoluteHigh, + ThreadPriorityAbsoluteRealTime1, + ThreadPriorityAbsoluteRealTime2, + ThreadPriorityAbsoluteRealTime3, + ThreadPriorityAbsoluteRealTime4, + ThreadPriorityAbsoluteRealTime5, + ThreadPriorityAbsoluteRealTime6, + ThreadPriorityAbsoluteRealTime7, + ThreadPriorityAbsoluteRealTime8 }; + + mEngine.setThreadPriority(mThreadId, priorities[index]); + refresh(); +} + +void MemSpyThreadView::refresh() +{ + mModel->refresh(); +}