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 and better status report
12 // JPM 09/14/2018 Set information values in a tab
16 // Better presentation
17 // To set the information display at the right
20 //#define AW_DEBUGNUMVARIABLE 177 // Set the global variable number to debug
21 #ifndef AW_DEBUGNUMVARIABLE
22 #define AW_STARTNUMVARIABLE 0 // Must be kept to 0 in case of no debug is required
24 #define AW_STARTNUMVARIABLE AW_DEBUGNUMVARIABLE - 1
28 #include "debugger/allwatchbrowser.h"
30 #include "debugger/DBGManager.h"
34 AllWatchBrowserWindow::AllWatchBrowserWindow(QWidget
* parent
/*= 0*/) : QWidget(parent
, Qt::Dialog
),
35 layout(new QVBoxLayout
),
37 text(new QTextBrowser
),
39 TableView(new QTableView
),
40 model(new QStandardItemModel
),
43 statusbar(new QStatusBar
),
46 setWindowTitle(tr("All Watch"));
49 QFont
fixedFont("Lucida Console", 8, QFont::Normal
);
50 fixedFont
.setStyleHint(QFont::TypeWriter
);
53 // Set original layout
54 text
->setFont(fixedFont
);
55 layout
->addWidget(text
);
57 // Set the new layout with proper identation and readibility
58 model
->setColumnCount(3);
59 model
->setHeaderData(0, Qt::Horizontal
, QObject::tr("Name"));
60 model
->setHeaderData(1, Qt::Horizontal
, QObject::tr("Value"));
61 model
->setHeaderData(2, Qt::Horizontal
, QObject::tr("Type"));
63 TableView
->setModel(model
);
64 TableView
->setEditTriggers(QAbstractItemView::NoEditTriggers
);
65 TableView
->setShowGrid(0);
66 TableView
->setFont(fixedFont
);
67 TableView
->verticalHeader()->setDefaultSectionSize(TableView
->verticalHeader()->minimumSectionSize());
68 TableView
->verticalHeader()->setDefaultAlignment(Qt::AlignRight
);
69 layout
->addWidget(TableView
);
73 layout
->addWidget(statusbar
);
79 AllWatchBrowserWindow::~AllWatchBrowserWindow(void)
86 void AllWatchBrowserWindow::Reset(void)
95 void AllWatchBrowserWindow::RefreshContents(void)
102 size_t Error
= AW_NOERROR
;
109 // Pre-catch the information for each global variables
110 if (NbWatch
= DBGManager_GetNbGlobalVariables())
112 PtrWatchInfo
= (WatchInfo
*)calloc(NbWatch
, sizeof(WatchInfo
));
114 for (uint32_t i
= AW_STARTNUMVARIABLE
; i
< NbWatch
; i
++)
116 PtrWatchInfo
[i
].PtrVariableName
= DBGManager_GetGlobalVariableName(i
+ 1);
117 PtrWatchInfo
[i
].TypeTag
= DBGManager_GetGlobalVariableTypeTag(i
+ 1);
118 #ifdef AW_LAYOUTTEXTS
119 PtrWatchInfo
[i
].addr
= DBGManager_GetGlobalVariableAdr(i
+ 1);
120 if (!strlen(PtrWatchInfo
[i
].PtrVariableBaseTypeName
= DBGManager_GetGlobalVariableTypeName(i
+ 1)))
122 PtrWatchInfo
[i
].PtrVariableBaseTypeName
= (char *)"<font color='#ff0000'>N/A</font>";
125 PtrWatchInfo
[i
].PtrVariableBaseTypeName
= DBGManager_GetGlobalVariableTypeName(i
+ 1);
130 #ifndef AW_LAYOUTTEXTS
131 model
->setRowCount(0);
135 for (uint32_t i
= AW_STARTNUMVARIABLE
; i
< NbWatch
; i
++)
137 if ((PtrWatchInfo
[i
].TypeTag
& (DBG_TAG_TYPE_array
| DBG_TAG_TYPE_structure
)))
139 #if defined(AW_SUPPORTARRAY) || defined(AW_SUPPORTSTRUCTURE)
140 //PtrValue = (char *)memcpy(Value, &jaguarMainRAM[PtrWatchInfo[i].addr], 20);
148 PtrValue
= DBGManager_GetGlobalVariableValue(i
+ 1);
150 #ifdef AW_LAYOUTTEXTS
153 WatchAll
+= QString("<br>");
155 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>");
156 WatchAll
+= QString(string
);
159 model
->setItem(i
, 0, new QStandardItem(QString("%1").arg(PtrWatchInfo
[i
].PtrVariableName
)));
160 model
->setItem(i
, 1, new QStandardItem(QString("%1").arg(PtrValue
)));
161 model
->setItem(i
, 2, new QStandardItem(QString("%1").arg(PtrWatchInfo
[i
].PtrVariableBaseTypeName
)));
164 #ifdef AW_LAYOUTTEXTS
166 text
->setText(WatchAll
);
168 sprintf(msg
, "Ready");
172 sprintf(msg
, "No watches");
173 Error
= AW_NOALLWATCH
;
176 // Display status bar
179 if ((Error
& AW_WARNING
))
181 statusbar
->setStyleSheet("background-color: lightyellow; font: bold");
185 statusbar
->setStyleSheet("background-color: tomato; font: bold");
190 statusbar
->setStyleSheet("background-color: lightgreen; font: bold");
192 statusbar
->showMessage(QString(msg
));
198 void AllWatchBrowserWindow::keyPressEvent(QKeyEvent
* e
)
200 if (e
->key() == Qt::Key_Escape
)