diff --git a/src/SeerEditorManagerWidget.cpp b/src/SeerEditorManagerWidget.cpp index 655569d..3734378 100644 --- a/src/SeerEditorManagerWidget.cpp +++ b/src/SeerEditorManagerWidget.cpp @@ -790,6 +790,8 @@ SeerEditorWidgetAssembly* SeerEditorManagerWidget::createAssemblyWidgetTab () { QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::disableBreakpoints, this, &SeerEditorManagerWidget::handleDisableBreakpoints); QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::runToAddress, this, &SeerEditorManagerWidget::handleRunToAddress); QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::requestAssembly, this, &SeerEditorManagerWidget::handleRequestAssembly); + QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::addMemoryVisualize, this, &SeerEditorManagerWidget::handleAddMemoryVisualizer); + QObject::connect(assemblyWidget->assemblyArea(), &SeerEditorWidgetAssemblyArea::addArrayVisualize, this, &SeerEditorManagerWidget::handleAddArrayVisualizer); // Load the file. assemblyWidget->assemblyArea()->setPlainText(""); diff --git a/src/SeerEditorWidgetAssembly.h b/src/SeerEditorWidgetAssembly.h index 01f6894..7a4e973 100644 --- a/src/SeerEditorWidgetAssembly.h +++ b/src/SeerEditorWidgetAssembly.h @@ -80,6 +80,8 @@ class SeerEditorWidgetAssemblyArea : public SeerPlainTextEdit { void enableBreakpoints (QString breakpoints); void disableBreakpoints (QString breakpoints); void runToAddress (QString address); + void addMemoryVisualize (QString expression); + void addArrayVisualize (QString expression); void requestAssembly (QString address); void showSearchBar (bool flag); void highlighterSettingsChanged (); diff --git a/src/SeerEditorWidgetAssemblyAreas.cpp b/src/SeerEditorWidgetAssemblyAreas.cpp index 44cf8e9..9505018 100644 --- a/src/SeerEditorWidgetAssemblyAreas.cpp +++ b/src/SeerEditorWidgetAssemblyAreas.cpp @@ -800,6 +800,8 @@ void SeerEditorWidgetAssemblyArea::showContextMenu (const QPoint& pos, const QPo QAction* enableAction; QAction* disableAction; QAction* runToAddressAction; + QAction* addMemoryAddressVisualizerAction; + QAction* addArrayAddressVisualizerAction; // Enable/disable them depending if the breakpoint already exists. if (hasBreakpointAddress(address) == true) { @@ -832,6 +834,9 @@ void SeerEditorWidgetAssemblyArea::showContextMenu (const QPoint& pos, const QPo runToAddressAction->setEnabled(true); } + addMemoryAddressVisualizerAction = new QAction(QString("\"%1\"").arg(textCursor().selectedText())); + addArrayAddressVisualizerAction = new QAction(QString("\"%1\"").arg(textCursor().selectedText())); + QMenu menu("Breakpoints", this); menu.setTitle("Breakpoints"); menu.addAction(createBreakpointAction); @@ -840,6 +845,23 @@ void SeerEditorWidgetAssemblyArea::showContextMenu (const QPoint& pos, const QPo menu.addAction(disableAction); menu.addAction(runToAddressAction); + QMenu memoryVisualizerMenu("Add address to a Memory Visualizer"); + memoryVisualizerMenu.addAction(addMemoryAddressVisualizerAction); + menu.addMenu(&memoryVisualizerMenu); + + QMenu arrayVisualizerMenu("Add address to an Array Visualizer"); + arrayVisualizerMenu.addAction(addArrayAddressVisualizerAction); + menu.addMenu(&arrayVisualizerMenu); + + // Enable/disable items based on something being selected or not. + if (textCursor().selectedText() == "") { + addMemoryAddressVisualizerAction->setEnabled(false); + addArrayAddressVisualizerAction->setEnabled(false); + }else{ + addMemoryAddressVisualizerAction->setEnabled(true); + addArrayAddressVisualizerAction->setEnabled(true); + } + // Launch the menu. Get the response. QAction* action = menu.exec(globalPos); @@ -911,6 +933,32 @@ void SeerEditorWidgetAssemblyArea::showContextMenu (const QPoint& pos, const QPo return; } + + // Handle adding memory to visualize. + if (action == addMemoryAddressVisualizerAction) { + + //qDebug() << "addMemoryVisualizer" << lineno; + + // Emit the signals. + if (textCursor().selectedText() != "") { + emit addMemoryVisualize(textCursor().selectedText()); + } + + return; + } + + // Handle adding array to visualize. + if (action == addArrayAddressVisualizerAction) { + + //qDebug() << "addArrayVisualizer" << lineno; + + // Emit the signals. + if (textCursor().selectedText() != "") { + emit addArrayVisualize(textCursor().selectedText()); + } + + return; + } } void SeerEditorWidgetAssemblyArea::setQuickBreakpoint (QMouseEvent* event) {