summaryrefslogtreecommitdiff
path: root/ui/filter.h
diff options
context:
space:
mode:
Diffstat (limited to 'ui/filter.h')
-rw-r--r--ui/filter.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/ui/filter.h b/ui/filter.h
new file mode 100644
index 00000000..5a43100f
--- /dev/null
+++ b/ui/filter.h
@@ -0,0 +1,54 @@
+#pragma once
+
+#include <QtWidgets/QLineEdit>
+#include "binaryninjaapi.h"
+#include "uicontext.h"
+
+class BINARYNINJAUIAPI FilterTarget
+{
+public:
+ virtual ~FilterTarget() {}
+
+ virtual void setFilter(const std::string& filter) = 0;
+ virtual void scrollToFirstItem() = 0;
+ virtual void scrollToCurrentItem() = 0;
+ virtual void selectFirstItem() = 0;
+ virtual void activateFirstItem() = 0;
+ virtual void closeFilter();
+};
+
+class BINARYNINJAUIAPI FilterEdit: public QLineEdit
+{
+ Q_OBJECT
+
+ FilterTarget* m_target;
+
+public:
+ FilterEdit(QWidget* parent, FilterTarget* target);
+
+protected:
+ virtual void keyPressEvent(QKeyEvent* event) override;
+};
+
+class BINARYNINJAUIAPI FilteredView: public QWidget
+{
+ Q_OBJECT
+
+ FilterTarget* m_target;
+ QWidget* m_widget;
+ FilterEdit* m_filter;
+
+public:
+ FilteredView(QWidget* parent, QWidget* filtered, FilterTarget* target);
+ void updateFonts();
+ void clearFilter();
+ void showFilter(const QString& initialText);
+
+ static bool match(const std::string& name, const std::string& filter);
+
+protected:
+ virtual void keyPressEvent(QKeyEvent* event) override;
+
+private Q_SLOTS:
+ void filterChanged(const QString& filter);
+};