summaryrefslogtreecommitdiff
path: root/utils/regtools/qeditor/regtab.cpp
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-05-11 19:51:55 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2014-05-11 19:56:56 +0200
commit7b590a953639714cf8ea4b550dd7f6558698e23f (patch)
tree4d37890770d45b29237fb671aa66ac446dff7684 /utils/regtools/qeditor/regtab.cpp
parent4c1eafc208426d4457660313314289a570287cb8 (diff)
downloadrockbox-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.cpp43
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");
+ }
+}