diff options
Diffstat (limited to 'ui')
| -rw-r--r-- | ui/bndbimportdialog.h | 2 | ||||
| -rw-r--r-- | ui/filter.h | 34 | ||||
| -rw-r--r-- | ui/logview.h | 2 | ||||
| -rw-r--r-- | ui/metadatachoicedialog.h | 5 | ||||
| -rw-r--r-- | ui/projectbrowser.h | 15 | ||||
| -rw-r--r-- | ui/searchresult.h | 5 | ||||
| -rw-r--r-- | ui/stringsview.h | 15 | ||||
| -rw-r--r-- | ui/symbollist.h | 6 | ||||
| -rw-r--r-- | ui/taglist.h | 12 | ||||
| -rw-r--r-- | ui/typebrowser.h | 18 | ||||
| -rw-r--r-- | ui/variablelist.h | 2 |
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; |
