summaryrefslogtreecommitdiff
path: root/ui/addressdialog.h
blob: 7ad3e93ffd7d5d0c4010ca26b8fac3d913571801 (plain)
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#pragma once

#include <QtWidgets/QDialog>
#include <QtWidgets/QLabel>
#include <QtCore/QStringListModel>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QComboBox>
#include <QtCore/QTimer>
#ifndef BINARYNINJAUI_BINDINGS
	#include <QtCore/QThread>
#endif
#include "binaryninjaapi.h"
#include "uitypes.h"
#include "getsymbolslistthread.h"


class BINARYNINJAUIAPI AddressDialogWithPreview : public QDialog
{
	Q_OBJECT

	QComboBox* m_combo;
	QStringListModel* m_model;
	QLabel* m_previewText;
	BinaryViewRef m_view;
	uint64_t m_addr;
	uint64_t m_here;
	QCheckBox* m_checkBox;
	bool m_resultValid;
	QTimer* m_updateTimer;
	QStringList m_historyEntries;
	int m_historySize;
	GetSymbolsListThread* m_updateThread;
	QColor m_defaultColor;
	QFont m_defaultFont;
	QString m_prompt;
	bool m_initialTextSelection;
	std::string m_errorString;
	bool m_resultAmbiguous;

	void commitHistory();
	void customEvent(QEvent* event);

  private Q_SLOTS:
	void updateTimerEvent();
	void accepted();
	void updateRelativeState(int state);
	void updatePreview();
	void updatePreviewText();
	void updatePreviewWithText(QString data);

  public:
	AddressDialogWithPreview(QWidget* parent, BinaryViewRef view, uint64_t here, const QString& title = "Go to Address",
	    const QString& prompt = "Enter Expression", bool defaultToCurrent = false);
	~AddressDialogWithPreview() {}
	uint64_t getOffset() const { return m_addr; }
};

class BINARYNINJAUIAPI FileOffsetDialogWithPreview : public QDialog
{
	Q_OBJECT

	QComboBox* m_combo;
	QLabel* m_previewText;
	BinaryViewRef m_view;
	uint64_t m_fileOffset;
	uint64_t m_here;
	bool m_resultValid;
	QTimer* m_updateTimer;
	QStringList m_historyEntries;
	int m_historySize;
	QColor m_defaultColor;
	QFont m_defaultFont;
	QString m_prompt;
	bool m_initialTextSelection;
	std::string m_errorString;
	bool m_resultAmbiguous;

	void commitHistory();

  private Q_SLOTS:
	void updateTimerEvent();
	void accepted();
	void updatePreview();
	void updatePreviewText();
	void updatePreview(QString data);

  public:
	FileOffsetDialogWithPreview(QWidget* parent, BinaryViewRef view, uint64_t here,
	    const QString& title = "Go to File Offset", const QString& prompt = "Enter Expression",
	    bool defaultToCurrent = false);
	~FileOffsetDialogWithPreview() {}
	uint64_t getOffset() const { return m_fileOffset; }
};

class BINARYNINJAUIAPI AddUserXrefDialog : public QDialog
{
	Q_OBJECT

	QComboBox* m_combo;
	QStringListModel* m_model;
	QLabel *m_previewText, m_sizePrompt;
	QLineEdit* m_sizeInput;
	BinaryViewRef m_view;
	uint64_t m_addr;
	uint64_t m_here;
	size_t m_size;
	bool m_resultValid;
	QTimer* m_updateTimer;
	QStringList m_historyEntries;
	int m_historySize;
	GetSymbolsListThread* m_updateThread;
	QColor m_defaultColor;
	QFont m_defaultFont;
	QString m_prompt;
	bool m_initialTextSelection;
	std::string m_errorString;
	bool m_resultAmbiguous;

	void commitHistory();
	void customEvent(QEvent* event);

  private Q_SLOTS:
	void updateTimerEvent();
	void accepted();
	void updatePreview();
	void updatePreviewText();
	void updatePreviewWithText(QString data);

  public:
	AddUserXrefDialog(QWidget* parent, BinaryViewRef view, uint64_t here = 0, size_t size = 0,
	    const QString& title = "Add User Type Field Cross Reference",
	    const QString& sizeTitle = "Size of Reference (optional)", const QString& prompt = "Enter Expression",
	    bool defaultToCurrent = false);
	~AddUserXrefDialog() { delete m_updateThread; }
	uint64_t getOffset() const { return m_addr; }
	size_t getSize() const { return m_size; }
};