Warning, /graphics/koko/src/qml/SlideshowManager.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: (C) 2021 Mikel Johnson <mikel5764@gmail.com>
0003 *
0004 * SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006
0007 import QtQuick 2.15
0008 import QtQuick.Window 2.15
0009 import org.kde.koko.private 0.1 as KokoPrivate
0010
0011 // This object manages slideshows.
0012 // It abstract the implementation with a clean and simple API,
0013 // so you only need to bother about *what* to do, not *how*
0014
0015 Item {
0016 // this property indicates whether slideshow is running
0017 // this includes external media even while the timer is paused
0018 // *read only* (not programmatically but this will break if you write to this)
0019 property bool running: false
0020
0021 // this property indicates whether external media is running
0022 // *read only*
0023 property bool externalMediaRunning: false
0024
0025 // save last window state before running slideshow
0026 property int lastWindowVisibility: applicationWindow().visibility
0027 property bool lastControlsVisible: applicationWindow().controlsVisible
0028
0029 // start the slideshow
0030 // don't use these function for anything else
0031 // besides actually starting and stopping the presentation
0032 // since this is reflected in UI unlike functions below these
0033 function start() {
0034 running = true;
0035 lastWindowVisibility = applicationWindow().visibility
0036 lastControlsVisible = applicationWindow().controlsVisible
0037 KokoPrivate.Controller.saveWindowGeometry(applicationWindow());
0038 applicationWindow().visibility = Window.FullScreen;
0039 applicationWindow().controlsVisible = false;
0040 slideshowTimer.restart();
0041 }
0042
0043 // stop the slideshow
0044 function stop() {
0045 running = false;
0046 externalMediaRunning = false;
0047 applicationWindow().visibility = lastWindowVisibility
0048 applicationWindow().controlsVisible = lastControlsVisible
0049 slideshowTimer.stop();
0050 }
0051
0052 // since all the logic is done by using the following functions
0053 // it's pretty easy to plop log() here to simplify debugging
0054
0055 // call this when you need show media that isn't static (i.e. video) to pause the timer
0056 function externalPlaybackStarted() {
0057 externalMediaRunning = true;
0058 slideshowTimer.stop();
0059 }
0060
0061 // call this when when your playback has finished to move immediately to the next slide
0062 // and resume the timer
0063 function externalPlaybackFinished() {
0064 externalMediaRunning = false;
0065 triggered();
0066 slideshowTimer.restart();
0067 }
0068
0069 // call this when when your playback has unloaded to resume the timer
0070 // without immediately moving to the next slide
0071 function externalPlaybackUnloaded() {
0072 externalMediaRunning = false;
0073 slideshowTimer.restart();
0074 }
0075
0076 // this will be called whenever new slide is required
0077 signal triggered()
0078
0079 // internal object, do *not* call from outside
0080 Timer {
0081 id: slideshowTimer
0082 interval: kokoConfig.nextImageInterval * 1000
0083 repeat: true
0084 onTriggered: {
0085 if (parent.externalMediaRunning) {
0086 stop();
0087 return;
0088 }
0089 parent.triggered();
0090 }
0091 }
0092 }