summaryrefslogtreecommitdiff
path: root/utils/themeeditor/gui/configdocument.cpp
diff options
context:
space:
mode:
authorRobert Bieber <robby@bieberphoto.com>2010-06-17 05:37:01 +0000
committerRobert Bieber <robby@bieberphoto.com>2010-06-17 05:37:01 +0000
commitca564287ee3f48945d45c7d92be7a83452f53745 (patch)
treed6e502bb604f925240a742b3bac2c813a98c447b /utils/themeeditor/gui/configdocument.cpp
parentba07b2055c7eb8f2add96f55cb52b40b9ccb3d63 (diff)
downloadrockbox-ca564287ee3f48945d45c7d92be7a83452f53745.zip
rockbox-ca564287ee3f48945d45c7d92be7a83452f53745.tar.gz
rockbox-ca564287ee3f48945d45c7d92be7a83452f53745.tar.bz2
rockbox-ca564287ee3f48945d45c7d92be7a83452f53745.tar.xz
Theme Editor: Moved source files into subdirectories
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26876 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils/themeeditor/gui/configdocument.cpp')
-rw-r--r--utils/themeeditor/gui/configdocument.cpp267
1 files changed, 267 insertions, 0 deletions
diff --git a/utils/themeeditor/gui/configdocument.cpp b/utils/themeeditor/gui/configdocument.cpp
new file mode 100644
index 0000000..a897d3b
--- /dev/null
+++ b/utils/themeeditor/gui/configdocument.cpp
@@ -0,0 +1,267 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2010 Robert Bieber
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "projectmodel.h"
+#include "configdocument.h"
+#include "ui_configdocument.h"
+
+#include <QMessageBox>
+#include <QFile>
+#include <QSettings>
+#include <QFileDialog>
+
+ConfigDocument::ConfigDocument(QMap<QString, QString>& settings, QString file,
+ QWidget *parent)
+ : TabContent(parent),
+ ui(new Ui::ConfigDocument),
+ filePath(file)
+{
+ ui->setupUi(this);
+
+ /* Populating the known keys list */
+ QFile fin(":/resources/configkeys");
+ fin.open(QFile::ReadOnly);
+
+ QStringList* container = &primaryKeys;
+ while(!fin.atEnd())
+ {
+ QString current = QString(fin.readLine());
+ if(current == "-\n")
+ container = &secondaryKeys;
+ else if(current != "\n")
+ container->append(current.trimmed());
+ }
+
+ QMap<QString, QString>::iterator i;
+ for(i = settings.begin(); i != settings.end(); i++)
+ if(i.key() != "themebase")
+ addRow(i.key(), i.value());
+
+ saved = toPlainText();
+
+ QObject::connect(ui->addKeyButton, SIGNAL(pressed()),
+ this, SLOT(addClicked()));
+}
+
+ConfigDocument::~ConfigDocument()
+{
+ delete ui;
+}
+
+void ConfigDocument::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+QString ConfigDocument::title() const
+{
+ QStringList decompose = filePath.split("/");
+ return decompose.last();
+}
+
+void ConfigDocument::save()
+{
+ QFile fout(filePath);
+
+ if(!fout.exists())
+ {
+ saveAs();
+ return;
+ }
+
+ fout.open(QFile::WriteOnly);
+ fout.write(toPlainText().toAscii());
+ fout.close();
+
+ saved = toPlainText();
+ emit titleChanged(title());
+
+}
+
+void ConfigDocument::saveAs()
+{
+ /* Determining the directory to open */
+ QString directory = filePath;
+
+ QSettings settings;
+ settings.beginGroup("ProjectModel");
+ if(directory == "")
+ directory = settings.value("defaultDirectory", "").toString();
+
+ filePath = QFileDialog::getSaveFileName(this, tr("Save Document"),
+ directory,
+ ProjectModel::fileFilter());
+ directory = filePath;
+ if(filePath == "")
+ return;
+
+ directory.chop(filePath.length() - filePath.lastIndexOf('/') - 1);
+ settings.setValue("defaultDirectory", directory);
+ settings.endGroup();
+
+ QFile fout(filePath);
+ fout.open(QFile::WriteOnly);
+ fout.write(toPlainText().toAscii());
+ fout.close();
+
+ saved = toPlainText();
+ emit titleChanged(title());
+ emit configFileChanged(file());
+
+}
+
+bool ConfigDocument::requestClose()
+{
+ if(toPlainText() != saved)
+ {
+ /* Spawning the "Are you sure?" dialog */
+ QMessageBox confirm(this);
+ confirm.setWindowTitle(tr("Confirm Close"));
+ confirm.setText(title() + tr(" has been modified."));
+ confirm.setInformativeText(tr("Do you want to save your changes?"));
+ confirm.setStandardButtons(QMessageBox::Save | QMessageBox::Discard
+ | QMessageBox::Cancel);
+ confirm.setDefaultButton(QMessageBox::Save);
+ int confirmation = confirm.exec();
+
+ switch(confirmation)
+ {
+ case QMessageBox::Save:
+ save();
+ /* After calling save, make sure the user actually went through */
+ if(toPlainText() != saved)
+ return false;
+ else
+ return true;
+
+ case QMessageBox::Discard:
+ return true;
+
+ case QMessageBox::Cancel:
+ return false;
+ }
+ }
+ return true;
+}
+
+QString ConfigDocument::toPlainText() const
+{
+ QString buffer = "";
+
+ for(int i = 0; i < keys.count(); i++)
+ {
+ buffer += keys[i]->currentText();
+ buffer += ":";
+ buffer += values[i]->text();
+ buffer += "\n";
+ }
+
+ return buffer;
+}
+
+void ConfigDocument::addRow(QString key, QString value)
+{
+ QHBoxLayout* layout = new QHBoxLayout();
+ QComboBox* keyEdit = new QComboBox(this);
+ QLineEdit* valueEdit = new QLineEdit(value, this);
+ QPushButton* delButton = new QPushButton(tr("-"), this);
+ QLabel* label = new QLabel(":");
+
+ /* Loading the combo box options */
+ keyEdit->setInsertPolicy(QComboBox::InsertAlphabetically);
+ keyEdit->setEditable(true);
+ keyEdit->addItems(primaryKeys);
+ keyEdit->insertSeparator(keyEdit->count());
+ keyEdit->addItems(secondaryKeys);
+ if(keyEdit->findText(key) != -1)
+ keyEdit->setCurrentIndex(keyEdit->findText(key));
+ else
+ keyEdit->setEditText(key);
+
+ layout->addWidget(keyEdit);
+ layout->addWidget(label);
+ layout->addWidget(valueEdit);
+ layout->addWidget(delButton);
+
+ delButton->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
+ delButton->setMaximumWidth(35);
+
+ QObject::connect(delButton, SIGNAL(clicked()),
+ this, SLOT(deleteClicked()));
+ QObject::connect(keyEdit, SIGNAL(currentIndexChanged(QString)),
+ this, SLOT(textChanged()));
+ QObject::connect(keyEdit, SIGNAL(textChanged(QString)),
+ this, SLOT(textChanged()));
+ QObject::connect(valueEdit, SIGNAL(textChanged(QString)),
+ this, SLOT(textChanged()));
+
+ ui->configBoxes->addLayout(layout);
+
+ containers.append(layout);
+ keys.append(keyEdit);
+ values.append(valueEdit);
+ deleteButtons.append(delButton);
+ labels.append(label);
+
+}
+
+void ConfigDocument::deleteClicked()
+{
+ QPushButton* button = dynamic_cast<QPushButton*>(sender());
+ int row = deleteButtons.indexOf(button);
+
+ deleteButtons[row]->deleteLater();
+ keys[row]->deleteLater();
+ values[row]->deleteLater();
+ containers[row]->deleteLater();
+ labels[row]->deleteLater();
+
+ deleteButtons.removeAt(row);
+ keys.removeAt(row);
+ values.removeAt(row);
+ containers.removeAt(row);
+ labels.removeAt(row);
+
+ if(saved != toPlainText())
+ emit titleChanged(title() + "*");
+ else
+ emit titleChanged(title());
+}
+
+void ConfigDocument::addClicked()
+{
+ addRow(tr("Key"), tr("Value"));
+}
+
+void ConfigDocument::textChanged()
+{
+ if(toPlainText() != saved)
+ emit titleChanged(title() + "*");
+ else
+ emit titleChanged(title());
+}