2 // allwatchbrowser.cpp - All Watch
6 // JPM = Jean-Paul Mari <djipi.mari@gmail.com>
9 // --- ---------- -----------------------------------------------------------
10 // JPM 12/07/2017 Created this file
11 // JPM 09/14/2018 Added a status bar, better status report and set information values in a tab
12 // JPM 10/05/2018 Added a sorting filter
16 // Better presentation
17 // To set the information display at the right
18 // Display arrays information
19 // Display structures information
22 //#define AW_DEBUGNUMVARIABLE 4415 // Set the global variable number to debug
23 #ifndef AW_DEBUGNUMVARIABLE
24 #define AW_STARTNUMVARIABLE 0 // Must be kept to 0 in case of no debug is required
26 #define AW_STARTNUMVARIABLE AW_DEBUGNUMVARIABLE - 1
30 #include "debugger/allwatchbrowser.h"
32 #include "debugger/DBGManager.h"
36 AllWatchBrowserWindow::AllWatchBrowserWindow(QWidget
* parent
/*= 0*/) : QWidget(parent
, Qt::Dialog
),
37 layout(new QVBoxLayout
),
39 text(new QTextBrowser
),
41 TableView(new QTableView
),
42 model(new QStandardItemModel
),
45 statusbar(new QStatusBar
),
48 setWindowTitle(tr("All Watch"));
51 QFont
fixedFont("Lucida Console", 8, QFont::Normal
);
52 fixedFont
.setStyleHint(QFont::TypeWriter
);
55 // Set original layout
56 text
->setFont(fixedFont
);
57 layout
->addWidget(text
);
59 // Set the new layout with proper identation and readibility
60 model
->setColumnCount(3);
61 model
->setHeaderData(0, Qt::Horizontal
, QObject::tr("Name"));
62 model
->setHeaderData(1, Qt::Horizontal
, QObject::tr("Value"));
63 model
->setHeaderData(2, Qt::Horizontal
, QObject::tr("Type"));
65 TableView
->setModel(model
);
66 TableView
->setEditTriggers(QAbstractItemView::NoEditTriggers
);
67 TableView
->setShowGrid(0);
68 TableView
->setFont(fixedFont
);
69 TableView
->verticalHeader()->setDefaultSectionSize(TableView
->verticalHeader()->minimumSectionSize());
70 TableView
->verticalHeader()->setDefaultAlignment(Qt::AlignRight
);
71 layout
->addWidget(TableView
);
75 layout
->addWidget(statusbar
);
81 AllWatchBrowserWindow::~AllWatchBrowserWindow(void)
88 void AllWatchBrowserWindow::Reset(void)
97 void AllWatchBrowserWindow::RefreshContents(void)
100 #ifdef AW_LAYOUTTEXTS
104 size_t Error
= AW_NOERROR
;
111 // Pre-catch the information for each global variables
112 if (NbWatch
= DBGManager_GetNbGlobalVariables())
114 PtrWatchInfo
= (WatchInfo
*)calloc(NbWatch
, sizeof(WatchInfo
));
116 for (uint32_t i
= AW_STARTNUMVARIABLE
; i
< NbWatch
; i
++)
118 PtrWatchInfo
[i
].PtrVariableName
= DBGManager_GetGlobalVariableName(i
+ 1);
119 PtrWatchInfo
[i
].TypeTag
= DBGManager_GetGlobalVariableTypeTag(i
+ 1);
120 #ifdef AW_LAYOUTTEXTS
121 PtrWatchInfo
[i
].addr
= DBGManager_GetGlobalVariableAdr(i
+ 1);
122 if (!strlen(PtrWatchInfo
[i
].PtrVariableBaseTypeName
= DBGManager_GetGlobalVariableTypeName(i
+ 1)))
124 PtrWatchInfo
[i
].PtrVariableBaseTypeName
= (char *)"<font color='#ff0000'>N/A</font>";
127 PtrWatchInfo
[i
].PtrVariableBaseTypeName
= DBGManager_GetGlobalVariableTypeName(i
+ 1);
132 #ifndef AW_LAYOUTTEXTS
133 TableView
->setSortingEnabled(false);
134 model
->setRowCount(0);
138 for (uint32_t i
= AW_STARTNUMVARIABLE
; i
< NbWatch
; i
++)
140 if ((PtrWatchInfo
[i
].TypeTag
& (DBG_TAG_TYPE_array
| DBG_TAG_TYPE_structure
)))
142 #if defined(AW_SUPPORTARRAY) || defined(AW_SUPPORTSTRUCTURE)
143 //PtrValue = (char *)memcpy(Value, &jaguarMainRAM[PtrWatchInfo[i].addr], 20);
151 PtrValue
= DBGManager_GetGlobalVariableValue(i
+ 1);
153 #ifdef AW_LAYOUTTEXTS
156 WatchAll
+= QString("<br>");
158 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>");
159 WatchAll
+= QString(string
);
162 model
->setItem(i
, 0, new QStandardItem(QString("%1").arg(PtrWatchInfo
[i
].PtrVariableName
)));
163 model
->setItem(i
, 1, new QStandardItem(QString("%1").arg(PtrValue
)));
164 model
->setItem(i
, 2, new QStandardItem(QString("%1").arg(PtrWatchInfo
[i
].PtrVariableBaseTypeName
)));
167 #ifdef AW_LAYOUTTEXTS
169 text
->setText(WatchAll
);
171 TableView
->setSortingEnabled(true);
173 sprintf(msg
, "Ready");
177 sprintf(msg
, "No watches");
178 Error
= AW_NOALLWATCH
;
181 // Display status bar
184 if ((Error
& AW_WARNING
))
186 statusbar
->setStyleSheet("background-color: lightyellow; font: bold");
190 statusbar
->setStyleSheet("background-color: tomato; font: bold");
195 statusbar
->setStyleSheet("background-color: lightgreen; font: bold");
197 statusbar
->showMessage(QString(msg
));
203 void AllWatchBrowserWindow::keyPressEvent(QKeyEvent
* e
)
205 if (e
->key() == Qt::Key_Escape
)