summaryrefslogtreecommitdiff
path: root/utils/regtools/qeditor/regedit.h
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-04-07 11:28:04 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2014-05-01 19:34:18 +0200
commit4356666101e0e7985e65a19f86bc4a74519e93f9 (patch)
treebf8de8057d93d0fab0a30cae92a90f5a4edc79dc /utils/regtools/qeditor/regedit.h
parent3754624edc48539c5cc5acbf426ce909477e87d8 (diff)
downloadrockbox-4356666101e0e7985e65a19f86bc4a74519e93f9.tar.gz
rockbox-4356666101e0e7985e65a19f86bc4a74519e93f9.zip
regtools: completely rework qeditor, improve soc desc library and tools
The graphical editor can now display and editor description files. The library has been improved to provide more useful function. The XML format has been slightly changed: only one soc is allowed per file (this is was already de facto the case since <soc> was the root tag). Also introduce a DTD to validate the files. Change-Id: If70ba35b6dc0242bdb87411cf4baee9597798aac
Diffstat (limited to 'utils/regtools/qeditor/regedit.h')
-rw-r--r--utils/regtools/qeditor/regedit.h282
1 files changed, 282 insertions, 0 deletions
diff --git a/utils/regtools/qeditor/regedit.h b/utils/regtools/qeditor/regedit.h
new file mode 100644
index 0000000000..8615816783
--- /dev/null
+++ b/utils/regtools/qeditor/regedit.h
@@ -0,0 +1,282 @@
1#ifndef REGEDIT_H
2#define REGEDIT_H
3
4#include <QComboBox>
5#include <QTreeWidget>
6#include <QVBoxLayout>
7#include <QTabWidget>
8#include <QSplitter>
9#include <QLineEdit>
10#include <QPushButton>
11#include <QLabel>
12#include <QListWidget>
13#include <QGroupBox>
14#include <QToolButton>
15#include <QMenu>
16#include <QCheckBox>
17#include <QRadioButton>
18#include <QButtonGroup>
19#include <QDebug>
20#include <QScrollArea>
21#include "backend.h"
22#include "settings.h"
23#include "mainwindow.h"
24#include "aux.h"
25
26class AbstractRegEditPanel
27{
28public:
29 AbstractRegEditPanel() {}
30 virtual ~AbstractRegEditPanel() {}
31 virtual void OnModified(bool mod) = 0;
32};
33
34class EmptyEditPanel : public QWidget, public AbstractRegEditPanel
35{
36 Q_OBJECT
37public:
38 EmptyEditPanel(QWidget *parent);
39
40signals:
41 void OnModified(bool mod);
42
43protected:
44};
45
46class SocEditPanel : public QWidget, public AbstractRegEditPanel
47{
48 Q_OBJECT
49public:
50 SocEditPanel(SocRef ref, QWidget *parent = 0);
51
52signals:
53 void OnModified(bool mod);
54
55protected slots:
56 void OnTextEdited();
57 void OnNameEdited(const QString& text);
58
59protected:
60 SocRef m_ref;
61 QGroupBox *m_name_group;
62 QLineEdit *m_name_edit;
63 QGroupBox *m_desc_group;
64 MyTextEditor *m_desc_edit;
65};
66
67class DevEditPanel : public QWidget, public AbstractRegEditPanel
68{
69 Q_OBJECT
70public:
71 DevEditPanel(SocDevRef ref, QWidget *parent = 0);
72
73signals:
74 void OnModified(bool mod);
75
76protected slots:
77 void OnInstActivated(int row, int column);
78 void OnInstChanged(int row, int column);
79 void OnNameEdited(const QString& text);
80 void OnLongNameEdited(const QString& text);
81 void OnVersionEdited(const QString& text);
82 void OnDescEdited();
83
84protected:
85 void FillRow(int row, const soc_dev_addr_t& addr);
86 void CreateNewRow(int row);
87
88 enum
89 {
90 DevInstDeleteType = QTableWidgetItem::UserType,
91 DevInstNewType
92 };
93
94 enum
95 {
96 DevInstIconColumn = 0,
97 DevInstNameColumn = 1,
98 DevInstAddrColumn = 2,
99 };
100
101 SocDevRef m_ref;
102 QGroupBox *m_name_group;
103 QLineEdit *m_name_edit;
104 QGroupBox *m_long_name_group;
105 QLineEdit *m_long_name_edit;
106 QGroupBox *m_version_group;
107 QLineEdit *m_version_edit;
108 QGroupBox *m_instances_group;
109 QTableWidget *m_instances_table;
110 QGroupBox *m_desc_group;
111 MyTextEditor *m_desc_edit;
112};
113
114class RegEditPanel : public QWidget, public AbstractRegEditPanel
115{
116 Q_OBJECT
117public:
118 RegEditPanel(SocRegRef ref, QWidget *parent = 0);
119
120signals:
121 void OnModified(bool mod);
122
123protected slots:
124 void OnInstActivated(int row, int column);
125 void OnInstChanged(int row, int column);
126 void OnNameEdited(const QString& text);
127 void OnDescEdited();
128 void OnSctEdited(int state);
129 void OnFormulaChanged(int index);
130 void OnFormulaStringChanged(const QString& text);
131 void OnFormulaGenerate(bool checked);
132
133protected:
134 void CreateNewAddrRow(int row);
135 void FillRow(int row, const soc_reg_addr_t& addr);
136 void UpdateFormula();
137 void UpdateWarning(int row);
138
139 enum
140 {
141 RegInstDeleteType = QTableWidgetItem::UserType,
142 RegInstNewType
143 };
144
145 enum
146 {
147 RegInstIconColumn = 0,
148 RegInstNameColumn,
149 RegInstAddrColumn,
150 RegInstNrColumns,
151 };
152
153 SocRegRef m_ref;
154 QGroupBox *m_name_group;
155 QLineEdit *m_name_edit;
156 QGroupBox *m_instances_group;
157 QTableWidget *m_instances_table;
158 QGroupBox *m_desc_group;
159 QGroupBox *m_flags_group;
160 QCheckBox *m_sct_check;
161 QFont m_reg_font;
162 QGroupBox *m_formula_group;
163 QButtonGroup *m_formula_radio_group;
164 QLabel *m_formula_type_label;
165 QComboBox *m_formula_combo;
166 QLineEdit *m_formula_string_edit;
167 QPushButton *m_formula_string_gen;
168 RegSexyDisplay *m_sexy_display;
169 MyTextEditor *m_desc_edit;
170 QGroupBox *m_field_group;
171 QTableWidget *m_field_table;
172};
173
174class FieldEditPanel : public QWidget, public AbstractRegEditPanel
175{
176 Q_OBJECT
177public:
178 FieldEditPanel(SocFieldRef ref, QWidget *parent = 0);
179
180signals:
181 void OnModified(bool mod);
182
183protected slots:
184 void OnDescEdited();
185 void OnNameEdited(const QString& text);
186 void OnBitRangeEdited(const QString& string);
187 void OnValueActivated(int row, int column);
188 void OnValueChanged(int row, int column);
189
190protected:
191 void CreateNewRow(int row);
192 void FillRow(int row, const soc_reg_field_value_t& val);
193 void UpdateWarning(int row);
194 void UpdateDelegates();
195
196 enum
197 {
198 FieldValueDeleteType = QTableWidgetItem::UserType,
199 FieldValueNewType,
200 };
201
202 enum
203 {
204 FieldValueIconColumn = 0,
205 FieldValueNameColumn,
206 FieldValueValueColumn,
207 FieldValueDescColumn,
208 FieldValueNrColumns,
209 };
210
211 SocFieldRef m_ref;
212 QGroupBox *m_name_group;
213 QLineEdit *m_name_edit;
214 QGroupBox *m_bitrange_group;
215 QLineEdit *m_bitrange_edit;
216 QGroupBox *m_desc_group;
217 MyTextEditor *m_desc_edit;
218 QGroupBox *m_value_group;
219 QTableWidget *m_value_table;
220};
221
222class RegEdit : public QWidget, public DocumentTab
223{
224 Q_OBJECT
225public:
226 RegEdit(Backend *backend, QWidget *parent = 0);
227 ~RegEdit();
228 virtual bool Quit();
229
230signals:
231 void OnModified(bool mod);
232
233protected slots:
234 void OnSocItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
235 void OnSocItemActivated(QTreeWidgetItem *current, int column);
236 void OnOpen();
237 void OnSave();
238 void OnSaveAs();
239 void OnSocModified(bool modified);
240 void OnNew();
241
242protected:
243 void LoadSocFile(const QString& filename);
244 void UpdateSocFile();
245 void FillSocTree();
246 void FillSocTreeItem(QTreeWidgetItem *_item);
247 void FillDevTreeItem(QTreeWidgetItem *_item);
248 void FillRegTreeItem(QTreeWidgetItem *_item);
249 void SetPanel(QWidget *panel);
250 void DisplaySoc(SocRef ref);
251 void DisplayDev(SocDevRef ref);
252 void DisplayReg(SocRegRef ref);
253 void DisplayField(SocFieldRef ref);
254 bool CloseSoc();
255 bool SaveSoc();
256 bool SaveSocAs();
257 bool SaveSocFile(const QString& filename);
258 bool GetFilename(QString& filename, bool save);
259 void SetModified(bool add, bool mod);
260 void FixupEmptyItem(QTreeWidgetItem *item);
261 void MakeItalic(QTreeWidgetItem *item, bool it);
262 void AddDevice(QTreeWidgetItem *item);
263 void AddRegister(QTreeWidgetItem *_item);
264 void UpdateName(QTreeWidgetItem *current);
265 void AddField(QTreeWidgetItem *_item);
266 void CreateNewDeviceItem(QTreeWidgetItem *parent);
267 void CreateNewRegisterItem(QTreeWidgetItem *parent);
268 void CreateNewFieldItem(QTreeWidgetItem *parent);
269
270 QGroupBox *m_file_group;
271 QToolButton *m_file_open;
272 QToolButton *m_file_save;
273 QLineEdit *m_file_edit;
274 QSplitter *m_splitter;
275 QTreeWidget *m_soc_tree;
276 Backend *m_backend;
277 bool m_modified;
278 SocFile m_cur_socfile;
279 QWidget *m_right_panel;
280};
281
282#endif /* REGEDIT_H */