Warning, /plasma/kdeplasma-addons/applets/timer/package/contents/ui/main.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2016 Michael Abrahams <miabraha@gmail.com>
0003 *
0004 * SPDX-License-Identifier: GPL-3.0-or-later
0005 */
0006
0007 import QtQuick 2.15
0008 import org.kde.plasma.plasmoid 2.0
0009 import org.kde.plasma.core as PlasmaCore
0010 import org.kde.kirigami 2.20 as Kirigami
0011 import org.kde.plasma.plasma5support 2.0 as P5Support
0012 import org.kde.kquickcontrolsaddons 2.0 as QtExtra
0013 import org.kde.plasma.private.timer 0.1 as TimerPlasmoid
0014 import org.kde.notification 1.0
0015
0016 PlasmoidItem {
0017 id: root;
0018
0019 switchWidth: Kirigami.Units.gridUnit * 8
0020 switchHeight: Kirigami.Units.gridUnit * 4
0021
0022 readonly property bool inPanel: [PlasmaCore.Types.TopEdge, PlasmaCore.Types.RightEdge, PlasmaCore.Types.BottomEdge, PlasmaCore.Types.LeftEdge]
0023 .includes(Plasmoid.location)
0024 readonly property bool isVertical: Plasmoid.formFactor === PlasmaCore.Types.Vertical
0025
0026 readonly property variant predefinedTimers: plasmoid.configuration.predefinedTimers;
0027
0028 Plasmoid.backgroundHints: PlasmaCore.Types.ShadowBackground | PlasmaCore.Types.ConfigurableBackground
0029
0030 // Display remaining time (hours and minutes) (default: enabled)
0031 readonly property bool showRemainingTime: Plasmoid.configuration.showRemainingTime
0032
0033 // Display seconds in addition to hours and minutes (default: enabled)
0034 readonly property bool showSeconds: Plasmoid.configuration.showSeconds
0035 property int seconds : restoreToSeconds(plasmoid.configuration.running, plasmoid.configuration.savedAt, plasmoid.configuration.seconds);
0036
0037 // Display timer toggle control (default: enabled)
0038 readonly property bool showTimerToggle: Plasmoid.configuration.showTimerToggle
0039
0040 // Display progress bar (default: disabled)
0041 readonly property bool showProgressBar: Plasmoid.configuration.showProgressBar
0042
0043 // show notification on timer completion (default: enabled)
0044 property bool showNotification: plasmoid.configuration.showNotification;
0045 // run custom command on timer completion (default: disabled)
0046 property bool runCommand: plasmoid.configuration.runCommand;
0047 property string command: plasmoid.configuration.command;
0048
0049 // show title (can be customized in the settings dialog, default: disabled)
0050 readonly property bool showTitle: plasmoid.configuration.showTitle;
0051 readonly property string title: plasmoid.configuration.title;
0052 readonly property bool alertMode: root.running && root.seconds < 60
0053 property bool running: plasmoid.configuration.running > 0
0054 property bool suspended: false;
0055
0056 readonly property string notificationText: plasmoid.configuration.notificationText;
0057
0058 toolTipMainText: {
0059 var timerName = "";
0060 if (showTitle && title != "") {
0061 timerName = title;
0062 } else {
0063 timerName = Plasmoid.title;
0064 }
0065
0066 if (running) {
0067 return i18n("%1 is running", timerName);
0068 } else {
0069 return i18n("%1 not running", timerName);
0070 }
0071 }
0072 toolTipSubText: running ? i18np("Remaining time left: %1 second", "Remaining time left: %1 seconds", seconds) : i18n("Use mouse wheel to change digits or choose from predefined timers in the context menu");
0073
0074 compactRepresentation: CompactRepresentation { }
0075 fullRepresentation: TimerView { }
0076
0077 function toggleTimer() {
0078 if (root.running) {
0079 root.stopTimer();
0080 } else {
0081 root.startTimer();
0082 }
0083 }
0084
0085 Notification {
0086 id: timerNotification
0087 componentName: "plasma_applet_timer"
0088 eventId: "timerFinished"
0089 title: root.title || i18n("Timer")
0090 text: notificationText || i18n("Timer finished")
0091 }
0092
0093 Timer {
0094 id: t;
0095 interval: 1000;
0096 onTriggered: {
0097 if (root.seconds != 0) {
0098 root.seconds--;
0099 }
0100 if (root.seconds == 0) {
0101 root.running = false;
0102
0103 if (showNotification) {
0104 timerNotification.sendEvent();
0105 }
0106 if (runCommand) {
0107 TimerPlasmoid.Timer.runCommand(command);
0108 }
0109 saveTimer();
0110 }
0111 }
0112 repeat: true;
0113 running: root.running;
0114 }
0115
0116 Timer {
0117 id: delayedSaveTimer;
0118 interval: 3000;
0119 onTriggered: saveTimer();
0120 }
0121
0122 function onDigitHasChanged() {
0123 delayedSaveTimer.stop();
0124 delayedSaveTimer.start();
0125 }
0126
0127 Plasmoid.contextualActions: [
0128 PlasmaCore.Action {
0129 id: startAction
0130 text: i18nc("@action", "&Start")
0131 onTriggered: startTimer()
0132 },
0133 PlasmaCore.Action {
0134 id: stopAction
0135 text: i18nc("@action", "S&top")
0136 onTriggered: stopTimer()
0137 },
0138 PlasmaCore.Action {
0139 id: resetAction
0140 text: i18nc("@action", "&Reset")
0141 onTriggered: resetTimer()
0142 },
0143 PlasmaCore.Action {
0144 id: separator1
0145 isSeparator: true
0146 },
0147 PlasmaCore.Action {
0148 id: separator2
0149 isSeparator: true
0150 }
0151 ]
0152
0153 Instantiator {
0154 model: plasmoid.configuration.predefinedTimers
0155 delegate: PlasmaCore.Action {
0156 text: TimerPlasmoid.Timer.secondsToString(modelData, "hh:mm:ss")
0157 onTriggered: {
0158 seconds = modelData
0159 startTimer();
0160 }
0161 }
0162 onObjectAdded: (index, object) => {
0163 Plasmoid.contextualActions.splice(Plasmoid.contextualActions.indexOf(separator2), 0, object)
0164 }
0165 onObjectRemoved: (index, object) => {
0166 Plasmoid.contextualActions.splice(Plasmoid.contextualActions.indexOf(object), 1)
0167 }
0168 }
0169
0170 function startTimer() {
0171 running = true;
0172 suspended = false;
0173 opacityNeedsReset();
0174 saveTimer();
0175 }
0176
0177 function stopTimer() {
0178 running = false;
0179 suspended = true;
0180 saveTimer();
0181 }
0182
0183 function resetTimer() {
0184 running = false;
0185 suspended = false;
0186 seconds = 0;
0187 opacityNeedsReset();
0188 saveTimer();
0189 }
0190
0191 signal opacityNeedsReset()
0192 signal digitHasChanged()
0193
0194 function saveTimer() {
0195 plasmoid.configuration.running = running ? seconds : 0;
0196 plasmoid.configuration.savedAt = new Date();
0197 plasmoid.configuration.seconds = seconds
0198 }
0199
0200 function restoreToSeconds(cRunning, cSavedAt, cSeconds) {
0201 if (cRunning > 0) {
0202 var elapsedSeconds = cRunning - ~~(~~(((new Date()).getTime() - cSavedAt.getTime()) / 1000));
0203 if (elapsedSeconds >= 0) {
0204 return elapsedSeconds;
0205 } else {
0206 return 0;
0207 }
0208 } else {
0209 return cSeconds;
0210 }
0211 }
0212 }
0213