summaryrefslogtreecommitdiff
path: root/utils/regtools/qeditor/regedit.h
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2016-02-06 15:08:43 +0000
committerAmaury Pouly <amaury.pouly@gmail.com>2016-02-06 15:20:48 +0000
commit6b9610fb908b27d1e0383c8d9bde3a88f35ed30c (patch)
tree1b0f5e2821b44d20f3704c584e309f5911357040 /utils/regtools/qeditor/regedit.h
parent0f701a64bee43e79f95970ae9c0ec43ea7fcdf17 (diff)
downloadrockbox-6b9610fb908b27d1e0383c8d9bde3a88f35ed30c.tar.gz
rockbox-6b9610fb908b27d1e0383c8d9bde3a88f35ed30c.zip
regtoosl/qeditor: port to the new description format
This big commit port qeditor from v1 to v2 register file format. Although the display code was much simplified, the edit code had to be rewritten. The new code also brings many improvement to the register display widget. The new code also compiles with both Qt4 and Qt5, although it is recommended to use Qt5 to get some improvements, especially in the layout of editor. Change-Id: I24633ac37a144f25d9e705b565654269ec9cfbd3
Diffstat (limited to 'utils/regtools/qeditor/regedit.h')
-rw-r--r--utils/regtools/qeditor/regedit.h276
1 files changed, 139 insertions, 137 deletions
diff --git a/utils/regtools/qeditor/regedit.h b/utils/regtools/qeditor/regedit.h
index c56f0d9026..2540500f29 100644
--- a/utils/regtools/qeditor/regedit.h
+++ b/utils/regtools/qeditor/regedit.h
@@ -38,6 +38,8 @@
38#include <QButtonGroup> 38#include <QButtonGroup>
39#include <QDebug> 39#include <QDebug>
40#include <QScrollArea> 40#include <QScrollArea>
41#include <QSpinBox>
42#include <QFormLayout>
41#include "backend.h" 43#include "backend.h"
42#include "settings.h" 44#include "settings.h"
43#include "mainwindow.h" 45#include "mainwindow.h"
@@ -48,7 +50,7 @@ class AbstractRegEditPanel
48public: 50public:
49 AbstractRegEditPanel() {} 51 AbstractRegEditPanel() {}
50 virtual ~AbstractRegEditPanel() {} 52 virtual ~AbstractRegEditPanel() {}
51 virtual void OnModified(bool mod) = 0; 53 virtual void OnModified() = 0;
52}; 54};
53 55
54class EmptyEditPanel : public QWidget, public AbstractRegEditPanel 56class EmptyEditPanel : public QWidget, public AbstractRegEditPanel
@@ -58,7 +60,7 @@ public:
58 EmptyEditPanel(QWidget *parent); 60 EmptyEditPanel(QWidget *parent);
59 61
60signals: 62signals:
61 void OnModified(bool mod); 63 void OnModified();
62 64
63protected: 65protected:
64}; 66};
@@ -67,178 +69,167 @@ class SocEditPanel : public QWidget, public AbstractRegEditPanel
67{ 69{
68 Q_OBJECT 70 Q_OBJECT
69public: 71public:
70 SocEditPanel(SocRef ref, QWidget *parent = 0); 72 SocEditPanel(const soc_desc::soc_ref_t& ref, QWidget *parent = 0);
71 73
72signals: 74signals:
73 void OnModified(bool mod); 75 void OnModified();
74 76
75protected slots: 77protected slots:
76 void OnTextEdited(); 78 void OnTextEdited();
77 void OnNameEdited(const QString& text); 79 void OnNameEdited(const QString& text);
80 void OnTitleEdited(const QString& text);
81 void OnVersionEdited(const QString& text);
82 void OnIsaEdited(const QString& text);
83 void OnAuthorActivated(QTableWidgetItem *);
84 void OnAuthorChanged(QTableWidgetItem *);
78 85
79protected: 86protected:
80 SocRef m_ref; 87 soc_desc::soc_ref_t m_ref;
81 QGroupBox *m_name_group; 88 QTableWidget *m_authors_list;
82 QLineEdit *m_name_edit;
83 QGroupBox *m_desc_group;
84 MyTextEditor *m_desc_edit; 89 MyTextEditor *m_desc_edit;
85}; 90};
86 91
87class DevEditPanel : public QWidget, public AbstractRegEditPanel 92class NodeInstanceEditPanel : public QWidget
88{ 93{
89 Q_OBJECT 94 Q_OBJECT
90public: 95public:
91 DevEditPanel(SocDevRef ref, QWidget *parent = 0); 96 NodeInstanceEditPanel(const soc_desc::node_ref_t& ref, soc_id_t inst_id,
97 QWidget *parent = 0);
98 soc_id_t GetId();
99 soc_desc::instance_t& GetInstance();
92 100
93signals: 101signals:
94 void OnModified(bool mod); 102 void OnModified();
95 103
96protected slots: 104protected slots:
97 void OnInstActivated(int row, int column);
98 void OnInstChanged(int row, int column);
99 void OnNameEdited(const QString& text); 105 void OnNameEdited(const QString& text);
100 void OnLongNameEdited(const QString& text); 106 void OnTitleEdited(const QString& text);
101 void OnVersionEdited(const QString& text); 107 void OnDescEdited(const QString& text);
102 void OnDescEdited(); 108 void OnTypeChanged(int index);
109 void OnAddrChanged(uint addr);
110 void OnBaseChanged(uint base);
111 void OnStrideChanged(uint stride);
112 void OnFirstChanged(int first);
113 void OnCountChanged(int count);
114 void OnFormulaChanged(const QString& formula);
115 void OnVariableChanged(const QString& variable);
116 void OnAddressActivated(QTableWidgetItem *);
117 void OnAddressChanged(QTableWidgetItem *);
103 118
104protected: 119protected:
105 void FillRow(int row, const soc_dev_addr_t& addr); 120 void UpdateType(int type);
106 void CreateNewRow(int row); 121
107 122 soc_desc::node_ref_t m_ref;
108 enum 123 soc_id_t m_id;
109 { 124 QComboBox *m_type_combo;
110 DevInstDeleteType = QTableWidgetItem::UserType, 125 QWidget *m_single_group;
111 DevInstNewType 126 QWidget *m_range_group;
112 }; 127 QWidget *m_formula_group;
113 128 QWidget *m_stride_group;
114 enum 129 QWidget *m_list_group;
115 { 130 QStyledItemDelegate *m_table_delegate;
116 DevInstIconColumn = 0, 131 SocFieldEditorCreator *m_table_edit_factory;
117 DevInstNameColumn = 1,
118 DevInstAddrColumn = 2,
119 };
120
121 SocDevRef m_ref;
122 QGroupBox *m_name_group;
123 QLineEdit *m_name_edit;
124 QGroupBox *m_long_name_group;
125 QLineEdit *m_long_name_edit;
126 QGroupBox *m_version_group;
127 QLineEdit *m_version_edit;
128 QGroupBox *m_instances_group;
129 QTableWidget *m_instances_table;
130 QGroupBox *m_desc_group;
131 MyTextEditor *m_desc_edit;
132}; 132};
133 133
134class RegEditPanel : public QWidget, public AbstractRegEditPanel 134class NodeEditPanel : public QWidget, public AbstractRegEditPanel
135{ 135{
136 Q_OBJECT 136 Q_OBJECT
137public: 137public:
138 RegEditPanel(SocRegRef ref, QWidget *parent = 0); 138 NodeEditPanel(const soc_desc::node_ref_t& ref, QWidget *parent = 0);
139 139
140signals: 140signals:
141 void OnModified(bool mod); 141 void OnModified();
142 142
143protected slots: 143protected slots:
144 void OnInstActivated(int row, int column);
145 void OnInstChanged(int row, int column);
146 void OnNameEdited(const QString& text); 144 void OnNameEdited(const QString& text);
145 void OnTitleEdited(const QString& text);
147 void OnDescEdited(); 146 void OnDescEdited();
148 void OnSctEdited(int state); 147 void OnInstRemove(int index);
149 void OnFormulaChanged(int index); 148 void OnInstCreate();
150 void OnFormulaStringChanged(const QString& text); 149 void OnInstModified();
151 void OnFormulaGenerate(bool checked); 150
151protected:
152 soc_desc::instance_t *GetInstanceById(soc_id_t id);
153 soc_desc::instance_t *GetInstanceByRow(int row);
154 QString GuessName();
155
156 soc_desc::node_ref_t m_ref;
157 MyTextEditor *m_desc_edit;
158 YTabWidget *m_instances_tab;
159};
160
161class RegFieldEditPanel : public QWidget
162{
163 Q_OBJECT
164public:
165 RegFieldEditPanel(const soc_desc::field_ref_t& ref, QWidget *parent = 0);
166 soc_desc::field_ref_t GetField();
167 void UpdateWidth();
168
169signals:
170 void OnModified();
171
172protected slots:
173 void OnFieldNameChanged(const QString& name);
174 void OnFieldRangeChanged(const QString& range);
175 void OnFieldDescChanged(const QString& name);
176 void OnFieldValueActivated(QTableWidgetItem *item);
177 void OnFieldValueChanged(QTableWidgetItem *item);
152 178
153protected: 179protected:
154 void CreateNewAddrRow(int row); 180
155 void FillRow(int row, const soc_reg_addr_t& addr); 181 soc_desc::field_ref_t m_ref;
156 void UpdateFormula();
157 void UpdateWarning(int row);
158
159 enum
160 {
161 RegInstDeleteType = QTableWidgetItem::UserType,
162 RegInstNewType
163 };
164
165 enum
166 {
167 RegInstIconColumn = 0,
168 RegInstNameColumn,
169 RegInstAddrColumn,
170 RegInstNrColumns,
171 };
172
173 SocRegRef m_ref;
174 QGroupBox *m_name_group;
175 QLineEdit *m_name_edit; 182 QLineEdit *m_name_edit;
176 QGroupBox *m_instances_group; 183 QLineEdit *m_range_edit;
177 QTableWidget *m_instances_table; 184 SocBitRangeValidator *m_range_validator;
178 QGroupBox *m_desc_group;
179 QGroupBox *m_flags_group;
180 QCheckBox *m_sct_check;
181 QFont m_reg_font;
182 QGroupBox *m_formula_group;
183 QButtonGroup *m_formula_radio_group;
184 QLabel *m_formula_type_label;
185 QComboBox *m_formula_combo;
186 QLineEdit *m_formula_string_edit;
187 QPushButton *m_formula_string_gen;
188 Unscroll< RegSexyDisplay2 > *m_sexy_display2;
189 MyTextEditor *m_desc_edit; 185 MyTextEditor *m_desc_edit;
190 QGroupBox *m_field_group; 186 QTableWidget *m_enum_table;
191 QTableView *m_value_table; 187 SocFieldItemDelegate *m_enum_delegate;
192 RegFieldTableModel *m_value_model; 188 SocFieldEditorCreator *m_enum_editor;
193 QStyledItemDelegate *m_table_delegate;
194}; 189};
195 190
196class FieldEditPanel : public QWidget, public AbstractRegEditPanel 191class RegEditPanel : public QWidget, public AbstractRegEditPanel
197{ 192{
198 Q_OBJECT 193 Q_OBJECT
199public: 194public:
200 FieldEditPanel(SocFieldRef ref, QWidget *parent = 0); 195 RegEditPanel(const soc_desc::register_ref_t& ref, QWidget *parent = 0);
201 196
202signals: 197signals:
203 void OnModified(bool mod); 198 void OnModified();
204 199
205protected slots: 200protected slots:
201 void OnRegFieldActivated(const QModelIndex& index);
202 void OnRegDisplayContextMenu(QPoint point);
203 void OnRegFieldDelete();
204 void OnRegFieldNew();
205 void OnWidthChanged(int size);
206 void OnFieldModified();
206 void OnDescEdited(); 207 void OnDescEdited();
207 void OnNameEdited(const QString& text); 208 void OnVariantActivated(QTableWidgetItem *item);
208 void OnBitRangeEdited(const QString& string); 209 void OnVariantValueChanged(QTableWidgetItem *item);
209 void OnValueActivated(int row, int column); 210 void OnFieldRemove(int index);
210 void OnValueChanged(int row, int column); 211 void OnFieldCreate();
211 212
212protected: 213protected:
213 void CreateNewRow(int row); 214 void DoModify();
214 void FillRow(int row, const soc_reg_field_value_t& val); 215 int FindFreeBit(int preferred);
215 void UpdateWarning(int row); 216 int IndexById(soc_id_t id); // tab index
216 void UpdateDelegates(); 217 void UpdateWidthRestrictions();
217 218
218 enum
219 {
220 FieldValueDeleteType = QTableWidgetItem::UserType,
221 FieldValueNewType,
222 };
223
224 enum
225 {
226 FieldValueIconColumn = 0,
227 FieldValueNameColumn,
228 FieldValueValueColumn,
229 FieldValueDescColumn,
230 FieldValueNrColumns,
231 };
232
233 SocFieldRef m_ref;
234 QGroupBox *m_name_group;
235 QLineEdit *m_name_edit;
236 QGroupBox *m_bitrange_group;
237 QLineEdit *m_bitrange_edit;
238 QGroupBox *m_desc_group;
239 MyTextEditor *m_desc_edit; 219 MyTextEditor *m_desc_edit;
240 QGroupBox *m_value_group; 220 soc_desc::register_ref_t m_ref;
241 QTableWidget *m_value_table; 221 QFont m_reg_font;
222 Unscroll< YRegDisplay > *m_sexy_display2;
223 RegFieldTableModel *m_value_model;
224 YTabWidget *m_fields_tab;
225 QTabWidget *m_view_tab;
226 QTableWidget *m_variant_table;
227 QAction *m_new_action;
228 QAction *m_delete_action;
229 QPoint m_menu_point;
230 SocFieldItemDelegate *m_variant_delegate;
231 SocFieldEditorCreator *m_variant_editor;
232 QButtonGroup *m_reg_size_group;
242}; 233};
243 234
244class RegEdit : public QWidget, public DocumentTab 235class RegEdit : public QWidget, public DocumentTab
@@ -252,43 +243,50 @@ public:
252 243
253protected slots: 244protected slots:
254 void OnSocItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); 245 void OnSocItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
255 void OnSocItemActivated(QTreeWidgetItem *current, int column);
256 void OnOpen(); 246 void OnOpen();
257 void OnSave(); 247 void OnSave();
258 void OnSaveAs(); 248 void OnSaveAs();
259 void OnSocModified(bool modified); 249 void OnSocModified();
260 void OnNew(); 250 void OnNew();
261 void OnSocItemDelete(); 251 void OnSocItemDelete();
252 void OnSocItemNew();
253 void OnSocItemCreate();
254 void OnSocTreeContextMenu(QPoint point);
262 255
263protected: 256protected:
264 void LoadSocFile(const QString& filename); 257 void LoadSocFile(const QString& filename);
265 void UpdateSocFile(); 258 void UpdateSocFile();
266 void FillSocTree(); 259 void FillSocTree();
267 void FillSocTreeItem(QTreeWidgetItem *_item); 260 void FillNodeTreeItem(QTreeWidgetItem *item);
268 void FillDevTreeItem(QTreeWidgetItem *_item);
269 void FillRegTreeItem(QTreeWidgetItem *_item);
270 void SetPanel(QWidget *panel); 261 void SetPanel(QWidget *panel);
271 void DisplaySoc(SocRef ref); 262 void DisplaySoc(const soc_desc::soc_ref_t& ref);
272 void DisplayDev(SocDevRef ref); 263 void DisplayNode(const soc_desc::node_ref_t& ref);
273 void DisplayReg(SocRegRef ref); 264 void DisplayReg(const soc_desc::register_ref_t& ref);
274 void DisplayField(SocFieldRef ref);
275 bool CloseSoc(); 265 bool CloseSoc();
276 bool SaveSoc(); 266 bool SaveSoc();
277 bool SaveSocAs(); 267 bool SaveSocAs();
278 bool SaveSocFile(const QString& filename); 268 bool SaveSocFile(const QString& filename);
279 bool GetFilename(QString& filename, bool save); 269 bool GetFilename(QString& filename, bool save);
280 void SetModified(bool add, bool mod); 270 void SetModified(bool add, bool mod);
281 void FixupEmptyItem(QTreeWidgetItem *item); 271 void FixupItem(QTreeWidgetItem *item);
272 QIcon GetIconFromType(int type);
282 void MakeItalic(QTreeWidgetItem *item, bool it); 273 void MakeItalic(QTreeWidgetItem *item, bool it);
283 void AddDevice(QTreeWidgetItem *item); 274 void AddDevice(QTreeWidgetItem *item);
284 void AddRegister(QTreeWidgetItem *_item); 275 void AddRegister(QTreeWidgetItem *_item);
285 void UpdateName(QTreeWidgetItem *current); 276 void UpdateName(QTreeWidgetItem *current);
286 void AddField(QTreeWidgetItem *_item); 277 void AddField(QTreeWidgetItem *_item);
287 void CreateNewDeviceItem(QTreeWidgetItem *parent); 278 void CreateNewNodeItem(QTreeWidgetItem *parent);
288 void CreateNewRegisterItem(QTreeWidgetItem *parent); 279 void CreateNewRegisterItem(QTreeWidgetItem *parent);
289 void CreateNewFieldItem(QTreeWidgetItem *parent); 280 void CreateNewFieldItem(QTreeWidgetItem *parent);
290 void UpdateTabName(); 281 void UpdateTabName();
291 282 bool ValidateName(const QString& name);
283 int SetMessage(MessageWidget::MessageType type, const QString& msg);
284 void HideMessage(int id);
285
286 QAction *m_delete_action;
287 QAction *m_new_action;
288 QAction *m_create_action;
289 QTreeWidgetItem *m_action_item;
292 QGroupBox *m_file_group; 290 QGroupBox *m_file_group;
293 QToolButton *m_file_open; 291 QToolButton *m_file_open;
294 QToolButton *m_file_save; 292 QToolButton *m_file_save;
@@ -299,6 +297,10 @@ protected:
299 bool m_modified; 297 bool m_modified;
300 SocFile m_cur_socfile; 298 SocFile m_cur_socfile;
301 QWidget *m_right_panel; 299 QWidget *m_right_panel;
300 MessageWidget *m_msg;
301 QVBoxLayout *m_right_panel_layout;
302 int m_msg_welcome_id;
303 int m_msg_name_error_id;
302}; 304};
303 305
304#endif /* REGEDIT_H */ 306#endif /* REGEDIT_H */