summaryrefslogtreecommitdiff
path: root/ui/historyview.h
diff options
context:
space:
mode:
authorJosh Ferrell <josh@vector35.com>2024-05-09 22:53:01 -0400
committerJosh Ferrell <josh@vector35.com>2024-05-14 15:11:16 -0400
commit08c5286c19fd78fa9d3b9f469a639c7a1013f22e (patch)
tree9f8c4dca8a387431d3c9b2209bcdf88f8dfc832a /ui/historyview.h
parentcb407be11b08c1c427fcf33a49974155e522e14a (diff)
History widget
Diffstat (limited to 'ui/historyview.h')
-rw-r--r--ui/historyview.h92
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; }
};