diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2014-10-22 18:00:59 +0200 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2014-12-15 22:57:20 +0100 |
commit | 5dab7688380fdb2beccaca47091ebcc85042fab6 (patch) | |
tree | 8534394d85bda0499407a84deb1f6e133db3ac40 | |
parent | abed208efbba78b502c94408b0c9b97c8ab61e14 (diff) | |
download | rockbox-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.cpp | 96 | ||||
-rw-r--r-- | utils/regtools/qeditor/regdisplaypanel.h | 6 | ||||
-rw-r--r-- | utils/regtools/qeditor/utils.cpp | 48 | ||||
-rw-r--r-- | utils/regtools/qeditor/utils.h | 28 |
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 | ||
284 | RegDisplayPanel::~RegDisplayPanel() | 256 | RegDisplayPanel::~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 | ||
374 | void RegDisplayPanel::OnRegFieldValueChanged(int row, int col) | 327 | void 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 | ||
120 | private slots: | 120 | private 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 | */ |
796 | GrowingTextEdit::GrowingTextEdit(QWidget *parent) | 811 | GrowingTableView::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 | |||
804 | void 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 | /** | 816 | void GrowingTableView::setModel(QAbstractItemModel *m) |
812 | * GrowingTableWidget | ||
813 | */ | ||
814 | GrowingTableWidget::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 | ||
821 | void GrowingTableWidget::DataChanged(const QModelIndex& tl, const QModelIndex& br) | 827 | void 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) | |||
171 | class SocFieldCachedItemDelegate : public QStyledItemDelegate | 171 | class SocFieldCachedItemDelegate : public QStyledItemDelegate |
172 | { | 172 | { |
173 | public: | 173 | public: |
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 | |||
186 | protected: | ||
187 | DisplayMode m_mode; | ||
177 | }; | 188 | }; |
178 | 189 | ||
179 | class SocFieldCachedEditor : public SocFieldEditor | 190 | class SocFieldCachedEditor : public SocFieldEditor |
@@ -291,21 +302,12 @@ private: | |||
291 | mutable QSize m_size; | 302 | mutable QSize m_size; |
292 | }; | 303 | }; |
293 | 304 | ||
294 | class GrowingTextEdit : public QTextEdit | 305 | class GrowingTableView : public QTableView |
295 | { | ||
296 | Q_OBJECT | ||
297 | public: | ||
298 | GrowingTextEdit(QWidget *parent = 0); | ||
299 | |||
300 | protected slots: | ||
301 | void TextChanged(); | ||
302 | }; | ||
303 | |||
304 | class GrowingTableWidget : public QTableWidget | ||
305 | { | 306 | { |
306 | Q_OBJECT | 307 | Q_OBJECT |
307 | public: | 308 | public: |
308 | GrowingTableWidget(QWidget *parent = 0); | 309 | GrowingTableView(QWidget *parent = 0); |
310 | virtual void setModel(QAbstractItemModel *model); | ||
309 | 311 | ||
310 | protected slots: | 312 | protected slots: |
311 | void DataChanged(const QModelIndex& tl, const QModelIndex& br); | 313 | void DataChanged(const QModelIndex& tl, const QModelIndex& br); |