aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt8
-rw-r--r--src/main.cpp23
-rw-r--r--src/main.qml134
-rw-r--r--src/resources.qrc5
4 files changed, 170 insertions, 0 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..446b4c9
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,8 @@
+add_library(asteroid-stopwatch main.cpp resources.qrc)
+set_target_properties(asteroid-stopwatch PROPERTIES PREFIX "" SUFFIX "")
+
+target_link_libraries(asteroid-stopwatch PUBLIC
+ AsteroidApp)
+
+install(TARGETS asteroid-stopwatch
+ DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..a44544c
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2017 - Florent Revest <revestflo@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <asteroidapp.h>
+
+int main(int argc, char *argv[])
+{
+ return AsteroidApp::main(argc, argv);
+}
diff --git a/src/main.qml b/src/main.qml
new file mode 100644
index 0000000..a0b6e4a
--- /dev/null
+++ b/src/main.qml
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2016 Florent Revest <revestflo@gmail.com>
+ * 2015 Tim Süberkrüb <tim.sueberkrueb@web.de>
+ * Part of this code is based on "Stopwatch" (https://github.com/baleboy/stopwatch)
+ * Copyright (C) 2011 Francesco Balestrieri
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.9
+import org.asteroid.controls 1.0
+import Nemo.Configuration 1.0
+
+Application {
+ id: app
+
+ centerColor: "#b01c7e"
+ outerColor: "#420a2f"
+
+ ConfigurationValue {
+ id: previousTime
+ key: "/stopwatch/previousTime"
+ defaultValue: -1
+ }
+ ConfigurationValue {
+ id: elapsed
+ key: "/stopwatch/elapsed"
+ defaultValue: -1
+ }
+ ConfigurationValue {
+ id: running
+ key: "/stopwatch/running"
+ defaultValue: false
+ }
+
+ function zeroPad(n) {
+ return (n < 10 ? "0" : "") + n
+ }
+
+ function toTimeString(usec) {
+ var mod = Math.abs(usec)
+ if (mod >= 3600000) { // Hours + Minutes + Seconds
+ return '<font color=\"#FFFFFF\" size="3">' + Math.floor(mod / 3600000) + '<sup>h</sup>' + '<br></font>' +
+ '<font color=\"#CCCCF3\" size="1">' + zeroPad(Math.floor((mod % 3600000) / 60000)) + '<sup>m</sup>' +
+ zeroPad(Math.floor((mod % 60000) / 1000)) + '<sup>s</sup></font>'
+
+ } else if (mod >= 60000) { // Minutes + Seconds + Tenth
+ return '<font color="#FFFFFF" size="3">' + zeroPad(Math.floor((mod % 3600000) / 60000)) + '<sup>m</sup>' + '<br></font>' +
+ '<font color="#CCCCF3" size="1">' + zeroPad(Math.floor((mod % 60000) / 1000)) + '<sup>s</sup>' +
+ Math.floor((mod % 1000) / 100) + '</font>'
+ } else { // Seconds + Tenth
+ return '<font color="#FFFFFF" size="3">' + zeroPad(Math.floor((mod % 60000) / 1000)) + '<sup>s</sup>' + '</font>' +
+ '<font color="#CCCCF3" size="1">' + Math.floor((mod % 1000) / 100) + '</font>'
+ }
+ }
+
+ Item {
+ id: mainPage
+ anchors.fill: parent
+
+ state: running.value ? "running" : elapsed.value == -1 ? "zero" : "paused"
+ states: [
+ State { name: "zero" },
+ State { name: "running" },
+ State { name: "paused" }
+ ]
+
+ Label {
+ id: elapsedLabel
+ textFormat: Text.RichText
+ anchors.centerIn: parent
+ text: toTimeString(elapsed.value)
+ font.pixelSize: Dims.h(25)
+ horizontalAlignment: Text.AlignHCenter
+
+ SequentialAnimation {
+ running: mainPage.state == "paused"
+ loops: Animation.Infinite
+ NumberAnimation { target: elapsedLabel; property: "opacity"; from: 1; to: 0; duration: 500 }
+ NumberAnimation { target: elapsedLabel; property: "opacity"; from: 0; to: 1; duration: 500 }
+ onStopped: elapsedLabel.opacity = 1
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ switch(mainPage.state) {
+ case "zero":
+ case "paused":
+ var curTime = new Date
+ previousTime.value = curTime.getTime()
+ running.value = true
+ break;
+ case "running":
+ running.value = false
+ break;
+ }
+ }
+ }
+
+ IconButton {
+ id: resetButton
+ iconName: "ios-refresh"
+ visible: mainPage.state === "paused"
+ onClicked: elapsed.value = -1
+ }
+ }
+
+ Timer {
+ interval: 100
+ repeat: true
+ running: mainPage.state == "running"
+ triggeredOnStart: true
+
+ onTriggered: {
+ var currentTime = new Date
+ var delta = (currentTime.getTime() - previousTime.value)
+ previousTime.value = currentTime.getTime()
+ elapsed.value += delta
+ }
+ }
+}
diff --git a/src/resources.qrc b/src/resources.qrc
new file mode 100644
index 0000000..5f6483a
--- /dev/null
+++ b/src/resources.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/">
+ <file>main.qml</file>
+ </qresource>
+</RCC>