From 411acbaa4a1d217e731d3df0b189445117be3b26 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Tue, 19 Mar 2019 15:41:08 -0400 Subject: Add in progress UI API headers --- ui/featuremap.h | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 ui/featuremap.h (limited to 'ui/featuremap.h') diff --git a/ui/featuremap.h b/ui/featuremap.h new file mode 100644 index 00000000..bc2a13cd --- /dev/null +++ b/ui/featuremap.h @@ -0,0 +1,106 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "binaryninjaapi.h" +#include "dockhandler.h" +#include "uitypes.h" + +class ContextMenuManager; +class Menu; +class View; +class ViewFrame; + +class BINARYNINJAUIAPI FeatureMap: public QWidget, public BinaryNinja::BinaryDataNotification, public DockContextHandler +{ + Q_OBJECT + + QImage* m_image = nullptr; + QImage* m_staticImage = nullptr; + std::vector> m_regions; + + ViewFrame* m_frame = nullptr; + BinaryViewRef m_data; + + bool m_updatesPending = false; + QTimer* m_updateTimer = nullptr; + size_t m_bvWidth = 0; + size_t m_bvHeight = 0; + uint64_t m_bvLength = 0; + + int m_defaultWidth = 100; + + int m_curLocX = 0; + int m_curLocY = 0; + uint64_t m_curAddr = 0; + bool m_navigationInProgress = false; + + QVector m_colors; + QVector m_colorTable; + + class BackgroundRefresh: public BinaryNinja::RefCountObject + { + std::mutex m_mutex; + bool m_valid; + FeatureMap* m_featureMap; + + public: + BackgroundRefresh(FeatureMap* featureMap); + void start(); + void abort(); + }; + + BinaryNinja::Ref m_backgroundRefresh; + +public: + FeatureMap(ViewFrame* frame, BinaryViewRef data); + virtual ~FeatureMap(); + + View* getBinaryDataNavigableView(bool preferGraphView = false); + void backgroundRefresh(); + std::pair getOffsetForAddress(uint64_t addr); + void setCurrentLocation(uint64_t address); + void updateTheme(); + + void renderDataVariable(const BinaryNinja::DataVariable& var, bool ignoreString = false); + + virtual void OnAnalysisFunctionAdded(BinaryNinja::BinaryView* data, BinaryNinja::Function* func) override; + virtual void OnAnalysisFunctionRemoved(BinaryNinja::BinaryView* data, BinaryNinja::Function* func) override; + virtual void OnAnalysisFunctionUpdated(BinaryNinja::BinaryView* data, BinaryNinja::Function* func) override; + virtual void OnDataVariableAdded(BinaryNinja::BinaryView* data, const BinaryNinja::DataVariable& var) override; + virtual void OnDataVariableRemoved(BinaryNinja::BinaryView* data, const BinaryNinja::DataVariable& var) override; + virtual void OnDataVariableUpdated(BinaryNinja::BinaryView* data, const BinaryNinja::DataVariable& var) override; + virtual void OnStringFound(BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override; + virtual void OnStringRemoved(BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override; + + void drawImageRect(uint64_t addr, size_t len, uint8_t color); + + virtual QSize sizeHint() const override; + +protected: + virtual void contextMenuEvent(QContextMenuEvent* event) override; + virtual void mouseMoveEvent(QMouseEvent* event) override; + virtual void mousePressEvent(QMouseEvent* event) override; + virtual void resizeEvent(QResizeEvent* event) override; + virtual void paintEvent(QPaintEvent* event) override; + void scrollTo(int x, int y, bool addHistoryEntry = false); + +Q_SIGNALS: + void notifyThemeUpdated(); + +private Q_SLOTS: + void refresh(); + void updateThemeInternal(); + void updateTimerEvent(); +}; -- cgit v1.3.1