diff options
| author | Amaury Pouly <amaury.pouly@gmail.com> | 2014-05-11 19:51:55 +0200 |
|---|---|---|
| committer | Amaury Pouly <amaury.pouly@gmail.com> | 2014-05-11 19:56:56 +0200 |
| commit | 7b590a953639714cf8ea4b550dd7f6558698e23f (patch) | |
| tree | 4d37890770d45b29237fb671aa66ac446dff7684 /utils/regtools/qeditor/regtab.cpp | |
| parent | 4c1eafc208426d4457660313314289a570287cb8 (diff) | |
| download | rockbox-7b590a953639714cf8ea4b550dd7f6558698e23f.zip rockbox-7b590a953639714cf8ea4b550dd7f6558698e23f.tar.gz rockbox-7b590a953639714cf8ea4b550dd7f6558698e23f.tar.bz2 rockbox-7b590a953639714cf8ea4b550dd7f6558698e23f.tar.xz | |
qeditor: many enhancement
Qeditor has been improved in many ways:
- it can now dump all registers, just like the lua DUMPER.dump_all() command
- several crash were fixed
- when connected to a hwstub command, one can correctly edit individual fields
- the code was simplified in several places
Change-Id: I092b99ce3a12ff6417552de61d62c65f706bcff0
Diffstat (limited to 'utils/regtools/qeditor/regtab.cpp')
| -rw-r--r-- | utils/regtools/qeditor/regtab.cpp | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/utils/regtools/qeditor/regtab.cpp b/utils/regtools/qeditor/regtab.cpp index 568d859..a335475 100644 --- a/utils/regtools/qeditor/regtab.cpp +++ b/utils/regtools/qeditor/regtab.cpp @@ -5,6 +5,7 @@ #include <QFileDialog> #include <QDebug> #include <QStyle> +#include <QMessageBox> #include "backend.h" #include "analyser.h" #include "regdisplaypanel.h" @@ -111,9 +112,11 @@ RegTab::RegTab(Backend *backend, QWidget *parent) m_readonly_check = new QCheckBox("Read-only"); m_readonly_check->setCheckState(Qt::Checked); m_data_soc_label = new QLabel; - QPushButton *data_sel_reload = new QPushButton; - data_sel_reload->setIcon(QIcon::fromTheme("view-refresh")); - data_sel_reload->setToolTip("Reload data"); + m_dump = new QPushButton("Dump", this); + m_dump->setIcon(QIcon::fromTheme("system-run")); + m_data_sel_reload = new QPushButton(this); + m_data_sel_reload->setIcon(QIcon::fromTheme("view-refresh")); + m_data_sel_reload->setToolTip("Reload data"); data_sel_layout->addWidget(m_data_selector); data_sel_layout->addWidget(m_data_sel_edit, 1); data_sel_layout->addStretch(0); @@ -123,7 +126,8 @@ RegTab::RegTab(Backend *backend, QWidget *parent) #endif data_sel_layout->addWidget(m_readonly_check); data_sel_layout->addWidget(m_data_soc_label); - data_sel_layout->addWidget(data_sel_reload); + data_sel_layout->addWidget(m_dump); + data_sel_layout->addWidget(m_data_sel_reload); data_sel_group->setLayout(data_sel_layout); m_data_soc_label->setFrameStyle(QFrame::StyledPanel | QFrame::Raised); @@ -153,6 +157,7 @@ RegTab::RegTab(Backend *backend, QWidget *parent) this, SLOT(OnDevChanged(int))); #endif connect(m_readonly_check, SIGNAL(clicked(bool)), this, SLOT(OnReadOnlyClicked(bool))); + connect(m_dump, SIGNAL(clicked(bool)), this, SLOT(OnDumpRegs(bool))); OnSocListChanged(); OnDataSelChanged(0); @@ -205,6 +210,8 @@ void RegTab::OnDataSelChanged(int index) m_dev_selector->hide(); #endif m_readonly_check->show(); + m_data_sel_reload->show(); + m_dump->hide(); QFileDialog *fd = new QFileDialog(m_data_selector); fd->setFilter("Textual files (*.txt);;All files (*)"); fd->setDirectory(Settings::Get()->value("loaddatadir", QDir::currentPath()).toString()); @@ -226,6 +233,8 @@ void RegTab::OnDataSelChanged(int index) m_data_sel_edit->hide(); m_readonly_check->show(); m_dev_selector->show(); + m_data_sel_reload->hide(); + m_dump->show(); OnDevListChanged(); } #endif @@ -236,6 +245,8 @@ void RegTab::OnDataSelChanged(int index) m_dev_selector->hide(); #endif m_readonly_check->hide(); + m_data_sel_reload->hide(); + m_dump->hide(); delete m_io_backend; m_io_backend = m_backend->CreateDummyIoBackend(); @@ -363,7 +374,10 @@ void RegTab::OnDevChanged(int index) return; HWStubDevice *dev = reinterpret_cast< HWStubDevice* >(m_dev_selector->itemData(index).value< void* >()); delete m_io_backend; - m_io_backend = m_backend->CreateHWStubIoBackend(dev); + /* NOTE: make a copy of the HWStubDevice device because the one in the list + * might get destroyed when clearing the list while the backend is still + * active: this would result in a double free when the backend is also destroyed */ + m_io_backend = m_backend->CreateHWStubIoBackend(new HWStubDevice(dev)); SetDataSocName(m_io_backend->GetSocName()); OnDataSocActivated(m_io_backend->GetSocName()); OnDataChanged(); @@ -435,3 +449,22 @@ void RegTab::OnReadOnlyClicked(bool checked) m_right_content->AllowWrite(!checked); UpdateSocFilename(); } + +void RegTab::OnDumpRegs(bool c) +{ + Q_UNUSED(c); + QFileDialog *fd = new QFileDialog(this); + fd->setAcceptMode(QFileDialog::AcceptSave); + fd->setFilter("Textual files (*.txt);;All files (*)"); + fd->setDirectory(Settings::Get()->value("loaddatadir", QDir::currentPath()).toString()); + if(!fd->exec()) + return; + QStringList filenames = fd->selectedFiles(); + Settings::Get()->setValue("loaddatadir", fd->directory().absolutePath()); + BackendHelper bh(m_io_backend, m_cur_soc); + if(!bh.DumpAllRegisters(filenames[0])) + { + QMessageBox::warning(this, "The register dump was not saved", + "There was an error when dumping the registers"); + } +} |