diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2016-02-07 21:48:40 +0000 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2016-04-08 18:46:46 +0100 |
commit | 5ac0166388ac9a493491a30fbc3570f23950dc51 (patch) | |
tree | 8fe2019a8d3376042d1f92b7a2127bd73d3c97e3 /utils/regtools/qeditor/regedit.cpp | |
parent | cc4c9b70bcac048fc388d0f553b7621f52449526 (diff) | |
download | rockbox-5ac0166388ac9a493491a30fbc3570f23950dc51.tar.gz rockbox-5ac0166388ac9a493491a30fbc3570f23950dc51.zip |
qeditor: port to the new hwstub library and add features
This commit adds support for the version of the hwstub library, which requires
a lot of changes. It also adds some editing features, such as register access
and much better editing of fields using the mouse (double click on a field
to be able to resize and move it).
Change-Id: I3c4e4cc855cb44911c72bc8127bad841b68efe52
Diffstat (limited to 'utils/regtools/qeditor/regedit.cpp')
-rw-r--r-- | utils/regtools/qeditor/regedit.cpp | 136 |
1 files changed, 106 insertions, 30 deletions
diff --git a/utils/regtools/qeditor/regedit.cpp b/utils/regtools/qeditor/regedit.cpp index 826452fdbd..bf86792c1e 100644 --- a/utils/regtools/qeditor/regedit.cpp +++ b/utils/regtools/qeditor/regedit.cpp | |||
@@ -107,14 +107,15 @@ SocEditPanel::SocEditPanel(const soc_desc::soc_ref_t& ref, QWidget *parent) | |||
107 | for(size_t i = 0; i < authors.size(); i++) | 107 | for(size_t i = 0; i < authors.size(); i++) |
108 | { | 108 | { |
109 | QTableWidgetItem *item = new QTableWidgetItem( | 109 | QTableWidgetItem *item = new QTableWidgetItem( |
110 | QIcon::fromTheme("list-remove"), "", SocEditPanelDelType); | 110 | YIconManager::Get()->GetIcon(YIconManager::ListRemove), "", SocEditPanelDelType); |
111 | item->setToolTip("Remove this author"); | ||
111 | item->setFlags(Qt::ItemIsEnabled); | 112 | item->setFlags(Qt::ItemIsEnabled); |
112 | m_authors_list->setItem(i, 0, item); | 113 | m_authors_list->setItem(i, 0, item); |
113 | item = new QTableWidgetItem(QString::fromStdString(authors[i])); | 114 | item = new QTableWidgetItem(QString::fromStdString(authors[i])); |
114 | m_authors_list->setItem(i, 1, item); | 115 | m_authors_list->setItem(i, 1, item); |
115 | } | 116 | } |
116 | QTableWidgetItem *new_item = new QTableWidgetItem( | 117 | QTableWidgetItem *new_item = new QTableWidgetItem( |
117 | QIcon::fromTheme("list-add"), "", SocEditPanelAddType); | 118 | YIconManager::Get()->GetIcon(YIconManager::ListAdd), "", SocEditPanelAddType); |
118 | new_item->setFlags(Qt::ItemIsEnabled); | 119 | new_item->setFlags(Qt::ItemIsEnabled); |
119 | m_authors_list->setItem(authors.size(), 0, new_item); | 120 | m_authors_list->setItem(authors.size(), 0, new_item); |
120 | new_item = new QTableWidgetItem("New author...", QTableWidgetItem::UserType); | 121 | new_item = new QTableWidgetItem("New author...", QTableWidgetItem::UserType); |
@@ -188,7 +189,8 @@ void SocEditPanel::OnAuthorActivated(QTableWidgetItem *item) | |||
188 | m_ref.get()->author.push_back("Anonymous"); | 189 | m_ref.get()->author.push_back("Anonymous"); |
189 | m_authors_list->insertRow(row); | 190 | m_authors_list->insertRow(row); |
190 | QTableWidgetItem *item = new QTableWidgetItem( | 191 | QTableWidgetItem *item = new QTableWidgetItem( |
191 | QIcon::fromTheme("list-remove"), "", SocEditPanelDelType); | 192 | YIconManager::Get()->GetIcon(YIconManager::ListRemove), "", SocEditPanelDelType); |
193 | item->setToolTip("Remove this author"); | ||
192 | item->setFlags(Qt::ItemIsEnabled); | 194 | item->setFlags(Qt::ItemIsEnabled); |
193 | m_authors_list->setItem(row, 0, item); | 195 | m_authors_list->setItem(row, 0, item); |
194 | item = new QTableWidgetItem(QString::fromStdString(m_ref.get()->author.back())); | 196 | item = new QTableWidgetItem(QString::fromStdString(m_ref.get()->author.back())); |
@@ -386,7 +388,8 @@ NodeInstanceEditPanel::NodeInstanceEditPanel(const soc_desc::node_ref_t& ref, | |||
386 | for(size_t i = 0; i < addrs.size(); i++) | 388 | for(size_t i = 0; i < addrs.size(); i++) |
387 | { | 389 | { |
388 | QTableWidgetItem *item = new QTableWidgetItem( | 390 | QTableWidgetItem *item = new QTableWidgetItem( |
389 | QIcon::fromTheme("list-remove"), "", NodeInstEditPanelDelType); | 391 | YIconManager::Get()->GetIcon(YIconManager::ListRemove), "", NodeInstEditPanelDelType); |
392 | item->setToolTip("Remove this address"); | ||
390 | item->setFlags(Qt::ItemIsEnabled); | 393 | item->setFlags(Qt::ItemIsEnabled); |
391 | addr_list->setItem(i, 0, item); | 394 | addr_list->setItem(i, 0, item); |
392 | item = new QTableWidgetItem(); | 395 | item = new QTableWidgetItem(); |
@@ -394,7 +397,7 @@ NodeInstanceEditPanel::NodeInstanceEditPanel(const soc_desc::node_ref_t& ref, | |||
394 | addr_list->setItem(i, 1, item); | 397 | addr_list->setItem(i, 1, item); |
395 | } | 398 | } |
396 | QTableWidgetItem *new_item = new QTableWidgetItem( | 399 | QTableWidgetItem *new_item = new QTableWidgetItem( |
397 | QIcon::fromTheme("list-add"), "", NodeInstEditPanelAddType); | 400 | YIconManager::Get()->GetIcon(YIconManager::ListAdd), "", NodeInstEditPanelAddType); |
398 | new_item->setFlags(Qt::ItemIsEnabled); | 401 | new_item->setFlags(Qt::ItemIsEnabled); |
399 | addr_list->setItem(addrs.size(), 0, new_item); | 402 | addr_list->setItem(addrs.size(), 0, new_item); |
400 | new_item = new QTableWidgetItem("New address...", QTableWidgetItem::UserType); | 403 | new_item = new QTableWidgetItem("New address...", QTableWidgetItem::UserType); |
@@ -535,7 +538,8 @@ void NodeInstanceEditPanel::OnAddressActivated(QTableWidgetItem *item) | |||
535 | GetInstance().range.list.push_back(new_addr); | 538 | GetInstance().range.list.push_back(new_addr); |
536 | table->insertRow(row); | 539 | table->insertRow(row); |
537 | QTableWidgetItem *item = new QTableWidgetItem( | 540 | QTableWidgetItem *item = new QTableWidgetItem( |
538 | QIcon::fromTheme("list-remove"), "", NodeInstEditPanelDelType); | 541 | YIconManager::Get()->GetIcon(YIconManager::ListRemove), "", NodeInstEditPanelDelType); |
542 | item->setToolTip("Remove this address"); | ||
539 | item->setFlags(Qt::ItemIsEnabled); | 543 | item->setFlags(Qt::ItemIsEnabled); |
540 | table->setItem(row, 0, item); | 544 | table->setItem(row, 0, item); |
541 | item = new QTableWidgetItem(); | 545 | item = new QTableWidgetItem(); |
@@ -828,7 +832,8 @@ RegFieldEditPanel::RegFieldEditPanel(const soc_desc::field_ref_t& ref, QWidget * | |||
828 | for(size_t i = 0; i < field.enum_.size(); i++) | 832 | for(size_t i = 0; i < field.enum_.size(); i++) |
829 | { | 833 | { |
830 | QTableWidgetItem *item = new QTableWidgetItem( | 834 | QTableWidgetItem *item = new QTableWidgetItem( |
831 | QIcon::fromTheme("list-remove"), "", RegFieldEditPanelDelType); | 835 | YIconManager::Get()->GetIcon(YIconManager::ListRemove), "", RegFieldEditPanelDelType); |
836 | item->setToolTip("Remove this enum"); | ||
832 | item->setFlags(Qt::ItemIsEnabled); | 837 | item->setFlags(Qt::ItemIsEnabled); |
833 | m_enum_table->setItem(i, 0, item); | 838 | m_enum_table->setItem(i, 0, item); |
834 | item = new QTableWidgetItem(QString::fromStdString(field.enum_[i].name)); | 839 | item = new QTableWidgetItem(QString::fromStdString(field.enum_[i].name)); |
@@ -840,7 +845,7 @@ RegFieldEditPanel::RegFieldEditPanel(const soc_desc::field_ref_t& ref, QWidget * | |||
840 | m_enum_table->setItem(i, 3, item); | 845 | m_enum_table->setItem(i, 3, item); |
841 | } | 846 | } |
842 | QTableWidgetItem *new_item = new QTableWidgetItem( | 847 | QTableWidgetItem *new_item = new QTableWidgetItem( |
843 | QIcon::fromTheme("list-add"), "", RegFieldEditPanelAddType); | 848 | YIconManager::Get()->GetIcon(YIconManager::ListAdd), "", RegFieldEditPanelAddType); |
844 | new_item->setFlags(Qt::ItemIsEnabled); | 849 | new_item->setFlags(Qt::ItemIsEnabled); |
845 | m_enum_table->setItem(field.enum_.size(), 0, new_item); | 850 | m_enum_table->setItem(field.enum_.size(), 0, new_item); |
846 | new_item = new QTableWidgetItem("New field..."); | 851 | new_item = new QTableWidgetItem("New field..."); |
@@ -875,6 +880,13 @@ void RegFieldEditPanel::UpdateWidth() | |||
875 | m_range_validator->setWidth(m_ref.reg().get()->width); | 880 | m_range_validator->setWidth(m_ref.reg().get()->width); |
876 | } | 881 | } |
877 | 882 | ||
883 | void RegFieldEditPanel::UpdateRange() | ||
884 | { | ||
885 | soc_desc::field_t *field = m_ref.get(); | ||
886 | m_range_edit->setText(m_range_validator->generate( | ||
887 | field->pos + field->width - 1, field->pos)); | ||
888 | } | ||
889 | |||
878 | void RegFieldEditPanel::OnFieldValueActivated(QTableWidgetItem *item) | 890 | void RegFieldEditPanel::OnFieldValueActivated(QTableWidgetItem *item) |
879 | { | 891 | { |
880 | if(item->type() == RegFieldEditPanelDelType) | 892 | if(item->type() == RegFieldEditPanelDelType) |
@@ -895,7 +907,8 @@ void RegFieldEditPanel::OnFieldValueActivated(QTableWidgetItem *item) | |||
895 | field.enum_.push_back(new_enum); | 907 | field.enum_.push_back(new_enum); |
896 | m_enum_table->insertRow(row); | 908 | m_enum_table->insertRow(row); |
897 | QTableWidgetItem *item = new QTableWidgetItem( | 909 | QTableWidgetItem *item = new QTableWidgetItem( |
898 | QIcon::fromTheme("list-remove"), "", RegFieldEditPanelDelType); | 910 | YIconManager::Get()->GetIcon(YIconManager::ListRemove), "", RegFieldEditPanelDelType); |
911 | item->setToolTip("Remove this enum"); | ||
899 | item->setFlags(Qt::ItemIsEnabled); | 912 | item->setFlags(Qt::ItemIsEnabled); |
900 | m_enum_table->setItem(row, 0, item); | 913 | m_enum_table->setItem(row, 0, item); |
901 | item = new QTableWidgetItem(QString::fromStdString(new_enum.name)); | 914 | item = new QTableWidgetItem(QString::fromStdString(new_enum.name)); |
@@ -977,7 +990,7 @@ RegEditPanel::RegEditPanel(const soc_desc::register_ref_t& ref, QWidget *parent) | |||
977 | 990 | ||
978 | m_value_model = new RegFieldTableModel(this); // view takes ownership | 991 | m_value_model = new RegFieldTableModel(this); // view takes ownership |
979 | m_value_model->SetRegister(*ref.get()); | 992 | m_value_model->SetRegister(*ref.get()); |
980 | m_value_model->SetReadOnly(true); | 993 | m_value_model->SetReadOnly(false); |
981 | 994 | ||
982 | m_sexy_display2 = new Unscroll<YRegDisplay>(this); | 995 | m_sexy_display2 = new Unscroll<YRegDisplay>(this); |
983 | m_sexy_display2->setFont(m_reg_font); | 996 | m_sexy_display2->setFont(m_reg_font); |
@@ -1016,29 +1029,61 @@ RegEditPanel::RegEditPanel(const soc_desc::register_ref_t& ref, QWidget *parent) | |||
1016 | width_group_layout->addWidget(reg_size_32); | 1029 | width_group_layout->addWidget(reg_size_32); |
1017 | width_group_layout->addWidget(reg_size_16); | 1030 | width_group_layout->addWidget(reg_size_16); |
1018 | width_group_layout->addWidget(reg_size_8); | 1031 | width_group_layout->addWidget(reg_size_8); |
1019 | width_group_layout->addStretch(0); | ||
1020 | QGroupBox *width_group = new QGroupBox("Width"); | 1032 | QGroupBox *width_group = new QGroupBox("Width"); |
1021 | width_group->setLayout(width_group_layout); | 1033 | width_group->setLayout(width_group_layout); |
1022 | 1034 | ||
1035 | m_reg_access_group = new QButtonGroup(this); | ||
1036 | QRadioButton *reg_dflt = new QRadioButton("Unspecified"); | ||
1037 | QRadioButton *reg_rw = new QRadioButton("Read-Write"); | ||
1038 | QRadioButton *reg_ro = new QRadioButton("Read-Only"); | ||
1039 | QRadioButton *reg_wo = new QRadioButton("Write-Only"); | ||
1040 | m_reg_access_group->addButton(reg_dflt, soc_desc::UNSPECIFIED); | ||
1041 | m_reg_access_group->addButton(reg_rw, soc_desc::READ_WRITE); | ||
1042 | m_reg_access_group->addButton(reg_ro, soc_desc::READ_ONLY); | ||
1043 | m_reg_access_group->addButton(reg_wo, soc_desc::WRITE_ONLY); | ||
1044 | if(m_reg_access_group->button(m_ref.get()->access)) | ||
1045 | m_reg_access_group->button(m_ref.get()->access)->click(); | ||
1046 | QVBoxLayout *access_group_layout = new QVBoxLayout; | ||
1047 | access_group_layout->addWidget(reg_dflt); | ||
1048 | access_group_layout->addWidget(reg_rw); | ||
1049 | access_group_layout->addWidget(reg_ro); | ||
1050 | access_group_layout->addWidget(reg_wo); | ||
1051 | QGroupBox *access_group = new QGroupBox("Access"); | ||
1052 | access_group->setLayout(access_group_layout); | ||
1053 | |||
1054 | QVBoxLayout *width_access_layout = new QVBoxLayout; | ||
1055 | width_access_layout->addWidget(width_group); | ||
1056 | width_access_layout->addWidget(access_group); | ||
1057 | width_access_layout->addStretch(0); | ||
1058 | |||
1023 | m_variant_table = new QTableWidget; | 1059 | m_variant_table = new QTableWidget; |
1024 | m_variant_table->setColumnCount(3); | 1060 | m_variant_table->setColumnCount(4); |
1025 | m_variant_table->setHorizontalHeaderItem(0, new QTableWidgetItem("")); | 1061 | m_variant_table->setHorizontalHeaderItem(0, new QTableWidgetItem("")); |
1026 | m_variant_table->setHorizontalHeaderItem(1, new QTableWidgetItem("Type")); | 1062 | m_variant_table->setHorizontalHeaderItem(1, new QTableWidgetItem("Type")); |
1027 | m_variant_table->setHorizontalHeaderItem(2, new QTableWidgetItem("Offset")); | 1063 | m_variant_table->setHorizontalHeaderItem(2, new QTableWidgetItem("Offset")); |
1064 | m_variant_table->setHorizontalHeaderItem(3, new QTableWidgetItem("Access")); | ||
1028 | m_variant_table->verticalHeader()->setVisible(false); | 1065 | m_variant_table->verticalHeader()->setVisible(false); |
1029 | m_variant_table->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); | 1066 | m_variant_table->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); |
1030 | m_variant_delegate = new SocFieldItemDelegate(this); | 1067 | m_variant_delegate = new SocFieldItemDelegate(this); |
1031 | m_variant_delegate->setItemEditorFactory(new QItemEditorFactory); | 1068 | m_variant_delegate->setItemEditorFactory(new QItemEditorFactory); |
1032 | m_variant_editor = new SocFieldEditorCreator; | 1069 | m_variant_delegate->itemEditorFactory()->registerEditor(QVariant::UInt, |
1033 | m_variant_delegate->itemEditorFactory()->registerEditor(QVariant::UInt, m_variant_editor); | 1070 | new SocFieldEditorCreator); |
1034 | m_variant_table->setItemDelegate(m_variant_delegate); | 1071 | m_variant_table->setItemDelegate(m_variant_delegate); |
1072 | m_access_delegate = new SocAccessItemDelegate("Unspecified", this); | ||
1073 | m_access_delegate->setItemEditorFactory(new QItemEditorFactory); | ||
1074 | // FIXME see QTBUG-30392 | ||
1075 | m_access_delegate->itemEditorFactory()->registerEditor( | ||
1076 | (QVariant::Type)qMetaTypeId< soc_desc::access_t >(), | ||
1077 | new SocAccessEditorCreator); | ||
1078 | m_variant_table->setItemDelegateForColumn(3, m_access_delegate); | ||
1035 | 1079 | ||
1036 | std::vector< soc_desc::variant_ref_t > variants = m_ref.variants(); | 1080 | std::vector< soc_desc::variant_ref_t > variants = m_ref.variants(); |
1037 | m_variant_table->setRowCount(variants.size() + 1); | 1081 | m_variant_table->setRowCount(variants.size() + 1); |
1038 | for(size_t i = 0; i < variants.size(); i++) | 1082 | for(size_t i = 0; i < variants.size(); i++) |
1039 | { | 1083 | { |
1040 | QTableWidgetItem *item = new QTableWidgetItem( | 1084 | QTableWidgetItem *item = new QTableWidgetItem( |
1041 | QIcon::fromTheme("list-remove"), "", RegVariantEditPanelDelType); | 1085 | YIconManager::Get()->GetIcon(YIconManager::ListRemove), "", RegVariantEditPanelDelType); |
1086 | item->setToolTip("Remove this variant"); | ||
1042 | item->setFlags(Qt::ItemIsEnabled); | 1087 | item->setFlags(Qt::ItemIsEnabled); |
1043 | m_variant_table->setItem(i, 0, item); | 1088 | m_variant_table->setItem(i, 0, item); |
1044 | item = new QTableWidgetItem(QString::fromStdString(variants[i].get()->type)); | 1089 | item = new QTableWidgetItem(QString::fromStdString(variants[i].get()->type)); |
@@ -1046,9 +1091,12 @@ RegEditPanel::RegEditPanel(const soc_desc::register_ref_t& ref, QWidget *parent) | |||
1046 | item = new QTableWidgetItem(); | 1091 | item = new QTableWidgetItem(); |
1047 | item->setData(Qt::EditRole, QVariant(variants[i].get()->offset)); | 1092 | item->setData(Qt::EditRole, QVariant(variants[i].get()->offset)); |
1048 | m_variant_table->setItem(i, 2, item); | 1093 | m_variant_table->setItem(i, 2, item); |
1094 | item = new QTableWidgetItem(); | ||
1095 | item->setData(Qt::EditRole, QVariant::fromValue(variants[i].get()->access)); | ||
1096 | m_variant_table->setItem(i, 3, item); | ||
1049 | } | 1097 | } |
1050 | QTableWidgetItem *new_item = new QTableWidgetItem( | 1098 | QTableWidgetItem *new_item = new QTableWidgetItem( |
1051 | QIcon::fromTheme("list-add"), "", RegVariantEditPanelAddType); | 1099 | YIconManager::Get()->GetIcon(YIconManager::ListAdd), "", RegVariantEditPanelAddType); |
1052 | new_item->setFlags(Qt::ItemIsEnabled); | 1100 | new_item->setFlags(Qt::ItemIsEnabled); |
1053 | m_variant_table->setItem(variants.size(), 0, new_item); | 1101 | m_variant_table->setItem(variants.size(), 0, new_item); |
1054 | new_item = new QTableWidgetItem("New variant..."); | 1102 | new_item = new QTableWidgetItem("New variant..."); |
@@ -1069,7 +1117,7 @@ RegEditPanel::RegEditPanel(const soc_desc::register_ref_t& ref, QWidget *parent) | |||
1069 | m_desc_edit->SetTextHtml(QString::fromStdString(ref.get()->desc)); | 1117 | m_desc_edit->SetTextHtml(QString::fromStdString(ref.get()->desc)); |
1070 | 1118 | ||
1071 | QHBoxLayout *top_info_layout = new QHBoxLayout; | 1119 | QHBoxLayout *top_info_layout = new QHBoxLayout; |
1072 | top_info_layout->addWidget(width_group); | 1120 | top_info_layout->addLayout(width_access_layout); |
1073 | top_info_layout->addWidget(Misc::EncloseInBox("Variants", m_variant_table)); | 1121 | top_info_layout->addWidget(Misc::EncloseInBox("Variants", m_variant_table)); |
1074 | top_info_layout->addWidget(Misc::EncloseInBox("Description", m_desc_edit)); | 1122 | top_info_layout->addWidget(Misc::EncloseInBox("Description", m_desc_edit)); |
1075 | 1123 | ||
@@ -1087,9 +1135,9 @@ RegEditPanel::RegEditPanel(const soc_desc::register_ref_t& ref, QWidget *parent) | |||
1087 | main_layout->addWidget(m_view_tab, 2); | 1135 | main_layout->addWidget(m_view_tab, 2); |
1088 | 1136 | ||
1089 | m_delete_action = new QAction("&Delete", this); | 1137 | m_delete_action = new QAction("&Delete", this); |
1090 | m_delete_action->setIcon(QIcon::fromTheme("list-remove")); | 1138 | m_delete_action->setIcon(YIconManager::Get()->GetIcon(YIconManager::ListRemove)); |
1091 | m_new_action = new QAction("&New field", this); | 1139 | m_new_action = new QAction("&New field", this); |
1092 | m_new_action->setIcon(QIcon::fromTheme("list-add")); | 1140 | m_new_action->setIcon(YIconManager::Get()->GetIcon(YIconManager::ListAdd)); |
1093 | 1141 | ||
1094 | setLayout(main_layout); | 1142 | setLayout(main_layout); |
1095 | 1143 | ||
@@ -1101,6 +1149,7 @@ RegEditPanel::RegEditPanel(const soc_desc::register_ref_t& ref, QWidget *parent) | |||
1101 | connect(m_sexy_display2, SIGNAL(customContextMenuRequested(QPoint)), this, | 1149 | connect(m_sexy_display2, SIGNAL(customContextMenuRequested(QPoint)), this, |
1102 | SLOT(OnRegDisplayContextMenu(QPoint))); | 1150 | SLOT(OnRegDisplayContextMenu(QPoint))); |
1103 | connect(m_reg_size_group, SIGNAL(buttonClicked(int)), this, SLOT(OnWidthChanged(int))); | 1151 | connect(m_reg_size_group, SIGNAL(buttonClicked(int)), this, SLOT(OnWidthChanged(int))); |
1152 | connect(m_reg_access_group, SIGNAL(buttonClicked(int)), this, SLOT(OnAccessChanged(int))); | ||
1104 | connect(m_delete_action, SIGNAL(triggered()), this, SLOT(OnRegFieldDelete())); | 1153 | connect(m_delete_action, SIGNAL(triggered()), this, SLOT(OnRegFieldDelete())); |
1105 | connect(m_new_action, SIGNAL(triggered()), this, SLOT(OnRegFieldNew())); | 1154 | connect(m_new_action, SIGNAL(triggered()), this, SLOT(OnRegFieldNew())); |
1106 | connect(m_variant_table, SIGNAL(itemActivated(QTableWidgetItem *)), this, | 1155 | connect(m_variant_table, SIGNAL(itemActivated(QTableWidgetItem *)), this, |
@@ -1110,6 +1159,7 @@ RegEditPanel::RegEditPanel(const soc_desc::register_ref_t& ref, QWidget *parent) | |||
1110 | connect(m_desc_edit, SIGNAL(OnTextChanged()), this, SLOT(OnDescEdited())); | 1159 | connect(m_desc_edit, SIGNAL(OnTextChanged()), this, SLOT(OnDescEdited())); |
1111 | connect(m_fields_tab, SIGNAL(tabCloseRequested(int)), this, SLOT(OnFieldRemove(int))); | 1160 | connect(m_fields_tab, SIGNAL(tabCloseRequested(int)), this, SLOT(OnFieldRemove(int))); |
1112 | connect(m_fields_tab, SIGNAL(tabOpenRequested()), this, SLOT(OnFieldCreate())); | 1161 | connect(m_fields_tab, SIGNAL(tabOpenRequested()), this, SLOT(OnFieldCreate())); |
1162 | connect(m_value_model, SIGNAL(OnBitrangeModified(int)), this, SLOT(OnBitrangeModified(int))); | ||
1113 | } | 1163 | } |
1114 | 1164 | ||
1115 | void RegEditPanel::UpdateWidthRestrictions() | 1165 | void RegEditPanel::UpdateWidthRestrictions() |
@@ -1148,6 +1198,22 @@ void RegEditPanel::OnWidthChanged(int w) | |||
1148 | OnModified(); | 1198 | OnModified(); |
1149 | } | 1199 | } |
1150 | 1200 | ||
1201 | void RegEditPanel::OnBitrangeModified(int index) | ||
1202 | { | ||
1203 | soc_desc::register_t reg = m_value_model->GetRegister(); | ||
1204 | m_ref.get()->field[index].pos = reg.field[index].pos; | ||
1205 | m_ref.get()->field[index].width = reg.field[index].width; | ||
1206 | for(int i = 0; i < m_fields_tab->count(); i++) | ||
1207 | dynamic_cast< RegFieldEditPanel * >(m_fields_tab->widget(i))->UpdateRange(); | ||
1208 | OnModified(); | ||
1209 | } | ||
1210 | |||
1211 | void RegEditPanel::OnAccessChanged(int acc) | ||
1212 | { | ||
1213 | m_ref.get()->access = (soc_desc::access_t)acc; | ||
1214 | OnModified(); | ||
1215 | } | ||
1216 | |||
1151 | void RegEditPanel::OnDescEdited() | 1217 | void RegEditPanel::OnDescEdited() |
1152 | { | 1218 | { |
1153 | m_ref.get()->desc = m_desc_edit->GetTextHtml().toStdString(); | 1219 | m_ref.get()->desc = m_desc_edit->GetTextHtml().toStdString(); |
@@ -1169,9 +1235,11 @@ void RegEditPanel::OnVariantActivated(QTableWidgetItem *item) | |||
1169 | soc_desc::variant_t& variant = *m_ref.create_variant().get(); | 1235 | soc_desc::variant_t& variant = *m_ref.create_variant().get(); |
1170 | variant.type = "untyped"; | 1236 | variant.type = "untyped"; |
1171 | variant.offset = 0; | 1237 | variant.offset = 0; |
1238 | variant.access = soc_desc::UNSPECIFIED; | ||
1172 | m_variant_table->insertRow(row); | 1239 | m_variant_table->insertRow(row); |
1173 | QTableWidgetItem *item = new QTableWidgetItem( | 1240 | QTableWidgetItem *item = new QTableWidgetItem( |
1174 | QIcon::fromTheme("list-remove"), "", RegVariantEditPanelDelType); | 1241 | YIconManager::Get()->GetIcon(YIconManager::ListRemove), "", RegVariantEditPanelDelType); |
1242 | item->setToolTip("Remove this variant"); | ||
1175 | item->setFlags(Qt::ItemIsEnabled); | 1243 | item->setFlags(Qt::ItemIsEnabled); |
1176 | m_variant_table->setItem(row, 0, item); | 1244 | m_variant_table->setItem(row, 0, item); |
1177 | item = new QTableWidgetItem(QString::fromStdString(variant.type)); | 1245 | item = new QTableWidgetItem(QString::fromStdString(variant.type)); |
@@ -1179,6 +1247,9 @@ void RegEditPanel::OnVariantActivated(QTableWidgetItem *item) | |||
1179 | item = new QTableWidgetItem(); | 1247 | item = new QTableWidgetItem(); |
1180 | item->setData(Qt::EditRole, QVariant(variant.offset)); | 1248 | item->setData(Qt::EditRole, QVariant(variant.offset)); |
1181 | m_variant_table->setItem(row, 2, item); | 1249 | m_variant_table->setItem(row, 2, item); |
1250 | item = new QTableWidgetItem(); | ||
1251 | item->setData(Qt::EditRole, QVariant::fromValue(variant.access)); | ||
1252 | m_variant_table->setItem(row, 3, item); | ||
1182 | OnModified(); | 1253 | OnModified(); |
1183 | } | 1254 | } |
1184 | } | 1255 | } |
@@ -1193,6 +1264,8 @@ void RegEditPanel::OnVariantValueChanged(QTableWidgetItem *item) | |||
1193 | var.type = item->text().toStdString(); | 1264 | var.type = item->text().toStdString(); |
1194 | else if(item->column() == 2) | 1265 | else if(item->column() == 2) |
1195 | var.offset = item->data(Qt::EditRole).value< soc_word_t >(); | 1266 | var.offset = item->data(Qt::EditRole).value< soc_word_t >(); |
1267 | else if(item->column() == 3) | ||
1268 | var.access = item->data(Qt::EditRole).value< soc_desc::access_t >(); | ||
1196 | OnModified(); | 1269 | OnModified(); |
1197 | } | 1270 | } |
1198 | 1271 | ||
@@ -1346,20 +1419,22 @@ RegEdit::RegEdit(Backend *backend, QWidget *parent) | |||
1346 | m_file_edit->setReadOnly(true); | 1419 | m_file_edit->setReadOnly(true); |
1347 | m_file_open = new QToolButton(this); | 1420 | m_file_open = new QToolButton(this); |
1348 | m_file_open->setText("Open"); | 1421 | m_file_open->setText("Open"); |
1349 | m_file_open->setIcon(QIcon::fromTheme("document-open")); | 1422 | m_file_open->setIcon(YIconManager::Get()->GetIcon(YIconManager::DocumentOpen)); |
1350 | m_file_open->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); | 1423 | m_file_open->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); |
1351 | QMenu *file_open_menu = new QMenu(this); | 1424 | QMenu *file_open_menu = new QMenu(this); |
1352 | QAction *new_act = file_open_menu->addAction(QIcon::fromTheme("document-new"), "New..."); | 1425 | QAction *new_act = file_open_menu->addAction(YIconManager::Get()->GetIcon(YIconManager::DocumentNew), |
1426 | "New..."); | ||
1353 | m_file_open->setPopupMode(QToolButton::MenuButtonPopup); | 1427 | m_file_open->setPopupMode(QToolButton::MenuButtonPopup); |
1354 | m_file_open->setMenu(file_open_menu); | 1428 | m_file_open->setMenu(file_open_menu); |
1355 | 1429 | ||
1356 | m_file_save = new QToolButton(this); | 1430 | m_file_save = new QToolButton(this); |
1357 | m_file_save->setText("Save"); | 1431 | m_file_save->setText("Save"); |
1358 | m_file_save->setIcon(QIcon::fromTheme("document-save")); | 1432 | m_file_save->setIcon(YIconManager::Get()->GetIcon(YIconManager::DocumentSave)); |
1359 | m_file_save->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); | 1433 | m_file_save->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); |
1360 | m_file_save->setPopupMode(QToolButton::MenuButtonPopup); | 1434 | m_file_save->setPopupMode(QToolButton::MenuButtonPopup); |
1361 | QMenu *file_save_menu = new QMenu(this); | 1435 | QMenu *file_save_menu = new QMenu(this); |
1362 | QAction *saveas_act = file_save_menu->addAction(QIcon::fromTheme("document-save-as"), "Save as..."); | 1436 | QAction *saveas_act = file_save_menu->addAction(YIconManager::Get()->GetIcon(YIconManager::DocumentSaveAs), |
1437 | "Save as..."); | ||
1363 | m_file_save->setMenu(file_save_menu); | 1438 | m_file_save->setMenu(file_save_menu); |
1364 | 1439 | ||
1365 | QHBoxLayout *file_group_layout = new QHBoxLayout(); | 1440 | QHBoxLayout *file_group_layout = new QHBoxLayout(); |
@@ -1375,11 +1450,11 @@ RegEdit::RegEdit(Backend *backend, QWidget *parent) | |||
1375 | m_soc_tree->setContextMenuPolicy(Qt::CustomContextMenu); | 1450 | m_soc_tree->setContextMenuPolicy(Qt::CustomContextMenu); |
1376 | 1451 | ||
1377 | m_delete_action = new QAction("&Delete", this); | 1452 | m_delete_action = new QAction("&Delete", this); |
1378 | m_delete_action->setIcon(QIcon::fromTheme("list-remove")); | 1453 | m_delete_action->setIcon(YIconManager::Get()->GetIcon(YIconManager::ListRemove)); |
1379 | m_new_action = new QAction("&New", this); | 1454 | m_new_action = new QAction("&New", this); |
1380 | m_new_action->setIcon(QIcon::fromTheme("list-add")); | 1455 | m_new_action->setIcon(YIconManager::Get()->GetIcon(YIconManager::ListAdd)); |
1381 | m_create_action = new QAction("&Create register", this); | 1456 | m_create_action = new QAction("&Create register", this); |
1382 | m_create_action->setIcon(QIcon::fromTheme("folder-new")); | 1457 | m_create_action->setIcon(YIconManager::Get()->GetIcon(YIconManager::FolderNew)); |
1383 | 1458 | ||
1384 | m_splitter->addWidget(m_soc_tree); | 1459 | m_splitter->addWidget(m_soc_tree); |
1385 | m_splitter->setStretchFactor(0, 0); | 1460 | m_splitter->setStretchFactor(0, 0); |
@@ -1605,8 +1680,8 @@ QIcon RegEdit::GetIconFromType(int type) | |||
1605 | { | 1680 | { |
1606 | switch(type) | 1681 | switch(type) |
1607 | { | 1682 | { |
1608 | case SocTreeSocType: return QIcon::fromTheme("computer"); | 1683 | case SocTreeSocType: return YIconManager::Get()->GetIcon(YIconManager::Computer); |
1609 | case SocTreeNodeType: return QIcon::fromTheme("cpu"); | 1684 | case SocTreeNodeType: return YIconManager::Get()->GetIcon(YIconManager::Cpu); |
1610 | case SocTreeRegType: return style()->standardIcon(QStyle::SP_ArrowRight); | 1685 | case SocTreeRegType: return style()->standardIcon(QStyle::SP_ArrowRight); |
1611 | default: return QIcon(); | 1686 | default: return QIcon(); |
1612 | } | 1687 | } |
@@ -1627,7 +1702,7 @@ void RegEdit::FixupItem(QTreeWidgetItem *item) | |||
1627 | UpdateName(item); | 1702 | UpdateName(item); |
1628 | if(!ValidateName(item->text(0))) | 1703 | if(!ValidateName(item->text(0))) |
1629 | { | 1704 | { |
1630 | item->setIcon(0, QIcon::fromTheme("dialog-error")); | 1705 | item->setIcon(0, YIconManager::Get()->GetIcon(YIconManager::DialogError)); |
1631 | if(item->text(0).size() == 0) | 1706 | if(item->text(0).size() == 0) |
1632 | { | 1707 | { |
1633 | MakeItalic(item, true); | 1708 | MakeItalic(item, true); |
@@ -1688,6 +1763,7 @@ void RegEdit::OnSocItemCreate() | |||
1688 | return; | 1763 | return; |
1689 | soc_desc::register_t reg; | 1764 | soc_desc::register_t reg; |
1690 | reg.width = 32; | 1765 | reg.width = 32; |
1766 | reg.access = soc_desc::UNSPECIFIED; | ||
1691 | soc_desc::node_ref_t node = SocTreeItemVal< soc_desc::node_ref_t >(current); | 1767 | soc_desc::node_ref_t node = SocTreeItemVal< soc_desc::node_ref_t >(current); |
1692 | node.get()->register_.push_back(reg); | 1768 | node.get()->register_.push_back(reg); |
1693 | QTreeWidgetItem *reg_item = MakeSocTreeItem(SocTreeRegType, node.reg()); | 1769 | QTreeWidgetItem *reg_item = MakeSocTreeItem(SocTreeRegType, node.reg()); |