From d1e7b900dedd119b48f8c6727669c9642fa12399 Mon Sep 17 00:00:00 2001 From: Nav Date: Thu, 9 Mar 2023 20:46:26 +0000 Subject: [PATCH] Fixed HexViewerItem pointer invalidation bug --- src/Insight/CMakeLists.txt | 1 + .../HexViewerWidget/GraphicsItem.hpp | 6 +++++ .../HexViewerWidget/HexViewerItem.cpp | 25 +++++++++++++++++++ .../HexViewerWidget/HexViewerItem.hpp | 18 +++---------- 4 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerItem.cpp diff --git a/src/Insight/CMakeLists.txt b/src/Insight/CMakeLists.txt index 4db830ab..c000e4ba 100755 --- a/src/Insight/CMakeLists.txt +++ b/src/Insight/CMakeLists.txt @@ -76,6 +76,7 @@ target_sources( ${CMAKE_CURRENT_SOURCE_DIR}/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerWidget.cpp ${CMAKE_CURRENT_SOURCE_DIR}/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ItemGraphicsView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ItemGraphicsScene.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerItem.cpp ${CMAKE_CURRENT_SOURCE_DIR}/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/ByteItem.cpp ${CMAKE_CURRENT_SOURCE_DIR}/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/GroupItem.cpp ${CMAKE_CURRENT_SOURCE_DIR}/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/TopLevelGroupItem.cpp diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/GraphicsItem.hpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/GraphicsItem.hpp index d565f5e9..11d7bc80 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/GraphicsItem.hpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/GraphicsItem.hpp @@ -20,6 +20,12 @@ namespace Bloom::Widgets this->setCacheMode(QGraphicsItem::CacheMode::NoCache); } + ~GraphicsItem() { + if (this->hexViewerItem != nullptr) { + this->hexViewerItem->allocatedGraphicsItem = nullptr; + } + } + void setHexViewerItem(HexViewerItem* item) { if (this->hexViewerItem != nullptr) { this->hexViewerItem->allocatedGraphicsItem = nullptr; diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerItem.cpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerItem.cpp new file mode 100644 index 00000000..b417d5a7 --- /dev/null +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerItem.cpp @@ -0,0 +1,25 @@ +#include "HexViewerItem.hpp" + +#include "GraphicsItem.hpp" + +namespace Bloom::Widgets +{ + HexViewerItem::HexViewerItem(Targets::TargetMemoryAddress startAddress, HexViewerItem* parent) + : startAddress(startAddress) + , parent(parent) + {} + + HexViewerItem::~HexViewerItem() { + if (this->allocatedGraphicsItem != nullptr) { + this->allocatedGraphicsItem->setHexViewerItem(nullptr); + } + } + + QPoint HexViewerItem::position() const { + if (this->parent != nullptr) { + return this->parent->position() + this->relativePosition; + } + + return this->relativePosition; + } +} diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerItem.hpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerItem.hpp index 59736811..9b0a9536 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerItem.hpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetMemoryInspectionPane/HexViewerWidget/HexViewerItem.hpp @@ -25,23 +25,11 @@ namespace Bloom::Widgets HexViewerItem* parent = nullptr; GraphicsItem* allocatedGraphicsItem = nullptr; - HexViewerItem( - Targets::TargetMemoryAddress startAddress, - HexViewerItem* parent = nullptr - ) - : startAddress(startAddress) - , parent(parent) - {}; + HexViewerItem(Targets::TargetMemoryAddress startAddress, HexViewerItem* parent = nullptr); - virtual ~HexViewerItem() = default; + virtual ~HexViewerItem(); - QPoint position() const { - if (this->parent != nullptr) { - return this->parent->position() + this->relativePosition; - } - - return this->relativePosition; - } + QPoint position() const; virtual QSize size() const = 0;