Fixed a bug that caused altitude display to have wrong color in some themes.
[jspeed] / src / themeselector.cpp
index 7f22a09..ed73dc8 100644 (file)
 #include <QtGui/QHBoxLayout>
 #include <QtGui/QVBoxLayout>
 #include <QtGui/QMessageBox>
+#include <QMaemo5InformationBox>
 #include "themeselector.h"
-#include "buttonselector.h"
-#include "theme.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),
+buttonClicked_(false), themeSelected_(false), 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);
-    theme_ = Settings::instance().value("theme", "default").toString();
+    selector_ = new ThemePicker(tr("Theme"), this);
+    connect(selector_, SIGNAL(clicked(bool)), this, SLOT(setButtonClicked()));
+    connect(selector_, SIGNAL(selected()), this, SLOT(setThemeSelected()));
 
     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);
@@ -63,130 +75,67 @@ ThemeSelector::ThemeSelector(QWidget* parent): QDialog(parent)
 void ThemeSelector::saveTheme()
 {
     QString theme = selector_->value().toString();
+    Settings::instance().setValue("theme", theme);
+    hide();
 
-    if(theme == theme_)
+    if(buttonClicked_ && themeSelected_ && ThemeScheduler::instance().isEnabled())
     {
-        hide();
-        return;
+        QMaemo5InformationBox::information(this, tr("Disabling theme scheduler..."), 1000);
+        ThemeScheduler::instance().setEnabled(false);
+        themeSelected_ = false;
+        buttonClicked_ = false;
     }
 
-    Settings::instance().setValue("theme", theme);
-    hide();
-    theme_ = theme;
     emit themeChanged();
 }
 
 void ThemeSelector::loadFromFile()
 {
-    QString filename = QFileDialog::getOpenFileName(this, tr("Open file"),
-                                                    QDir::home().path(),
-                                                    tr("Theme files") + "(*" + Theme::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 = Theme::getThemeDir() + basename;
-
-    qDebug() << targetFile;
+    QString file;
 
-    bool ok = true;
-
-    if(QFile::exists(targetFile))
-    {
-        ok = confirmCopy(basename);
-
-        if(ok)
-        {
-            QFile::remove(targetFile);
-        }
-    }
-
-    if(ok)
+    if(selector_->importFile(ThemeLoader::getThemeDir(),
+                          "Theme files",
+                          "*" + ThemeLoader::getThemeSuffix(),
+                          false,
+                          &file))
     {
-        QFile::copy(filename, targetFile);
-        QString name;
-        QString id;
-        getThemeDetails(basename, name, id);
-        theme_ = id;
-        loadThemes();
+        selector_->loadThemes();
+        selector_->selectTheme(file);
+        themeSelected_ = true;
+        buttonClicked_ = true;
     }
 }
 
-void ThemeSelector::loadThemes()
+void ThemeSelector::openScheduler()
 {
-    selector_->clear();
-    selector_->addItem(tr("Default"), "default");
-    QDir themeDir(Theme::getThemeDir());
-
-    if(!themeDir.exists() || !themeDir.isReadable())
-    {
-        qDebug() << "Warning: theme dir (" + Theme::getThemeDir() + ") doesn't exist or is read protected";
-        return;
-    }
-
-    QStringList filters;
-    filters << "*" + Theme::getThemeSuffix();
-    themeDir.setNameFilters(filters);
-    themeDir.setFilter(QDir::Files);
-    QStringList files = themeDir.entryList();
-
-    for(int i = 0; i < files.size(); i++)
+    if(!themeScheduler_)
     {
-        QString name;
-        QString id;
-        getThemeDetails(files.at(i), name, id);
-        selector_->addItem(name, id);
-
-        if(id == theme_)
-        {
-            selector_->setCurrentIndex(i + 1);
-        }
+        themeScheduler_ = new ThemeSchedulerSettings(this);
+        connect(themeScheduler_, SIGNAL(themeChanged()), this, SLOT(onThemeChanged()));
     }
 
+    themeScheduler_->show();
 }
 
-void ThemeSelector::getThemeDetails(QString filename,
-                                    QString& name,
-                                    QString& id)
+void ThemeSelector::setButtonClicked()
 {
-    static QRegExp cleaner(QRegExp::escape(Theme::getThemeSuffix()) + "$");
-    filename = filename.replace(cleaner, "");
-
-    id = filename;
-    name = filename.at(0).toUpper() + filename.mid(1);
+    buttonClicked_ = true;
 }
 
-bool ThemeSelector::confirmCopy(QString const& filename)
+void ThemeSelector::setThemeSelected()
 {
-    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);
+    themeSelected_ = true;
+}
 
-    return (result == QMessageBox::Yes);
+void ThemeSelector::onThemeChanged()
+{
+    buttonClicked_ = false;
+    themeSelected_ = false;
+    emit themeChanged();
 }
 
+
 void ThemeSelector::setVisible(bool visible)
 {
-    if(visible)
-    {
-        loadThemes();
-    }
-
     QDialog::setVisible(visible);
 }