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/QString>
20 #include <QtCore/QDebug>
21 #include "themescheduler.h"
26 QString const DEFAULT_THEME = "default";
29 ThemeScheduler::ThemeScheduler(): QObject(0), enabled_(false)
34 ThemeScheduler::~ThemeScheduler()
40 ThemeScheduler& ThemeScheduler::instance()
42 static ThemeScheduler instance;
46 void ThemeScheduler::addItem(QTime const& time, QString const& theme)
49 ItemDetails* details = new ItemDetails;
51 details->theme = theme;
53 int msecs = QTime::currentTime().msecsTo(time);
60 details->timer.setSingleShot(true);
61 details->timer.start(msecs + 500);
62 connect(&details->timer, SIGNAL(timeout()), this, SLOT(emitThemeChanged()));
64 for(int i = 0; i < items_.size(); i++)
66 if(items_.at(i)->time > time)
68 items_.insert(i, details);
73 items_.push_back(details);
76 void ThemeScheduler::removeItem(QTime const& time)
78 for(int i = 0; i < items_.size(); i++)
80 if(items_.at(i)->time == time)
89 void ThemeScheduler::store()
91 Settings::instance().setValue("theme_scheduler_enabled", enabled_);
95 Settings::instance().remove("theme_scheduler");
101 for(int i = 0; i < items_.size(); i++)
103 QMap<QString, QVariant> map;
104 map["time"] = items_.at(i)->time.toString();
105 map["theme"] = items_.at(i)->theme;
109 Settings::instance().setValue("theme_scheduler", list);
112 void ThemeScheduler::loadConfig()
114 enabled_ = Settings::instance().value("theme_scheduler_enabled", false).toBool();
116 QList<QVariant> list = Settings::instance().value("theme_scheduler").toList();
118 for(int i = 0; i < list.size(); i++)
120 QMap<QString, QVariant> map = list.at(i).toMap();
121 QTime time = QTime::fromString(map["time"].toString());
122 addItem(time, map["theme"].toString());
126 void ThemeScheduler::setEnabled(bool enabled)
131 bool ThemeScheduler::isEnabled() const
136 QString ThemeScheduler::currentTheme() const
140 QTime time = QTime::currentTime();
142 for(int i = 0; i < items_.size(); i++)
144 if(items_.at(i)->time >= time)
150 index = items_.size() - 1;
153 return items_.at(index)->theme;
157 if(items_.size() > 0)
159 return items_.at(items_.size() - 1)->theme;
163 QString theme = Settings::instance().value("theme", DEFAULT_THEME).toString();
167 return DEFAULT_THEME;
173 QString const& ThemeScheduler::getDefaultTheme()
175 return DEFAULT_THEME;
178 void ThemeScheduler::clear()
180 for(int i = 0; i < items_.size(); i++)
188 void ThemeScheduler::getItems(QList<SchedulerItem>& items)
192 for(int i = 0; i < items_.size(); i++)
195 item.time = items_.at(i)->time;
196 item.theme = items_.at(i)->theme;
197 items.push_back(item);
201 void ThemeScheduler::emitThemeChanged()
209 bool ThemeScheduler::isEmpty() const
211 return items_.isEmpty();