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:57:20 +0100
commit5dab7688380fdb2beccaca47091ebcc85042fab6 (patch)
tree8534394d85bda0499407a84deb1f6e133db3ac40
parentabed208efbba78b502c94408b0c9b97c8ab61e14 (diff)
downloadrockbox-5dab7688380fdb2beccaca47091ebcc85042fab6.tar.gz
rockbox-5dab7688380fdb2beccaca47091ebcc85042fab6.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 8238fa9606..3dbdb54241 100644
--- a/utils/regtools/qeditor/regdisplaypanel.cpp
+++ b/utils/regtools/qeditor/regdisplaypanel.cpp
@@ -196,46 +196,17 @@ RegDisplayPanel::RegDisplayPanel(QWidget *parent, IoBackend *io_backend, const S
196 raw_val_layout->addWidget(m_raw_val_edit); 196 raw_val_layout->addWidget(m_raw_val_edit);
197 raw_val_layout->addStretch(); 197 raw_val_layout->addStretch();
198 198
199 m_value_table = new GrowingTableWidget; 199 m_value_table = new GrowingTableView;
200 m_value_table->setRowCount(reg.field.size()); 200 m_value_model = new RegFieldTableModel(m_value_table); // view takes ownership
201 m_value_table->setColumnCount(5); 201 m_value_model->SetRegister(m_reg.GetReg());
202 for(size_t row = 0; row < reg.field.size(); row++) 202 m_value_model->SetReadOnly(read_only);
203 { 203 m_value_table->setModel(m_value_model);
204 const soc_reg_field_t& field = reg.field[row];
205 QString bits_str;
206 if(field.first_bit == field.last_bit)
207 bits_str.sprintf("%d", field.first_bit);
208 else
209 bits_str.sprintf("%d:%d", field.last_bit, field.first_bit);
210 QTableWidgetItem *item = new QTableWidgetItem(bits_str);
211 item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
212 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
213 m_value_table->setItem(row, FieldBitsColumn, item);
214 item = new QTableWidgetItem(QString(field.name.c_str()));
215 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
216 m_value_table->setItem(row, FieldNameColumn, item);
217 item = new QTableWidgetItem();
218 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
219 item->setData(Qt::DisplayRole, QVariant::fromValue(SocFieldCachedValue()));
220 item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
221 m_value_table->setItem(row, FieldValueColumn, item);
222 item = new QTableWidgetItem("");
223 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
224 item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
225 m_value_table->setItem(row, FieldMeaningColumn, item);
226 item = new QTableWidgetItem(QString(field.desc.c_str()));
227 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
228 m_value_table->setItem(row, FieldDescColumn, item);
229 }
230 m_value_table->setHorizontalHeaderItem(FieldBitsColumn, new QTableWidgetItem("Bits"));
231 m_value_table->setHorizontalHeaderItem(FieldNameColumn, new QTableWidgetItem("Name"));
232 m_value_table->setHorizontalHeaderItem(FieldValueColumn, new QTableWidgetItem("Value"));
233 m_value_table->setHorizontalHeaderItem(FieldMeaningColumn, new QTableWidgetItem("Meaning"));
234 m_value_table->setHorizontalHeaderItem(FieldDescColumn, new QTableWidgetItem("Description"));
235 m_value_table->verticalHeader()->setVisible(false); 204 m_value_table->verticalHeader()->setVisible(false);
236 m_value_table->resizeColumnsToContents(); 205 m_value_table->resizeColumnsToContents();
237 m_value_table->horizontalHeader()->setStretchLastSection(true); 206 m_value_table->horizontalHeader()->setStretchLastSection(true);
238 m_value_table->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 207 m_value_table->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
208 // FIXME we cannot use setAlternatingRowColors() because we override the
209 // background color, should it be part of the model ?
239 210
240 SocFieldCachedItemDelegate *m_table_delegate = new SocFieldCachedItemDelegate(this); 211 SocFieldCachedItemDelegate *m_table_delegate = new SocFieldCachedItemDelegate(this);
241 m_table_edit_factory = new QItemEditorFactory(); 212 m_table_edit_factory = new QItemEditorFactory();
@@ -273,12 +244,13 @@ RegDisplayPanel::RegDisplayPanel(QWidget *parent, IoBackend *io_backend, const S
273 setLayout(layout); 244 setLayout(layout);
274 AllowWrite(false); 245 AllowWrite(false);
275 246
276 m_ignore_cell_change = false;
277 // load data 247 // load data
278 Reload(); 248 Reload();
279 249
280 connect(m_raw_val_edit->GetLineEdit(), SIGNAL(returnPressed()), this, SLOT(OnRawRegValueReturnPressed())); 250 connect(m_raw_val_edit->GetLineEdit(), SIGNAL(returnPressed()), this,
281 connect(m_value_table, SIGNAL(cellChanged(int, int)), this, SLOT(OnRegFieldValueChanged(int, int))); 251 SLOT(OnRawRegValueReturnPressed()));
252 connect(m_value_table->model(), SIGNAL(OnValueModified(int)), this,
253 SLOT(OnRegValueChanged(int)));
282} 254}
283 255
284RegDisplayPanel::~RegDisplayPanel() 256RegDisplayPanel::~RegDisplayPanel()
@@ -300,38 +272,15 @@ void RegDisplayPanel::Reload()
300 m_raw_val_name->show(); 272 m_raw_val_name->show();
301 m_raw_val_edit->show(); 273 m_raw_val_edit->show();
302 m_raw_val_edit->GetLineEdit()->setText(QString().sprintf("0x%08x", value)); 274 m_raw_val_edit->GetLineEdit()->setText(QString().sprintf("0x%08x", value));
275 m_value_model->SetValues(QVector< QVariant >(1, QVariant(value)));
303 } 276 }
304 else 277 else
305 { 278 {
306 m_raw_val_name->hide(); 279 m_raw_val_name->hide();
307 m_raw_val_edit->hide(); 280 m_raw_val_edit->hide();
281 m_value_model->SetValues(QVector< QVariant >());
308 } 282 }
309 283
310 m_ignore_cell_change = true;
311 for(size_t row = 0; row < reg.field.size(); row++)
312 {
313 const soc_reg_field_t& field = reg.field[row];
314 QTableWidgetItem *item = m_value_table->item(row, FieldValueColumn);
315 QTableWidgetItem *desc_item = m_value_table->item(row, FieldMeaningColumn);
316 if(has_value)
317 {
318 soc_word_t v = (value & field.bitmask()) >> field.first_bit;
319 QString value_name;
320 foreach(const soc_reg_field_value_t& rval, field.value)
321 if(v == rval.value)
322 value_name = rval.name.c_str();
323 item->setData(Qt::DisplayRole, QVariant::fromValue(SocFieldCachedValue(field, v)));
324 if(value_name.size() != 0)
325 desc_item->setText(value_name);
326 }
327 else
328 item->setData(Qt::DisplayRole, QVariant::fromValue(SocFieldCachedValue()));
329 item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
330 if(m_allow_write)
331 item->setFlags(item->flags() | Qt::ItemIsEditable);
332 }
333 m_ignore_cell_change = false;
334
335 m_value_table->resizeColumnsToContents(); 284 m_value_table->resizeColumnsToContents();
336 m_value_table->horizontalHeader()->setStretchLastSection(true); 285 m_value_table->horizontalHeader()->setStretchLastSection(true);
337} 286}
@@ -340,7 +289,10 @@ void RegDisplayPanel::AllowWrite(bool en)
340{ 289{
341 m_allow_write = en; 290 m_allow_write = en;
342 if(m_raw_val_edit) 291 if(m_raw_val_edit)
292 {
343 m_raw_val_edit->SetReadOnly(m_io_backend->IsReadOnly() || !m_allow_write); 293 m_raw_val_edit->SetReadOnly(m_io_backend->IsReadOnly() || !m_allow_write);
294 m_value_model->SetReadOnly(m_io_backend->IsReadOnly() || !m_allow_write);
295 }
344 Reload(); 296 Reload();
345} 297}
346 298
@@ -368,23 +320,19 @@ void RegDisplayPanel::OnRawRegValueReturnPressed()
368 BackendHelper helper(m_io_backend, m_reg); 320 BackendHelper helper(m_io_backend, m_reg);
369 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(), 321 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(),
370 val, mode); 322 val, mode);
323 // register write can change all fields
371 Reload(); 324 Reload();
372} 325}
373 326
374void RegDisplayPanel::OnRegFieldValueChanged(int row, int col) 327void RegDisplayPanel::OnRegValueChanged(int index)
375{ 328{
376 if(m_ignore_cell_change || col != FieldValueColumn) 329 QVariant var = m_value_model->GetValue(index);
330 if(!var.isValid())
377 return; 331 return;
378 QTableWidgetItem *item = m_value_table->item(row, col);
379 SocFieldCachedValue val = item->data(Qt::DisplayRole).value< SocFieldCachedValue >();
380 BackendHelper helper(m_io_backend, m_reg); 332 BackendHelper helper(m_io_backend, m_reg);
381 soc_word_t regval;
382 if(!helper.ReadRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(), regval))
383 return;
384 regval = (regval & ~val.field().bitmask()) |
385 ((val.value() << val.field().first_bit) & val.field().bitmask());
386 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(), 333 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(),
387 regval, IoBackend::Write); 334 var.value< soc_word_t >(), IoBackend::Write);
335 // register write can change all fields
388 Reload(); 336 Reload();
389} 337}
390 338
diff --git a/utils/regtools/qeditor/regdisplaypanel.h b/utils/regtools/qeditor/regdisplaypanel.h
index b7c0c11c6c..313fc7e369 100644
--- a/utils/regtools/qeditor/regdisplaypanel.h
+++ b/utils/regtools/qeditor/regdisplaypanel.h
@@ -106,7 +106,8 @@ protected:
106 bool m_allow_write; 106 bool m_allow_write;
107 RegLineEdit *m_raw_val_edit; 107 RegLineEdit *m_raw_val_edit;
108 RegSexyDisplay *m_sexy_display; 108 RegSexyDisplay *m_sexy_display;
109 GrowingTableWidget *m_value_table; 109 GrowingTableView *m_value_table;
110 RegFieldTableModel *m_value_model;
110 QStyledItemDelegate *m_table_delegate; 111 QStyledItemDelegate *m_table_delegate;
111 QItemEditorFactory *m_table_edit_factory; 112 QItemEditorFactory *m_table_edit_factory;
112 RegItemEditorCreator *m_regedit_creator; 113 RegItemEditorCreator *m_regedit_creator;
@@ -115,11 +116,10 @@ protected:
115 QLabel *m_desc; 116 QLabel *m_desc;
116 QWidget *m_viewport; 117 QWidget *m_viewport;
117 QScrollArea *m_scroll; 118 QScrollArea *m_scroll;
118 bool m_ignore_cell_change;
119 119
120private slots: 120private slots:
121 void OnRawRegValueReturnPressed(); 121 void OnRawRegValueReturnPressed();
122 void OnRegFieldValueChanged(int row, int col); 122 void OnRegValueChanged(int index);
123}; 123};
124 124
125#endif /* REGDISPLAYPANEL_H */ 125#endif /* REGDISPLAYPANEL_H */
diff --git a/utils/regtools/qeditor/utils.cpp b/utils/regtools/qeditor/utils.cpp
index df7f714f03..5aef2414a4 100644
--- a/utils/regtools/qeditor/utils.cpp
+++ b/utils/regtools/qeditor/utils.cpp
@@ -371,7 +371,22 @@ QString SocFieldCachedItemDelegate::displayText(const QVariant& value, const QLo
371 { 371 {
372 const SocFieldCachedValue& v = value.value< SocFieldCachedValue >(); 372 const SocFieldCachedValue& v = value.value< SocFieldCachedValue >();
373 int bitcount = v.field().last_bit - v.field().first_bit; 373 int bitcount = v.field().last_bit - v.field().first_bit;
374 return QString("0x%1").arg(v.value(), (bitcount + 3) / 4, 16, QChar('0')); 374 QString name = v.value_name();
375 QString strval = QString("0x%1").arg(v.value(), (bitcount + 3) / 4, 16, QChar('0'));
376 switch(m_mode)
377 {
378 case DisplayName:
379 if(name.size() > 0)
380 return name;
381 /* fallthrough */
382 case DisplayValueAndName:
383 if(name.size() > 0)
384 return QString("%1 (%2)").arg(strval).arg(name);
385 /* fallthrough */
386 case DisplayValue:
387 default:
388 return strval;
389 }
375 } 390 }
376 else 391 else
377 return QStyledItemDelegate::displayText(value, locale); 392 return QStyledItemDelegate::displayText(value, locale);
@@ -791,34 +806,25 @@ void RegSexyDisplay::paintEvent(QPaintEvent *event)
791} 806}
792 807
793/** 808/**
794 * GrowingTextEdit 809 * GrowingTableView
795 */ 810 */
796GrowingTextEdit::GrowingTextEdit(QWidget *parent) 811GrowingTableView::GrowingTableView(QWidget *parent)
797 :QTextEdit(parent) 812 :QTableView(parent)
798{
799 connect(this, SIGNAL(textChanged()), this, SLOT(TextChanged()));
800 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
801 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
802}
803
804void GrowingTextEdit::TextChanged()
805{ 813{
806 int content_size = document()->documentLayout()->documentSize().height();
807 content_size = qMax(content_size, fontMetrics().height());
808 setFixedHeight(content_size + contentsMargins().top() + contentsMargins().bottom());
809} 814}
810 815
811/** 816void GrowingTableView::setModel(QAbstractItemModel *m)
812 * GrowingTableWidget
813 */
814GrowingTableWidget::GrowingTableWidget(QWidget *parent)
815 :QTableWidget(parent)
816{ 817{
818 if(model())
819 disconnect(model(), SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)),
820 this, SLOT(DataChanged(const QModelIndex&, const QModelIndex&)));
821 QTableView::setModel(m);
817 connect(model(), SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), 822 connect(model(), SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)),
818 this, SLOT(DataChanged(const QModelIndex&, const QModelIndex&))); 823 this, SLOT(DataChanged(const QModelIndex&, const QModelIndex&)));
824 DataChanged(QModelIndex(), QModelIndex());
819} 825}
820 826
821void GrowingTableWidget::DataChanged(const QModelIndex& tl, const QModelIndex& br) 827void GrowingTableView::DataChanged(const QModelIndex& tl, const QModelIndex& br)
822{ 828{
823 Q_UNUSED(tl); 829 Q_UNUSED(tl);
824 Q_UNUSED(br); 830 Q_UNUSED(br);
@@ -826,7 +832,7 @@ void GrowingTableWidget::DataChanged(const QModelIndex& tl, const QModelIndex& b
826 resizeColumnsToContents(); 832 resizeColumnsToContents();
827 int h = contentsMargins().top() + contentsMargins().bottom(); 833 int h = contentsMargins().top() + contentsMargins().bottom();
828 h += horizontalHeader()->height(); 834 h += horizontalHeader()->height();
829 for(int i = 0; i < rowCount(); i++) 835 for(int i = 0; i < model()->rowCount(); i++)
830 h += rowHeight(i); 836 h += rowHeight(i);
831 setMinimumHeight(h); 837 setMinimumHeight(h);
832} 838}
diff --git a/utils/regtools/qeditor/utils.h b/utils/regtools/qeditor/utils.h
index da9638baf7..27476dba61 100644
--- a/utils/regtools/qeditor/utils.h
+++ b/utils/regtools/qeditor/utils.h
@@ -171,9 +171,20 @@ Q_DECLARE_METATYPE(SocFieldCachedValue)
171class SocFieldCachedItemDelegate : public QStyledItemDelegate 171class SocFieldCachedItemDelegate : public QStyledItemDelegate
172{ 172{
173public: 173public:
174 SocFieldCachedItemDelegate(QObject *parent = 0):QStyledItemDelegate(parent) {} 174 enum DisplayMode
175 {
176 DisplayValueAndName, /* "value (name)" or "value" if no name */
177 DisplayName, /* "name" or "value" if no name */
178 DisplayValue, /* "value" */
179 };
175 180
181 SocFieldCachedItemDelegate(QObject *parent = 0):QStyledItemDelegate(parent) {}
176 virtual QString displayText(const QVariant& value, const QLocale& locale) const; 182 virtual QString displayText(const QVariant& value, const QLocale& locale) const;
183 void SetMode(DisplayMode mode) { m_mode = mode; }
184 DisplayMode GetMode() const { return m_mode; }
185
186protected:
187 DisplayMode m_mode;
177}; 188};
178 189
179class SocFieldCachedEditor : public SocFieldEditor 190class SocFieldCachedEditor : public SocFieldEditor
@@ -291,21 +302,12 @@ private:
291 mutable QSize m_size; 302 mutable QSize m_size;
292}; 303};
293 304
294class GrowingTextEdit : public QTextEdit 305class GrowingTableView : public QTableView
295{
296 Q_OBJECT
297public:
298 GrowingTextEdit(QWidget *parent = 0);
299
300protected slots:
301 void TextChanged();
302};
303
304class GrowingTableWidget : public QTableWidget
305{ 306{
306 Q_OBJECT 307 Q_OBJECT
307public: 308public:
308 GrowingTableWidget(QWidget *parent = 0); 309 GrowingTableView(QWidget *parent = 0);
310 virtual void setModel(QAbstractItemModel *model);
309 311
310protected slots: 312protected slots:
311 void DataChanged(const QModelIndex& tl, const QModelIndex& br); 313 void DataChanged(const QModelIndex& tl, const QModelIndex& br);