diff options
| author | Josh Ferrell <josh@vector35.com> | 2024-05-09 22:53:01 -0400 |
|---|---|---|
| committer | Josh Ferrell <josh@vector35.com> | 2024-05-14 15:11:16 -0400 |
| commit | 08c5286c19fd78fa9d3b9f469a639c7a1013f22e (patch) | |
| tree | 9f8c4dca8a387431d3c9b2209bcdf88f8dfc832a /ui/historyview.h | |
| parent | cb407be11b08c1c427fcf33a49974155e522e14a (diff) | |
History widget
Diffstat (limited to 'ui/historyview.h')
| -rw-r--r-- | ui/historyview.h | 92 |
1 files changed, 73 insertions, 19 deletions
diff --git a/ui/historyview.h b/ui/historyview.h index 06f6561d..4f747fa3 100644 --- a/ui/historyview.h +++ b/ui/historyview.h @@ -1,44 +1,98 @@ #pragma once -#include "filter.h" +#include "render.h" #include "sidebarwidget.h" +#include <qlistview.h> #include <qsortfilterproxymodel.h> #include <qstandarditemmodel.h> -#include <qtreeview.h> +#include <qstyleditemdelegate.h> -class BINARYNINJAUIAPI HistorySidebarWidget : public SidebarWidget, public FilterTarget +enum class HistoryOption +{ + ShowDates, +}; + + +class BINARYNINJAUIAPI HistoryEntryItemModel : public QAbstractItemModel, public BinaryNinja::BinaryDataNotification, public UIContextNotification +{ + std::vector<UndoEntryRef> m_undoEntries; + std::vector<UndoEntryRef> m_redoEntries; + + FileMetadataRef m_file; + BinaryViewRef m_data; + std::unordered_set<HistoryOption> m_options; + QSettings m_settings; + + UndoEntryRef entryForRow(int row) const; + + QString getSettingKeyForOption(HistoryOption option) const; + + virtual void OnUndoEntryAdded(BinaryNinja::BinaryView* data, BinaryNinja::UndoEntry* entry) override; + virtual void OnUndoEntryTaken(BinaryNinja::BinaryView* data, BinaryNinja::UndoEntry* entry) override; + virtual void OnRedoEntryTaken(BinaryNinja::BinaryView* data, BinaryNinja::UndoEntry* entry) override; + + virtual void OnAfterSaveFile(UIContext* context, FileContext* file, ViewFrame* frame) override; + + void hardReload(); + + public: + HistoryEntryItemModel(QWidget* parent, BinaryViewRef data); + ~HistoryEntryItemModel(); + + virtual QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override; + virtual QModelIndex parent(const QModelIndex& child) const override; + + virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override; + virtual int columnCount(const QModelIndex& parent = QModelIndex()) const override; + + virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; + void toggleOption(HistoryOption option); + bool isOptionSet(HistoryOption option); +}; + + +class BINARYNINJAUIAPI HistoryEntryItemDelegate : public QStyledItemDelegate { Q_OBJECT - QTreeView* m_tree; - QStandardItemModel* m_model; - QSortFilterProxyModel* m_proxyModel; + + QFont m_font; + int m_baseline, m_charWidth, m_charHeight, m_charOffset; + + RenderContext m_render; + + public: + HistoryEntryItemDelegate(QWidget* parent = nullptr); + + void updateFonts(); + + virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; +}; + + +class BINARYNINJAUIAPI HistorySidebarWidget : public SidebarWidget +{ + Q_OBJECT + QListView* m_entryList; + HistoryEntryItemModel* m_model; + HistoryEntryItemDelegate* m_itemDelegate; QWidget* m_header; - FilteredView* m_libFilter; BinaryViewRef m_data; - ContextMenuManager* m_contextMenuManager; - Menu m_contextMenu; bool m_updating = false; - - std::unordered_map<std::string, QPersistentModelIndex> m_idIndices; - - virtual void scrollToFirstItem() override; - virtual void scrollToCurrentItem() override; - virtual void selectFirstItem() override; - virtual void activateFirstItem() override; - virtual void setFilter(const std::string& filter) override; + bool m_atBottom = true; virtual void contextMenuEvent(QContextMenuEvent*) override; void itemDoubleClicked(const QModelIndex& index); + void scrollBarValueChanged(int value); void scrollBarRangeChanged(int min, int max); - void populateTree(); + void resetToSelectedEntry(std::function<bool(size_t, size_t)> progress); public: HistorySidebarWidget(BinaryViewRef data); - + ~HistorySidebarWidget(); void notifyFontChanged() override; QWidget* headerWidget() override { return m_header; } }; |
