Skip to content

Commit 65e7f9d

Browse files
authored
Merge pull request #332 from epasveer/330-add-a-matrix-visualizer
330 add a matrix visualizer
2 parents d73eea5 + eecfba3 commit 65e7f9d

36 files changed

+2239
-146
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
* Implment gdb's "checkpoint" feature. As simple time-travel feature.
2323
* Add preliminary support for Undo's udb time-traveling debugger.
2424
* Add support for remaining Catchpoint types.
25+
* Add a Matrix Visualizer for viewing 2D arrays.
2526

2627
## [2.5] - 2024-12-24
2728
* Console now supports a subset of ANSI color codes.

src/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,11 @@ set(HEADER_FILES
100100
SeerHexWidget.h
101101
SeerAsmWidget.h
102102
SeerArrayWidget.h
103+
SeerMarixWidget.h
103104
SeerLogWidget.h
104105
SeerMainWindow.h
105106
SeerArrayVisualizerWidget.h
107+
SeerMatrixVisualizerWidget.h
106108
SeerMemoryVisualizerWidget.h
107109
SeerStructVisualizerWidget.h
108110
SeerVarVisualizerWidget.h
@@ -200,9 +202,11 @@ set(SOURCE_FILES
200202
SeerHexWidget.cpp
201203
SeerAsmWidget.cpp
202204
SeerArrayWidget.cpp
205+
SeerMatrixWidget.cpp
203206
SeerLogWidget.cpp
204207
SeerMainWindow.cpp
205208
SeerArrayVisualizerWidget.cpp
209+
SeerMatrixVisualizerWidget.cpp
206210
SeerMemoryVisualizerWidget.cpp
207211
SeerStructVisualizerWidget.cpp
208212
SeerVarVisualizerWidget.cpp

src/SeerArrayVisualizerWidget.ui

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,17 @@
5454
</item>
5555
<item>
5656
<property name="text">
57-
<string>unt16</string>
57+
<string>uint16</string>
5858
</property>
5959
</item>
6060
<item>
6161
<property name="text">
62-
<string>uin32</string>
62+
<string>uint32</string>
6363
</property>
6464
</item>
6565
<item>
6666
<property name="text">
67-
<string>uin64</string>
67+
<string>uint64</string>
6868
</property>
6969
</item>
7070
<item>
@@ -195,17 +195,17 @@
195195
</item>
196196
<item>
197197
<property name="text">
198-
<string>unt16</string>
198+
<string>uint16</string>
199199
</property>
200200
</item>
201201
<item>
202202
<property name="text">
203-
<string>uin32</string>
203+
<string>uint32</string>
204204
</property>
205205
</item>
206206
<item>
207207
<property name="text">
208-
<string>uin64</string>
208+
<string>uint64</string>
209209
</property>
210210
</item>
211211
<item>

src/SeerArrayWidget.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ SeerArrayWidget::ArrayMode SeerArrayWidget::aArrayMode () const {
141141
QString SeerArrayWidget::aArrayModeString () const {
142142

143143
if (aArrayMode() == SeerArrayWidget::Int16ArrayMode) {
144-
return "int6";
144+
return "int8";
145145
}else if (aArrayMode() == SeerArrayWidget::UInt16ArrayMode) {
146146
return "uint16";
147147
}else if (aArrayMode() == SeerArrayWidget::Int32ArrayMode) {
@@ -256,7 +256,7 @@ SeerArrayWidget::ArrayMode SeerArrayWidget::bArrayMode () const {
256256
QString SeerArrayWidget::bArrayModeString () const {
257257

258258
if (bArrayMode() == SeerArrayWidget::Int16ArrayMode) {
259-
return "int6";
259+
return "int8";
260260
}else if (bArrayMode() == SeerArrayWidget::UInt16ArrayMode) {
261261
return "uint16";
262262
}else if (bArrayMode() == SeerArrayWidget::Int32ArrayMode) {

src/SeerEditorManagerWidget.cpp

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -877,9 +877,10 @@ SeerEditorWidgetSource* SeerEditorManagerWidget::createEditorWidgetTab (const QS
877877
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addVariableTrackerExpression, this, &SeerEditorManagerWidget::handleAddVariableTrackerExpression);
878878
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::refreshVariableTrackerValues, this, &SeerEditorManagerWidget::handleRefreshVariableTrackerValues);
879879
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::evaluateVariableExpression, this, &SeerEditorManagerWidget::handleEvaluateVariableExpression);
880-
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addMemoryVisualize, this, &SeerEditorManagerWidget::handleAddMemoryVisualizer);
881-
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addArrayVisualize, this, &SeerEditorManagerWidget::handleAddArrayVisualizer);
882-
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addStructVisualize, this, &SeerEditorManagerWidget::handleAddStructVisualizer);
880+
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addMemoryVisualizer, this, &SeerEditorManagerWidget::handleAddMemoryVisualizer);
881+
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addArrayVisualizer, this, &SeerEditorManagerWidget::handleAddArrayVisualizer);
882+
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addMatrixVisualizer, this, &SeerEditorManagerWidget::handleAddMatrixVisualizer);
883+
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addStructVisualizer, this, &SeerEditorManagerWidget::handleAddStructVisualizer);
883884
QObject::connect(editorWidget, &SeerEditorWidgetSource::addAlternateDirectory, this, &SeerEditorManagerWidget::handleAddAlternateDirectory);
884885

885886
// Send the Editor widget the command to load the file. ??? Do better than this.
@@ -938,9 +939,10 @@ SeerEditorWidgetSource* SeerEditorManagerWidget::createEditorWidgetTab (const QS
938939
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addVariableTrackerExpression, this, &SeerEditorManagerWidget::handleAddVariableTrackerExpression);
939940
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::refreshVariableTrackerValues, this, &SeerEditorManagerWidget::handleRefreshVariableTrackerValues);
940941
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::evaluateVariableExpression, this, &SeerEditorManagerWidget::handleEvaluateVariableExpression);
941-
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addMemoryVisualize, this, &SeerEditorManagerWidget::handleAddMemoryVisualizer);
942-
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addArrayVisualize, this, &SeerEditorManagerWidget::handleAddArrayVisualizer);
943-
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addStructVisualize, this, &SeerEditorManagerWidget::handleAddStructVisualizer);
942+
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addMemoryVisualizer, this, &SeerEditorManagerWidget::handleAddMemoryVisualizer);
943+
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addArrayVisualizer, this, &SeerEditorManagerWidget::handleAddArrayVisualizer);
944+
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addMatrixVisualizer, this, &SeerEditorManagerWidget::handleAddMatrixVisualizer);
945+
QObject::connect(editorWidget->sourceArea(), &SeerEditorWidgetSourceArea::addStructVisualizer, this, &SeerEditorManagerWidget::handleAddStructVisualizer);
944946
QObject::connect(editorWidget, &SeerEditorWidgetSource::addAlternateDirectory, this, &SeerEditorManagerWidget::handleAddAlternateDirectory);
945947

946948
// Load the file.
@@ -1036,9 +1038,10 @@ SeerEditorWidgetAssembly* SeerEditorManagerWidget::createAssemblyWidgetTab () {
10361038
QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::runToAddress, this, &SeerEditorManagerWidget::handleRunToAddress);
10371039
QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::requestAssembly, this, &SeerEditorManagerWidget::handleRequestAssembly);
10381040
QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::requestSourceAndAssembly, this, &SeerEditorManagerWidget::handleRequestSourceAndAssembly);
1039-
QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::addMemoryVisualize, this, &SeerEditorManagerWidget::handleAddMemoryVisualizer);
1040-
QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::addArrayVisualize, this, &SeerEditorManagerWidget::handleAddArrayVisualizer);
1041-
QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::addStructVisualize, this, &SeerEditorManagerWidget::handleAddStructVisualizer);
1041+
QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::addMemoryVisualizer, this, &SeerEditorManagerWidget::handleAddMemoryVisualizer);
1042+
QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::addArrayVisualizer, this, &SeerEditorManagerWidget::handleAddArrayVisualizer);
1043+
QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::addMatrixVisualizer, this, &SeerEditorManagerWidget::handleAddMatrixVisualizer);
1044+
QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::addStructVisualizer, this, &SeerEditorManagerWidget::handleAddStructVisualizer);
10421045
QObject::connect(assemblyWidget, &SeerEditorWidgetAssembly::evaluateVariableExpression, this, &SeerEditorManagerWidget::handleEvaluateVariableExpression);
10431046

10441047
// Load the file.
@@ -1257,19 +1260,25 @@ void SeerEditorManagerWidget::handleEvaluateVariableExpression (int expressionid
12571260
void SeerEditorManagerWidget::handleAddMemoryVisualizer (QString expression) {
12581261

12591262
// rethrow
1260-
emit addMemoryVisualize (expression);
1263+
emit addMemoryVisualizer (expression);
12611264
}
12621265

12631266
void SeerEditorManagerWidget::handleAddArrayVisualizer (QString expression) {
12641267

12651268
// rethrow
1266-
emit addArrayVisualize (expression);
1269+
emit addArrayVisualizer (expression);
1270+
}
1271+
1272+
void SeerEditorManagerWidget::handleAddMatrixVisualizer (QString expression) {
1273+
1274+
// rethrow
1275+
emit addMatrixVisualizer (expression);
12671276
}
12681277

12691278
void SeerEditorManagerWidget::handleAddStructVisualizer (QString expression) {
12701279

12711280
// rethrow
1272-
emit addStructVisualize (expression);
1281+
emit addStructVisualizer (expression);
12731282
}
12741283

12751284
void SeerEditorManagerWidget::handleRequestAssembly (QString address) {

src/SeerEditorManagerWidget.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ class SeerEditorManagerWidget : public QWidget, protected Ui::SeerEditorManagerW
8585
void handleEvaluateVariableExpression (int expressionid, QString expression);
8686
void handleAddMemoryVisualizer (QString expression);
8787
void handleAddArrayVisualizer (QString expression);
88+
void handleAddMatrixVisualizer (QString expression);
8889
void handleAddStructVisualizer (QString expression);
8990
void handleRequestAssembly (QString address);
9091
void handleRequestSourceAndAssembly (QString address);
@@ -112,9 +113,10 @@ class SeerEditorManagerWidget : public QWidget, protected Ui::SeerEditorManagerW
112113
void addVariableTrackerExpression (QString expression);
113114
void refreshVariableTrackerValues ();
114115
void evaluateVariableExpression (int expressionid, QString expression);
115-
void addMemoryVisualize (QString expression);
116-
void addArrayVisualize (QString expression);
117-
void addStructVisualize (QString expression);
116+
void addMemoryVisualizer (QString expression);
117+
void addArrayVisualizer (QString expression);
118+
void addMatrixVisualizer (QString expression);
119+
void addStructVisualizer (QString expression);
118120
void requestAssembly (QString address);
119121
void requestSourceAndAssembly (QString address);
120122
void showMessage (QString message, int time);

src/SeerEditorWidgetAssembly.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,10 @@ class SeerEditorWidgetAssemblyArea : public SeerPlainTextEdit {
100100
void disableBreakpoints (QString breakpoints);
101101
void refreshBreakpointsStackFrames ();
102102
void runToAddress (QString address);
103-
void addMemoryVisualize (QString expression);
104-
void addArrayVisualize (QString expression);
105-
void addStructVisualize (QString expression);
103+
void addMemoryVisualizer (QString expression);
104+
void addArrayVisualizer (QString expression);
105+
void addMatrixVisualizer (QString expression);
106+
void addStructVisualizer (QString expression);
106107
void requestAssembly (QString address);
107108
void requestSourceAndAssembly (QString address);
108109
void showSearchBar (bool flag);

src/SeerEditorWidgetAssemblyAreas.cpp

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,6 +1093,7 @@ void SeerEditorWidgetAssemblyArea::showContextMenu (const QPoint& pos, const QPo
10931093
QAction* disableAction;
10941094
QAction* addMemoryAddressVisualizerAction;
10951095
QAction* addArrayAddressVisualizerAction;
1096+
QAction* addMatrixAddressVisualizerAction;
10961097
QAction* addStructAddressVisualizerAction;
10971098

10981099
// Enable/disable them depending if the breakpoint already exists.
@@ -1128,6 +1129,7 @@ void SeerEditorWidgetAssemblyArea::showContextMenu (const QPoint& pos, const QPo
11281129

11291130
addMemoryAddressVisualizerAction = new QAction(QString("\"%1\"").arg(textCursor().selectedText()));
11301131
addArrayAddressVisualizerAction = new QAction(QString("\"%1\"").arg(textCursor().selectedText()));
1132+
addMatrixAddressVisualizerAction = new QAction(QString("\"%1\"").arg(textCursor().selectedText()));
11311133
addStructAddressVisualizerAction = new QAction(QString("\"%1\"").arg(textCursor().selectedText()));
11321134

11331135
QMenu menu("Breakpoints", this);
@@ -1146,6 +1148,10 @@ void SeerEditorWidgetAssemblyArea::showContextMenu (const QPoint& pos, const QPo
11461148
arrayVisualizerMenu.addAction(addArrayAddressVisualizerAction);
11471149
menu.addMenu(&arrayVisualizerMenu);
11481150

1151+
QMenu matrixVisualizerMenu("Add address to a Matrix Visualizer");
1152+
matrixVisualizerMenu.addAction(addMatrixAddressVisualizerAction);
1153+
menu.addMenu(&arrayVisualizerMenu);
1154+
11491155
QMenu structVisualizerMenu("Add address to a Struct Visualizer");
11501156
structVisualizerMenu.addAction(addStructAddressVisualizerAction);
11511157
menu.addMenu(&structVisualizerMenu);
@@ -1154,10 +1160,12 @@ void SeerEditorWidgetAssemblyArea::showContextMenu (const QPoint& pos, const QPo
11541160
if (textCursor().selectedText() == "") {
11551161
addMemoryAddressVisualizerAction->setEnabled(false);
11561162
addArrayAddressVisualizerAction->setEnabled(false);
1163+
addMatrixAddressVisualizerAction->setEnabled(false);
11571164
addStructAddressVisualizerAction->setEnabled(false);
11581165
}else{
11591166
addMemoryAddressVisualizerAction->setEnabled(true);
11601167
addArrayAddressVisualizerAction->setEnabled(true);
1168+
addMatrixAddressVisualizerAction->setEnabled(true);
11611169
addStructAddressVisualizerAction->setEnabled(true);
11621170
}
11631171

@@ -1228,7 +1236,7 @@ void SeerEditorWidgetAssemblyArea::showContextMenu (const QPoint& pos, const QPo
12281236

12291237
// Emit the signals.
12301238
if (textCursor().selectedText() != "") {
1231-
emit addMemoryVisualize(textCursor().selectedText());
1239+
emit addMemoryVisualizer(textCursor().selectedText());
12321240
}
12331241

12341242
return;
@@ -1239,7 +1247,18 @@ void SeerEditorWidgetAssemblyArea::showContextMenu (const QPoint& pos, const QPo
12391247

12401248
// Emit the signals.
12411249
if (textCursor().selectedText() != "") {
1242-
emit addArrayVisualize(textCursor().selectedText());
1250+
emit addArrayVisualizer(textCursor().selectedText());
1251+
}
1252+
1253+
return;
1254+
}
1255+
1256+
// Handle adding matrix to visualize.
1257+
if (action == addMatrixAddressVisualizerAction) {
1258+
1259+
// Emit the signals.
1260+
if (textCursor().selectedText() != "") {
1261+
emit addMatrixVisualizer(textCursor().selectedText());
12431262
}
12441263

12451264
return;
@@ -1250,7 +1269,7 @@ void SeerEditorWidgetAssemblyArea::showContextMenu (const QPoint& pos, const QPo
12501269

12511270
// Emit the signals.
12521271
if (textCursor().selectedText() != "") {
1253-
emit addStructVisualize(textCursor().selectedText());
1272+
emit addStructVisualizer(textCursor().selectedText());
12541273
}
12551274

12561275
return;

src/SeerEditorWidgetSource.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,10 @@ class SeerEditorWidgetSourceArea : public SeerPlainTextEdit {
105105
void addVariableTrackerExpression (QString expression);
106106
void refreshVariableTrackerValues ();
107107
void evaluateVariableExpression (int expressionid, QString expression);
108-
void addMemoryVisualize (QString expression);
109-
void addArrayVisualize (QString expression);
110-
void addStructVisualize (QString expression);
108+
void addMemoryVisualizer (QString expression);
109+
void addArrayVisualizer (QString expression);
110+
void addMatrixVisualizer (QString expression);
111+
void addStructVisualizer (QString expression);
111112
void showSearchBar (bool flag);
112113
void showAlternateBar (bool flag);
113114
void showReloadBar (bool flag);

0 commit comments

Comments
 (0)