summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty.wagner@gmail.com>2023-03-28 19:00:09 -0400
committerRusty Wagner <rusty.wagner@gmail.com>2023-03-30 18:05:12 -0400
commit9d12918cc45def8eda646df988486223c51cc3c6 (patch)
tree6acd08dc39f1ff5df42240d428a7a0556ff390ec
parentd811fffd69ffba789b960edd4fa31cc3d3f5905e (diff)
Add base structure support to create structure dialog
-rw-r--r--ui/createstructdialog.h86
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;
};