Added theme scheduler, poi support and speed alarm features.
[jspeed] / src / themeselector.cpp
index e66d925..9f377ac 100644 (file)
 #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);
@@ -78,115 +87,25 @@ void ThemeSelector::saveTheme()
 
 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();
 }