// Who When What\r
// --- ---------- -----------------------------------------------------------\r
// JPM 12/07/2017 Created this file\r
+// JPM 09/14/2018 Added a status bar and better status report\r
+// JPM 09/14/2018 Set information values in a tab\r
//\r
\r
// STILL TO DO:\r
// Better presentation\r
+// To set the information display at the right\r
//\r
\r
+//#define AW_DEBUGNUMVARIABLE 177 // Set the global variable number to debug\r
+#ifndef AW_DEBUGNUMVARIABLE\r
+#define AW_STARTNUMVARIABLE 0 // Must be kept to 0 in case of no debug is required\r
+#else\r
+#define AW_STARTNUMVARIABLE AW_DEBUGNUMVARIABLE - 1\r
+#endif\r
+\r
+\r
#include "debugger/allwatchbrowser.h"\r
#include "memory.h"\r
#include "debugger/DBGManager.h"\r
\r
// \r
AllWatchBrowserWindow::AllWatchBrowserWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog),\r
- layout(new QVBoxLayout), text(new QTextBrowser),\r
- NbWatch(0),\r
- PtrWatchInfo(NULL)\r
+layout(new QVBoxLayout),\r
+#ifdef AW_LAYOUTTEXTS\r
+text(new QTextBrowser),\r
+#else\r
+TableView(new QTableView),\r
+model(new QStandardItemModel),\r
+#endif\r
+NbWatch(0),\r
+statusbar(new QStatusBar),\r
+PtrWatchInfo(NULL)\r
{\r
setWindowTitle(tr("All Watch"));\r
\r
+ // Set the font\r
QFont fixedFont("Lucida Console", 8, QFont::Normal);\r
fixedFont.setStyleHint(QFont::TypeWriter);\r
- text->setFont(fixedFont);\r
- setLayout(layout);\r
\r
+#ifdef AW_LAYOUTTEXTS\r
+ // Set original layout\r
+ text->setFont(fixedFont);\r
layout->addWidget(text);\r
+#else\r
+ // Set the new layout with proper identation and readibility\r
+ model->setColumnCount(3);\r
+ model->setHeaderData(0, Qt::Horizontal, QObject::tr("Name"));\r
+ model->setHeaderData(1, Qt::Horizontal, QObject::tr("Value"));\r
+ model->setHeaderData(2, Qt::Horizontal, QObject::tr("Type"));\r
+ // Information table\r
+ TableView->setModel(model);\r
+ TableView->setEditTriggers(QAbstractItemView::NoEditTriggers);\r
+ TableView->setShowGrid(0);\r
+ TableView->setFont(fixedFont);\r
+ TableView->verticalHeader()->setDefaultSectionSize(TableView->verticalHeader()->minimumSectionSize());\r
+ TableView->verticalHeader()->setDefaultAlignment(Qt::AlignRight);\r
+ layout->addWidget(TableView);\r
+#endif\r
+\r
+ // Status bar\r
+ layout->addWidget(statusbar);\r
+ setLayout(layout);\r
}\r
\r
\r
//\r
void AllWatchBrowserWindow::RefreshContents(void)\r
{\r
+ char msg[100];\r
+#ifdef AW_LAYOUTTEXTS\r
char string[1024];\r
+#endif\r
QString WatchAll;\r
+ size_t Error = AW_NOERROR;\r
+ char *PtrValue;\r
\r
if (isVisible())\r
{\r
- text->clear();\r
-\r
if (!NbWatch)\r
{\r
+ // Pre-catch the information for each global variables\r
if (NbWatch = DBGManager_GetNbGlobalVariables())\r
{\r
PtrWatchInfo = (WatchInfo *)calloc(NbWatch, sizeof(WatchInfo));\r
\r
- for (uint32_t i = 0; i < NbWatch; i++)\r
+ for (uint32_t i = AW_STARTNUMVARIABLE; i < NbWatch; i++)\r
{\r
PtrWatchInfo[i].PtrVariableName = DBGManager_GetGlobalVariableName(i + 1);\r
- PtrWatchInfo[i].addr = DBGManager_GetGlobalVariableAdr(i + 1);\r
PtrWatchInfo[i].TypeTag = DBGManager_GetGlobalVariableTypeTag(i + 1);\r
+#ifdef AW_LAYOUTTEXTS\r
+ PtrWatchInfo[i].addr = DBGManager_GetGlobalVariableAdr(i + 1);\r
if (!strlen(PtrWatchInfo[i].PtrVariableBaseTypeName = DBGManager_GetGlobalVariableTypeName(i + 1)))\r
{\r
PtrWatchInfo[i].PtrVariableBaseTypeName = (char *)"<font color='#ff0000'>N/A</font>";\r
}\r
+#else\r
+ PtrWatchInfo[i].PtrVariableBaseTypeName = DBGManager_GetGlobalVariableTypeName(i + 1);\r
+#endif\r
}\r
}\r
}\r
-\r
- for (uint32_t i = 0; i < NbWatch; i++)\r
+#ifndef AW_LAYOUTTEXTS\r
+ model->setRowCount(0);\r
+#endif\r
+ if (NbWatch)\r
{\r
- if (PtrWatchInfo[i].PtrVariableName && PtrWatchInfo[i].PtrVariableBaseTypeName)\r
+ for (uint32_t i = AW_STARTNUMVARIABLE; i < NbWatch; i++)\r
{\r
- sprintf(string, "%i : %s | %s | 0x%06X | %s", (i + 1), PtrWatchInfo[i].PtrVariableBaseTypeName, PtrWatchInfo[i].PtrVariableName, (unsigned int)PtrWatchInfo[i].addr, (PtrWatchInfo[i].TypeTag & 0x8) ? "" : DBGManager_GetGlobalVariableValue(i + 1));\r
- WatchAll += QString(string);\r
- sprintf(string, "<br>");\r
+ if ((PtrWatchInfo[i].TypeTag & (DBG_TAG_TYPE_array | DBG_TAG_TYPE_structure)))\r
+ {\r
+#if defined(AW_SUPPORTARRAY) || defined(AW_SUPPORTSTRUCTURE)\r
+ //PtrValue = (char *)memcpy(Value, &jaguarMainRAM[PtrWatchInfo[i].addr], 20);\r
+ PtrValue = NULL;\r
+#else\r
+ PtrValue = NULL;\r
+#endif\r
+ }\r
+ else\r
+ {\r
+ PtrValue = DBGManager_GetGlobalVariableValue(i + 1);\r
+ }\r
+#ifdef AW_LAYOUTTEXTS\r
+ if (i)\r
+ {\r
+ WatchAll += QString("<br>");\r
+ }\r
+ 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
WatchAll += QString(string);\r
+#else\r
+ model->insertRow(i);\r
+ model->setItem(i, 0, new QStandardItem(QString("%1").arg(PtrWatchInfo[i].PtrVariableName)));\r
+ model->setItem(i, 1, new QStandardItem(QString("%1").arg(PtrValue)));\r
+ model->setItem(i, 2, new QStandardItem(QString("%1").arg(PtrWatchInfo[i].PtrVariableBaseTypeName)));\r
+#endif\r
}\r
+#ifdef AW_LAYOUTTEXTS\r
+ text->clear();\r
+ text->setText(WatchAll);\r
+#endif\r
+ sprintf(msg, "Ready");\r
+ }\r
+ else\r
+ {\r
+ sprintf(msg, "No watches");\r
+ Error = AW_NOALLWATCH;\r
}\r
\r
- text->setText(WatchAll);\r
+ // Display status bar\r
+ if (Error)\r
+ {\r
+ if ((Error & AW_WARNING))\r
+ {\r
+ statusbar->setStyleSheet("background-color: lightyellow; font: bold");\r
+ }\r
+ else\r
+ {\r
+ statusbar->setStyleSheet("background-color: tomato; font: bold");\r
+ }\r
+ }\r
+ else\r
+ {\r
+ statusbar->setStyleSheet("background-color: lightgreen; font: bold");\r
+ }\r
+ statusbar->showMessage(QString(msg));\r
}\r
}\r
\r