diff options
| author | Rusty Wagner <rusty@vector35.com> | 2019-03-19 15:41:08 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2019-03-20 13:00:17 -0400 |
| commit | 411acbaa4a1d217e731d3df0b189445117be3b26 (patch) | |
| tree | 49b5c5290058ffb98dd23ec9a7c1a49921254d15 /ui/featuremap.h | |
| parent | ca1bc587c22928bbd7198813064c9615c3c12771 (diff) | |
Add in progress UI API headers
Diffstat (limited to 'ui/featuremap.h')
| -rw-r--r-- | ui/featuremap.h | 106 |
1 files changed, 106 insertions, 0 deletions
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 <QtWidgets/QAction> +#include <QtGui/QColor> +#include <QtGui/QImage> +#include <QtWidgets/QMenu> +#include <QtGui/QPainter> +#include <QtCore/QRect> +#include <QtCore/QTimer> +#include <QtCore/QVector> +#include <QtWidgets/QWidget> +#include <mutex> +#include <tuple> +#include <vector> + +#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<std::pair<uint64_t, uint64_t>> 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<QColor> m_colors; + QVector<QRgb> 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<BackgroundRefresh> m_backgroundRefresh; + +public: + FeatureMap(ViewFrame* frame, BinaryViewRef data); + virtual ~FeatureMap(); + + View* getBinaryDataNavigableView(bool preferGraphView = false); + void backgroundRefresh(); + std::pair<uint64_t, bool> 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(); +}; |
