From 8189edd181ce7b9a5aaab76b32a35db63b6b08bb Mon Sep 17 00:00:00 2001 From: Ernie Pasveer Date: Sat, 25 Jul 2026 10:59:55 -0500 Subject: [PATCH] Touchups on assembly tab and switching between light and dark modes. --- src/SeerEditorManagerWidget.cpp | 2 +- src/SeerEditorWidgetAssembly.h | 10 +- src/SeerEditorWidgetAssemblyAreas.cpp | 204 +++++++++++++------------- 3 files changed, 107 insertions(+), 109 deletions(-) diff --git a/src/SeerEditorManagerWidget.cpp b/src/SeerEditorManagerWidget.cpp index be982a0..72ff85d 100644 --- a/src/SeerEditorManagerWidget.cpp +++ b/src/SeerEditorManagerWidget.cpp @@ -353,7 +353,7 @@ void SeerEditorManagerWidget::setEditorHighlighterSettings (const SeerHighlighte SeerEditorWidgetAssembly* assemblyWidget = assemblyWidgetTab(); if (assemblyWidget) { - assemblyWidget->assemblyArea()->setHighlighterSettings(editorHighlighterSettings()); + assemblyWidget->assemblyArea()->setHighlighterSettings(_editorHighlighterSettings); } } diff --git a/src/SeerEditorWidgetAssembly.h b/src/SeerEditorWidgetAssembly.h index 72fea49..64b07f3 100644 --- a/src/SeerEditorWidgetAssembly.h +++ b/src/SeerEditorWidgetAssembly.h @@ -152,8 +152,8 @@ class SeerEditorWidgetAssemblyArea : public SeerPlainTextEdit { SeerEditorWidgetAssemblyLineNumberArea* _lineNumberArea; SeerEditorWidgetAssemblyOffsetArea* _offsetArea; - SeerEditorWidgetAssemblyBreakPointArea* _breakPointArea; SeerEditorWidgetAssemblyOpcodeArea* _opcodeArea; + SeerEditorWidgetAssemblyBreakPointArea* _breakPointArea; SeerHighlighterSettings _sourceHighlighterSettings; bool _sourceHighlighterEnabled; @@ -217,12 +217,12 @@ class SeerEditorWidgetAssemblyOffsetArea : public QWidget { SeerEditorWidgetAssemblyArea* _editorWidget; }; -class SeerEditorWidgetAssemblyBreakPointArea : public QWidget { +class SeerEditorWidgetAssemblyOpcodeArea : public QWidget { Q_OBJECT public: - SeerEditorWidgetAssemblyBreakPointArea (SeerEditorWidgetAssemblyArea* editorWidget); + SeerEditorWidgetAssemblyOpcodeArea (SeerEditorWidgetAssemblyArea* editorWidget); QSize sizeHint () const override; @@ -237,12 +237,12 @@ class SeerEditorWidgetAssemblyBreakPointArea : public QWidget { SeerEditorWidgetAssemblyArea* _editorWidget; }; -class SeerEditorWidgetAssemblyOpcodeArea : public QWidget { +class SeerEditorWidgetAssemblyBreakPointArea : public QWidget { Q_OBJECT public: - SeerEditorWidgetAssemblyOpcodeArea (SeerEditorWidgetAssemblyArea* editorWidget); + SeerEditorWidgetAssemblyBreakPointArea (SeerEditorWidgetAssemblyArea* editorWidget); QSize sizeHint () const override; diff --git a/src/SeerEditorWidgetAssemblyAreas.cpp b/src/SeerEditorWidgetAssemblyAreas.cpp index 29e077b..e4dcd7a 100644 --- a/src/SeerEditorWidgetAssemblyAreas.cpp +++ b/src/SeerEditorWidgetAssemblyAreas.cpp @@ -38,8 +38,8 @@ SeerEditorWidgetAssemblyArea::SeerEditorWidgetAssemblyArea(QWidget* parent) : Se _enableLineNumberArea = false; _enableOffsetArea = false; - _enableBreakPointArea = false; _enableOpcodeArea = false; + _enableBreakPointArea = false; _enableSourceLines = false; _sourceTabSize = 4; _convertUppercase = false; @@ -65,16 +65,16 @@ SeerEditorWidgetAssemblyArea::SeerEditorWidgetAssemblyArea(QWidget* parent) : Se enableLineNumberArea(true); enableOffsetArea(true); - enableBreakPointArea(true); enableOpcodeArea(true); + enableBreakPointArea(true); enableSourceLines(true); setConvertUppercase(false); QObject::connect(this, &SeerEditorWidgetAssemblyArea::blockCountChanged, this, &SeerEditorWidgetAssemblyArea::updateMarginAreasWidth); QObject::connect(this, &SeerEditorWidgetAssemblyArea::updateRequest, this, &SeerEditorWidgetAssemblyArea::updateLineNumberArea); QObject::connect(this, &SeerEditorWidgetAssemblyArea::updateRequest, this, &SeerEditorWidgetAssemblyArea::updateOffsetArea); - QObject::connect(this, &SeerEditorWidgetAssemblyArea::updateRequest, this, &SeerEditorWidgetAssemblyArea::updateBreakPointArea); QObject::connect(this, &SeerEditorWidgetAssemblyArea::updateRequest, this, &SeerEditorWidgetAssemblyArea::updateOpcodeArea); + QObject::connect(this, &SeerEditorWidgetAssemblyArea::updateRequest, this, &SeerEditorWidgetAssemblyArea::updateBreakPointArea); QObject::connect(this, &SeerEditorWidgetAssemblyArea::highlighterSettingsChanged, this, &SeerEditorWidgetAssemblyArea::handleHighlighterSettingsChanged); setCurrentLine(""); @@ -84,8 +84,8 @@ SeerEditorWidgetAssemblyArea::SeerEditorWidgetAssemblyArea(QWidget* parent) : Se // Forward the scroll events in the various areas to the text edit. SeerPlainTextWheelEventForwarder* lineNumberAreaWheelForwarder = new SeerPlainTextWheelEventForwarder(this); SeerPlainTextWheelEventForwarder* offsetAreaWheelForwarder = new SeerPlainTextWheelEventForwarder(this); - SeerPlainTextWheelEventForwarder* breakPointAreaWheelForwarder = new SeerPlainTextWheelEventForwarder(this); SeerPlainTextWheelEventForwarder* opcodeAreaWheelForwarder = new SeerPlainTextWheelEventForwarder(this); + SeerPlainTextWheelEventForwarder* breakPointAreaWheelForwarder = new SeerPlainTextWheelEventForwarder(this); _lineNumberArea->installEventFilter(lineNumberAreaWheelForwarder); _offsetArea->installEventFilter(offsetAreaWheelForwarder); @@ -426,23 +426,11 @@ int SeerEditorWidgetAssemblyArea::offsetAreaWidth () { QString tmp = QString("<+%1>").arg(offset); - int space = 3 + fontMetrics().horizontalAdvance(QLatin1Char('9')) * tmp.length(); return space; } -int SeerEditorWidgetAssemblyArea::breakPointAreaWidth () { - - if (breakPointAreaEnabled() == false) { - return 0; - } - - int space = 3 + 20; - - return space; -} - int SeerEditorWidgetAssemblyArea::opcodeAreaWidth () { if (opcodeAreaEnabled() == false) { @@ -466,6 +454,17 @@ int SeerEditorWidgetAssemblyArea::opcodeAreaWidth () { return space; } +int SeerEditorWidgetAssemblyArea::breakPointAreaWidth () { + + if (breakPointAreaEnabled() == false) { + return 0; + } + + int space = 3 + 20; + + return space; +} + void SeerEditorWidgetAssemblyArea::updateLineNumberArea (const QRect& rect, int dy) { if (lineNumberAreaEnabled() == false) { @@ -500,23 +499,6 @@ void SeerEditorWidgetAssemblyArea::updateOffsetArea (const QRect& rect, int dy) } } -void SeerEditorWidgetAssemblyArea::updateBreakPointArea (const QRect& rect, int dy) { - - if (breakPointAreaEnabled() == false) { - return; - } - - if (dy) { - _breakPointArea->scroll(0, dy); - }else{ - _breakPointArea->update(0, rect.y(), _breakPointArea->width(), rect.height()); - } - - if (rect.contains(viewport()->rect())) { - updateMarginAreasWidth(0); - } -} - void SeerEditorWidgetAssemblyArea::updateOpcodeArea (const QRect& rect, int dy) { if (opcodeAreaEnabled() == false) { @@ -534,6 +516,23 @@ void SeerEditorWidgetAssemblyArea::updateOpcodeArea (const QRect& rect, int dy) } } +void SeerEditorWidgetAssemblyArea::updateBreakPointArea (const QRect& rect, int dy) { + + if (breakPointAreaEnabled() == false) { + return; + } + + if (dy) { + _breakPointArea->scroll(0, dy); + }else{ + _breakPointArea->update(0, rect.y(), _breakPointArea->width(), rect.height()); + } + + if (rect.contains(viewport()->rect())) { + updateMarginAreasWidth(0); + } +} + void SeerEditorWidgetAssemblyArea::lineNumberAreaPaintEvent (QPaintEvent* event) { if (lineNumberAreaEnabled() == false) { @@ -698,7 +697,7 @@ void SeerEditorWidgetAssemblyArea::opcodeAreaPaintEvent (QPaintEvent* event) { return; } - QTextCharFormat format = highlighterSettings().get("Assembly Text"); + QTextCharFormat format = highlighterSettings().get("Margin"); QPainter painter(_opcodeArea); painter.fillRect(event->rect(), format.background().color()); @@ -722,9 +721,9 @@ void SeerEditorWidgetAssemblyArea::opcodeAreaPaintEvent (QPaintEvent* event) { if (_lineOpcodeMap.contains(blockNumber+1)) { if (convertUppercase()) { - opcode = _lineOpcodeMap[blockNumber+1].toUpper(); + opcode = " " + _lineOpcodeMap[blockNumber+1].toUpper(); }else{ - opcode = _lineOpcodeMap[blockNumber+1]; + opcode = " " + _lineOpcodeMap[blockNumber+1]; } } @@ -758,17 +757,17 @@ void SeerEditorWidgetAssemblyArea::resizeEvent (QResizeEvent* e) { leftbias += offsetAreaWidth(); } - if (breakPointAreaEnabled()) { - _breakPointArea->setGeometry (QRect(cr.left() + leftbias, cr.top(), breakPointAreaWidth(), cr.height())); - - leftbias += breakPointAreaWidth(); - } - if (opcodeAreaEnabled()) { _opcodeArea->setGeometry (QRect(cr.left() + leftbias, cr.top(), opcodeAreaWidth(), cr.height())); leftbias += opcodeAreaWidth(); } + + if (breakPointAreaEnabled()) { + _breakPointArea->setGeometry (QRect(cr.left() + leftbias, cr.top(), breakPointAreaWidth(), cr.height())); + + leftbias += breakPointAreaWidth(); + } } void SeerEditorWidgetAssemblyArea::contextMenuEvent (QContextMenuEvent* event) { @@ -1434,6 +1433,10 @@ QString SeerEditorWidgetAssemblyArea::sourceForLine (const QString& fullname, co _fileFullname = fullname; _fileName = file; + if (_fileFullname == "") { + return ""; + } + bool f = Seer::readFile(_fileFullname, _fileLines); if (f == false) { qDebug() << "Can't read:" << _fileFullname; @@ -1583,18 +1586,13 @@ void SeerEditorWidgetAssemblyArea::handleText (const QString& text) { void SeerEditorWidgetAssemblyArea::handleHighlighterSettingsChanged () { - // Set base color for background and text color. - // Use the palette to do this. Some people say to use the stylesheet. - // But the palettle method works (for now). - QTextCharFormat format = highlighterSettings().get("Text"); + // When this handler is called, the new Highlight settings have + // already been set. So we just need to redo the text area. + updateTextArea(); - QPalette p = palette(); - p.setColor(QPalette::Base, format.background().color()); - p.setColor(QPalette::Text, format.foreground().color()); - setPalette(p); - - // Note. The margins are automatically updated by their own paint events. - // The new highlighter settings will be used. + // Note. + // The margins are automatically updated by their own paint events. + // The new highlighter settings will be used. } // @@ -1697,56 +1695,6 @@ void SeerEditorWidgetAssemblyOffsetArea::mouseReleaseEvent (QMouseEvent* event) QWidget::mouseReleaseEvent(event); } -// -// Breakpoint Area. -// - -SeerEditorWidgetAssemblyBreakPointArea::SeerEditorWidgetAssemblyBreakPointArea(SeerEditorWidgetAssemblyArea* editorWidget) : QWidget(editorWidget) { - _editorWidget = editorWidget; -} - -QSize SeerEditorWidgetAssemblyBreakPointArea::sizeHint () const { - return QSize(_editorWidget->breakPointAreaWidth(), 0); -} - -void SeerEditorWidgetAssemblyBreakPointArea::paintEvent (QPaintEvent* event) { - _editorWidget->breakPointAreaPaintEvent(event); -} - -void SeerEditorWidgetAssemblyBreakPointArea::mouseDoubleClickEvent (QMouseEvent* event) { - - if (event->button() == Qt::LeftButton) { - if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true) { - _editorWidget->setQuickRunToAddress(event); - }else{ - _editorWidget->setQuickBreakpoint(event); - } - - }else{ - QWidget::mouseDoubleClickEvent(event); - } -} - -void SeerEditorWidgetAssemblyBreakPointArea::mouseMoveEvent (QMouseEvent* event) { - - QWidget::mouseMoveEvent(event); -} - -void SeerEditorWidgetAssemblyBreakPointArea::mousePressEvent (QMouseEvent* event) { - - if (event->button() == Qt::RightButton) { - _editorWidget->showContextMenu(event); - - }else{ - QWidget::mousePressEvent(event); - } -} - -void SeerEditorWidgetAssemblyBreakPointArea::mouseReleaseEvent (QMouseEvent* event) { - - QWidget::mouseReleaseEvent(event); -} - // // Opcode Area. // @@ -1797,3 +1745,53 @@ void SeerEditorWidgetAssemblyOpcodeArea::mouseReleaseEvent (QMouseEvent* event) QWidget::mouseReleaseEvent(event); } +// +// Breakpoint Area. +// + +SeerEditorWidgetAssemblyBreakPointArea::SeerEditorWidgetAssemblyBreakPointArea(SeerEditorWidgetAssemblyArea* editorWidget) : QWidget(editorWidget) { + _editorWidget = editorWidget; +} + +QSize SeerEditorWidgetAssemblyBreakPointArea::sizeHint () const { + return QSize(_editorWidget->breakPointAreaWidth(), 0); +} + +void SeerEditorWidgetAssemblyBreakPointArea::paintEvent (QPaintEvent* event) { + _editorWidget->breakPointAreaPaintEvent(event); +} + +void SeerEditorWidgetAssemblyBreakPointArea::mouseDoubleClickEvent (QMouseEvent* event) { + + if (event->button() == Qt::LeftButton) { + if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true) { + _editorWidget->setQuickRunToAddress(event); + }else{ + _editorWidget->setQuickBreakpoint(event); + } + + }else{ + QWidget::mouseDoubleClickEvent(event); + } +} + +void SeerEditorWidgetAssemblyBreakPointArea::mouseMoveEvent (QMouseEvent* event) { + + QWidget::mouseMoveEvent(event); +} + +void SeerEditorWidgetAssemblyBreakPointArea::mousePressEvent (QMouseEvent* event) { + + if (event->button() == Qt::RightButton) { + _editorWidget->showContextMenu(event); + + }else{ + QWidget::mousePressEvent(event); + } +} + +void SeerEditorWidgetAssemblyBreakPointArea::mouseReleaseEvent (QMouseEvent* event) { + + QWidget::mouseReleaseEvent(event); +} +