diff options
| author | Rusty Wagner <rusty.wagner@gmail.com> | 2023-03-28 19:00:09 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty.wagner@gmail.com> | 2023-03-30 18:05:12 -0400 |
| commit | 9d12918cc45def8eda646df988486223c51cc3c6 (patch) | |
| tree | 6acd08dc39f1ff5df42240d428a7a0556ff390ec | |
| parent | d811fffd69ffba789b960edd4fa31cc3d3f5905e (diff) | |
Add base structure support to create structure dialog
| -rw-r--r-- | ui/createstructdialog.h | 86 |
1 files changed, 80 insertions, 6 deletions
diff --git a/ui/createstructdialog.h b/ui/createstructdialog.h index 7fa534a7..7063bc9b 100644 --- a/ui/createstructdialog.h +++ b/ui/createstructdialog.h @@ -1,40 +1,114 @@ #pragma once +#include <QtCore/QThread> +#include <QtCore/QStringListModel> #include <QtWidgets/QDialog> #include <QtWidgets/QLineEdit> #include <QtWidgets/QCheckBox> +#include <QtWidgets/QTableWidget> +#include <QtWidgets/QComboBox> #include "binaryninjaapi.h" #include "uicontext.h" /*! + \defgroup createstructdialog CreateStructDialog \ingroup uiapi */ + +/*! + + \ingroup createstructdialog +*/ +class BINARYNINJAUIAPI GetStructuresListThread : public QThread +{ + Q_OBJECT + + QStringList m_allTypes; + std::function<void()> m_completeFunc; + std::mutex m_mutex; + bool m_done; + BinaryViewRef m_view; + +protected: + virtual void run() override; + +public: + GetStructuresListThread(BinaryViewRef view, const std::function<void()>& completeFunc); + void cancel(); + + const QStringList& getTypes() const { return m_allTypes; } +}; + +/*! + + \ingroup createstructdialog +*/ +class BINARYNINJAUIAPI BaseStructuresTableWidget : public QTableWidget +{ + Q_OBJECT + +public: + BaseStructuresTableWidget(); + virtual QSize sizeHint() const override; + +protected: + virtual void contextMenuEvent(QContextMenuEvent* event) override; + +Q_SIGNALS: + void removeBaseStructure(int idx); + +private Q_SLOTS: + void remove(); +}; + +/*! + + \ingroup createstructdialog +*/ class BINARYNINJAUIAPI CreateStructDialog : public QDialog { Q_OBJECT QLineEdit* m_name; QLineEdit* m_size; + BaseStructuresTableWidget* m_baseTable; + QComboBox* m_combo; + QLineEdit* m_baseOffset; + QPushButton* m_addBase; + QCheckBox* m_propagateDataVarRefs; QCheckBox* m_pointer; BinaryViewRef m_view; BinaryNinja::QualifiedName m_resultName; uint64_t m_resultSize; + bool m_resultDataVarRefs; bool m_resultPointer; bool m_askForPointer; + QStringList m_historyEntries; + int m_historySize; + GetStructuresListThread* m_updateThread; + QStringListModel* m_model; + + std::vector<BinaryNinja::BaseStructure> m_bases; + + virtual void customEvent(QEvent* event) override; - public: +public: CreateStructDialog(QWidget* parent, BinaryViewRef view, const std::string& name, bool askForPointer = false, bool defaultToPointer = false); - BinaryNinja::QualifiedName getName() { return m_resultName; } - uint64_t getSize() { return m_resultSize; } - bool getCreatePointer() { return m_resultPointer;} + BinaryNinja::QualifiedName getName() const { return m_resultName; } + uint64_t getSize() const { return m_resultSize; } + bool getPropagateDataVarRefs() const { return m_resultDataVarRefs; } + bool getCreatePointer() const { return m_resultPointer; } + const std::vector<BinaryNinja::BaseStructure> getBaseStructures() const { return m_bases; } - private Q_SLOTS: +private Q_SLOTS: void createStruct(); + void addBase(); + void removeBaseStructure(int idx); - protected: +protected: virtual void showEvent(QShowEvent* e) override; }; |
