Added a #line in the call stack browser window
[clinton/Virtual-Jaguar-Rx.git] / src / debugger / allwatchbrowser.cpp
CommitLineData
0203b5fd
JPM
1//\r
2// allwatchbrowser.cpp - All Watch\r
3//\r
4// by Jean-Paul Mari\r
5//\r
6// JPM = Jean-Paul Mari <djipi.mari@gmail.com>\r
7//\r
8// Who When What\r
9// --- ---------- -----------------------------------------------------------\r
10// JPM 12/07/2017 Created this file\r
4873fe0a 11// JPM 09/14/2018 Added a status bar, better status report and set information values in a tab\r
8d705db0 12// JPM April/2019 Added a sorting filter, tableview unique rows creation\r
0203b5fd
JPM
13//\r
14\r
15// STILL TO DO:\r
a4e46c05 16// Better presentation\r
2b91c435 17// To set the information display at the right\r
8d705db0 18// To understand/fix the problem with the sorting filter\r
fe3b257d
JPM
19// Display arrays information\r
20// Display structures information\r
0203b5fd
JPM
21//\r
22\r
8d705db0 23//#define AW_SORTINGFILTER // Authorise the sorting filtes\r
4873fe0a 24//#define AW_DEBUGNUMVARIABLE 4415 // Set the global variable number to debug\r
2b91c435
JPM
25#ifndef AW_DEBUGNUMVARIABLE\r
26#define AW_STARTNUMVARIABLE 0 // Must be kept to 0 in case of no debug is required\r
27#else\r
28#define AW_STARTNUMVARIABLE AW_DEBUGNUMVARIABLE - 1\r
29#endif\r
30\r
31\r
0203b5fd
JPM
32#include "debugger/allwatchbrowser.h"\r
33#include "memory.h"\r
34#include "debugger/DBGManager.h"\r
35\r
36\r
a4e46c05 37// \r
0203b5fd 38AllWatchBrowserWindow::AllWatchBrowserWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog),\r
2b91c435
JPM
39layout(new QVBoxLayout),\r
40#ifdef AW_LAYOUTTEXTS\r
41text(new QTextBrowser),\r
42#else\r
43TableView(new QTableView),\r
44model(new QStandardItemModel),\r
45#endif\r
46NbWatch(0),\r
47statusbar(new QStatusBar),\r
48PtrWatchInfo(NULL)\r
0203b5fd
JPM
49{\r
50 setWindowTitle(tr("All Watch"));\r
51\r
2b91c435 52 // Set the font\r
0203b5fd 53 QFont fixedFont("Lucida Console", 8, QFont::Normal);\r
0203b5fd 54 fixedFont.setStyleHint(QFont::TypeWriter);\r
0203b5fd 55\r
2b91c435
JPM
56#ifdef AW_LAYOUTTEXTS\r
57 // Set original layout\r
58 text->setFont(fixedFont);\r
0203b5fd 59 layout->addWidget(text);\r
2b91c435
JPM
60#else\r
61 // Set the new layout with proper identation and readibility\r
62 model->setColumnCount(3);\r
63 model->setHeaderData(0, Qt::Horizontal, QObject::tr("Name"));\r
64 model->setHeaderData(1, Qt::Horizontal, QObject::tr("Value"));\r
65 model->setHeaderData(2, Qt::Horizontal, QObject::tr("Type"));\r
66 // Information table\r
67 TableView->setModel(model);\r
68 TableView->setEditTriggers(QAbstractItemView::NoEditTriggers);\r
69 TableView->setShowGrid(0);\r
70 TableView->setFont(fixedFont);\r
71 TableView->verticalHeader()->setDefaultSectionSize(TableView->verticalHeader()->minimumSectionSize());\r
72 TableView->verticalHeader()->setDefaultAlignment(Qt::AlignRight);\r
73 layout->addWidget(TableView);\r
74#endif\r
75\r
76 // Status bar\r
77 layout->addWidget(statusbar);\r
78 setLayout(layout);\r
0203b5fd
JPM
79}\r
80\r
81\r
82//\r
83AllWatchBrowserWindow::~AllWatchBrowserWindow(void)\r
84{\r
a4e46c05
JPM
85 Reset();\r
86}\r
87\r
88\r
89//\r
90void AllWatchBrowserWindow::Reset(void)\r
91{\r
0203b5fd 92 free(PtrWatchInfo);\r
a4e46c05
JPM
93 NbWatch = 0;\r
94 PtrWatchInfo = NULL;\r
0203b5fd
JPM
95}\r
96\r
97\r
98//\r
99void AllWatchBrowserWindow::RefreshContents(void)\r
100{\r
2b91c435
JPM
101 char msg[100];\r
102#ifdef AW_LAYOUTTEXTS\r
0203b5fd 103 char string[1024];\r
2b91c435 104#endif\r
0203b5fd 105 QString WatchAll;\r
2b91c435
JPM
106 size_t Error = AW_NOERROR;\r
107 char *PtrValue;\r
0203b5fd
JPM
108\r
109 if (isVisible())\r
110 {\r
111 if (!NbWatch)\r
112 {\r
2b91c435 113 // Pre-catch the information for each global variables\r
0203b5fd
JPM
114 if (NbWatch = DBGManager_GetNbGlobalVariables())\r
115 {\r
116 PtrWatchInfo = (WatchInfo *)calloc(NbWatch, sizeof(WatchInfo));\r
8d705db0
JPM
117#ifndef AW_LAYOUTTEXTS\r
118#ifdef AW_SORTINGFILTER\r
119 TableView->setSortingEnabled(false);\r
120#endif\r
121 model->setRowCount(0);\r
122#endif\r
2b91c435 123 for (uint32_t i = AW_STARTNUMVARIABLE; i < NbWatch; i++)\r
0203b5fd
JPM
124 {\r
125 PtrWatchInfo[i].PtrVariableName = DBGManager_GetGlobalVariableName(i + 1);\r
0203b5fd 126 PtrWatchInfo[i].TypeTag = DBGManager_GetGlobalVariableTypeTag(i + 1);\r
2b91c435
JPM
127#ifdef AW_LAYOUTTEXTS\r
128 PtrWatchInfo[i].addr = DBGManager_GetGlobalVariableAdr(i + 1);\r
0203b5fd
JPM
129 if (!strlen(PtrWatchInfo[i].PtrVariableBaseTypeName = DBGManager_GetGlobalVariableTypeName(i + 1)))\r
130 {\r
131 PtrWatchInfo[i].PtrVariableBaseTypeName = (char *)"<font color='#ff0000'>N/A</font>";\r
132 }\r
2b91c435
JPM
133#else\r
134 PtrWatchInfo[i].PtrVariableBaseTypeName = DBGManager_GetGlobalVariableTypeName(i + 1);\r
8d705db0 135 model->insertRow(i);\r
2b91c435 136#endif\r
0203b5fd
JPM
137 }\r
138 }\r
139 }\r
8d705db0 140\r
2b91c435 141 if (NbWatch)\r
0203b5fd 142 {\r
2b91c435 143 for (uint32_t i = AW_STARTNUMVARIABLE; i < NbWatch; i++)\r
0203b5fd 144 {\r
2b91c435
JPM
145 if ((PtrWatchInfo[i].TypeTag & (DBG_TAG_TYPE_array | DBG_TAG_TYPE_structure)))\r
146 {\r
147#if defined(AW_SUPPORTARRAY) || defined(AW_SUPPORTSTRUCTURE)\r
148 //PtrValue = (char *)memcpy(Value, &jaguarMainRAM[PtrWatchInfo[i].addr], 20);\r
149 PtrValue = NULL;\r
150#else\r
151 PtrValue = NULL;\r
152#endif\r
153 }\r
154 else\r
155 {\r
156 PtrValue = DBGManager_GetGlobalVariableValue(i + 1);\r
157 }\r
158#ifdef AW_LAYOUTTEXTS\r
159 if (i)\r
160 {\r
161 WatchAll += QString("<br>");\r
162 }\r
163 sprintf(string, "%i : %s | %s | 0x%06X | %s", (i + 1), PtrWatchInfo[i].PtrVariableBaseTypeName, PtrWatchInfo[i].PtrVariableName, (unsigned int)PtrWatchInfo[i].addr, PtrValue ? PtrValue : (char *)"<font color='#ff0000'>N/A</font>");\r
0203b5fd 164 WatchAll += QString(string);\r
2b91c435 165#else\r
2b91c435
JPM
166 model->setItem(i, 0, new QStandardItem(QString("%1").arg(PtrWatchInfo[i].PtrVariableName)));\r
167 model->setItem(i, 1, new QStandardItem(QString("%1").arg(PtrValue)));\r
168 model->setItem(i, 2, new QStandardItem(QString("%1").arg(PtrWatchInfo[i].PtrVariableBaseTypeName)));\r
169#endif\r
0203b5fd 170 }\r
2b91c435
JPM
171#ifdef AW_LAYOUTTEXTS\r
172 text->clear();\r
173 text->setText(WatchAll);\r
4873fe0a 174#else\r
8d705db0 175#ifdef AW_SORTINGFILTER\r
4873fe0a 176 TableView->setSortingEnabled(true);\r
8d705db0 177#endif\r
2b91c435
JPM
178#endif\r
179 sprintf(msg, "Ready");\r
180 }\r
181 else\r
182 {\r
183 sprintf(msg, "No watches");\r
184 Error = AW_NOALLWATCH;\r
0203b5fd
JPM
185 }\r
186\r
2b91c435
JPM
187 // Display status bar\r
188 if (Error)\r
189 {\r
190 if ((Error & AW_WARNING))\r
191 {\r
192 statusbar->setStyleSheet("background-color: lightyellow; font: bold");\r
193 }\r
194 else\r
195 {\r
196 statusbar->setStyleSheet("background-color: tomato; font: bold");\r
197 }\r
198 }\r
199 else\r
200 {\r
201 statusbar->setStyleSheet("background-color: lightgreen; font: bold");\r
202 }\r
203 statusbar->showMessage(QString(msg));\r
0203b5fd
JPM
204 }\r
205}\r
206\r
207\r
a4e46c05 208// \r
0203b5fd
JPM
209void AllWatchBrowserWindow::keyPressEvent(QKeyEvent * e)\r
210{\r
211 if (e->key() == Qt::Key_Escape)\r
0203b5fd 212 {\r
a4e46c05 213 hide();\r
0203b5fd
JPM
214 }\r
215}\r
0203b5fd 216\r