summaryrefslogtreecommitdiffstats
path: root/utils/regtools/qeditor/regedit.h
diff options
context:
space:
mode:
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 @@
+#ifndef REGEDIT_H
+#define REGEDIT_H
+
+#include <QComboBox>
+#include <QTreeWidget>
+#include <QVBoxLayout>
+#include <QTabWidget>
+#include <QSplitter>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QLabel>
+#include <QListWidget>
+#include <QGroupBox>
+#include <QToolButton>
+#include <QMenu>
+#include <QCheckBox>
+#include <QRadioButton>
+#include <QButtonGroup>
+#include <QDebug>
+#include <QScrollArea>
+#include "backend.h"
+#include "settings.h"
+#include "mainwindow.h"
+#include "aux.h"
+
+class AbstractRegEditPanel
+{
+public:
+ AbstractRegEditPanel() {}
+ virtual ~AbstractRegEditPanel() {}
+ virtual void OnModified(bool mod) = 0;
+};
+
+class EmptyEditPanel : public QWidget, public AbstractRegEditPanel
+{
+ Q_OBJECT
+public:
+ EmptyEditPanel(QWidget *parent);
+
+signals:
+ void OnModified(bool mod);
+
+protected:
+};
+
+class SocEditPanel : public QWidget, public AbstractRegEditPanel
+{
+ Q_OBJECT
+public:
+ SocEditPanel(SocRef ref, QWidget *parent = 0);
+
+signals:
+ void OnModified(bool mod);
+
+protected slots:
+ void OnTextEdited();
+ void OnNameEdited(const QString& text);
+
+protected:
+ SocRef m_ref;
+ QGroupBox *m_name_group;
+ QLineEdit *m_name_edit;
+ QGroupBox *m_desc_group;
+ MyTextEditor *m_desc_edit;
+};
+
+class DevEditPanel : public QWidget, public AbstractRegEditPanel
+{
+ Q_OBJECT
+public:
+ DevEditPanel(SocDevRef ref, QWidget *parent = 0);
+
+signals:
+ void OnModified(bool mod);
+
+protected slots:
+ void OnInstActivated(int row, int column);
+ void OnInstChanged(int row, int column);
+ void OnNameEdited(const QString& text);
+ void OnLongNameEdited(const QString& text);
+ void OnVersionEdited(const QString& text);
+ void OnDescEdited();
+
+protected:
+ void FillRow(int row, const soc_dev_addr_t& addr);
+ void CreateNewRow(int row);
+
+ enum
+ {
+ DevInstDeleteType = QTableWidgetItem::UserType,
+ DevInstNewType
+ };
+
+ enum
+ {
+ DevInstIconColumn = 0,
+ DevInstNameColumn = 1,
+ DevInstAddrColumn = 2,
+ };
+
+ SocDevRef m_ref;
+ QGroupBox *m_name_group;
+ QLineEdit *m_name_edit;
+ QGroupBox *m_long_name_group;
+ QLineEdit *m_long_name_edit;
+ QGroupBox *m_version_group;
+ QLineEdit *m_version_edit;
+ QGroupBox *m_instances_group;
+ QTableWidget *m_instances_table;
+ QGroupBox *m_desc_group;
+ MyTextEditor *m_desc_edit;
+};
+
+class RegEditPanel : public QWidget, public AbstractRegEditPanel
+{
+ Q_OBJECT
+public:
+ RegEditPanel(SocRegRef ref, QWidget *parent = 0);
+
+signals:
+ void OnModified(bool mod);
+
+protected slots:
+ void OnInstActivated(int row, int column);
+ void OnInstChanged(int row, int column);
+ void OnNameEdited(const QString& text);
+ void OnDescEdited();
+ void OnSctEdited(int state);
+ void OnFormulaChanged(int index);
+ void OnFormulaStringChanged(const QString& text);
+ void OnFormulaGenerate(bool checked);
+
+protected:
+ void CreateNewAddrRow(int row);
+ void FillRow(int row, const soc_reg_addr_t& addr);
+ void UpdateFormula();
+ void UpdateWarning(int row);
+
+ enum
+ {
+ RegInstDeleteType = QTableWidgetItem::UserType,
+ RegInstNewType
+ };
+
+ enum
+ {
+ RegInstIconColumn = 0,
+ RegInstNameColumn,
+ RegInstAddrColumn,
+ RegInstNrColumns,
+ };
+
+ SocRegRef m_ref;
+ QGroupBox *m_name_group;
+ QLineEdit *m_name_edit;
+ QGroupBox *m_instances_group;
+ QTableWidget *m_instances_table;
+ QGroupBox *m_desc_group;
+ QGroupBox *m_flags_group;
+ QCheckBox *m_sct_check;
+ QFont m_reg_font;
+ QGroupBox *m_formula_group;
+ QButtonGroup *m_formula_radio_group;
+ QLabel *m_formula_type_label;
+ QComboBox *m_formula_combo;
+ QLineEdit *m_formula_string_edit;
+ QPushButton *m_formula_string_gen;
+ RegSexyDisplay *m_sexy_display;
+ MyTextEditor *m_desc_edit;
+ QGroupBox *m_field_group;
+ QTableWidget *m_field_table;
+};
+
+class FieldEditPanel : public QWidget, public AbstractRegEditPanel
+{
+ Q_OBJECT
+public:
+ FieldEditPanel(SocFieldRef ref, QWidget *parent = 0);
+
+signals:
+ void OnModified(bool mod);
+
+protected slots:
+ void OnDescEdited();
+ void OnNameEdited(const QString& text);
+ void OnBitRangeEdited(const QString& string);
+ void OnValueActivated(int row, int column);
+ void OnValueChanged(int row, int column);
+
+protected:
+ void CreateNewRow(int row);
+ void FillRow(int row, const soc_reg_field_value_t& val);
+ void UpdateWarning(int row);
+ void UpdateDelegates();
+
+ enum
+ {
+ FieldValueDeleteType = QTableWidgetItem::UserType,
+ FieldValueNewType,
+ };
+
+ enum
+ {
+ FieldValueIconColumn = 0,
+ FieldValueNameColumn,
+ FieldValueValueColumn,
+ FieldValueDescColumn,
+ FieldValueNrColumns,
+ };
+
+ SocFieldRef m_ref;
+ QGroupBox *m_name_group;
+ QLineEdit *m_name_edit;
+ QGroupBox *m_bitrange_group;
+ QLineEdit *m_bitrange_edit;
+ QGroupBox *m_desc_group;
+ MyTextEditor *m_desc_edit;
+ QGroupBox *m_value_group;
+ QTableWidget *m_value_table;
+};
+
+class RegEdit : public QWidget, public DocumentTab
+{
+ Q_OBJECT
+public:
+ RegEdit(Backend *backend, QWidget *parent = 0);
+ ~RegEdit();
+ virtual bool Quit();
+
+signals:
+ void OnModified(bool mod);
+
+protected slots:
+ void OnSocItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
+ void OnSocItemActivated(QTreeWidgetItem *current, int column);
+ void OnOpen();
+ void OnSave();
+ void OnSaveAs();
+ void OnSocModified(bool modified);
+ void OnNew();
+
+protected:
+ void LoadSocFile(const QString& filename);
+ void UpdateSocFile();
+ void FillSocTree();
+ void FillSocTreeItem(QTreeWidgetItem *_item);
+ void FillDevTreeItem(QTreeWidgetItem *_item);
+ void FillRegTreeItem(QTreeWidgetItem *_item);
+ void SetPanel(QWidget *panel);
+ void DisplaySoc(SocRef ref);
+ void DisplayDev(SocDevRef ref);
+ void DisplayReg(SocRegRef ref);
+ void DisplayField(SocFieldRef ref);
+ bool CloseSoc();
+ bool SaveSoc();
+ bool SaveSocAs();
+ bool SaveSocFile(const QString& filename);
+ bool GetFilename(QString& filename, bool save);
+ void SetModified(bool add, bool mod);
+ void FixupEmptyItem(QTreeWidgetItem *item);
+ void MakeItalic(QTreeWidgetItem *item, bool it);
+ void AddDevice(QTreeWidgetItem *item);
+ void AddRegister(QTreeWidgetItem *_item);
+ void UpdateName(QTreeWidgetItem *current);
+ void AddField(QTreeWidgetItem *_item);
+ void CreateNewDeviceItem(QTreeWidgetItem *parent);
+ void CreateNewRegisterItem(QTreeWidgetItem *parent);
+ void CreateNewFieldItem(QTreeWidgetItem *parent);
+
+ QGroupBox *m_file_group;
+ QToolButton *m_file_open;
+ QToolButton *m_file_save;
+ QLineEdit *m_file_edit;
+ QSplitter *m_splitter;
+ QTreeWidget *m_soc_tree;
+ Backend *m_backend;
+ bool m_modified;
+ SocFile m_cur_socfile;
+ QWidget *m_right_panel;
+};
+
+#endif /* REGEDIT_H */