diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2014-12-15 22:44:17 +0100 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2014-12-15 22:44:17 +0100 |
commit | 94c4834bbbcda9ef71ec8d5ff080b41374d8e7c0 (patch) | |
tree | a424068bce4a0374335f77bbf74a2d5c052118ca /utils/regtools/qeditor/regdisplaypanel.cpp | |
parent | 3b3d9bf725a5b04e4cd9bc4254fbd2594b518e89 (diff) | |
download | rockbox-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.cpp | 96 |
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 | ||
236 | RegDisplayPanel::~RegDisplayPanel() | 264 | RegDisplayPanel::~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 | ||
307 | void RegDisplayPanel::OnRegValueChanged(int index) | 354 | void 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 | ||