Changeset View
Changeset View
Standalone View
Standalone View
lib/slideshow.cpp
Show First 20 Lines • Show All 44 Lines • ▼ Show 20 Line(s) | |||||
45 | //#define ENABLE_LOG | 45 | //#define ENABLE_LOG | ||
46 | #ifdef ENABLE_LOG | 46 | #ifdef ENABLE_LOG | ||
47 | #define LOG(x) qDebug() << x | 47 | #define LOG(x) qDebug() << x | ||
48 | #else | 48 | #else | ||
49 | #define LOG(x) ; | 49 | #define LOG(x) ; | ||
50 | #endif | 50 | #endif | ||
51 | 51 | | |||
52 | enum State { | 52 | enum State { | ||
53 | Stopped, | 53 | Paused, | ||
54 | Started, | 54 | Started, | ||
55 | WaitForEndOfUrl | 55 | WaitForEndOfUrl | ||
56 | }; | 56 | }; | ||
57 | 57 | | |||
58 | /** | 58 | /** | ||
59 | * This class generate random numbers which are not the same between two runs | 59 | * This class generate random numbers which are not the same between two runs | ||
60 | * of Gwenview. See bug #132334 | 60 | * of Gwenview. See bug #132334 | ||
61 | */ | 61 | */ | ||
▲ Show 20 Lines • Show All 110 Lines • ▼ Show 20 Line(s) | 162 | { | |||
172 | } | 172 | } | ||
173 | } | 173 | } | ||
174 | }; | 174 | }; | ||
175 | 175 | | |||
176 | SlideShow::SlideShow(QObject* parent) | 176 | SlideShow::SlideShow(QObject* parent) | ||
177 | : QObject(parent) | 177 | : QObject(parent) | ||
178 | , d(new SlideShowPrivate) | 178 | , d(new SlideShowPrivate) | ||
179 | { | 179 | { | ||
180 | d->mState = Stopped; | 180 | d->mState = Paused; | ||
181 | 181 | | |||
182 | d->mTimer = new QTimer(this); | 182 | d->mTimer = new QTimer(this); | ||
183 | connect(d->mTimer, &QTimer::timeout, this, &SlideShow::goToNextUrl); | 183 | connect(d->mTimer, &QTimer::timeout, this, &SlideShow::goToNextUrl); | ||
184 | 184 | | |||
185 | d->mLoopAction = new QAction(this); | 185 | d->mLoopAction = new QAction(this); | ||
186 | d->mLoopAction->setText(i18nc("@item:inmenu toggle loop in slideshow", "Loop")); | 186 | d->mLoopAction->setText(i18nc("@item:inmenu toggle loop in slideshow", "Loop")); | ||
187 | d->mLoopAction->setCheckable(true); | 187 | d->mLoopAction->setCheckable(true); | ||
188 | connect(d->mLoopAction, &QAction::triggered, this, &SlideShow::updateConfig); | 188 | connect(d->mLoopAction, &QAction::triggered, this, &SlideShow::updateConfig); | ||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Line(s) | 256 | if (d->mState == Started) { | |||
259 | } | 259 | } | ||
260 | // already timeout reached, but not yet progressed to next url | 260 | // already timeout reached, but not yet progressed to next url | ||
261 | return interval(); | 261 | return interval(); | ||
262 | } | 262 | } | ||
263 | 263 | | |||
264 | return 0; | 264 | return 0; | ||
265 | } | 265 | } | ||
266 | 266 | | |||
267 | void SlideShow::stop() | 267 | void SlideShow::pause() | ||
268 | { | 268 | { | ||
269 | LOG("Stopping timer"); | 269 | LOG("Stopping timer"); | ||
270 | d->mTimer->stop(); | 270 | d->mTimer->stop(); | ||
271 | d->mState = Stopped; | 271 | d->mState = Paused; | ||
272 | stateChanged(false); | 272 | stateChanged(false); | ||
273 | } | 273 | } | ||
274 | 274 | | |||
275 | void SlideShow::resumeAndGoToNextUrl() | 275 | void SlideShow::resumeAndGoToNextUrl() | ||
276 | { | 276 | { | ||
277 | LOG(""); | 277 | LOG(""); | ||
278 | if (d->mState == WaitForEndOfUrl) { | 278 | if (d->mState == WaitForEndOfUrl) { | ||
279 | goToNextUrl(); | 279 | goToNextUrl(); | ||
280 | } | 280 | } | ||
281 | } | 281 | } | ||
282 | 282 | | |||
283 | void SlideShow::goToNextUrl() | 283 | void SlideShow::goToNextUrl() | ||
284 | { | 284 | { | ||
285 | LOG(""); | 285 | LOG(""); | ||
286 | QUrl url = d->findNextUrl(); | 286 | QUrl url = d->findNextUrl(); | ||
287 | LOG("url:" << url); | 287 | LOG("url:" << url); | ||
288 | if (!url.isValid()) { | 288 | if (!url.isValid()) { | ||
289 | stop(); | 289 | pause(); | ||
290 | return; | 290 | return; | ||
291 | } | 291 | } | ||
292 | goToUrl(url); | 292 | goToUrl(url); | ||
293 | } | 293 | } | ||
294 | 294 | | |||
295 | void SlideShow::setCurrentUrl(const QUrl &url) | 295 | void SlideShow::setCurrentUrl(const QUrl &url) | ||
296 | { | 296 | { | ||
297 | LOG(url); | 297 | LOG(url); | ||
298 | if (d->mCurrentUrl == url) { | 298 | if (d->mCurrentUrl == url) { | ||
299 | return; | 299 | return; | ||
300 | } | 300 | } | ||
301 | d->mCurrentUrl = url; | 301 | d->mCurrentUrl = url; | ||
302 | // Restart timer to avoid showing new url for the remaining time of the old | 302 | // Restart timer to avoid showing new url for the remaining time of the old | ||
303 | // url | 303 | // url | ||
304 | if (d->mState != Stopped) { | 304 | if (d->mState != Paused) { | ||
305 | d->doStart(); | 305 | d->doStart(); | ||
306 | } | 306 | } | ||
307 | } | 307 | } | ||
308 | 308 | | |||
309 | bool SlideShow::isRunning() const | 309 | bool SlideShow::isRunning() const | ||
310 | { | 310 | { | ||
311 | return d->mState != Stopped; | 311 | return d->mState != Paused; | ||
312 | } | 312 | } | ||
313 | 313 | | |||
314 | void SlideShow::updateConfig() | 314 | void SlideShow::updateConfig() | ||
315 | { | 315 | { | ||
316 | GwenviewConfig::setLoop(d->mLoopAction->isChecked()); | 316 | GwenviewConfig::setLoop(d->mLoopAction->isChecked()); | ||
317 | GwenviewConfig::setRandom(d->mRandomAction->isChecked()); | 317 | GwenviewConfig::setRandom(d->mRandomAction->isChecked()); | ||
318 | } | 318 | } | ||
319 | 319 | | |||
320 | void SlideShow::slotRandomActionToggled(bool on) | 320 | void SlideShow::slotRandomActionToggled(bool on) | ||
321 | { | 321 | { | ||
322 | if (on && d->mState != Stopped) { | 322 | if (on && d->mState != Paused) { | ||
323 | d->initShuffledUrls(); | 323 | d->initShuffledUrls(); | ||
324 | } | 324 | } | ||
325 | } | 325 | } | ||
326 | 326 | | |||
327 | } // namespace | 327 | } // namespace |