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