From 31b9b8d3218c9326380f532a77c5db8e8781477a Mon Sep 17 00:00:00 2001 From: Nav Date: Thu, 11 Nov 2021 19:08:56 +0000 Subject: [PATCH] New struct to hold settings for the HexViewierWidget --- .../HexViewerWidget/ByteItem.cpp | 34 +++++++++++++------ .../HexViewerWidget/ByteItem.hpp | 6 +++- .../ByteItemContainerGraphicsView.cpp | 2 ++ .../ByteItemContainerGraphicsView.hpp | 2 ++ .../HexViewerWidget/ByteItemGraphicsScene.cpp | 3 +- .../HexViewerWidget/ByteItemGraphicsScene.hpp | 2 ++ .../HexViewerWidget/HexViewerWidget.cpp | 1 + .../HexViewerWidget/HexViewerWidget.hpp | 3 ++ .../HexViewerWidgetSettings.hpp | 16 +++++++++ 9 files changed, 57 insertions(+), 12 deletions(-) create mode 100644 src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidgetSettings.hpp diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItem.cpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItem.cpp index e754cd8e..dfb69244 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItem.cpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItem.cpp @@ -10,8 +10,15 @@ using namespace Bloom::Widgets; ByteItem::ByteItem( std::size_t byteIndex, std::uint32_t address, - std::optional& hoveredByteItem -): QGraphicsItem(nullptr), byteIndex(byteIndex), address(address), hoveredByteItem(hoveredByteItem) { + std::optional& hoveredByteItem, + const HexViewerWidgetSettings& settings +): +QGraphicsItem(nullptr), +byteIndex(byteIndex), +address(address), +hoveredByteItem(hoveredByteItem), +settings(settings) +{ this->setAcceptHoverEvents(true); this->addressHex = "0x" + QString::number(this->address, 16).rightJustified(8, '0').toUpper(); @@ -37,15 +44,22 @@ void ByteItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, static const auto widgetRect = this->boundingRect(); - if (this->hoveredByteItem.has_value()) { - const auto hoveredWidget = this->hoveredByteItem.value(); + if (this->settings.highlightStackMemory && this->settings.stackPointerAddress.has_value() + && this->address > this->settings.stackPointerAddress + ) { + // This byte is within the stack memory + painter->setBrush(QColor(0x5E, 0x50, 0x27, 255)); + painter->drawRect(widgetRect); + } - if (hoveredWidget->currentColumnIndex == this->currentColumnIndex - || hoveredWidget->currentRowIndex == this->currentRowIndex - ){ - painter->setBrush(QColor(0x8E, 0x8B, 0x83, hoveredWidget == this ? 70 : 30)); - painter->drawRect(widgetRect); - } + const auto hoveredByteItem = this->hoveredByteItem.value_or(nullptr); + if (hoveredByteItem != nullptr && ( + hoveredByteItem->currentColumnIndex == this->currentColumnIndex + || hoveredByteItem->currentRowIndex == this->currentRowIndex + ) + ) { + painter->setBrush(QColor(0x8E, 0x8B, 0x83, hoveredByteItem == this ? 70 : 30)); + painter->drawRect(widgetRect); } auto textColor = QColor(this->valueChanged ? "#547fba" : "#afb1b3"); diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItem.hpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItem.hpp index 6a265660..0027cc2b 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItem.hpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItem.hpp @@ -6,6 +6,7 @@ #include #include "src/Insight/UserInterfaces/InsightWindow/Widgets/ClickableWidget.hpp" +#include "HexViewerWidgetSettings.hpp" namespace Bloom::Widgets { @@ -30,7 +31,8 @@ namespace Bloom::Widgets ByteItem( std::size_t byteIndex, std::uint32_t address, - std::optional& hoveredByteItem + std::optional& hoveredByteItem, + const HexViewerWidgetSettings& settings ); void setValue(unsigned char value); @@ -50,6 +52,8 @@ namespace Bloom::Widgets bool valueInitialised = false; bool valueChanged = false; + const HexViewerWidgetSettings& settings; + QString hexValue; std::optional asciiValue; diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemContainerGraphicsView.cpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemContainerGraphicsView.cpp index 94a96fc5..4a6d9239 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemContainerGraphicsView.cpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemContainerGraphicsView.cpp @@ -16,6 +16,7 @@ using Bloom::Targets::TargetMemoryDescriptor; ByteItemContainerGraphicsView::ByteItemContainerGraphicsView( const TargetMemoryDescriptor& targetMemoryDescriptor, InsightWorker& insightWorker, + const HexViewerWidgetSettings& settings, QLabel* hoveredAddressLabel, QWidget* parent ): QGraphicsView(parent) { @@ -28,6 +29,7 @@ ByteItemContainerGraphicsView::ByteItemContainerGraphicsView( this->scene = new ByteItemGraphicsScene( targetMemoryDescriptor, insightWorker, + settings, hoveredAddressLabel, this ); diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemContainerGraphicsView.hpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemContainerGraphicsView.hpp index 97b0039e..f6a07be1 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemContainerGraphicsView.hpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemContainerGraphicsView.hpp @@ -19,6 +19,7 @@ #include "src/Insight/InsightWorker/InsightWorker.hpp" #include "ByteItemGraphicsScene.hpp" +#include "HexViewerWidgetSettings.hpp" namespace Bloom::Widgets { @@ -30,6 +31,7 @@ namespace Bloom::Widgets ByteItemContainerGraphicsView( const Targets::TargetMemoryDescriptor& targetMemoryDescriptor, InsightWorker& insightWorker, + const HexViewerWidgetSettings& settings, QLabel* hoveredAddressLabel, QWidget* parent ); diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemGraphicsScene.cpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemGraphicsScene.cpp index b6db1472..71ed5f8f 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemGraphicsScene.cpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemGraphicsScene.cpp @@ -16,6 +16,7 @@ using Bloom::Targets::TargetMemoryDescriptor; ByteItemGraphicsScene::ByteItemGraphicsScene( const TargetMemoryDescriptor& targetMemoryDescriptor, InsightWorker& insightWorker, + const HexViewerWidgetSettings& settings, QLabel* hoveredAddressLabel, QWidget* parent ): QGraphicsScene(parent), @@ -39,7 +40,7 @@ parent(parent) { for (std::uint32_t i = 0; i < memorySize; i++) { const auto address = startAddress + i; - auto* byteWidget = new ByteItem(i, address, this->hoveredByteWidget); + auto* byteWidget = new ByteItem(i, address, this->hoveredByteWidget, settings); this->byteItemsByAddress.insert(std::pair( address, byteWidget diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemGraphicsScene.hpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemGraphicsScene.hpp index 55040a72..67d0c8fa 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemGraphicsScene.hpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItemGraphicsScene.hpp @@ -19,6 +19,7 @@ #include "ByteItem.hpp" #include "ByteAddressContainer.hpp" +#include "HexViewerWidgetSettings.hpp" namespace Bloom::Widgets { @@ -36,6 +37,7 @@ namespace Bloom::Widgets ByteItemGraphicsScene( const Targets::TargetMemoryDescriptor& targetMemoryDescriptor, InsightWorker& insightWorker, + const HexViewerWidgetSettings& settings, QLabel* hoveredAddressLabel, QWidget* parent ); diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidget.cpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidget.cpp index ab5ab4ba..f1748439 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidget.cpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidget.cpp @@ -60,6 +60,7 @@ HexViewerWidget::HexViewerWidget( this->byteItemGraphicsView = new ByteItemContainerGraphicsView( targetMemoryDescriptor, insightWorker, + this->settings, this->hoveredAddressLabel, byteItemGraphicsViewContainer ); diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidget.hpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidget.hpp index cf899d59..543763bd 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidget.hpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidget.hpp @@ -16,6 +16,7 @@ #include "src/Insight/InsightWorker/InsightWorker.hpp" +#include "HexViewerWidgetSettings.hpp" #include "ByteItemContainerGraphicsView.hpp" namespace Bloom::Widgets @@ -42,6 +43,8 @@ namespace Bloom::Widgets const Targets::TargetMemoryDescriptor& targetMemoryDescriptor; InsightWorker& insightWorker; + HexViewerWidgetSettings settings = HexViewerWidgetSettings(); + QWidget* container = nullptr; QWidget* toolBar = nullptr; QWidget* bottomBar = nullptr; diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidgetSettings.hpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidgetSettings.hpp new file mode 100644 index 00000000..844720f2 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidgetSettings.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include +#include + +namespace Bloom::Widgets +{ + struct HexViewerWidgetSettings + { + bool highlightStackMemory = false; + std::optional stackPointerAddress; + + bool highlightFocusedMemory = false; + bool displayAsciiValues = false; + }; +}