2 * This file is part of jSpeed.
4 * jSpeed is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * jSpeed is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with jSpeed. If not, see <http://www.gnu.org/licenses/>.
19 #include <QtCore/QDir>
20 #include <QtCore/QDebug>
21 #include <QtCore/QString>
22 #include <QtCore/QStringList>
23 #include <QtGui/QFileDialog>
24 #include <QtGui/QDialogButtonBox>
25 #include <QtGui/QPushButton>
26 #include <QtGui/QHBoxLayout>
27 #include <QtGui/QVBoxLayout>
28 #include <QtGui/QMessageBox>
29 #include "themeselector.h"
30 #include "buttonselector.h"
31 #include "themeloader.h"
34 ThemeSelector::ThemeSelector(QWidget* parent): QDialog(parent)
36 setWindowTitle(tr("Select theme"));
38 QHBoxLayout* layout = new QHBoxLayout;
39 QHBoxLayout* left = new QHBoxLayout;
41 QPushButton* saveButton = new QPushButton(tr("Save"));
42 connect(saveButton, SIGNAL(clicked(bool)), this, SLOT(saveTheme()));
43 QDialogButtonBox* buttons = new QDialogButtonBox;
44 buttons->setCenterButtons(false);
45 buttons->addButton(saveButton, QDialogButtonBox::AcceptRole);
47 selector_ = new ButtonSelector(tr("Theme"), this);
48 theme_ = Settings::instance().value("theme", "default").toString();
50 QPushButton* loadButton = new QPushButton(tr("Import"));
51 connect(loadButton, SIGNAL(clicked(bool)), this, SLOT(loadFromFile()));
53 left->addWidget(selector_, Qt::AlignLeft);
54 left->addWidget(loadButton);
56 layout->addLayout(left, Qt::AlignLeft);
57 layout->addWidget(buttons);
63 void ThemeSelector::saveTheme()
65 QString theme = selector_->value().toString();
73 Settings::instance().setValue("theme", theme);
79 void ThemeSelector::loadFromFile()
81 QString filename = QFileDialog::getOpenFileName(this, tr("Open file"),
83 tr("Theme files") + "(*" + ThemeLoader::getThemeSuffix() + ")");
85 if(filename.isEmpty())
93 int i = filename.lastIndexOf(QDir::separator());
101 basename = filename.mid(i + 1);
104 QString targetFile = ThemeLoader::getThemeDir() + basename;
106 qDebug() << targetFile;
110 if(QFile::exists(targetFile))
112 ok = confirmCopy(basename);
116 QFile::remove(targetFile);
122 QFile::copy(filename, targetFile);
125 getThemeDetails(basename, name, id);
131 void ThemeSelector::loadThemes()
134 selector_->addItem(tr("Default"), "default");
135 QDir themeDir(ThemeLoader::getThemeDir());
137 if(!themeDir.exists() || !themeDir.isReadable())
139 qDebug() << "Warning: theme dir (" + ThemeLoader::getThemeDir() + ") doesn't exist or is read protected";
144 filters << "*" + ThemeLoader::getThemeSuffix();
145 themeDir.setNameFilters(filters);
146 themeDir.setFilter(QDir::Files);
147 QStringList files = themeDir.entryList();
149 for(int i = 0; i < files.size(); i++)
153 getThemeDetails(files.at(i), name, id);
154 selector_->addItem(name, id);
158 selector_->setCurrentIndex(i + 1);
164 void ThemeSelector::getThemeDetails(QString filename,
168 static QRegExp cleaner(QRegExp::escape(ThemeLoader::getThemeSuffix()) + "$");
169 filename = filename.replace(cleaner, "");
172 name = filename.at(0).toUpper() + filename.mid(1);
175 bool ThemeSelector::confirmCopy(QString const& filename)
177 QMessageBox::StandardButton result = QMessageBox::question(this, tr("File exists"),
178 tr("Theme file %1 already exists in theme directory, overwrite?").arg(filename),
179 QMessageBox::Yes | QMessageBox::No);
181 return (result == QMessageBox::Yes);
184 void ThemeSelector::setVisible(bool visible)
191 QDialog::setVisible(visible);