summaryrefslogtreecommitdiff
path: root/utils/regtools/qeditor/regtab.cpp
diff options
context:
space:
mode:
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 568d859c0e..a335475e48 100644
--- a/utils/regtools/qeditor/regtab.cpp
+++ b/utils/regtools/qeditor/regtab.cpp
@@ -5,6 +5,7 @@
5#include <QFileDialog> 5#include <QFileDialog>
6#include <QDebug> 6#include <QDebug>
7#include <QStyle> 7#include <QStyle>
8#include <QMessageBox>
8#include "backend.h" 9#include "backend.h"
9#include "analyser.h" 10#include "analyser.h"
10#include "regdisplaypanel.h" 11#include "regdisplaypanel.h"
@@ -111,9 +112,11 @@ RegTab::RegTab(Backend *backend, QWidget *parent)
111 m_readonly_check = new QCheckBox("Read-only"); 112 m_readonly_check = new QCheckBox("Read-only");
112 m_readonly_check->setCheckState(Qt::Checked); 113 m_readonly_check->setCheckState(Qt::Checked);
113 m_data_soc_label = new QLabel; 114 m_data_soc_label = new QLabel;
114 QPushButton *data_sel_reload = new QPushButton; 115 m_dump = new QPushButton("Dump", this);
115 data_sel_reload->setIcon(QIcon::fromTheme("view-refresh")); 116 m_dump->setIcon(QIcon::fromTheme("system-run"));
116 data_sel_reload->setToolTip("Reload data"); 117 m_data_sel_reload = new QPushButton(this);
118 m_data_sel_reload->setIcon(QIcon::fromTheme("view-refresh"));
119 m_data_sel_reload->setToolTip("Reload data");
117 data_sel_layout->addWidget(m_data_selector); 120 data_sel_layout->addWidget(m_data_selector);
118 data_sel_layout->addWidget(m_data_sel_edit, 1); 121 data_sel_layout->addWidget(m_data_sel_edit, 1);
119 data_sel_layout->addStretch(0); 122 data_sel_layout->addStretch(0);
@@ -123,7 +126,8 @@ RegTab::RegTab(Backend *backend, QWidget *parent)
123#endif 126#endif
124 data_sel_layout->addWidget(m_readonly_check); 127 data_sel_layout->addWidget(m_readonly_check);
125 data_sel_layout->addWidget(m_data_soc_label); 128 data_sel_layout->addWidget(m_data_soc_label);
126 data_sel_layout->addWidget(data_sel_reload); 129 data_sel_layout->addWidget(m_dump);
130 data_sel_layout->addWidget(m_data_sel_reload);
127 data_sel_group->setLayout(data_sel_layout); 131 data_sel_group->setLayout(data_sel_layout);
128 m_data_soc_label->setFrameStyle(QFrame::StyledPanel | QFrame::Raised); 132 m_data_soc_label->setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
129 133
@@ -153,6 +157,7 @@ RegTab::RegTab(Backend *backend, QWidget *parent)
153 this, SLOT(OnDevChanged(int))); 157 this, SLOT(OnDevChanged(int)));
154#endif 158#endif
155 connect(m_readonly_check, SIGNAL(clicked(bool)), this, SLOT(OnReadOnlyClicked(bool))); 159 connect(m_readonly_check, SIGNAL(clicked(bool)), this, SLOT(OnReadOnlyClicked(bool)));
160 connect(m_dump, SIGNAL(clicked(bool)), this, SLOT(OnDumpRegs(bool)));
156 161
157 OnSocListChanged(); 162 OnSocListChanged();
158 OnDataSelChanged(0); 163 OnDataSelChanged(0);
@@ -205,6 +210,8 @@ void RegTab::OnDataSelChanged(int index)
205 m_dev_selector->hide(); 210 m_dev_selector->hide();
206#endif 211#endif
207 m_readonly_check->show(); 212 m_readonly_check->show();
213 m_data_sel_reload->show();
214 m_dump->hide();
208 QFileDialog *fd = new QFileDialog(m_data_selector); 215 QFileDialog *fd = new QFileDialog(m_data_selector);
209 fd->setFilter("Textual files (*.txt);;All files (*)"); 216 fd->setFilter("Textual files (*.txt);;All files (*)");
210 fd->setDirectory(Settings::Get()->value("loaddatadir", QDir::currentPath()).toString()); 217 fd->setDirectory(Settings::Get()->value("loaddatadir", QDir::currentPath()).toString());
@@ -226,6 +233,8 @@ void RegTab::OnDataSelChanged(int index)
226 m_data_sel_edit->hide(); 233 m_data_sel_edit->hide();
227 m_readonly_check->show(); 234 m_readonly_check->show();
228 m_dev_selector->show(); 235 m_dev_selector->show();
236 m_data_sel_reload->hide();
237 m_dump->show();
229 OnDevListChanged(); 238 OnDevListChanged();
230 } 239 }
231#endif 240#endif
@@ -236,6 +245,8 @@ void RegTab::OnDataSelChanged(int index)
236 m_dev_selector->hide(); 245 m_dev_selector->hide();
237#endif 246#endif
238 m_readonly_check->hide(); 247 m_readonly_check->hide();
248 m_data_sel_reload->hide();
249 m_dump->hide();
239 250
240 delete m_io_backend; 251 delete m_io_backend;
241 m_io_backend = m_backend->CreateDummyIoBackend(); 252 m_io_backend = m_backend->CreateDummyIoBackend();
@@ -363,7 +374,10 @@ void RegTab::OnDevChanged(int index)
363 return; 374 return;
364 HWStubDevice *dev = reinterpret_cast< HWStubDevice* >(m_dev_selector->itemData(index).value< void* >()); 375 HWStubDevice *dev = reinterpret_cast< HWStubDevice* >(m_dev_selector->itemData(index).value< void* >());
365 delete m_io_backend; 376 delete m_io_backend;
366 m_io_backend = m_backend->CreateHWStubIoBackend(dev); 377 /* NOTE: make a copy of the HWStubDevice device because the one in the list
378 * might get destroyed when clearing the list while the backend is still
379 * active: this would result in a double free when the backend is also destroyed */
380 m_io_backend = m_backend->CreateHWStubIoBackend(new HWStubDevice(dev));
367 SetDataSocName(m_io_backend->GetSocName()); 381 SetDataSocName(m_io_backend->GetSocName());
368 OnDataSocActivated(m_io_backend->GetSocName()); 382 OnDataSocActivated(m_io_backend->GetSocName());
369 OnDataChanged(); 383 OnDataChanged();
@@ -435,3 +449,22 @@ void RegTab::OnReadOnlyClicked(bool checked)
435 m_right_content->AllowWrite(!checked); 449 m_right_content->AllowWrite(!checked);
436 UpdateSocFilename(); 450 UpdateSocFilename();
437} 451}
452
453void RegTab::OnDumpRegs(bool c)
454{
455 Q_UNUSED(c);
456 QFileDialog *fd = new QFileDialog(this);
457 fd->setAcceptMode(QFileDialog::AcceptSave);
458 fd->setFilter("Textual files (*.txt);;All files (*)");
459 fd->setDirectory(Settings::Get()->value("loaddatadir", QDir::currentPath()).toString());
460 if(!fd->exec())
461 return;
462 QStringList filenames = fd->selectedFiles();
463 Settings::Get()->setValue("loaddatadir", fd->directory().absolutePath());
464 BackendHelper bh(m_io_backend, m_cur_soc);
465 if(!bh.DumpAllRegisters(filenames[0]))
466 {
467 QMessageBox::warning(this, "The register dump was not saved",
468 "There was an error when dumping the registers");
469 }
470}