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/xreflist.h | |
| parent | ca1bc587c22928bbd7198813064c9615c3c12771 (diff) | |
Add in progress UI API headers
Diffstat (limited to 'ui/xreflist.h')
| -rw-r--r-- | ui/xreflist.h | 87 |
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(); +}; |
