diff options
Diffstat (limited to 'examples/triage/strings.h')
| -rw-r--r-- | examples/triage/strings.h | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/examples/triage/strings.h b/examples/triage/strings.h index 14762b34..31617f08 100644 --- a/examples/triage/strings.h +++ b/examples/triage/strings.h @@ -1,21 +1,43 @@ #pragma once #include <QtCore/QAbstractItemModel> +#include <QtCore/QTimer> #include <QtWidgets/QTreeView> #include "filter.h" -class GenericStringsModel : public QAbstractItemModel +class GenericStringsModel : public QAbstractItemModel, public BinaryNinja::BinaryDataNotification { + Q_OBJECT + BinaryViewRef m_data; std::vector<BNStringReference> m_allEntries, m_entries; int m_totalCols, m_sortCol; Qt::SortOrder m_sortOrder; + std::string m_filter; + QTimer* m_updateTimer; + + // Read from arbitrary threads while processing notifications. + std::atomic<bool> m_updatesPaused = false; + // Read/written from arbitrary threads while processing notifications. + std::atomic<bool> m_needsUpdate = true; + // Tracks if notifications arrived while paused + std::atomic<bool> m_dirtyWhilePaused = false; void performSort(int col, Qt::SortOrder order); + void updateModel(); + void applyFilter(); + + void updateTimer(bool); + void setNeedsUpdate(bool); + void onBinaryViewNotification(); + +signals: + void updateTimerOnUIThread(); public: GenericStringsModel(QWidget* parent, BinaryViewRef data); + virtual ~GenericStringsModel(); virtual int columnCount(const QModelIndex& parent) const override; virtual int rowCount(const QModelIndex& parent) const override; @@ -26,8 +48,16 @@ class GenericStringsModel : public QAbstractItemModel virtual void sort(int col, Qt::SortOrder order) override; void setFilter(const std::string& filterText); + void pauseUpdates(); + void resumeUpdates(); + BNStringReference getStringRefAt(const QModelIndex& index) const; QString stringRefToQString(const BNStringReference& index) const; + + virtual void OnStringFound(BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override; + virtual void OnStringRemoved(BinaryNinja::BinaryView* data, BNStringType type, uint64_t offset, size_t len) override; + virtual void OnDerivedStringFound(BinaryNinja::BinaryView* data, const BinaryNinja::DerivedString& str) override; + virtual void OnDerivedStringRemoved(BinaryNinja::BinaryView* data, const BinaryNinja::DerivedString& str) override; }; @@ -36,6 +66,8 @@ class StringsWidget; class StringsTreeView : public QTreeView, public FilterTarget { + Q_OBJECT + BinaryViewRef m_data; StringsWidget* m_parent; TriageView* m_view; @@ -59,6 +91,8 @@ class StringsTreeView : public QTreeView, public FilterTarget protected: virtual void keyPressEvent(QKeyEvent* event) override; virtual bool event(QEvent* event) override; + virtual void showEvent(QShowEvent* event) override; + virtual void hideEvent(QHideEvent* event) override; private Q_SLOTS: void stringSelected(const QModelIndex& cur, const QModelIndex& prev); |
