#include <QtGui/QVBoxLayout>
#include <QtGui/QMessageBox>
#include "themeselector.h"
-#include "buttonselector.h"
+#include "themepicker.h"
#include "themeloader.h"
#include "settings.h"
+#include "themeschedulersettings.h"
-ThemeSelector::ThemeSelector(QWidget* parent): QDialog(parent)
+ThemeSelector::ThemeSelector(QWidget* parent): QDialog(parent), themeScheduler_(0)
{
setWindowTitle(tr("Select theme"));
QHBoxLayout* layout = new QHBoxLayout;
- QHBoxLayout* left = new QHBoxLayout;
+ QVBoxLayout* left = new QVBoxLayout;
+ QHBoxLayout* first = new QHBoxLayout;
QPushButton* saveButton = new QPushButton(tr("Save"));
connect(saveButton, SIGNAL(clicked(bool)), this, SLOT(saveTheme()));
QDialogButtonBox* buttons = new QDialogButtonBox;
buttons->setCenterButtons(false);
+ buttons->setOrientation(Qt::Vertical);
buttons->addButton(saveButton, QDialogButtonBox::AcceptRole);
- selector_ = new ButtonSelector(tr("Theme"), this);
+ selector_ = new ThemePicker(tr("Theme"), this);
theme_ = Settings::instance().value("theme", "default").toString();
QPushButton* loadButton = new QPushButton(tr("Import"));
connect(loadButton, SIGNAL(clicked(bool)), this, SLOT(loadFromFile()));
- left->addWidget(selector_, Qt::AlignLeft);
- left->addWidget(loadButton);
+ QPushButton* scheduler = new QPushButton(tr("Theme scheduler"));
+ connect(scheduler, SIGNAL(clicked(bool)), this, SLOT(openScheduler()));
+
+ first->addWidget(selector_, Qt::AlignLeft);
+ first->addWidget(loadButton);
+
+ left->addLayout(first);
+ left->addWidget(scheduler);
layout->addLayout(left, Qt::AlignLeft);
layout->addWidget(buttons);
void ThemeSelector::loadFromFile()
{
- QString filename = QFileDialog::getOpenFileName(this, tr("Open file"),
- QDir::home().path(),
- tr("Theme files") + "(*" + ThemeLoader::getThemeSuffix() + ")");
-
- if(filename.isEmpty())
- {
- return;
- }
-
- qDebug() << filename;
-
- QString basename;
- int i = filename.lastIndexOf(QDir::separator());
-
- if(i == -1)
- {
- basename = filename;
- }
- else
- {
- basename = filename.mid(i + 1);
- }
-
- QString targetFile = ThemeLoader::getThemeDir() + basename;
-
- qDebug() << targetFile;
-
- bool ok = true;
-
- if(QFile::exists(targetFile))
- {
- ok = confirmCopy(basename);
-
- if(ok)
- {
- QFile::remove(targetFile);
- }
- }
-
- if(ok)
- {
- QFile::copy(filename, targetFile);
- QString name;
- QString id;
- getThemeDetails(basename, name, id);
- theme_ = id;
- loadThemes();
- }
-}
-
-void ThemeSelector::loadThemes()
-{
- selector_->clear();
- selector_->addItem(tr("Default"), "default");
- QDir themeDir(ThemeLoader::getThemeDir());
-
- if(!themeDir.exists() || !themeDir.isReadable())
- {
- qDebug() << "Warning: theme dir (" + ThemeLoader::getThemeDir() + ") doesn't exist or is read protected";
- return;
- }
+ QString file;
- QStringList filters;
- filters << "*" + ThemeLoader::getThemeSuffix();
- themeDir.setNameFilters(filters);
- themeDir.setFilter(QDir::Files);
- QStringList files = themeDir.entryList();
-
- for(int i = 0; i < files.size(); i++)
+ if(selector_->importFile(ThemeLoader::getThemeDir(),
+ "Theme files",
+ "*" + ThemeLoader::getThemeSuffix(),
+ false,
+ &file))
{
- QString name;
- QString id;
- getThemeDetails(files.at(i), name, id);
- selector_->addItem(name, id);
-
- if(id == theme_)
- {
- selector_->setCurrentIndex(i + 1);
- }
+ selector_->loadThemes();
+ selector_->selectTheme(file);
}
-
-}
-
-void ThemeSelector::getThemeDetails(QString filename,
- QString& name,
- QString& id)
-{
- static QRegExp cleaner(QRegExp::escape(ThemeLoader::getThemeSuffix()) + "$");
- filename = filename.replace(cleaner, "");
-
- id = filename;
- name = filename.at(0).toUpper() + filename.mid(1);
-}
-
-bool ThemeSelector::confirmCopy(QString const& filename)
-{
- QMessageBox::StandardButton result = QMessageBox::question(this, tr("File exists"),
- tr("Theme file %1 already exists in theme directory, overwrite?").arg(filename),
- QMessageBox::Yes | QMessageBox::No);
-
- return (result == QMessageBox::Yes);
}
-void ThemeSelector::setVisible(bool visible)
+void ThemeSelector::openScheduler()
{
- if(visible)
+ if(!themeScheduler_)
{
- loadThemes();
+ themeScheduler_ = new ThemeSchedulerSettings(this);
}
- QDialog::setVisible(visible);
+ themeScheduler_->show();
}