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:42:43 +0100 |
commit | 3b3d9bf725a5b04e4cd9bc4254fbd2594b518e89 (patch) | |
tree | d14d4cbacdef29ee48b7b0610929c3a4e81785ba /utils | |
parent | 0389fd0982d1db132669242bc6e5809bbee43c7c (diff) | |
download | rockbox-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>
Diffstat (limited to 'utils')
-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 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 | ||
264 | RegDisplayPanel::~RegDisplayPanel() | 236 | RegDisplayPanel::~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 | ||
354 | void RegDisplayPanel::OnRegFieldValueChanged(int row, int col) | 307 | void 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 | ||
100 | private slots: | 100 | private 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 | */ |
533 | GrowingTextEdit::GrowingTextEdit(QWidget *parent) | 548 | GrowingTableView::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 | |||
541 | void 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 | /** | 553 | void GrowingTableView::setModel(QAbstractItemModel *m) |
549 | * GrowingTableWidget | ||
550 | */ | ||
551 | GrowingTableWidget::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 | ||
558 | void GrowingTableWidget::DataChanged(const QModelIndex& tl, const QModelIndex& br) | 564 | void 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) | |||
149 | class SocFieldCachedItemDelegate : public QStyledItemDelegate | 149 | class SocFieldCachedItemDelegate : public QStyledItemDelegate |
150 | { | 150 | { |
151 | public: | 151 | public: |
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 | |||
164 | protected: | ||
165 | DisplayMode m_mode; | ||
155 | }; | 166 | }; |
156 | 167 | ||
157 | class SocFieldCachedEditor : public SocFieldEditor | 168 | class SocFieldCachedEditor : public SocFieldEditor |
@@ -203,21 +214,12 @@ private: | |||
203 | mutable QSize m_size; | 214 | mutable QSize m_size; |
204 | }; | 215 | }; |
205 | 216 | ||
206 | class GrowingTextEdit : public QTextEdit | 217 | class GrowingTableView : public QTableView |
207 | { | ||
208 | Q_OBJECT | ||
209 | public: | ||
210 | GrowingTextEdit(QWidget *parent = 0); | ||
211 | |||
212 | protected slots: | ||
213 | void TextChanged(); | ||
214 | }; | ||
215 | |||
216 | class GrowingTableWidget : public QTableWidget | ||
217 | { | 218 | { |
218 | Q_OBJECT | 219 | Q_OBJECT |
219 | public: | 220 | public: |
220 | GrowingTableWidget(QWidget *parent = 0); | 221 | GrowingTableView(QWidget *parent = 0); |
222 | virtual void setModel(QAbstractItemModel *model); | ||
221 | 223 | ||
222 | protected slots: | 224 | protected slots: |
223 | void DataChanged(const QModelIndex& tl, const QModelIndex& br); | 225 | void DataChanged(const QModelIndex& tl, const QModelIndex& br); |