From 390d5d27d4de6b7c9cb06b957a483bb2ab69f241 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Thu, 7 Jul 2022 21:03:29 -0400 Subject: Merge variables API/UI, variable liveness API for determining soundness of variable merges --- ui/mergevariablesdialog.h | 76 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 ui/mergevariablesdialog.h (limited to 'ui/mergevariablesdialog.h') diff --git a/ui/mergevariablesdialog.h b/ui/mergevariablesdialog.h new file mode 100644 index 00000000..b4c81c06 --- /dev/null +++ b/ui/mergevariablesdialog.h @@ -0,0 +1,76 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include +#include "binaryninjaapi.h" +#include "uicontext.h" +#include "render.h" + +class BINARYNINJAUIAPI MergeVariableHeader : public QWidget +{ + std::vector m_tokens; + RenderContext m_renderContext; + int m_length; + +protected: + void paintEvent(QPaintEvent* event) override; + QSize sizeHint() const override; + +public: + MergeVariableHeader(const std::vector& tokens, QWidget* parent = nullptr); +}; + +class BINARYNINJAUIAPI MergeVariableListItem : public QListWidgetItem +{ + QWidget* m_owner; + FunctionRef m_func; + BinaryNinja::Variable m_var; + std::string m_name; + BinaryNinja::Confidence> m_type; + bool m_grayed; + +public: + MergeVariableListItem(QWidget* parent, BinaryNinja::Function* func, const BinaryNinja::Variable& var, + const std::string& name, BinaryNinja::Confidence> type, + const QString& warnings, bool grayed); + const BinaryNinja::Variable& variable() const { return m_var; } + virtual QVariant data(int role) const override; + + static std::vector tokensForVariable(BinaryNinja::Function* func, + const BinaryNinja::Variable& var, BinaryNinja::Confidence> type, + const std::string& name); +}; + +class BINARYNINJAUIAPI MergeVariableItemDelegate : public QStyledItemDelegate +{ + Q_OBJECT + + QWidget* m_parent; + QFont m_font; + int m_baseline, m_charWidth, m_charHeight, m_charOffset; + +public: + MergeVariableItemDelegate(QWidget* parent); + + void updateFonts(); + virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& idx) const override; + virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& idx) const override; +}; + +class BINARYNINJAUIAPI MergeVariablesDialog : public QDialog +{ + Q_OBJECT + QListWidget* m_list; + std::set m_existingVariables; + +public: + MergeVariablesDialog(QWidget* parent, FunctionRef func, BinaryNinja::Variable target); + + std::set mergedVariables(); + std::set unmergedVariables(); +}; -- cgit v1.3.1