summaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/bndbimportdialog.h2
-rw-r--r--ui/filter.h34
-rw-r--r--ui/logview.h2
-rw-r--r--ui/metadatachoicedialog.h5
-rw-r--r--ui/projectbrowser.h15
-rw-r--r--ui/searchresult.h5
-rw-r--r--ui/stringsview.h15
-rw-r--r--ui/symbollist.h6
-rw-r--r--ui/taglist.h12
-rw-r--r--ui/typebrowser.h18
-rw-r--r--ui/variablelist.h2
11 files changed, 81 insertions, 35 deletions
diff --git a/ui/bndbimportdialog.h b/ui/bndbimportdialog.h
index eb8f0dfd..4578b76c 100644
--- a/ui/bndbimportdialog.h
+++ b/ui/bndbimportdialog.h
@@ -117,7 +117,7 @@ public:
BndbImportDialog(QWidget* parent, BinaryViewRef view);
~BndbImportDialog() = default;
- void setFilter(const std::string& filter) override;
+ void setFilter(const std::string& filter, FilterOptions options) override;
void scrollToFirstItem() override;
void scrollToCurrentItem() override;
void ensureSelection() override;
diff --git a/ui/filter.h b/ui/filter.h
index 98417f65..3178d4b8 100644
--- a/ui/filter.h
+++ b/ui/filter.h
@@ -14,12 +14,25 @@
\ingroup filter
*/
+enum BINARYNINJAUIAPI FilterOption {
+ NoFilterOption = 0,
+ CaseSensitiveOption = 1,
+ UseRegexOption = 2,
+};
+
+Q_DECLARE_FLAGS(FilterOptions, FilterOption)
+
+
+/*!
+
+ \ingroup filter
+*/
class BINARYNINJAUIAPI FilterTarget
{
public:
virtual ~FilterTarget() {}
- virtual void setFilter(const std::string& filter) = 0;
+ virtual void setFilter(const std::string& filter, FilterOptions options) = 0;
virtual void scrollToFirstItem() = 0;
virtual void scrollToCurrentItem() = 0;
@@ -44,10 +57,27 @@ class BINARYNINJAUIAPI FilterEdit : public QLineEdit
Q_OBJECT
FilterTarget* m_target;
+ FilterOptions m_filterOptions;
+
+ QAction* m_clearAction;
+ QAction* m_regexAction;
+ QAction* m_regexWarningAction;
+ QAction* m_caseSensitivityAction;
+
+ QIcon getActionIcon(const QString& iconName, bool enabled) const;
public:
FilterEdit(FilterTarget* target);
+ void showRegexToggle(bool enabled);
+
+ void setRegexValidationError(const QString& error);
+
+ FilterOptions getFilterOptions() const { return m_filterOptions; }
+
+ Q_SIGNALS:
+ void optionsChanged(FilterOptions options);
+
protected:
virtual void paintEvent(QPaintEvent* event) override;
virtual void keyPressEvent(QKeyEvent* event) override;
@@ -76,7 +106,7 @@ class BINARYNINJAUIAPI FilteredView : public QWidget
void focusAndSelectFilter();
bool hasFilterText() const;
- static bool match(const std::string& name, const std::string& filter);
+ static bool match(const std::string& name, const std::string& filter, bool caseSensitive = false);
private Q_SLOTS:
void timerStart();
diff --git a/ui/logview.h b/ui/logview.h
index 0aaf9372..c2488ed5 100644
--- a/ui/logview.h
+++ b/ui/logview.h
@@ -268,7 +268,7 @@ class BINARYNINJAUIAPI LogView : public SidebarWidget, public FilterTarget
void focus() override;
LogListModel* model() { return m_listModel; }
- void setFilter(const std::string& filter) override;
+ void setFilter(const std::string& filter, FilterOptions options) override;
LoggingScope getScope() const { return m_model->getScope(); }
void setScope(LoggingScope scope) { m_model->setScope(scope); }
diff --git a/ui/metadatachoicedialog.h b/ui/metadatachoicedialog.h
index 12de4a55..79cf662f 100644
--- a/ui/metadatachoicedialog.h
+++ b/ui/metadatachoicedialog.h
@@ -67,6 +67,7 @@ class BINARYNINJAUIAPI ManagedTableView : public QTableView, public FilterTarget
ManagedTableModel* m_model;
std::string m_filter;
+ FilterOptions m_filterOptions;
ManagedTableDelegate* m_delegate;
@@ -78,7 +79,7 @@ public:
int getCurrentSelection();
void forceFilterUpdate() {
- setFilter(m_filter);
+ setFilter(m_filter, m_filterOptions);
};
void resetModel();
@@ -88,7 +89,7 @@ public:
virtual void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) override;
- virtual void setFilter(const std::string& filter) override;
+ virtual void setFilter(const std::string& filter, FilterOptions options) override;
virtual void scrollToFirstItem() override;
virtual void scrollToCurrentItem() override;
virtual void ensureSelection() override;
diff --git a/ui/projectbrowser.h b/ui/projectbrowser.h
index 11e14058..348d5ff0 100644
--- a/ui/projectbrowser.h
+++ b/ui/projectbrowser.h
@@ -173,11 +173,14 @@ class BINARYNINJAUIAPI ProjectTree: public QTreeView, public FilterTarget
QSet<QString> m_expandedIds;
+ FilterOptions m_filterOptions;
+ std::string m_filter;
+
virtual void scrollToFirstItem() override;
virtual void scrollToCurrentItem() override;
virtual void ensureSelection() override;
virtual void activateSelection() override;
- virtual void setFilter(const std::string& filter) override;
+ virtual void setFilter(const std::string& filter, FilterOptions options) override;
protected:
void mousePressEvent(QMouseEvent* event) override;
@@ -188,7 +191,7 @@ public:
ProjectTree(QWidget* parent = nullptr);
Q_SIGNALS:
- void filterChanged(const QString& filter);
+ void filterChanged(const QString& filter, FilterOptions options);
};
@@ -196,11 +199,15 @@ class BINARYNINJAUIAPI RecentsList: public QListWidget, public FilterTarget
{
Q_OBJECT
+ QString m_filter;
+ FilterOptions m_filterOptions;
+
virtual void scrollToFirstItem() override;
virtual void scrollToCurrentItem() override;
virtual void ensureSelection() override;
virtual void activateSelection() override;
- virtual void setFilter(const std::string& filter) override;
+ void applyFilter();
+ virtual void setFilter(const std::string& filter, FilterOptions options) override;
public:
@@ -333,7 +340,7 @@ private slots:
void itemSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected);
void itemChanged(QStandardItem* item);
void handleItemsDropped(Qt::DropAction action, const QList<QString> fileIds, const QList<QString> folderIds, const QList<QUrl> newUrls, ProjectFolderRef newParentFolder);
- void onTreeFilterChanged(const QString& filter);
+ void onTreeFilterChanged(const QString& filter, FilterOptions options);
protected:
void SelectItems(std::vector<ProjectFileRef> files, std::vector<ProjectFolderRef> folders);
diff --git a/ui/searchresult.h b/ui/searchresult.h
index 13fa77f9..42b79252 100644
--- a/ui/searchresult.h
+++ b/ui/searchresult.h
@@ -313,15 +313,14 @@ class BINARYNINJAUIAPI SearchResultHeaderWidget : public QWidget, public FilterT
{
Q_OBJECT
- QLineEdit* m_search;
+ FilterEdit* m_search;
QComboBox* m_mode;
- ClickableIcon* m_caseSensitive;
ClickableIcon* m_ignoreWhitespace;
public:
SearchResultHeaderWidget();
- virtual void setFilter(const std::string&) override {}
+ virtual void setFilter(const std::string&, FilterOptions) override {}
virtual void scrollToFirstItem() override {}
virtual void scrollToCurrentItem() override {}
virtual void ensureSelection() override {}
diff --git a/ui/stringsview.h b/ui/stringsview.h
index 4be86d60..b3ced9ec 100644
--- a/ui/stringsview.h
+++ b/ui/stringsview.h
@@ -68,7 +68,10 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina
std::vector<StringsListItem> m_strings;
std::map<uint64_t, uint64_t> m_refCounts;
std::map<BinaryNinja::DerivedString, uint64_t> m_derivedRefCounts;
- std::string m_filter;
+
+ QString m_filter;
+ FilterOptions m_filterOptions;
+ QRegularExpression m_filterRegex; // This holds a compiled regex for m_filter
size_t m_filteredByOptions;
@@ -116,9 +119,9 @@ class BINARYNINJAUIAPI StringsListModel : public QAbstractItemModel, public Bina
virtual void sort(int col, Qt::SortOrder order) override;
- void setFilter(const std::string& filter);
+ void setFilter(const QString& filter, FilterOptions options);
- void updateFilter() { setFilter(m_filter); };
+ void updateFilter() { setFilter(m_filter, m_filterOptions); };
size_t getFilteredStringCount() const { return m_filteredByOptions; }
size_t getStringCount() const { return m_strings.size(); }
@@ -199,7 +202,7 @@ class BINARYNINJAUIAPI StringsView : public QTableView, public View, public Filt
virtual void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) override;
- virtual void setFilter(const std::string& filter) override;
+ virtual void setFilter(const std::string& filter, FilterOptions options) override;
virtual void scrollToFirstItem() override;
virtual void scrollToCurrentItem() override;
virtual void ensureSelection() override;
@@ -242,7 +245,7 @@ class BINARYNINJAUIAPI StringsContainer : public QWidget, public ViewContainer
friend class StringsView;
StringsView* m_strings;
- FilteredView* m_filter;
+ FilteredView* m_filteredView;
FilterEdit* m_separateEdit = nullptr;
StringsViewSidebarWidget* m_widget;
UIActionHandler m_actionHandler;
@@ -252,7 +255,7 @@ class BINARYNINJAUIAPI StringsContainer : public QWidget, public ViewContainer
virtual View* getView() override { return m_strings; }
StringsView* getStringsView() { return m_strings; }
- FilteredView* getFilter() { return m_filter; }
+ FilteredView* getFilter() { return m_filteredView; }
FilterEdit* getSeparateFilterEdit() { return m_separateEdit; }
protected:
diff --git a/ui/symbollist.h b/ui/symbollist.h
index 1bc4a6dd..6f196ddf 100644
--- a/ui/symbollist.h
+++ b/ui/symbollist.h
@@ -229,6 +229,7 @@ class BINARYNINJAUIAPI SymbolListModel : public QAbstractItemModel, public Binar
std::unique_ptr<std::deque<NamedObject>> m_oldCurSyms;
NamedObject m_currentSym;
std::string m_filter;
+ FilterOptions m_filterOptions;
int m_maxWidth = 32;
std::mutex m_updateMutex;
@@ -290,7 +291,7 @@ class BINARYNINJAUIAPI SymbolListModel : public QAbstractItemModel, public Binar
bool hasSymbols() const;
int getMaximumWidth() const { return m_maxWidth; }
- void setFilter(const std::string& filter);
+ void setFilter(const std::string& filter, FilterOptions options);
void showExportedDataVars(bool show) { m_showExportedDataVars = show; }
void showExportedFunctions(bool show) { m_showExportedFunctions = show; }
void showLocalFunctions(bool show) { m_showLocalFunctions = show; }
@@ -348,6 +349,7 @@ class BINARYNINJAUIAPI SymbolList : public QListView, public FilterTarget
bool m_showLocalDataVars;
bool m_showImports;
std::string m_filter;
+ FilterOptions m_filterOptions;
SymbolListModel::NamedObject m_index;
SymbolListModel::NamedObject m_topIndex;
@@ -361,7 +363,7 @@ class BINARYNINJAUIAPI SymbolList : public QListView, public FilterTarget
virtual void scrollToCurrentItem() override;
virtual void ensureSelection() override;
virtual void activateSelection() override;
- virtual void setFilter(const std::string& filter) override;
+ virtual void setFilter(const std::string& filter, FilterOptions options) override;
bool hasSymbols();
diff --git a/ui/taglist.h b/ui/taglist.h
index 1f1e09cb..e19d899a 100644
--- a/ui/taglist.h
+++ b/ui/taglist.h
@@ -143,8 +143,9 @@ class BINARYNINJAUIAPI TagList : public QTreeView, public FilterTarget
typedef std::function<bool(const BinaryNinja::TagReference&)> FilterFn;
private:
- bool m_hasFilter;
- FilterFn m_filter;
+ std::optional<FilterFn> m_filterFn;
+
+ FilterOptions m_searchFilterOptions;
std::string m_searchFilter;
QTimer* m_hoverTimer;
@@ -161,7 +162,7 @@ class BINARYNINJAUIAPI TagList : public QTreeView, public FilterTarget
virtual void resizeEvent(QResizeEvent* event) override;
void goToReference(const QModelIndex& idx);
- void setFilter(const std::string& filter) override;
+ void setFilter(const std::string& filter, FilterOptions options) override;
private Q_SLOTS:
void hoverTimerEvent();
@@ -186,7 +187,7 @@ class BINARYNINJAUIAPI TagList : public QTreeView, public FilterTarget
void filterTagReferences(std::vector<BinaryNinja::TagReference>& refs);
void clearFilter();
- void setFilter(FilterFn filter);
+ void setFilterFunction(FilterFn filter);
void setFilterView(FilteredView* filterView) { m_filterView = filterView; }
bool hasSelection();
@@ -255,6 +256,7 @@ class BINARYNINJAUIAPI TagListDialog : public QDialog
private:
BinaryViewRef m_data;
TagList* m_list;
+ FilterEdit* m_filterEdit;
FilteredView* m_filter;
AddFn m_addFn;
@@ -263,7 +265,7 @@ class BINARYNINJAUIAPI TagListDialog : public QDialog
public:
TagListDialog(QWidget* parent, ViewFrame* frame, BinaryViewRef data, AddFn addFn);
- void setFilter(TagList::FilterFn filter);
+ void setFilterFunction(TagList::FilterFn filter);
private Q_SLOTS:
void updateActive(const QItemSelection&, const QItemSelection&);
diff --git a/ui/typebrowser.h b/ui/typebrowser.h
index 60eb0c30..6cd2ce89 100644
--- a/ui/typebrowser.h
+++ b/ui/typebrowser.h
@@ -65,7 +65,7 @@ public:
virtual std::string text(int column) const = 0;
virtual bool lessThan(const TypeBrowserTreeNode& other, int column) const = 0;
- virtual bool filter(const std::string& filter, TypeBrowserFilterMode mode) const = 0;
+ virtual bool filter(const std::string& filter, TypeBrowserFilterMode mode, bool caseSensitive) const = 0;
virtual void updateChildren(bool recursive, UpdateNodeCallback update);
};
@@ -78,7 +78,7 @@ public:
virtual std::string text(int column) const override;
virtual bool lessThan(const TypeBrowserTreeNode& other, int column) const override;
- virtual bool filter(const std::string& filter, TypeBrowserFilterMode mode) const override;
+ virtual bool filter(const std::string& filter, TypeBrowserFilterMode mode, bool caseSensitive) const override;
protected:
virtual void generateChildren() override;
@@ -96,7 +96,7 @@ public:
virtual std::string text(int column) const override;
virtual bool lessThan(const TypeBrowserTreeNode& other, int column) const override;
- virtual bool filter(const std::string& filter, TypeBrowserFilterMode mode) const override;
+ virtual bool filter(const std::string& filter, TypeBrowserFilterMode mode, bool caseSensitive) const override;
protected:
virtual void generateChildren() override;
@@ -148,7 +148,7 @@ public:
virtual std::string text(int column) const override;
virtual bool lessThan(const TypeBrowserTreeNode& other, int column) const override;
- virtual bool filter(const std::string& filter, TypeBrowserFilterMode mode) const override;
+ virtual bool filter(const std::string& filter, TypeBrowserFilterMode mode, bool caseSensitive) const override;
protected:
virtual void generateChildren() override;
@@ -166,7 +166,7 @@ public:
virtual ~TypeContainerTreeNode();
virtual std::string text(int column) const override;
- virtual bool filter(const std::string& filter, TypeBrowserFilterMode mode) const override;
+ virtual bool filter(const std::string& filter, TypeBrowserFilterMode mode, bool caseSensitive) const override;
virtual bool lessThan(const TypeBrowserTreeNode& other, int column) const override;
const std::string& containerId() const { return m_containerId; }
@@ -293,7 +293,7 @@ public:
std::shared_ptr<TypeBrowserTreeNode> nodeForIndex(const QModelIndex& index) const;
QModelIndex indexForNode(std::shared_ptr<TypeBrowserTreeNode> node, int column = 0) const;
- bool filter(const QModelIndex& index, const std::string& filter, TypeBrowserFilterMode mode) const;
+ bool filter(const QModelIndex& index, const std::string& filter, TypeBrowserFilterMode mode, bool caseSensitive) const;
bool lessThan(const QModelIndex& left, const QModelIndex& right) const;
void OnTypeDefined(BinaryNinja::BinaryView* data, const BinaryNinja::QualifiedName& name, BinaryNinja::Type* type) override;
@@ -326,7 +326,9 @@ class BINARYNINJAUIAPI TypeBrowserFilterModel : public QSortFilterProxyModel
Q_OBJECT
BinaryViewRef m_data;
TypeBrowserModel* m_model;
+ std::string m_originalFilter;
std::string m_filter;
+ bool m_filterCaseSensitive = false;
TypeBrowserFilterMode m_filterMode;
bool m_exactOnTop;
@@ -337,7 +339,7 @@ protected:
public:
TypeBrowserFilterModel(BinaryViewRef data, TypeBrowserModel* model, QObject* parent);
- void setFilter(const std::string& filter);
+ void setFilter(const std::string& filter, FilterOptions options);
TypeBrowserFilterMode filterMode() const { return m_filterMode; }
void setFilterMode(TypeBrowserFilterMode newMode) { m_filterMode = newMode; }
@@ -435,7 +437,7 @@ public:
virtual StatusBarWidget* getStatusBarWidget() override;
virtual QWidget* getHeaderOptionsWidget() override;
- virtual void setFilter(const std::string& filter) override;
+ virtual void setFilter(const std::string& filter, FilterOptions options) override;
virtual void scrollToFirstItem() override;
virtual void scrollToCurrentItem() override;
virtual void ensureSelection() override;
diff --git a/ui/variablelist.h b/ui/variablelist.h
index 43e6b65c..923919ff 100644
--- a/ui/variablelist.h
+++ b/ui/variablelist.h
@@ -254,7 +254,7 @@ class BINARYNINJAUIAPI VariableList : public SidebarWidget, public FilterTarget
//! Copy selected variables to clipboard
void copy();
- virtual void setFilter(const std::string& filter) override;
+ virtual void setFilter(const std::string& filter, FilterOptions options) override;
virtual void scrollToFirstItem() override;
virtual void scrollToCurrentItem() override;
virtual void ensureSelection() override;