forked from Vector35/binaryninja-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreatestructdialog.h
115 lines (90 loc) · 2.63 KB
/
createstructdialog.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#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;
BinaryNinja::TypeContainer m_container;
protected:
virtual void run() override;
public:
GetStructuresListThread(BinaryNinja::TypeContainer container, 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;
std::optional<BinaryNinja::TypeContainer> m_typeContainer;
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:
CreateStructDialog(QWidget* parent, std::optional<BinaryNinja::TypeContainer> typeContainer, const std::string& name, bool askForPointer = false,
bool defaultToPointer = false);
~CreateStructDialog();
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:
void createStruct();
void addBase();
void removeBaseStructure(int idx);
protected:
virtual void showEvent(QShowEvent* e) override;
};