|
15 | 15 | #include <QtWidgets/QCheckBox> |
16 | 16 | #include <QtWidgets/QFrame> |
17 | 17 | #include <QtWidgets/QGridLayout> |
| 18 | +#include <QtWidgets/QDialog> |
18 | 19 |
|
19 | 20 | #include <vector> |
20 | 21 | #include <deque> |
@@ -534,6 +535,7 @@ class BINARYNINJAUIAPI CrossReferenceContainer |
534 | 535 | virtual QModelIndex nextIndex() = 0; |
535 | 536 | virtual QModelIndex prevIndex() = 0; |
536 | 537 | virtual QModelIndexList selectedRows() const = 0; |
| 538 | + virtual void setSavedSelection(std::optional<int> idx) = 0; |
537 | 539 | virtual bool hasSelection() const = 0; |
538 | 540 | virtual void setNewSelection(std::vector<XrefItem>& refs, bool newRefTarget, const SelectionInfoForXref& ref, |
539 | 541 | bool dependentRefsExceeded) = 0; |
@@ -574,6 +576,7 @@ class BINARYNINJAUIAPI CrossReferenceTree : public QTreeView, public CrossRefere |
574 | 576 | virtual void keyPressEvent(QKeyEvent* e) override; |
575 | 577 | virtual bool event(QEvent* event) override; |
576 | 578 | virtual QModelIndexList selectedRows() const override { return selectionModel()->selectedRows(); } |
| 579 | + virtual void setSavedSelection(std::optional<int> idx) override; |
577 | 580 | virtual QModelIndex translateIndex(const QModelIndex& idx) const override { return m_model->mapToSource(idx); } |
578 | 581 | virtual void updateFonts() override; |
579 | 582 | virtual int leafCount() const override; |
@@ -617,6 +620,7 @@ class BINARYNINJAUIAPI CrossReferenceTable : public QTableView, public CrossRefe |
617 | 620 | virtual QModelIndex prevIndex() override; |
618 | 621 | virtual bool hasSelection() const override { return selectionModel()->selectedRows().size() != 0; } |
619 | 622 | virtual QModelIndexList selectedRows() const override { return selectionModel()->selectedRows(); } |
| 623 | + virtual void setSavedSelection(std::optional<int> idx) override; |
620 | 624 | virtual bool getReference(const QModelIndex& idx, XrefItem** refPtr) const override; |
621 | 625 | virtual void mouseMoveEvent(QMouseEvent* e) override; |
622 | 626 | virtual void mousePressEvent(QMouseEvent* e) override; |
@@ -704,6 +708,8 @@ class BINARYNINJAUIAPI CrossReferenceWidget : public SidebarWidget, public UICon |
704 | 708 | virtual bool selectFirstRow(); |
705 | 709 | virtual bool hasSelection() const; |
706 | 710 | virtual void goToReference(const QModelIndex& idx); |
| 711 | + QModelIndexList selectedRows() const; |
| 712 | + void setSavedSelection(std::optional<int> idx); |
707 | 713 |
|
708 | 714 | virtual void restartHoverTimer(QMouseEvent* e); |
709 | 715 | virtual void startHoverTimer(QMouseEvent* e); |
@@ -741,6 +747,9 @@ public Q_SLOTS: |
741 | 747 | void selectionChanged(); |
742 | 748 | void typeChanged(int index, bool checked); |
743 | 749 | void directionChanged(int change, bool checked); |
| 750 | + |
| 751 | +Q_SIGNALS: |
| 752 | + void navigatedToCrossReference(); |
744 | 753 | }; |
745 | 754 |
|
746 | 755 | /*! |
@@ -771,6 +780,23 @@ class BINARYNINJAUIAPI PinnedCrossReferenceSidebarWidgetType : public SidebarWid |
771 | 780 | }; |
772 | 781 |
|
773 | 782 |
|
| 783 | +class BINARYNINJAUIAPI CrossReferenceDialog : public QDialog |
| 784 | +{ |
| 785 | + Q_OBJECT |
| 786 | + |
| 787 | + CrossReferenceWidget* m_widget; |
| 788 | + |
| 789 | + static constexpr int MINIMUM_WIDTH = 720; |
| 790 | + static constexpr int MINIMUM_HEIGHT = 480; |
| 791 | + |
| 792 | +public: |
| 793 | + CrossReferenceDialog(UIContext* context, View* view, BinaryViewRef data, const SelectionInfoForXref& selection); |
| 794 | + |
| 795 | + void setSavedSelection(std::optional<int> idx); |
| 796 | + std::optional<int> selection() const; |
| 797 | +}; |
| 798 | + |
| 799 | + |
774 | 800 | // https://github.com/CuriousCrow/QCheckboxCombo |
775 | 801 | /*! QCheckboxCombo is a combobox widget that contains items with checkboxes. |
776 | 802 |
|
|
0 commit comments