20 #include <QAction> |
20 #include <QAction> |
21 |
21 |
22 #include "memspythreadview.h" |
22 #include "memspythreadview.h" |
23 #include "viewmanager.h" |
23 #include "viewmanager.h" |
24 |
24 |
25 MemSpyThreadModel::MemSpyThreadModel(EngineWrapper &engine, ProcessId threadId, QObject *parent) : |
25 MemSpyThreadModel::MemSpyThreadModel(EngineWrapper &engine, ProcessId processId, QObject *parent) : |
26 QAbstractListModel(parent), |
26 QAbstractListModel(parent), |
27 mThreads(engine.getThreads(threadId)) |
27 mProcessId(processId), |
|
28 mEngine(engine), |
|
29 mThreads(engine.getThreads(processId)) |
28 { |
30 { |
29 mPriorityMap.insert(ThreadPriorityNull, tr("[Null]")); |
31 mPriorityMap.insert(ThreadPriorityNull, tr("[Null]")); |
30 mPriorityMap.insert(ThreadPriorityMuchLess, tr("[Much Less]")); |
32 mPriorityMap.insert(ThreadPriorityMuchLess, tr("[Much Less]")); |
31 mPriorityMap.insert(ThreadPriorityLess, tr("[Less]")); |
33 mPriorityMap.insert(ThreadPriorityLess, tr("[Less]")); |
32 mPriorityMap.insert(ThreadPriorityNormal, tr("[Normal]")); |
34 mPriorityMap.insert(ThreadPriorityNormal, tr("[Normal]")); |
76 return mThreads.at(index.row())->id(); |
78 return mThreads.at(index.row())->id(); |
77 |
79 |
78 return QVariant(); |
80 return QVariant(); |
79 } |
81 } |
80 |
82 |
|
83 void MemSpyThreadModel::refresh() |
|
84 { |
|
85 beginResetModel(); |
|
86 QList<MemSpyThread*> data = mEngine.getThreads(mProcessId); |
|
87 qDeleteAll(mThreads); |
|
88 mThreads = data; |
|
89 endResetModel(); |
|
90 } |
|
91 |
81 MemSpyThreadView::MemSpyThreadView(EngineWrapper &engine, ViewManager &viewManager) : |
92 MemSpyThreadView::MemSpyThreadView(EngineWrapper &engine, ViewManager &viewManager) : |
82 MemSpyView(engine, viewManager), |
93 MemSpyListView(engine, viewManager), |
83 mContextMenu(0), |
94 mContextMenu(0), |
84 mPriorityMenu(0), |
95 mPriorityMenu(0), |
85 mThreadId(0) |
96 mThreadId(0), |
|
97 mModel(0) |
86 { |
98 { |
87 } |
99 } |
88 |
100 |
89 MemSpyThreadView::~MemSpyThreadView() |
101 MemSpyThreadView::~MemSpyThreadView() |
90 { |
102 { |
92 delete mPriorityMenu; |
104 delete mPriorityMenu; |
93 } |
105 } |
94 |
106 |
95 void MemSpyThreadView::initialize(const QVariantMap& params) |
107 void MemSpyThreadView::initialize(const QVariantMap& params) |
96 { |
108 { |
|
109 ProcessId pid = qVariantValue<ProcessId>(params["pid"]); |
|
110 setTitle(tr("Threads")); |
|
111 |
|
112 mProcessName = params["pname"].toString(); |
|
113 |
97 MemSpyView::initialize(params); |
114 MemSpyView::initialize(params); |
98 |
115 |
99 ProcessId pid = qVariantValue<ProcessId>(params["pid"]); |
116 mModel = new MemSpyThreadModel(mEngine, pid, this); |
100 setTitle(tr("Threads").arg(pid)); |
117 mListView.setModel(mModel); |
101 |
|
102 mListView.setModel(new MemSpyThreadModel(mEngine, pid, this)); |
|
103 mListView.setLongPressEnabled(true); |
|
104 |
118 |
105 connect(&mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemClicked(QModelIndex))); |
119 connect(&mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemClicked(QModelIndex))); |
106 connect(&mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), |
120 connect(&mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), |
107 this, SLOT(catchLongPress(HbAbstractViewItem*,QPointF))); |
121 this, SLOT(catchLongPress(HbAbstractViewItem*,QPointF))); |
108 |
122 |
126 mPriorityMenu->addAction(tr("Abs. Real Time 6"), this, SLOT(changePriority())); |
140 mPriorityMenu->addAction(tr("Abs. Real Time 6"), this, SLOT(changePriority())); |
127 mPriorityMenu->addAction(tr("Abs. Real Time 7"), this, SLOT(changePriority())); |
141 mPriorityMenu->addAction(tr("Abs. Real Time 7"), this, SLOT(changePriority())); |
128 mPriorityMenu->addAction(tr("Abs. Real Time 8"), this, SLOT(changePriority())); |
142 mPriorityMenu->addAction(tr("Abs. Real Time 8"), this, SLOT(changePriority())); |
129 } |
143 } |
130 |
144 |
|
145 |
|
146 bool MemSpyThreadView::isBreadCrumbVisible() const |
|
147 { |
|
148 return true; |
|
149 } |
|
150 |
|
151 QString MemSpyThreadView::getBreadCrumbText() const |
|
152 { |
|
153 return tr("Processes > %1").arg(mProcessName); |
|
154 } |
|
155 |
131 void MemSpyThreadView::itemClicked(const QModelIndex& index) |
156 void MemSpyThreadView::itemClicked(const QModelIndex& index) |
132 { |
157 { |
133 QVariantMap map; |
158 QVariantMap map; |
134 map["tid"] = index.data(Qt::UserRole); |
159 map["tid"] = index.data(Qt::UserRole); |
|
160 map.insert("pname", mProcessName); |
|
161 map.insert("tname", index.data(Qt::DisplayRole).toStringList().at(0)); |
|
162 |
135 mViewManager.showView(ThreadDetailIndexView, map); |
163 mViewManager.showView(ThreadDetailIndexView, map); |
136 } |
164 } |
137 |
165 |
138 void MemSpyThreadView::catchLongPress(HbAbstractViewItem *item, const QPointF &coords) |
166 void MemSpyThreadView::catchLongPress(HbAbstractViewItem *item, const QPointF &coords) |
139 { |
167 { |
140 mThreadId = qVariantValue<ThreadId>(item->data(Qt::UserRole)); |
168 mThreadId = qVariantValue<ThreadId>(item->modelIndex().data(Qt::UserRole)); |
141 mContextMenu->setPreferredPos(coords); |
169 mContextMenu->setPreferredPos(coords); |
142 mContextMenu->open(); |
170 mContextMenu->open(); |
143 } |
171 } |
144 |
172 |
145 void MemSpyThreadView::changePriority() |
173 void MemSpyThreadView::changePriority() |
165 ThreadPriorityAbsoluteRealTime6, |
193 ThreadPriorityAbsoluteRealTime6, |
166 ThreadPriorityAbsoluteRealTime7, |
194 ThreadPriorityAbsoluteRealTime7, |
167 ThreadPriorityAbsoluteRealTime8 }; |
195 ThreadPriorityAbsoluteRealTime8 }; |
168 |
196 |
169 mEngine.setThreadPriority(mThreadId, priorities[index]); |
197 mEngine.setThreadPriority(mThreadId, priorities[index]); |
170 } |
198 refresh(); |
|
199 } |
|
200 |
|
201 void MemSpyThreadView::refresh() |
|
202 { |
|
203 mModel->refresh(); |
|
204 } |