summaryrefslogtreecommitdiff
path: root/ui/xreflist.h
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2019-03-19 15:41:08 -0400
committerRusty Wagner <rusty@vector35.com>2019-03-20 13:00:17 -0400
commit411acbaa4a1d217e731d3df0b189445117be3b26 (patch)
tree49b5c5290058ffb98dd23ec9a7c1a49921254d15 /ui/xreflist.h
parentca1bc587c22928bbd7198813064c9615c3c12771 (diff)
Add in progress UI API headers
Diffstat (limited to 'ui/xreflist.h')
-rw-r--r--ui/xreflist.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/ui/xreflist.h b/ui/xreflist.h
new file mode 100644
index 00000000..961e1238
--- /dev/null
+++ b/ui/xreflist.h
@@ -0,0 +1,87 @@
+#pragma once
+
+#include <QtCore/QAbstractItemModel>
+#include <QtCore/QItemSelectionModel>
+#include <QtWidgets/QListView>
+#include <QtWidgets/QStyledItemDelegate>
+#include "binaryninjaapi.h"
+#include "dockhandler.h"
+#include "viewframe.h"
+
+
+class BINARYNINJAUIAPI CrossReferenceListModel: public QAbstractItemModel
+{
+ Q_OBJECT
+
+ QWidget* m_owner;
+ BinaryViewRef m_data;
+ std::vector<BinaryNinja::ReferenceSource> m_refs;
+
+public:
+ CrossReferenceListModel(QWidget* parent, BinaryViewRef data);
+
+ virtual QModelIndex index(int row, int col, const QModelIndex& parent) const override;
+ virtual QModelIndex parent(const QModelIndex& i) const override;
+ virtual bool hasChildren(const QModelIndex& parent) const override;
+ virtual int rowCount(const QModelIndex& parent) const override;
+ virtual int columnCount(const QModelIndex& parent) const override;
+ virtual QVariant data(const QModelIndex& i, int role) const override;
+
+ bool setModelData(const std::vector<BinaryNinja::ReferenceSource>& refs, QItemSelectionModel* selectionModel, bool& selectionUpdated);
+};
+
+
+class BINARYNINJAUIAPI CrossReferenceItemDelegate: public QStyledItemDelegate
+{
+ Q_OBJECT
+
+ QFont m_font;
+ int m_baseline, m_charWidth, m_charHeight, m_charOffset;
+
+ void initFont();
+
+public:
+ CrossReferenceItemDelegate(QWidget* parent);
+
+ void updateFonts();
+
+ virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& idx) const override;
+ virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& idx) const override;
+};
+
+
+class BINARYNINJAUIAPI CrossReferenceList: public QListView, public DockContextHandler
+{
+ Q_OBJECT
+
+ ViewFrame* m_view;
+ CrossReferenceListModel* m_list;
+ CrossReferenceItemDelegate* m_itemDelegate;
+ BinaryViewRef m_data;
+
+ QTimer* m_hoverTimer;
+ QPoint m_hoverPos;
+
+ uint64_t m_curRefTarget = 0;
+
+protected:
+ virtual void contextMenuEvent(QContextMenuEvent* event) override;
+ virtual void keyPressEvent(QKeyEvent* e) override;
+ virtual void mouseMoveEvent(QMouseEvent* e) override;
+ virtual void mousePressEvent(QMouseEvent* e) override;
+ virtual bool shouldBeVisible(ViewFrame* frame) override;
+ virtual void updateFonts() override;
+ virtual void wheelEvent(QWheelEvent* e) override;
+
+private Q_SLOTS:
+ void goToReference(const QModelIndex& idx);
+ void hoverTimerEvent();
+
+public:
+ CrossReferenceList(ViewFrame* view, BinaryViewRef data);
+ virtual ~CrossReferenceList();
+
+ void setCurrentSelection(uint64_t begin, uint64_t end);
+
+ bool hasSelection();
+};