summaryrefslogtreecommitdiff
path: root/utils/regtools/qeditor/regedit.cpp
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2016-02-07 21:48:40 +0000
committerAmaury Pouly <amaury.pouly@gmail.com>2016-04-08 18:46:46 +0100
commit5ac0166388ac9a493491a30fbc3570f23950dc51 (patch)
tree8fe2019a8d3376042d1f92b7a2127bd73d3c97e3 /utils/regtools/qeditor/regedit.cpp
parentcc4c9b70bcac048fc388d0f553b7621f52449526 (diff)
downloadrockbox-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.cpp136
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
883void 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
878void RegFieldEditPanel::OnFieldValueActivated(QTableWidgetItem *item) 890void 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
1115void RegEditPanel::UpdateWidthRestrictions() 1165void RegEditPanel::UpdateWidthRestrictions()
@@ -1148,6 +1198,22 @@ void RegEditPanel::OnWidthChanged(int w)
1148 OnModified(); 1198 OnModified();
1149} 1199}
1150 1200
1201void 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
1211void RegEditPanel::OnAccessChanged(int acc)
1212{
1213 m_ref.get()->access = (soc_desc::access_t)acc;
1214 OnModified();
1215}
1216
1151void RegEditPanel::OnDescEdited() 1217void 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());