// Copyright (C) 2026 Danilo M. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as // published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. import QtQuick import "../.." // The wallpaper engine's page: on or off, the interval, and the two lists. Module { name: "wallengine" label: "Wallpaper engine" // nf-fa-shuffle, present in Inconsolata Nerd Font. icon: "\uf074" settings: true dirty: WallEngine.dirty group: "Appearance" keywords: ["wallpaper", "timer", "rotate", "rotation", "shuffle", "slideshow", "heart"] // A singleton is built on first use, and the engine's timer has to run // from the start of the session, page opened or not. Modules exist for // the whole session, so this reference is what starts it. readonly property bool engineOn: WallEngine.on page: Component { Page { title: "Wallpaper engine" // SaveBar's place, not SaveBar: the engine is started and stopped // here as well as saved, and its state is what the header reports. actions: Component { Row { spacing: 8 Text { anchors.verticalCenter: parent.verticalCenter text: WallEngine.dirty ? "unsaved changes" : WallEngine.on ? "running, next change at " + Qt.formatTime(new Date(WallEngine.nextAt), "hh:mm") : "stopped" color: WallEngine.dirty ? Theme.yellow : WallEngine.on ? Theme.green : Theme.overlay font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 4 } } Button { visible: WallEngine.dirty text: "Reset" onClicked: WallEngine.reset() } Button { visible: WallEngine.on text: "Stop" enabled: !Wallpapers.applying onClicked: WallEngine.stop() } Button { text: WallEngine.on ? "Apply" : "Start" enabled: (!WallEngine.on || WallEngine.dirty) && !Wallpapers.applying onClicked: WallEngine.on ? WallEngine.apply() : WallEngine.start() } } } WallEngineTab { width: parent.width } } } }