summaryrefslogtreecommitdiffstats
path: root/utils/regtools/qeditor/mainwindow.cpp
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-04-07 11:28:04 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2014-05-01 19:34:18 +0200
commit4356666101e0e7985e65a19f86bc4a74519e93f9 (patch)
treebf8de8057d93d0fab0a30cae92a90f5a4edc79dc /utils/regtools/qeditor/mainwindow.cpp
parent3754624edc48539c5cc5acbf426ce909477e87d8 (diff)
downloadrockbox-4356666101e0e7985e65a19f86bc4a74519e93f9.tar.gz
rockbox-4356666101e0e7985e65a19f86bc4a74519e93f9.zip
regtools: completely rework qeditor, improve soc desc library and tools
The graphical editor can now display and editor description files. The library has been improved to provide more useful function. The XML format has been slightly changed: only one soc is allowed per file (this is was already de facto the case since <soc> was the root tag). Also introduce a DTD to validate the files. Change-Id: If70ba35b6dc0242bdb87411cf4baee9597798aac
Diffstat (limited to 'utils/regtools/qeditor/mainwindow.cpp')
-rw-r--r--utils/regtools/qeditor/mainwindow.cpp63
1 files changed, 56 insertions, 7 deletions
diff --git a/utils/regtools/qeditor/mainwindow.cpp b/utils/regtools/qeditor/mainwindow.cpp
index 2ba781b042..cd0926851c 100644
--- a/utils/regtools/qeditor/mainwindow.cpp
+++ b/utils/regtools/qeditor/mainwindow.cpp
@@ -12,6 +12,7 @@
#include "mainwindow.h"
#include "regtab.h"
+#include "regedit.h"
MyTabWidget::MyTabWidget()
{
@@ -20,23 +21,37 @@ MyTabWidget::MyTabWidget()
connect(this, SIGNAL(tabCloseRequested(int)), this, SLOT(OnCloseTab(int)));
}
-void MyTabWidget::OnCloseTab(int index)
+bool MyTabWidget::CloseTab(int index)
{
QWidget *w = this->widget(index);
- removeTab(index);
- delete w;
+ DocumentTab *doc = dynamic_cast< DocumentTab* >(w);
+ if(doc->Quit())
+ {
+ removeTab(index);
+ delete w;
+ return true;
+ }
+ else
+ return false;
+}
+
+void MyTabWidget::OnCloseTab(int index)
+{
+ CloseTab(index);
}
MainWindow::MainWindow(Backend *backend)
:m_backend(backend)
{
- QAction *new_regtab_act = new QAction(QIcon::fromTheme("document-new"), tr("&Register Tab"), this);
+ QAction *new_regtab_act = new QAction(QIcon::fromTheme("document-new"), tr("Register &Tab"), this);
+ QAction *new_regedit_act = new QAction(QIcon::fromTheme("document-edit"), tr("Register &Editor"), this);
QAction *load_desc_act = new QAction(QIcon::fromTheme("document-open"), tr("&Soc Description"), this);
QAction *quit_act = new QAction(QIcon::fromTheme("application-exit"), tr("&Quit"), this);
QAction *about_act = new QAction(QIcon::fromTheme("help-about"), tr("&About"), this);
QAction *about_qt_act = new QAction(QIcon::fromTheme("help-about"), tr("About &Qt"), this);
connect(new_regtab_act, SIGNAL(triggered()), this, SLOT(OnNewRegTab()));
+ connect(new_regedit_act, SIGNAL(triggered()), this, SLOT(OnNewRegEdit()));
connect(load_desc_act, SIGNAL(triggered()), this, SLOT(OnLoadDesc()));
connect(quit_act, SIGNAL(triggered()), this, SLOT(OnQuit()));
connect(about_act, SIGNAL(triggered()), this, SLOT(OnAbout()));
@@ -48,6 +63,7 @@ MainWindow::MainWindow(Backend *backend)
file_menu->addAction(quit_act);
new_submenu->addAction(new_regtab_act);
+ new_submenu->addAction(new_regedit_act);
load_submenu->addAction(load_desc_act);
@@ -91,6 +107,8 @@ void MainWindow::OnAboutQt()
void MainWindow::closeEvent(QCloseEvent *event)
{
+ if(!Quit())
+ return event->ignore();
WriteSettings();
event->accept();
}
@@ -100,7 +118,7 @@ void MainWindow::OnLoadDesc()
QFileDialog *fd = new QFileDialog(this);
fd->setFilter("XML files (*.xml);;All files (*)");
fd->setFileMode(QFileDialog::ExistingFiles);
- fd->setDirectory(Settings::Get()->value("mainwindow/loaddescdir", QDir::currentPath()).toString());
+ fd->setDirectory(Settings::Get()->value("loaddescdir", QDir::currentPath()).toString());
if(fd->exec())
{
QStringList filenames = fd->selectedFiles();
@@ -111,11 +129,42 @@ void MainWindow::OnLoadDesc()
msg.setText(QString("Cannot load ") + filenames[i]);
msg.exec();
}
- Settings::Get()->setValue("mainwindow/loaddescdir", fd->directory().absolutePath());
+ Settings::Get()->setValue("loaddescdir", fd->directory().absolutePath());
}
}
+void MainWindow::OnTabModified(bool modified)
+{
+ QWidget *sender = qobject_cast< QWidget* >(QObject::sender());
+ int index = m_tab->indexOf(sender);
+ if(modified)
+ m_tab->setTabIcon(index, QIcon::fromTheme("document-save"));
+ else
+ m_tab->setTabIcon(index, QIcon());
+}
+
+void MainWindow::AddTab(QWidget *tab, const QString& title)
+{
+ connect(tab, SIGNAL(OnModified(bool)), this, SLOT(OnTabModified(bool)));
+ m_tab->setCurrentIndex(m_tab->addTab(tab, title));
+}
+
void MainWindow::OnNewRegTab()
{
- m_tab->addTab(new RegTab(m_backend), "Register Tab");
+ AddTab(new RegTab(m_backend, this), "Register Tab");
+}
+
+void MainWindow::OnNewRegEdit()
+{
+ AddTab(new RegEdit(m_backend, this), "Register Editor");
+}
+
+bool MainWindow::Quit()
+{
+ while(m_tab->count() > 0)
+ {
+ if(!m_tab->CloseTab(0))
+ return false;
+ }
+ return true;
}