diff --git a/SpeedClimbingReactionTrainer.pro b/SpeedClimbingReactionTrainer.pro index e89aeed..e2cf3c6 100644 --- a/SpeedClimbingReactionTrainer.pro +++ b/SpeedClimbingReactionTrainer.pro @@ -6,6 +6,12 @@ android { CONFIG += c++11 +TARGET = ScStwRt +VERSION = 1.2.0 + +# Add version to define +DEFINES += APP_VERSION=\"\\\"$${VERSION}\\\"\" + # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Refer to the documentation for the @@ -41,7 +47,33 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target android { - ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources + ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android + DISTFILES += \ + android/AndroidManifest.xml \ + android/build.gradle \ + android/gradle.properties \ + android/gradle/wrapper/gradle-wrapper.jar \ + android/gradle/wrapper/gradle-wrapper.properties \ + android/gradlew \ + android/gradlew.bat \ + android/res/values/libs.xml + + defineReplace(droidVersionCode) { + segments = $$split(1, ".") + for (segment, segments): vCode = "$$first(vCode)$$format_number($$segment, width=3 zeropad)" + + contains(ANDROID_TARGET_ARCH, arm64-v8a): \ + suffix = 1 + else:contains(ANDROID_TARGET_ARCH, armeabi-v7a): \ + suffix = 0 + # add more cases as needed + + return($$first(vCode)$$first(suffix)) + } + + ANDROID_VERSION_NAME = $$VERSION + ANDROID_VERSION_CODE = $$droidVersionCode($$ANDROID_VERSION_NAME) + ANDROID_TARGET_SDK_VERSION = 30 } ios { @@ -51,6 +83,5 @@ ios { QMAKE_INFO_PLIST = ios/Info.plist } -DISTFILES += \ - android-sources/AndroidManifest.xml - +# this has to be the last line! +ANDROID_ABIS = armeabi-v7a arm64-v8a diff --git a/android-sources/res/drawable-hdpi/icon.png b/android-sources/res/drawable-hdpi/icon.png deleted file mode 100644 index c98ba7e..0000000 Binary files a/android-sources/res/drawable-hdpi/icon.png and /dev/null differ diff --git a/android-sources/res/drawable-ldpi/icon.png b/android-sources/res/drawable-ldpi/icon.png deleted file mode 100644 index c98ba7e..0000000 Binary files a/android-sources/res/drawable-ldpi/icon.png and /dev/null differ diff --git a/android-sources/res/drawable-mdpi/icon.png b/android-sources/res/drawable-mdpi/icon.png deleted file mode 100644 index c98ba7e..0000000 Binary files a/android-sources/res/drawable-mdpi/icon.png and /dev/null differ diff --git a/android-sources/AndroidManifest.xml b/android/AndroidManifest.xml similarity index 69% rename from android-sources/AndroidManifest.xml rename to android/AndroidManifest.xml index d4da551..4d56fe3 100644 --- a/android-sources/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -1,44 +1,54 @@ - - - + + + + + + + + + + - - - + - - - + - + - - - + + + + - + + + - - - - + - - - - + + - - - - - - - - - - - - - - - - - diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..443a800 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,77 @@ +buildscript { + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.6.0' + } +} + +repositories { + google() + jcenter() +} + +apply plugin: 'com.android.application' + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) +} + +android { + /******************************************************* + * The following variables: + * - androidBuildToolsVersion, + * - androidCompileSdkVersion + * - qt5AndroidDir - holds the path to qt android files + * needed to build any Qt application + * on Android. + * + * are defined in gradle.properties file. This file is + * updated by QtCreator and androiddeployqt tools. + * Changing them manually might break the compilation! + *******************************************************/ + + compileSdkVersion androidCompileSdkVersion.toInteger() + + buildToolsVersion '28.0.3' + + sourceSets { + main { + manifest.srcFile 'AndroidManifest.xml' + java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java'] + aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl'] + res.srcDirs = [qt5AndroidDir + '/res', 'res'] + resources.srcDirs = ['resources'] + renderscript.srcDirs = ['src'] + assets.srcDirs = ['assets'] + jniLibs.srcDirs = ['libs'] + } + } + + tasks.withType(JavaCompile) { + options.incremental = true + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + lintOptions { + abortOnError false + } + + // Do not compress Qt binary resources file + aaptOptions { + noCompress 'rcc' + } + + defaultConfig { + resConfig "en" + minSdkVersion = qtMinSdkVersion + targetSdkVersion = qtTargetSdkVersion + } +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..fded106 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,11 @@ +# Project-wide Gradle settings. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m + +# Gradle caching allows reusing the build artifacts from a previous +# build with the same inputs. However, over time, the cache size will +# grow. Uncomment the following line to enable it. +#org.gradle.caching=true diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..f6b961f Binary files /dev/null and b/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..5028f28 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/android/gradlew b/android/gradlew new file mode 100755 index 0000000..cccdd3d --- /dev/null +++ b/android/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/res/drawable-hdpi/icon.png b/android/res/drawable-hdpi/icon.png new file mode 100644 index 0000000..82522c7 Binary files /dev/null and b/android/res/drawable-hdpi/icon.png differ diff --git a/android/res/drawable-ldpi/icon.png b/android/res/drawable-ldpi/icon.png new file mode 100644 index 0000000..3d7076b Binary files /dev/null and b/android/res/drawable-ldpi/icon.png differ diff --git a/android/res/drawable-mdpi/icon.png b/android/res/drawable-mdpi/icon.png new file mode 100644 index 0000000..d8e1487 Binary files /dev/null and b/android/res/drawable-mdpi/icon.png differ diff --git a/android/res/drawable-xhdpi/icon.png b/android/res/drawable-xhdpi/icon.png new file mode 100644 index 0000000..b7374c5 Binary files /dev/null and b/android/res/drawable-xhdpi/icon.png differ diff --git a/android/res/drawable-xxhdpi/icon.png b/android/res/drawable-xxhdpi/icon.png new file mode 100644 index 0000000..bc18d46 Binary files /dev/null and b/android/res/drawable-xxhdpi/icon.png differ diff --git a/android/res/drawable-xxxhdpi/icon.png b/android/res/drawable-xxxhdpi/icon.png new file mode 100644 index 0000000..85bbfcd Binary files /dev/null and b/android/res/drawable-xxxhdpi/icon.png differ diff --git a/android/res/values/libs.xml b/android/res/values/libs.xml new file mode 100644 index 0000000..6b1a4a2 --- /dev/null +++ b/android/res/values/libs.xml @@ -0,0 +1,22 @@ + + + + https://download.qt.io/ministro/android/qt5/qt-5.14 + + + + + + + + + + + + + + + + + diff --git a/qml/Components/DisclaimerDialog.qml b/qml/Components/DisclaimerDialog.qml new file mode 100644 index 0000000..f658dde --- /dev/null +++ b/qml/Components/DisclaimerDialog.qml @@ -0,0 +1,59 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Controls.Material 2.15 + +Dialog { + id: control + + title: "Disclaimer" + property string content: "" + + parent: Overlay.overlay + + x: (parent.width - width) * 0.5 + y: (parent.height - height) * 0.5 + + implicitWidth: parent.width * 0.9 + + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + //width: app.width * 0.8 + //height: implicitHeight + + modal: true + + standardButtons: Dialog.Close + + header: Label { + text: control.title + visible: control.title + elide: Label.ElideRight + padding: 24 + bottomPadding: 0 + font.bold: true + font.pixelSize: 16 + background: Rectangle { + radius: 2 + color: control.Material.dialogColor + clip: true + } + onLinkActivated: { + Qt.openUrlExternally(link) + } + } + + contentItem: Label { + wrapMode: Text.Wrap + + width: control.parent * 0.8 + + text: control.content + + onLinkActivated: { + Qt.openUrlExternally(link) + } + } +} diff --git a/qml/main.qml b/qml/main.qml index ee96ede..0f4af0c 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -19,8 +19,9 @@ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 2.0 -import QtMultimedia 5.4 +import QtMultimedia 5.15 import QtGraphicalEffects 1.0 +import QtQuick.Controls.Material 2.15 import com.itsblue.SpeedClimbingStartTrainer 2.0 @@ -57,48 +58,36 @@ Window { Item { id: soundsItm - MediaPlayer { + SoundEffect { id: readySe - property bool playing: readySe.status === 6 - source: "qrc:/sounds/ready_1.wav" - muted: app.state === "WAITING" + onPlayingChanged: { + if(playing) return - onStopped: { if(app.state === "RUNNING"){ startSe.play() } } } - MediaPlayer { + SoundEffect { id: startSe - property bool playing: startSe.status === 6 - source: "qrc:/sounds/IFSC_STARTSIGNAL_SINE.wav" - muted: app.state === "WAITING" + onPlayingChanged: { + if(!playing) return - onStopped: { - app.startTime = new Date().getTime() - console.log("offset: ", new Date().getTime() - app.startTime) - - if(app.state === "WAITING"){ - app.reactionTime = app.stopTime - app.startTime - app.state = "STOPPED" - } - } + app.startTime = new Date().getTime() + } } - MediaPlayer { + SoundEffect { id: failedSe - property bool playing: failedSe.status === 6 - source: "qrc:/sounds/IFSC frequenzy conform false start sound.wav" } @@ -187,18 +176,22 @@ Window { } } - Switch { - anchors { - top: topLa.bottom - horizontalCenter: parent.horizontalCenter - horizontalCenterOffset: width * 0.1 - } + Row { + anchors { + top: topLa.bottom + horizontalCenter: parent.horizontalCenter + horizontalCenterOffset: width * 0.1 + } + + opacity: app.state === "IDLE" ? 1:0 + + Switch { + + anchors.verticalCenter: parent.verticalCenter checked: settings.read("theme") === "1" - scale: 0.8 - - opacity: app.state === "IDLE" ? 1:0 + scale: 0.7 onCheckedChanged: { if(checked){ @@ -246,12 +239,33 @@ Window { } } - Behavior on opacity { - NumberAnimation { - duration: 200 - } + } + + ToolButton { + anchors.verticalCenter: parent.verticalCenter + bottomPadding: 0 + topPadding: 0 + + text: "\uf05a" + + scale: 1.2 + + + font.family: fontAwesome.name + font.pixelSize: height * 0.4 + + Material.theme: theme.style.name === "dark" ? Material.Dark:Material.Light + onClicked: infoDisclaimerDialog.open() + } + + Behavior on opacity { + NumberAnimation { + duration: 200 } + } } + + } FancyButton { @@ -306,26 +320,33 @@ Window { return } - if(startSe.playing){ - app.state = "WAITING" + if(readySe.playing){ + app.state = "IDLE" + return + } + app.state = "STOPPED" + startSe.stop() + + app.reactionTime = app.stopTime - app.startTime - 3000 + + if(app.reactionTime < 100) { failedSe.play() } - else if(readySe.playing){ - app.state = "IDLE" - } - else { - app.state = "STOPPED" - - app.reactionTime = app.stopTime - app.startTime - - app.refreshHighscore() - } + app.refreshHighscore() } function refreshHighscore(){ - if(app.reactionTime > 0 && ( app.reactionTime < parseInt(settings.read("highscore")) || settings.read("highscore") === "-1" )){ + const currentHighscore = parseInt(settings.read("highscore")) + + // migrate old Highscores + if(currentHighscore < 100) { + settings.write("highscore", currentHighscore+100) + app.highscore = currentHighscore + 100 + } + + if(app.reactionTime > 100 && ( app.reactionTime < currentHighscore || settings.read("highscore") === "-1" )){ settings.write("highscore", app.reactionTime) app.highscore = app.reactionTime } @@ -333,6 +354,7 @@ Window { function reset() { app.state = "IDLE" + app.startTime = 0 } states: [ @@ -368,23 +390,26 @@ Window { target: highscoreLa text: "highscore: " + app.highscore } - }, - - State { - name: "WAITING" - PropertyChanges { - target: topLa - text: "please wait..." - } - - PropertyChanges { - target: startBt - enabled: false - text: "waiting..." - } } ] + FontLoader { + id: fontAwesome + source: "qrc:/fonts/fa5solid.woff" + + Component.onCompleted: { + console.log("Font name: " + fontAwesome.name) + } + } + + DisclaimerDialog { + id: infoDisclaimerDialog + + Material.theme: theme.style.name === "dark" ? Material.Dark:Material.Light + title: "Speedclimbing reaction trainer v" + APP_VERSION + "
By Itsblue Development, " + qsTr("privacy policy") + "" + content: qsTr("This app was built using the Qt Framework licensed under the GNU lgplV3 license.

This app is open source and licensed under the GNU agplV3 license, the source code can be found here.") + } + } } diff --git a/qml/qml.qrc b/qml/qml.qrc index 0e60d44..372bf0e 100644 --- a/qml/qml.qrc +++ b/qml/qml.qrc @@ -3,5 +3,6 @@ main.qml Components/FadeAnimation.qml Components/FancyButton.qml + Components/DisclaimerDialog.qml diff --git a/shared/fonts/fa5solid.woff b/shared/fonts/fa5solid.woff new file mode 100644 index 0000000..105028f Binary files /dev/null and b/shared/fonts/fa5solid.woff differ diff --git a/shared/graphics/SpeedClimbingStartTrainer.xcf b/shared/graphics/SpeedClimbingStartTrainer.xcf deleted file mode 100644 index f3f3f65..0000000 Binary files a/shared/graphics/SpeedClimbingStartTrainer.xcf and /dev/null differ diff --git a/shared/graphics/SpeedClimbingStartTrainerNoOutline.png b/shared/graphics/SpeedClimbingStartTrainerNoOutline.png deleted file mode 100644 index 2edf8ff..0000000 Binary files a/shared/graphics/SpeedClimbingStartTrainerNoOutline.png and /dev/null differ diff --git a/shared/graphics/favicon.png b/shared/graphics/favicon.png index c98ba7e..d91d38b 100644 Binary files a/shared/graphics/favicon.png and b/shared/graphics/favicon.png differ diff --git a/shared/graphics/faviconForGooglePlay.png b/shared/graphics/faviconForGooglePlay.png deleted file mode 100644 index 2d44424..0000000 Binary files a/shared/graphics/faviconForGooglePlay.png and /dev/null differ diff --git a/shared/graphics/faviconNoOutline.png b/shared/graphics/faviconNoOutline.png new file mode 100644 index 0000000..fb59dfe Binary files /dev/null and b/shared/graphics/faviconNoOutline.png differ diff --git a/shared/shared.qrc b/shared/shared.qrc index f780bf6..5c136f4 100644 --- a/shared/shared.qrc +++ b/shared/shared.qrc @@ -3,5 +3,6 @@ sounds/ready_1.wav sounds/IFSC_STARTSIGNAL_SINE.wav sounds/IFSC frequenzy conform false start sound.wav + fonts/fa5solid.woff diff --git a/sources/apptheme.cpp b/sources/apptheme.cpp index 6c713c1..dbc1e36 100644 --- a/sources/apptheme.cpp +++ b/sources/apptheme.cpp @@ -22,6 +22,7 @@ AppTheme::AppTheme(QObject *parent) : QObject(parent) { QVariantMap tmpLightTheme = { + {"name", "light"}, {"backgroundColor", "white"}, {"buttonColor", "white"}, @@ -58,6 +59,7 @@ AppTheme::AppTheme(QObject *parent) : QObject(parent) this->themes.append(tmpLightTheme); QVariantMap tmpDarkTheme = { + {"name", "dark"}, {"backgroundColor", "#2d3037"}, {"buttonColor", "#202227"}, diff --git a/sources/main.cpp b/sources/main.cpp index 1f40642..236af25 100644 --- a/sources/main.cpp +++ b/sources/main.cpp @@ -18,6 +18,8 @@ #include #include +#include +#include #include "headers/apptheme.h" #include "headers/appsettings.h" @@ -54,7 +56,10 @@ int main(int argc, char *argv[]) qmlRegisterType("com.itsblue.SpeedClimbingStartTrainer", 2, 0, "AppSettings"); + QQuickStyle::setStyle("Material"); + QQmlApplicationEngine engine; + engine.rootContext()->setContextProperty("APP_VERSION", APP_VERSION); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1;