summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-10-22 18:00:59 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2014-12-15 22:42:43 +0100
commit3b3d9bf725a5b04e4cd9bc4254fbd2594b518e89 (patch)
treed14d4cbacdef29ee48b7b0610929c3a4e81785ba
parent0389fd0982d1db132669242bc6e5809bbee43c7c (diff)
downloadrockbox-3b3d9bf725a5b04e4cd9bc4254fbd2594b518e89.tar.gz
rockbox-3b3d9bf725a5b04e4cd9bc4254fbd2594b518e89.zip
regtools/qeditor: use the new model, drop unused code
Change-Id: Ic4e2e201f6d055c85d52b7fe15d25980386df5b8 Reviewed-on: http://gerrit.rockbox.org/1023 Reviewed-by: Amaury Pouly <amaury.pouly@gmail.com>
-rw-r--r--utils/regtools/qeditor/regdisplaypanel.cpp96
-rw-r--r--utils/regtools/qeditor/regdisplaypanel.h6
-rw-r--r--utils/regtools/qeditor/utils.cpp48
-rw-r--r--utils/regtools/qeditor/utils.h28
4 files changed, 67 insertions, 111 deletions
diff --git a/utils/regtools/qeditor/regdisplaypanel.cpp b/utils/regtools/qeditor/regdisplaypanel.cpp
index d450b4e203..bbfb4f5840 100644
--- a/utils/regtools/qeditor/regdisplaypanel.cpp
+++ b/utils/regtools/qeditor/regdisplaypanel.cpp
@@ -176,46 +176,17 @@ 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 GrowingTableWidget; 179 m_value_table = new GrowingTableView;
180 m_value_table->setRowCount(reg.field.size()); 180 m_value_model = new RegFieldTableModel(m_value_table); // view takes ownership
181 m_value_table->setColumnCount(5); 181 m_value_model->SetRegister(m_reg.GetReg());
182 for(size_t row = 0; row < reg.field.size(); row++) 182 m_value_model->SetReadOnly(read_only);
183 { 183 m_value_table->setModel(m_value_model);
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"));
215 m_value_table->verticalHeader()->setVisible(false); 184 m_value_table->verticalHeader()->setVisible(false);
216 m_value_table->resizeColumnsToContents(); 185 m_value_table->resizeColumnsToContents();
217 m_value_table->horizontalHeader()->setStretchLastSection(true); 186 m_value_table->horizontalHeader()->setStretchLastSection(true);
218 m_value_table->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 187 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 ?
219 190
220 SocFieldCachedItemDelegate *m_table_delegate = new SocFieldCachedItemDelegate(this); 191 SocFieldCachedItemDelegate *m_table_delegate = new SocFieldCachedItemDelegate(this);
221 m_table_edit_factory = new QItemEditorFactory(); 192 m_table_edit_factory = new QItemEditorFactory();
@@ -253,12 +224,13 @@ RegDisplayPanel::RegDisplayPanel(QWidget *parent, IoBackend *io_backend, const S
253 setLayout(layout); 224 setLayout(layout);
254 AllowWrite(false); 225 AllowWrite(false);
255 226
256 m_ignore_cell_change = false;
257 // load data 227 // load data
258 Reload(); 228 Reload();
259 229
260 connect(m_raw_val_edit->GetLineEdit(), SIGNAL(returnPressed()), this, SLOT(OnRawRegValueReturnPressed())); 230 connect(m_raw_val_edit->GetLineEdit(), SIGNAL(returnPressed()), this,
261 connect(m_value_table, SIGNAL(cellChanged(int, int)), this, SLOT(OnRegFieldValueChanged(int, int))); 231 SLOT(OnRawRegValueReturnPressed()));
232 connect(m_value_table->model(), SIGNAL(OnValueModified(int)), this,
233 SLOT(OnRegValueChanged(int)));
262} 234}
263 235
264RegDisplayPanel::~RegDisplayPanel() 236RegDisplayPanel::~RegDisplayPanel()
@@ -280,38 +252,15 @@ void RegDisplayPanel::Reload()
280 m_raw_val_name->show(); 252 m_raw_val_name->show();
281 m_raw_val_edit->show(); 253 m_raw_val_edit->show();
282 m_raw_val_edit->GetLineEdit()->setText(QString().sprintf("0x%08x", value)); 254 m_raw_val_edit->GetLineEdit()->setText(QString().sprintf("0x%08x", value));
255 m_value_model->SetValues(QVector< QVariant >(1, QVariant(value)));
283 } 256 }
284 else 257 else
285 { 258 {
286 m_raw_val_name->hide(); 259 m_raw_val_name->hide();
287 m_raw_val_edit->hide(); 260 m_raw_val_edit->hide();
261 m_value_model->SetValues(QVector< QVariant >());
288 } 262 }
289 263
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
315 m_value_table->resizeColumnsToContents(); 264 m_value_table->resizeColumnsToContents();
316 m_value_table->horizontalHeader()->setStretchLastSection(true); 265 m_value_table->horizontalHeader()->setStretchLastSection(true);
317} 266}
@@ -320,7 +269,10 @@ void RegDisplayPanel::AllowWrite(bool en)
320{ 269{
321 m_allow_write = en; 270 m_allow_write = en;
322 if(m_raw_val_edit) 271 if(m_raw_val_edit)
272 {
323 m_raw_val_edit->SetReadOnly(m_io_backend->IsReadOnly() || !m_allow_write); 273 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 }
324 Reload(); 276 Reload();
325} 277}
326 278
@@ -348,23 +300,19 @@ void RegDisplayPanel::OnRawRegValueReturnPressed()
348 BackendHelper helper(m_io_backend, m_reg); 300 BackendHelper helper(m_io_backend, m_reg);
349 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(), 301 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(),
350 val, mode); 302 val, mode);
303 // register write can change all fields
351 Reload(); 304 Reload();
352} 305}
353 306
354void RegDisplayPanel::OnRegFieldValueChanged(int row, int col) 307void RegDisplayPanel::OnRegValueChanged(int index)
355{ 308{
356 if(m_ignore_cell_change || col != FieldValueColumn) 309 QVariant var = m_value_model->GetValue(index);
310 if(!var.isValid())
357 return; 311 return;
358 QTableWidgetItem *item = m_value_table->item(row, col);
359 SocFieldCachedValue val = item->data(Qt::DisplayRole).value< SocFieldCachedValue >();
360 BackendHelper helper(m_io_backend, m_reg); 312 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());
366 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(), 313 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(),
367 regval, IoBackend::Write); 314 var.value< soc_word_t >(), IoBackend::Write);
315 // register write can change all fields
368 Reload(); 316 Reload();
369} 317}
370 318
diff --git a/utils/regtools/qeditor/regdisplaypanel.h b/utils/regtools/qeditor/regdisplaypanel.h
index ce6f108350..09943b59a2 100644
--- a/utils/regtools/qeditor/regdisplaypanel.h
+++ b/utils/regtools/qeditor/regdisplaypanel.h
@@ -86,7 +86,8 @@ protected:
86 bool m_allow_write; 86 bool m_allow_write;
87 RegLineEdit *m_raw_val_edit; 87 RegLineEdit *m_raw_val_edit;
88 RegSexyDisplay *m_sexy_display; 88 RegSexyDisplay *m_sexy_display;
89 GrowingTableWidget *m_value_table; 89 GrowingTableView *m_value_table;
90 RegFieldTableModel *m_value_model;
90 QStyledItemDelegate *m_table_delegate; 91 QStyledItemDelegate *m_table_delegate;
91 QItemEditorFactory *m_table_edit_factory; 92 QItemEditorFactory *m_table_edit_factory;
92 RegItemEditorCreator *m_regedit_creator; 93 RegItemEditorCreator *m_regedit_creator;
@@ -95,11 +96,10 @@ protected:
95 QLabel *m_desc; 96 QLabel *m_desc;
96 QWidget *m_viewport; 97 QWidget *m_viewport;
97 QScrollArea *m_scroll; 98 QScrollArea *m_scroll;
98 bool m_ignore_cell_change;
99 99
100private slots: 100private slots:
101 void OnRawRegValueReturnPressed(); 101 void OnRawRegValueReturnPressed();
102 void OnRegFieldValueChanged(int row, int col); 102 void OnRegValueChanged(int index);
103}; 103};
104 104
105#endif /* REGDISPLAYPANEL_H */ 105#endif /* REGDISPLAYPANEL_H */
diff --git a/utils/regtools/qeditor/utils.cpp b/utils/regtools/qeditor/utils.cpp
index 036f1595a3..448ed92c3e 100644
--- a/utils/regtools/qeditor/utils.cpp
+++ b/utils/regtools/qeditor/utils.cpp
@@ -331,7 +331,22 @@ QString SocFieldCachedItemDelegate::displayText(const QVariant& value, const QLo
331 { 331 {
332 const SocFieldCachedValue& v = value.value< SocFieldCachedValue >(); 332 const SocFieldCachedValue& v = value.value< SocFieldCachedValue >();
333 int bitcount = v.field().last_bit - v.field().first_bit; 333 int bitcount = v.field().last_bit - v.field().first_bit;
334 return QString("0x%1").arg(v.value(), (bitcount + 3) / 4, 16, QChar('0')); 334 QString name = v.value_name();
335 QString strval = QString("0x%1").arg(v.value(), (bitcount + 3) / 4, 16, QChar('0'));
336 switch(m_mode)
337 {
338 case DisplayName:
339 if(name.size() > 0)
340 return name;
341 /* fallthrough */
342 case DisplayValueAndName:
343 if(name.size() > 0)
344 return QString("%1 (%2)").arg(strval).arg(name);
345 /* fallthrough */
346 case DisplayValue:
347 default:
348 return strval;
349 }
335 } 350 }
336 else 351 else
337 return QStyledItemDelegate::displayText(value, locale); 352 return QStyledItemDelegate::displayText(value, locale);
@@ -528,34 +543,25 @@ void RegSexyDisplay::paintEvent(QPaintEvent *event)
528} 543}
529 544
530/** 545/**
531 * GrowingTextEdit 546 * GrowingTableView
532 */ 547 */
533GrowingTextEdit::GrowingTextEdit(QWidget *parent) 548GrowingTableView::GrowingTableView(QWidget *parent)
534 :QTextEdit(parent) 549 :QTableView(parent)
535{
536 connect(this, SIGNAL(textChanged()), this, SLOT(TextChanged()));
537 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
538 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
539}
540
541void GrowingTextEdit::TextChanged()
542{ 550{
543 int content_size = document()->documentLayout()->documentSize().height();
544 content_size = qMax(content_size, fontMetrics().height());
545 setFixedHeight(content_size + contentsMargins().top() + contentsMargins().bottom());
546} 551}
547 552
548/** 553void GrowingTableView::setModel(QAbstractItemModel *m)
549 * GrowingTableWidget
550 */
551GrowingTableWidget::GrowingTableWidget(QWidget *parent)
552 :QTableWidget(parent)
553{ 554{
555 if(model())
556 disconnect(model(), SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)),
557 this, SLOT(DataChanged(const QModelIndex&, const QModelIndex&)));
558 QTableView::setModel(m);
554 connect(model(), SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), 559 connect(model(), SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)),
555 this, SLOT(DataChanged(const QModelIndex&, const QModelIndex&))); 560 this, SLOT(DataChanged(const QModelIndex&, const QModelIndex&)));
561 DataChanged(QModelIndex(), QModelIndex());
556} 562}
557 563
558void GrowingTableWidget::DataChanged(const QModelIndex& tl, const QModelIndex& br) 564void GrowingTableView::DataChanged(const QModelIndex& tl, const QModelIndex& br)
559{ 565{
560 Q_UNUSED(tl); 566 Q_UNUSED(tl);
561 Q_UNUSED(br); 567 Q_UNUSED(br);
@@ -563,7 +569,7 @@ void GrowingTableWidget::DataChanged(const QModelIndex& tl, const QModelIndex& b
563 resizeColumnsToContents(); 569 resizeColumnsToContents();
564 int h = contentsMargins().top() + contentsMargins().bottom(); 570 int h = contentsMargins().top() + contentsMargins().bottom();
565 h += horizontalHeader()->height(); 571 h += horizontalHeader()->height();
566 for(int i = 0; i < rowCount(); i++) 572 for(int i = 0; i < model()->rowCount(); i++)
567 h += rowHeight(i); 573 h += rowHeight(i);
568 setMinimumHeight(h); 574 setMinimumHeight(h);
569} 575}
diff --git a/utils/regtools/qeditor/utils.h b/utils/regtools/qeditor/utils.h
index 970010233a..6612ce20a4 100644
--- a/utils/regtools/qeditor/utils.h
+++ b/utils/regtools/qeditor/utils.h
@@ -149,9 +149,20 @@ Q_DECLARE_METATYPE(SocFieldCachedValue)
149class SocFieldCachedItemDelegate : public QStyledItemDelegate 149class SocFieldCachedItemDelegate : public QStyledItemDelegate
150{ 150{
151public: 151public:
152 SocFieldCachedItemDelegate(QObject *parent = 0):QStyledItemDelegate(parent) {} 152 enum DisplayMode
153 {
154 DisplayValueAndName, /* "value (name)" or "value" if no name */
155 DisplayName, /* "name" or "value" if no name */
156 DisplayValue, /* "value" */
157 };
153 158
159 SocFieldCachedItemDelegate(QObject *parent = 0):QStyledItemDelegate(parent) {}
154 virtual QString displayText(const QVariant& value, const QLocale& locale) const; 160 virtual QString displayText(const QVariant& value, const QLocale& locale) const;
161 void SetMode(DisplayMode mode) { m_mode = mode; }
162 DisplayMode GetMode() const { return m_mode; }
163
164protected:
165 DisplayMode m_mode;
155}; 166};
156 167
157class SocFieldCachedEditor : public SocFieldEditor 168class SocFieldCachedEditor : public SocFieldEditor
@@ -203,21 +214,12 @@ private:
203 mutable QSize m_size; 214 mutable QSize m_size;
204}; 215};
205 216
206class GrowingTextEdit : public QTextEdit 217class GrowingTableView : public QTableView
207{
208 Q_OBJECT
209public:
210 GrowingTextEdit(QWidget *parent = 0);
211
212protected slots:
213 void TextChanged();
214};
215
216class GrowingTableWidget : public QTableWidget
217{ 218{
218 Q_OBJECT 219 Q_OBJECT
219public: 220public:
220 GrowingTableWidget(QWidget *parent = 0); 221 GrowingTableView(QWidget *parent = 0);
222 virtual void setModel(QAbstractItemModel *model);
221 223
222protected slots: 224protected slots:
223 void DataChanged(const QModelIndex& tl, const QModelIndex& br); 225 void DataChanged(const QModelIndex& tl, const QModelIndex& br);