diff options
| author | Josh Ferrell <josh@vector35.com> | 2023-11-08 15:07:54 -0500 |
|---|---|---|
| committer | Josh Ferrell <josh@vector35.com> | 2023-11-08 15:12:43 -0500 |
| commit | 679843a7d7fa00ace86726514bc22f6715ab839a (patch) | |
| tree | 7bee04ae6c5fc98ff35de547305c9143c68cde36 /ui/variablelist.h | |
| parent | 4f53a97ca027f2efda8d60b5d0fdcf2d02379500 (diff) | |
Variable list improvements
- Add back header for variable list
- Add warning to variable list when function exceeds configured complexity
- Navigate to data variables from variable list
- Add filtering to variable list
Diffstat (limited to 'ui/variablelist.h')
| -rw-r--r-- | ui/variablelist.h | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/ui/variablelist.h b/ui/variablelist.h index 6b57ecbb..ade5d195 100644 --- a/ui/variablelist.h +++ b/ui/variablelist.h @@ -1,5 +1,6 @@ #pragma once +#include <QtCore/QSortFilterProxyModel> #include <QtCore/QTimer> #include <QtWidgets/QListView> #include <QtWidgets/QStyledItemDelegate> @@ -7,6 +8,7 @@ #include "binaryninjacore.h" #include "dockhandler.h" +#include "filter.h" #include "uitypes.h" #include "viewframe.h" @@ -86,6 +88,8 @@ class VariableListItem bool isUserDefined() const; }; +Q_DECLARE_METATYPE(VariableListItem*); + /*! The backing model for the variable list widget, holds VariableListItem. \ingroup variablelist @@ -97,6 +101,7 @@ class BINARYNINJAUIAPI VariableListModel : public QAbstractListModel ViewFrame* m_view; BinaryViewRef m_data; FunctionRef m_func; + bool m_funcExceedsComplexity = false; BinaryNinja::AdvancedFunctionAnalysisDataRequestor m_analysisRequestor; std::vector<VariableListItem> m_items; @@ -114,6 +119,9 @@ class BINARYNINJAUIAPI VariableListModel : public QAbstractListModel //! Get the current function. FunctionRef function() const; + //! Whether or not the function exceeds the set complexity threshold + bool functionExceedsComplexity() const { return m_funcExceedsComplexity; } + //! Set the focused function and update the content of the list. void setFunction(FunctionRef func, BNFunctionGraphType il, const HighlightTokenState& hts); @@ -128,6 +136,16 @@ class BINARYNINJAUIAPI VariableListModel : public QAbstractListModel virtual QVariant headerData(int column, Qt::Orientation orientation, int role) const override; }; + +class BINARYNINJAUIAPI VariableSortFilterProxyModel : public QSortFilterProxyModel +{ + +public: + VariableSortFilterProxyModel(QObject* parent = nullptr) : QSortFilterProxyModel(parent) {} + + virtual bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const override; +}; + /*! \ingroup variablelist @@ -147,24 +165,34 @@ class VariableListItemDelegate : public QStyledItemDelegate \ingroup variablelist */ -class BINARYNINJAUIAPI VariableList : public SidebarWidget +class BINARYNINJAUIAPI VariableList : public SidebarWidget, public FilterTarget { Q_OBJECT + QWidget* m_header; + FilterEdit* m_filterEdit; + FilteredView* m_filteredList; + ViewFrame* m_view; BinaryViewRef m_data; + QSortFilterProxyModel* m_filteredListModel; VariableListModel* m_listModel; QListView* m_list; + QWidget* m_complexityWarning; + uint64_t m_lastOffset; QTimer* m_refreshTimer; void processRefresh(); + void variableDoubleClicked(); + public: VariableList(ViewFrame* view, BinaryViewRef data); + QWidget* headerWidget() override { return m_header; } void focus() override { refresh(); } void refresh(); @@ -195,6 +223,12 @@ class BINARYNINJAUIAPI VariableList : public SidebarWidget //! Set the selected variable's DSE policy. void setSelectedVariableDeadStoreElimination(BNDeadStoreElimination dse); + + virtual void setFilter(const std::string& filter) override; + virtual void scrollToFirstItem() override; + virtual void scrollToCurrentItem() override; + virtual void selectFirstItem() override; + virtual void activateFirstItem() override; }; /*! The main variable list dock widget. |
