GUI: fixed a bug with sorting in the ThreadView (the currently active thread would change if you sorted)
This commit is contained in:
		
							parent
							
								
									0a54341512
								
							
						
					
					
						commit
						3dde12e3a6
					
				|  | @ -1,6 +1,7 @@ | |||
| #include "ThreadView.h" | ||||
| #include "Configuration.h" | ||||
| #include "Bridge.h" | ||||
| #include "StringUtil.h" | ||||
| 
 | ||||
| void ThreadView::contextMenuSlot(const QPoint & pos) | ||||
| { | ||||
|  | @ -222,12 +223,12 @@ void ThreadView::updateThreadList() | |||
|         if(!threadList.list[i].BasicInfo.ThreadNumber) | ||||
|             setCellContent(i, 0, "Main"); | ||||
|         else | ||||
|             setCellContent(i, 0, QString("%1").arg(threadList.list[i].BasicInfo.ThreadNumber, 0, 10)); | ||||
|         setCellContent(i, 1, QString("%1").arg(threadList.list[i].BasicInfo.ThreadId, 0, 16).toUpper()); | ||||
|         setCellContent(i, 2, QString("%1").arg(threadList.list[i].BasicInfo.ThreadStartAddress, sizeof(dsint) * 2, 16, QChar('0')).toUpper()); | ||||
|         setCellContent(i, 3, QString("%1").arg(threadList.list[i].BasicInfo.ThreadLocalBase, sizeof(dsint) * 2, 16, QChar('0')).toUpper()); | ||||
|         setCellContent(i, 4, QString("%1").arg(threadList.list[i].ThreadCip, sizeof(dsint) * 2, 16, QChar('0')).toUpper()); | ||||
|         setCellContent(i, 5, QString().sprintf("%d", threadList.list[i].SuspendCount)); | ||||
|             setCellContent(i, 0, ToDecString(threadList.list[i].BasicInfo.ThreadNumber)); | ||||
|         setCellContent(i, 1, ToHexString(threadList.list[i].BasicInfo.ThreadId)); | ||||
|         setCellContent(i, 2, ToPtrString(threadList.list[i].BasicInfo.ThreadStartAddress)); | ||||
|         setCellContent(i, 3, ToPtrString(threadList.list[i].BasicInfo.ThreadLocalBase)); | ||||
|         setCellContent(i, 4, ToPtrString(threadList.list[i].ThreadCip)); | ||||
|         setCellContent(i, 5, ToDecString(threadList.list[i].SuspendCount)); | ||||
|         QString priorityString; | ||||
|         switch(threadList.list[i].Priority) | ||||
|         { | ||||
|  | @ -379,16 +380,22 @@ void ThreadView::updateThreadList() | |||
|         setCellContent(i, 8, QString("%1").arg(threadList.list[i].LastError, sizeof(unsigned int) * 2, 16, QChar('0')).toUpper()); | ||||
|         setCellContent(i, 9, threadList.list[i].BasicInfo.threadName); | ||||
|     } | ||||
|     mCurrentThreadId = "NONE"; | ||||
|     if(threadList.count) | ||||
|     { | ||||
|         BridgeFree(threadList.list); | ||||
|     mCurrentThread = threadList.CurrentThread; | ||||
|         int currentThread = threadList.CurrentThread; | ||||
|         if(currentThread >= 0 && currentThread < threadList.count) | ||||
|             mCurrentThreadId = ToHexString(threadList.list[currentThread].BasicInfo.ThreadId); | ||||
|     } | ||||
|     reloadData(); | ||||
| } | ||||
| 
 | ||||
| QString ThreadView::paintContent(QPainter* painter, dsint rowBase, int rowOffset, int col, int x, int y, int w, int h) | ||||
| { | ||||
|     QString ret = StdTable::paintContent(painter, rowBase, rowOffset, col, x, y, w, h); | ||||
|     if(rowBase + rowOffset == mCurrentThread && !col) | ||||
|     QString threadId = getCellContent(rowBase + rowOffset, 1); | ||||
|     if(threadId == mCurrentThreadId && !col) | ||||
|     { | ||||
|         painter->fillRect(QRect(x, y, w, h), QBrush(ConfigColor("ThreadCurrentBackgroundColor"))); | ||||
|         painter->setPen(QPen(ConfigColor("ThreadCurrentColor"))); //white text
 | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ signals: | |||
|     void showCpu(); | ||||
| 
 | ||||
| private: | ||||
|     int mCurrentThread; | ||||
|     QString mCurrentThreadId; | ||||
|     QAction* mSwitchThread; | ||||
|     QAction* mSuspendThread; | ||||
|     QAction* mGoToThreadEntry; | ||||
|  |  | |||
|  | @ -24,14 +24,27 @@ static QString ToPtrString(duint Address) | |||
|     return QString(temp); | ||||
| } | ||||
| 
 | ||||
| static QString ToHexString(duint Address) | ||||
| static QString ToHexString(duint Value) | ||||
| { | ||||
|     char temp[32]; | ||||
| 
 | ||||
| #ifdef _WIN64 | ||||
|     sprintf_s(temp, "%llX", Address); | ||||
|     sprintf_s(temp, "%llX", Value); | ||||
| #else | ||||
|     sprintf_s(temp, "%X", Address); | ||||
|     sprintf_s(temp, "%X", Value); | ||||
| #endif // _WIN64
 | ||||
| 
 | ||||
|     return QString(temp); | ||||
| } | ||||
| 
 | ||||
| static QString ToDecString(dsint Value) | ||||
| { | ||||
|     char temp[32]; | ||||
| 
 | ||||
| #ifdef _WIN64 | ||||
|     sprintf_s(temp, "%lld", Value); | ||||
| #else | ||||
|     sprintf_s(temp, "%d", Value); | ||||
| #endif // _WIN64
 | ||||
| 
 | ||||
|     return QString(temp); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue