summaryrefslogtreecommitdiff
path: root/utils/regtools/qeditor/regdisplaypanel.cpp
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-12-15 22:44:17 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2014-12-15 22:44:17 +0100
commit94c4834bbbcda9ef71ec8d5ff080b41374d8e7c0 (patch)
treea424068bce4a0374335f77bbf74a2d5c052118ca /utils/regtools/qeditor/regdisplaypanel.cpp
parent3b3d9bf725a5b04e4cd9bc4254fbd2594b518e89 (diff)
downloadrockbox-94c4834bbbcda9ef71ec8d5ff080b41374d8e7c0.tar.gz
rockbox-94c4834bbbcda9ef71ec8d5ff080b41374d8e7c0.zip
Revert "regtools/qeditor: use the new model, drop unused code"
This reverts commit 3b3d9bf725a5b04e4cd9bc4254fbd2594b518e89. Gerrit did crap on this one.
Diffstat (limited to 'utils/regtools/qeditor/regdisplaypanel.cpp')
-rw-r--r--utils/regtools/qeditor/regdisplaypanel.cpp96
1 files changed, 74 insertions, 22 deletions
diff --git a/utils/regtools/qeditor/regdisplaypanel.cpp b/utils/regtools/qeditor/regdisplaypanel.cpp
index bbfb4f5840..d450b4e203 100644
--- a/utils/regtools/qeditor/regdisplaypanel.cpp
+++ b/utils/regtools/qeditor/regdisplaypanel.cpp
@@ -176,17 +176,46 @@ RegDisplayPanel::RegDisplayPanel(QWidget *parent, IoBackend *io_backend, const S
176 raw_val_layout->addWidget(m_raw_val_edit); 176 raw_val_layout->addWidget(m_raw_val_edit);
177 raw_val_layout->addStretch(); 177 raw_val_layout->addStretch();
178 178
179 m_value_table = new GrowingTableView; 179 m_value_table = new GrowingTableWidget;
180 m_value_model = new RegFieldTableModel(m_value_table); // view takes ownership 180 m_value_table->setRowCount(reg.field.size());
181 m_value_model->SetRegister(m_reg.GetReg()); 181 m_value_table->setColumnCount(5);
182 m_value_model->SetReadOnly(read_only); 182 for(size_t row = 0; row < reg.field.size(); row++)
183 m_value_table->setModel(m_value_model); 183 {
184 const soc_reg_field_t& field = reg.field[row];
185 QString bits_str;
186 if(field.first_bit == field.last_bit)
187 bits_str.sprintf("%d", field.first_bit);
188 else
189 bits_str.sprintf("%d:%d", field.last_bit, field.first_bit);
190 QTableWidgetItem *item = new QTableWidgetItem(bits_str);
191 item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
192 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
193 m_value_table->setItem(row, FieldBitsColumn, item);
194 item = new QTableWidgetItem(QString(field.name.c_str()));
195 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
196 m_value_table->setItem(row, FieldNameColumn, item);
197 item = new QTableWidgetItem();
198 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
199 item->setData(Qt::DisplayRole, QVariant::fromValue(SocFieldCachedValue()));
200 item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
201 m_value_table->setItem(row, FieldValueColumn, item);
202 item = new QTableWidgetItem("");
203 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
204 item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
205 m_value_table->setItem(row, FieldMeaningColumn, item);
206 item = new QTableWidgetItem(QString(field.desc.c_str()));
207 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
208 m_value_table->setItem(row, FieldDescColumn, item);
209 }
210 m_value_table->setHorizontalHeaderItem(FieldBitsColumn, new QTableWidgetItem("Bits"));
211 m_value_table->setHorizontalHeaderItem(FieldNameColumn, new QTableWidgetItem("Name"));
212 m_value_table->setHorizontalHeaderItem(FieldValueColumn, new QTableWidgetItem("Value"));
213 m_value_table->setHorizontalHeaderItem(FieldMeaningColumn, new QTableWidgetItem("Meaning"));
214 m_value_table->setHorizontalHeaderItem(FieldDescColumn, new QTableWidgetItem("Description"));
184 m_value_table->verticalHeader()->setVisible(false); 215 m_value_table->verticalHeader()->setVisible(false);
185 m_value_table->resizeColumnsToContents(); 216 m_value_table->resizeColumnsToContents();
186 m_value_table->horizontalHeader()->setStretchLastSection(true); 217 m_value_table->horizontalHeader()->setStretchLastSection(true);
187 m_value_table->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 218 m_value_table->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
188 // FIXME we cannot use setAlternatingRowColors() because we override the
189 // background color, should it be part of the model ?
190 219
191 SocFieldCachedItemDelegate *m_table_delegate = new SocFieldCachedItemDelegate(this); 220 SocFieldCachedItemDelegate *m_table_delegate = new SocFieldCachedItemDelegate(this);
192 m_table_edit_factory = new QItemEditorFactory(); 221 m_table_edit_factory = new QItemEditorFactory();
@@ -224,13 +253,12 @@ RegDisplayPanel::RegDisplayPanel(QWidget *parent, IoBackend *io_backend, const S
224 setLayout(layout); 253 setLayout(layout);
225 AllowWrite(false); 254 AllowWrite(false);
226 255
256 m_ignore_cell_change = false;
227 // load data 257 // load data
228 Reload(); 258 Reload();
229 259
230 connect(m_raw_val_edit->GetLineEdit(), SIGNAL(returnPressed()), this, 260 connect(m_raw_val_edit->GetLineEdit(), SIGNAL(returnPressed()), this, SLOT(OnRawRegValueReturnPressed()));
231 SLOT(OnRawRegValueReturnPressed())); 261 connect(m_value_table, SIGNAL(cellChanged(int, int)), this, SLOT(OnRegFieldValueChanged(int, int)));
232 connect(m_value_table->model(), SIGNAL(OnValueModified(int)), this,
233 SLOT(OnRegValueChanged(int)));
234} 262}
235 263
236RegDisplayPanel::~RegDisplayPanel() 264RegDisplayPanel::~RegDisplayPanel()
@@ -252,15 +280,38 @@ void RegDisplayPanel::Reload()
252 m_raw_val_name->show(); 280 m_raw_val_name->show();
253 m_raw_val_edit->show(); 281 m_raw_val_edit->show();
254 m_raw_val_edit->GetLineEdit()->setText(QString().sprintf("0x%08x", value)); 282 m_raw_val_edit->GetLineEdit()->setText(QString().sprintf("0x%08x", value));
255 m_value_model->SetValues(QVector< QVariant >(1, QVariant(value)));
256 } 283 }
257 else 284 else
258 { 285 {
259 m_raw_val_name->hide(); 286 m_raw_val_name->hide();
260 m_raw_val_edit->hide(); 287 m_raw_val_edit->hide();
261 m_value_model->SetValues(QVector< QVariant >());
262 } 288 }
263 289
290 m_ignore_cell_change = true;
291 for(size_t row = 0; row < reg.field.size(); row++)
292 {
293 const soc_reg_field_t& field = reg.field[row];
294 QTableWidgetItem *item = m_value_table->item(row, FieldValueColumn);
295 QTableWidgetItem *desc_item = m_value_table->item(row, FieldMeaningColumn);
296 if(has_value)
297 {
298 soc_word_t v = (value & field.bitmask()) >> field.first_bit;
299 QString value_name;
300 foreach(const soc_reg_field_value_t& rval, field.value)
301 if(v == rval.value)
302 value_name = rval.name.c_str();
303 item->setData(Qt::DisplayRole, QVariant::fromValue(SocFieldCachedValue(field, v)));
304 if(value_name.size() != 0)
305 desc_item->setText(value_name);
306 }
307 else
308 item->setData(Qt::DisplayRole, QVariant::fromValue(SocFieldCachedValue()));
309 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
310 if(m_allow_write)
311 item->setFlags(item->flags() | Qt::ItemIsEditable);
312 }
313 m_ignore_cell_change = false;
314
264 m_value_table->resizeColumnsToContents(); 315 m_value_table->resizeColumnsToContents();
265 m_value_table->horizontalHeader()->setStretchLastSection(true); 316 m_value_table->horizontalHeader()->setStretchLastSection(true);
266} 317}
@@ -269,10 +320,7 @@ void RegDisplayPanel::AllowWrite(bool en)
269{ 320{
270 m_allow_write = en; 321 m_allow_write = en;
271 if(m_raw_val_edit) 322 if(m_raw_val_edit)
272 {
273 m_raw_val_edit->SetReadOnly(m_io_backend->IsReadOnly() || !m_allow_write); 323 m_raw_val_edit->SetReadOnly(m_io_backend->IsReadOnly() || !m_allow_write);
274 m_value_model->SetReadOnly(m_io_backend->IsReadOnly() || !m_allow_write);
275 }
276 Reload(); 324 Reload();
277} 325}
278 326
@@ -300,19 +348,23 @@ void RegDisplayPanel::OnRawRegValueReturnPressed()
300 BackendHelper helper(m_io_backend, m_reg); 348 BackendHelper helper(m_io_backend, m_reg);
301 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(), 349 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(),
302 val, mode); 350 val, mode);
303 // register write can change all fields
304 Reload(); 351 Reload();
305} 352}
306 353
307void RegDisplayPanel::OnRegValueChanged(int index) 354void RegDisplayPanel::OnRegFieldValueChanged(int row, int col)
308{ 355{
309 QVariant var = m_value_model->GetValue(index); 356 if(m_ignore_cell_change || col != FieldValueColumn)
310 if(!var.isValid())
311 return; 357 return;
358 QTableWidgetItem *item = m_value_table->item(row, col);
359 SocFieldCachedValue val = item->data(Qt::DisplayRole).value< SocFieldCachedValue >();
312 BackendHelper helper(m_io_backend, m_reg); 360 BackendHelper helper(m_io_backend, m_reg);
361 soc_word_t regval;
362 if(!helper.ReadRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(), regval))
363 return;
364 regval = (regval & ~val.field().bitmask()) |
365 ((val.value() << val.field().first_bit) & val.field().bitmask());
313 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(), 366 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(),
314 var.value< soc_word_t >(), IoBackend::Write); 367 regval, IoBackend::Write);
315 // register write can change all fields
316 Reload(); 368 Reload();
317} 369}
318 370