summaryrefslogtreecommitdiff
path: root/ui/variablelist.h
diff options
context:
space:
mode:
authorJosh Ferrell <josh@vector35.com>2023-11-08 15:07:54 -0500
committerJosh Ferrell <josh@vector35.com>2023-11-08 15:12:43 -0500
commit679843a7d7fa00ace86726514bc22f6715ab839a (patch)
tree7bee04ae6c5fc98ff35de547305c9143c68cde36 /ui/variablelist.h
parent4f53a97ca027f2efda8d60b5d0fdcf2d02379500 (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.h36
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.