summaryrefslogtreecommitdiff
path: root/view/kernelcache/ui/kctriage.h
diff options
context:
space:
mode:
Diffstat (limited to 'view/kernelcache/ui/kctriage.h')
-rw-r--r--view/kernelcache/ui/kctriage.h79
1 files changed, 37 insertions, 42 deletions
diff --git a/view/kernelcache/ui/kctriage.h b/view/kernelcache/ui/kctriage.h
index a6b7f7ac..07c24fad 100644
--- a/view/kernelcache/ui/kctriage.h
+++ b/view/kernelcache/ui/kctriage.h
@@ -1,7 +1,3 @@
-//
-// Created by kat on 8/15/24.
-//
-
#include <kernelcacheapi.h>
#include <binaryninjaapi.h>
#include "uitypes.h"
@@ -14,37 +10,29 @@
#include <QSortFilterProxyModel>
#include <QHeaderView>
#include "filter.h"
+#include <QStyledItemDelegate>
+
+#include "ui/fontsettings.h"
#ifndef BINARYNINJA_KCTRIAGE_H
#define BINARYNINJA_KCTRIAGE_H
-class CollapsibleSection : public QWidget
+class AddressColorDelegate : public QStyledItemDelegate
{
- Q_OBJECT
-
- QLabel* m_titleLabel;
- QLabel* m_subtitleRightLabel;
- QPushButton* m_collapseButton;
-
- bool m_collapsed = true;
-
- Animation* m_onContentAddedAnimation;
-
- QWidget* m_contentWidgetContainer;
- QWidget* m_contentWidget;
-
-protected:
- QSize sizeHint() const override;
public:
- CollapsibleSection(QWidget* parent);
- void setTitle(const QString& title);
- void setSubtitleRight(const QString& subtitle);
+ explicit AddressColorDelegate(QObject* parent = nullptr) : QStyledItemDelegate(parent) {}
- void setContentWidget(QWidget* contentWidget);
+ void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
+ {
+ QStyleOptionViewItem opt = option;
+ initStyleOption(&opt, index);
- void setCollapsed(bool collapsed, bool animated = true);
- bool isCollapsed() const { return m_collapsed; }
+ opt.palette.setColor(QPalette::Text, getThemeColor(BNThemeColor::AddressColor));
+ opt.displayAlignment = Qt::AlignCenter | Qt::AlignVCenter;
+
+ QStyledItemDelegate::paint(painter, opt, index);
+ }
};
@@ -54,12 +42,13 @@ class FilterableTableView : public QTableView, public FilterTarget {
bool m_filterByHiding;
public:
- FilterableTableView(QWidget* parent = nullptr, bool filterByHiding = true)
+ explicit FilterableTableView(QWidget* parent = nullptr, bool filterByHiding = true)
: QTableView(parent), m_filterByHiding(filterByHiding) {
viewport()->installEventFilter(this);
+ setFont(getMonospaceFont(parent));
}
- ~FilterableTableView() override {}
+ ~FilterableTableView() override = default;
void setFilter(const std::string& filter) override {
if (!m_filterByHiding)
@@ -112,7 +101,7 @@ public:
bool eventFilter(QObject* obj, QEvent* event) override {
if (event->type() == QEvent::KeyPress) {
- QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
+ auto keyEvent = dynamic_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Escape) {
clearSelection();
return true;
@@ -135,19 +124,18 @@ class SymbolTableModel : public QAbstractTableModel {
Q_OBJECT
SymbolTableView* m_parent;
+ QFont m_font;
std::string m_filter;
std::vector<KernelCacheAPI::KCSymbol> m_symbols;
public:
explicit SymbolTableModel(SymbolTableView* parent);
- int rowCount(const QModelIndex& parent = QModelIndex()) const override;
- int columnCount(const QModelIndex& parent = QModelIndex()) const override;
- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
-
+ int rowCount(const QModelIndex& parent) const override;
+ int columnCount(const QModelIndex& parent) const override;
+ QVariant data(const QModelIndex& index, int role) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
void updateSymbols();
-
void setFilter(std::string text);
const KernelCacheAPI::KCSymbol& symbolAt(int row) const;
@@ -165,7 +153,7 @@ class SymbolTableView : public QTableView, public FilterTarget
public:
SymbolTableView(QWidget* parent, Ref<KernelCacheAPI::KernelCache> cache);
- virtual ~SymbolTableView() override;
+ ~SymbolTableView() override;
void scrollToFirstItem() override {
if (model()->rowCount() > 0) {
@@ -204,29 +192,36 @@ public:
};
-class KCTriageView : public QWidget, public View
+class KCTriageView : public QWidget, public View, public UIContextNotification
{
BinaryViewRef m_data;
QVBoxLayout* m_layout;
- Ref<KernelCacheAPI::KernelCache> m_cache;
- std::mutex m_headersMutex;
- std::shared_ptr<std::vector<KernelCacheAPI::KernelCacheMachOHeader>> m_headers;
+ Ref<KernelCacheAPI::KernelCache> m_cache;
SplitTabWidget* m_triageTabs;
DockableTabCollection* m_triageCollection;
- SplitTabWidget* m_bottomRegionTabs;
- DockableTabCollection* m_bottomRegionCollection;
+ FilterableTableView* m_imageTable;
+ QStandardItemModel* m_imageModel;
+ SymbolTableView* m_symbolTable;
+
+ std::mutex m_headersMutex;
+ std::shared_ptr<std::vector<KernelCacheAPI::KernelCacheMachOHeader>> m_headers;
public:
KCTriageView(QWidget* parent, BinaryViewRef data);
+ ~KCTriageView() override;
BinaryViewRef getData() override;
void setSelectionOffsets(BNAddressRange range) override {};
QFont getFont() override;
bool navigate(uint64_t offset) override;
uint64_t getCurrentOffset() override;
+
+private:
+ QWidget* initImageTable();
+ void initSymbolTable();
};