continued working on new layout

This commit is contained in:
Dorian Zedler 2020-10-01 14:19:47 +02:00
parent c942216989
commit fbd13c951e
Signed by: dorian
GPG Key ID: D3B255CB8BC7CD37
9 changed files with 476 additions and 400 deletions

View File

@ -16,11 +16,12 @@
*/
package de.itsblue.scstw;
public class MainActivity extends org.qtproject.qt5.android.bindings.QtActivity {
@Override
public void onCreate(android.os.Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.getWindow().addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
//this.setVolumeControlStream(android.view.AudioManager.STREAM_MUSIC);
this.setVolumeControlStream(android.media.AudioManager.STREAM_MUSIC);
}
}

View File

@ -1,112 +1,99 @@
import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
import "../components"
import "../components/layout"
import de.itsblue.ScStw 2.0
import de.itsblue.ScStw.Styling 2.0
import de.itsblue.ScStw.Styling.Components 1.0
ToolBar {
id: control
/*
Grid {
id: loweMenuGrd
property bool connectedToBase: speedBackend.scStwClient.state === ScStwClient.CONNECTED
property int spacingMultiplier: 200 * (getActiveChildren() - 1)
property int activeChildren: getActiveChildren()
GridLayout {
id: bottomContentLayout
function getActiveChildren() {
var childrenCount = 0
for (var i = 0; i < children.length; i++)
{
if(children[i].enabled){
childrenCount ++
anchors {
left: parent.left
leftMargin: app.landscape() ? 0:parent.width * 0.1
right: parent.right
rightMargin: app.landscape() ? 0:parent.width * 0.1
top: parent.top
topMargin: app.landscape() ? parent.height * 0.1:0
bottom: parent.bottom
bottomMargin: app.landscape() ? parent.height * 0.1:0
}
columns: app.landscape() ? 1:2
rows: app.landscape() ? 2:1
FancyButton {
id: settingsButt
Layout.alignment: Layout.Center
Layout.preferredHeight: app.landscape() ? width:control.height * 0.8
Layout.preferredWidth: app.landscape() ? control.width * 0.8:height
onClicked: {
settingsDialog.open()
}
image: appTheme.theme.images.settIcon
backgroundColor: parent.pressed ? appTheme.theme.colors.buttonPressed:appTheme.theme.colors.button
}
FancyButton {
id: profilesButt
property double size
state: control.connectedToBase ? "visible":"hidden"
visible: size > 0
Layout.alignment: Layout.Center
Layout.preferredWidth: app.landscape() ? control.width * size:control.height * size
Layout.preferredHeight: width
image: appTheme.theme.images.profilesIcon
backgroundColor: parent.pressed ? appTheme.theme.colors.buttonPressed:appTheme.theme.colors.button
onClicked: {
profilesDialog.open()
}
states: [
State {
name: "hidden"
PropertyChanges {
target: profilesButt
size: 0
}
},
State {
name: "visible"
PropertyChanges {
target: profilesButt
size: 0.8
}
}
]
return childrenCount
}
anchors.centerIn: parent
height: childrenRect.height
width: childrenRect.width
rows: app.landscape() ? activeChildren:1
columns: app.landscape() ? 1:activeChildren
spacing: 0// app.landscape() ? parent.height * spacingMultiplier * 0.001:parent.width * spacingMultiplier * 0.001
Behavior on spacingMultiplier {
NumberAnimation {
duration: 200
}
}
FancyButton {
id: settingsButt
height: app.landscape() ? menu_container.width * 0.7:menu_container.height * 0.7
width: height
onClicked: {
settingsDialog.open()
}
image: appTheme.theme.images.settIcon
backgroundColor: parent.pressed ? appTheme.theme.colors.buttonPressed:appTheme.theme.colors.button
}
Item {
height: profilesButt.height
width: profilesButt.height
}
FancyButton {
id: profilesButt
enabled: height > 0
state: speedBackend.scStwClient.state === ScStwClient.CONNECTED ? "visible":"hidden"
width: height
onClicked: {
profilesDialog.open()
}
image: appTheme.theme.images.profilesIcon
backgroundColor: parent.pressed ? appTheme.theme.colors.buttonPressed:appTheme.theme.colors.button
states: [
State {
name: "hidden"
PropertyChanges {
target: profilesButt
height: 0
}
},
State {
name: "visible"
PropertyChanges {
target: profilesButt
height: app.landscape() ? menu_container.width * 0.7:menu_container.height * 0.7
}
transitions: [
Transition {
NumberAnimation {
duration: 200
properties: "size"
}
]
transitions: [
Transition {
NumberAnimation {
properties: "height"
}
}
]
}
}*/
}
]
}
}
}

View File

@ -20,7 +20,12 @@ Item {
GridLayout {
id: centerLayout
anchors.centerIn: parent
//anchors.centerIn: parent
anchors {
right: parent.right
bottom: parent.bottom
}
width: parent.width
height: parent.height
@ -29,24 +34,39 @@ Item {
rows: app.landscape() ? 1:2
Item {
Rectangle {
anchors.fill: parent
color: "green"
}
}
FancyButton {
MainActionButton {
id: mainActionButton
property ScStwSetting setting: speedBackend.settings.getSetting(ScStwSettings.CompetitionModeSetting, ScStwSettings.KeyLevel)
property double size
startProgress: speedBackend.race.nextStartActionDetails[ScStwRace.NextStartActionDelayProgress]
/*Connections {
target: mainActionButton.setting
onValueChanged: {
console.log("comp mode is " + mainActionButton.setting.value)
}
}*/
Layout.alignment: Layout.Center
Layout.preferredHeight: app.landscape() ? width:Math.min(control.width * size, control.height * size)
Layout.preferredWidth: app.landscape() ? Math.min(control.width * size, control.height * size):height
Layout.preferredHeight: app.landscape() ? width:Math.min(centerLayout.width * size, centerLayout.height * size)
Layout.preferredWidth: app.landscape() ? Math.min(centerLayout.width * size, centerLayout.height * size):height
onClicked: {
if(progressControlActivated && progress < 1.0)
return
var ret;
switch(speedBackend.race.state) {
@ -62,29 +82,24 @@ Item {
ret = speedBackend.race.stop()
break;
case ScStwRace.STOPPED:
case ScStwRace.INCIDENT:
ret = speedBackend.race.reset()
break;
}
if(ret !== 200)
console.log("Error executing main button action: " + ret)
progress = 0
}
/*Behavior on Layout.preferredWidth {
enabled: !app.landscape()
Behavior on size {
NumberAnimation {
duration: 3000
duration: 800
easing.type: Easing.InOutQuart
}
}
Behavior on Layout.preferredHeight {
enabled: app.landscape()
NumberAnimation {
duration: 3000
}
}*/
}
}
states: [
@ -92,17 +107,15 @@ Item {
name: ScStwRace.IDLE
PropertyChanges {
target: mainActionButton
size: 0.8
Layout.preferredHeight: app.landscape() ? control.height * 0.8 : Math.min(control.width * 0.8, control.height * 0.8)
Layout.preferredWidth: app.landscape() ? Math.min(control.width * 0.8, control.height * 0.8) : control.width * 0.8
size: 0.9
text: "start"
}
PropertyChanges {
target: centerLayout
anchors.verticalCenterOffset: 0
anchors.horizontalCenterOffset: 0
height: app.landscape() ? control.height : Math.max(control.height, app.height * 0.4)
width: app.landscape() ? Math.max(control.width, app.width * 0.4) : control.width
}
},
@ -110,7 +123,7 @@ Item {
name: ScStwRace.PREPAIRING
PropertyChanges {
target: mainActionButton
size: 0.8
size: 0.9
text: "cancel"
}
},
@ -119,7 +132,7 @@ Item {
name: ScStwRace.WAITING
PropertyChanges {
target: mainActionButton
size: 0.8
size: 0.9
text: "cancel"
}
},
@ -128,20 +141,28 @@ Item {
name: ScStwRace.STARTING
PropertyChanges {
target: mainActionButton
size: 0.8
size: 0.9
text: "cancel"
}
},
State {
name: ScStwRace.RUNNING
PropertyChanges {
target: mainActionButton
size: 0.9
text: "stop"
progressControlActivated: speedBackend.scStwClient.state === ScStwClient.CONNECTED // TODO && mainActionButton.setting.value === true
}
},
State {
name: ScStwRace.STOPPED
PropertyChanges {
target: mainActionButton
size: 0.8
Layout.preferredHeight: app.landscape() ? control.height * 0.8 : Math.min(control.width * 0.8, control.height * 0.8)
Layout.preferredWidth: app.landscape() ? Math.min(control.width * 0.8, control.height * 0.8) : control.width * 0.8
size: 0.5
text: "reset"
}
@ -149,129 +170,34 @@ Item {
PropertyChanges {
target: centerLayout
//anchors.verticalCenterOffset: app.landscape() ? 0:-centerLayout.height * 0.5
//anchors.horizontalCenterOffset: app.landscape() ? -centerLayout.width * 0.5:0
height: app.landscape() ? control.height : Math.max(control.height, app.height * 0.4)
width: app.landscape() ? Math.max(control.width, app.width * 0.4) : control.width
}
},
State {
name: ScStwRace.INCIDENT
PropertyChanges {
target: mainActionButton
size: 0.5
text: "reset"
}
PropertyChanges {
target: centerLayout
height: app.landscape() ? control.height : Math.max(control.height, app.height * 0.4)
width: app.landscape() ? Math.max(control.width, app.width * 0.4) : control.width
}
}
]
/*
DelayButton {
id : startButt
text: "start"
property int size: app.landscape() ? parent.width * 0.5:parent.height * 0.5
property color backgroundColor: appTheme.theme.colors.button
property bool progressControlActivated: speedBackend.scStwClient.state === ScStwClient.CONNECTED && app.state === "RUNNING"
delay: progressControlActivated ? 2000:0
anchors {
bottom: parent.bottom
bottomMargin: app.height * 0.5 - height * 0.5
right: parent.right
rightMargin: app.width * 0.5 - width * 0.5
}
height: app.landscape() ? Math.min(size, parent.height * 0.9) : Math.min(size, parent.width * 0.9)
width: height
Text {
id: startButt_text
text: startButt.text
anchors.centerIn: parent
font.pixelSize: parent.height * 0.16
font.family: "Helvetica"
color: enabled ? appTheme.theme.colors.text:appTheme.theme.colors.disabledText
}
Behavior on text {
//animate a text change
enabled: true
FadeAnimation {
target: startButt_text
}
}
onClicked: {
if(startButt.progressControlActivated && progress < 1.0)
return
startButt.progress = 0
switch(app.state) {
case "IDLE":
app.start()
break
case "RUNNING":
app.stop()
break
case "STOPPED":
case "INCIDENT":
app.reset()
break
}
}
contentItem: Text {
}
background: Item {
RectangularGlow {
glowRadius: 0.001
spread: 0.2
color: "black"
visible: true
cornerRadius: startButtBackground.radius
anchors.fill: startButtBackground
scale: 0.75
opacity: Math.pow( startButt.opacity, 100 )
}
Rectangle {
id: startButtBackground
implicitWidth: 100
implicitHeight: 100
color: startButt.down ? Qt.darker(startButt.backgroundColor, 1.2) : startButt.backgroundColor
radius: size / 2
readonly property real size: Math.min(startButt.width, startButt.height)
width: size
height: size
anchors.fill: parent
Behavior on color {
ColorAnimation {
duration: 200
}
}
Canvas {
id: canvas
anchors.fill: parent
visible: startButt.progressControlActivated
Connections {
target: startButt
onProgressChanged: canvas.requestPaint()
}
onPaint: {
var ctx = getContext("2d")
ctx.clearRect(0, 0, width, height)
ctx.strokeStyle = "grey"
ctx.lineWidth = parent.width * 0.02
ctx.beginPath()
var startAngle = Math.PI * 0.5
var endAngle = startAngle + startButt.progress * Math.PI * 2
ctx.arc(width / 2, height / 2, width / 2 - ctx.lineWidth / 2 - 2, startAngle, endAngle)
ctx.stroke()
}
}
}
}
}
ProgressCircle {
id: prog

View File

@ -1,135 +1,86 @@
import QtQuick 2.0
import QtQuick 2.9
import QtQuick.Controls 2.0
import "../components"
import "../components/layout"
import de.itsblue.ScStw 2.0
import de.itsblue.ScStw.Styling 2.0
import de.itsblue.ScStw.Styling.Components 1.0
ToolBar {
id: control
property string statusText
Loader {
id: topContentLoader
/*states: [
State {
name: ScStwRace.IDLE
PropertyChanges {
target: mainActionButton
size: 0.8
text: "start"
}
anchors.fill: parent
PropertyChanges {
target: centerLayout
anchors.verticalCenterOffset: 0
anchors.horizontalCenterOffset: 0
}
},
State {
name: ScStwRace.PREPAIRING
PropertyChanges {
target: mainActionButton
size: 0.8
text: "cancel"
}
},
State {
name: ScStwRace.WAITING
PropertyChanges {
target: mainActionButton
size: 0.8
text: "cancel"
}
},
State {
name: ScStwRace.STARTING
PropertyChanges {
target: mainActionButton
size: 0.8
text: "cancel"
}
},
State {
name: ScStwRace.STOPPED
PropertyChanges {
target: mainActionButton
size: 0.75
text: "reset"
}
PropertyChanges {
target: centerLayout
anchors.verticalCenterOffset: app.landscape() ? 0:-centerLayout.height * 0.5
anchors.horizontalCenterOffset: app.landscape() ? -centerLayout.width * 0.5:0
Behavior on state {
FadeAnimation {
target: topContentLoader
fadeDuration: 300
}
}
]
/*
Text {
id: raceStateLabel
Component {
id: raceStatusLabelComponent
Text {
id: raceStatusLabel
anchors.centerIn: parent
padding: width * 0.06
opacity: ( speedBackend.race.state < ScStwRace.RUNNING ) ? 1:0
text: control.statusText
width: parent.width * 0.7
height: parent.height * 0.7
color: appTheme.theme.colors.text
text: ""
fontSizeMode: Text.Fit
color: appTheme.theme.colors.text
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
fontSizeMode: Text.Fit
font.pixelSize: height
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
minimumPixelSize: 1
font.pixelSize: app.landscape() ? app.width * 0.15 : app.height * 0.4
minimumPixelSize: 1
Behavior on text {
FadeAnimation{
target: topLa
fadeDuration: 100
Behavior on text {
FadeAnimation {
target: raceStatusLabel
fadeDuration: 100
}
}
}
}
TimerColumn {
id: timerColumn
Component {
id: timerColumnComponent
TimerColumn {
id: timerColumn
anchors.fill: parent
anchors.topMargin: app.landscape() ? 0:parent.height * 0.1
anchors.bottomMargin: app.landscape() ? 0:parent.height * 0.1
anchors.fill: parent
anchors.topMargin: app.landscape() ? 0:parent.height * 0.1
anchors.bottomMargin: app.landscape() ? 0:parent.height * 0.1
timers: speedBackend.race.timers
colors: appTheme.theme.colors
fontName: appTheme.theme.fonts.timers
showTimerLetter: speedBackend.race.state === ScStwRace.STOPPED
timers: speedBackend.race.timers
colors: appTheme.theme.colors
fontName: appTheme.theme.fonts.timers
showTimerLetter: true
// make text smaller for much better performance
textScale: app.landscape() ? 0.7 : 0.5
// make text smaller for much better performance
textScale: app.landscape() ? 0.7 : 0.5
opacity: ( speedBackend.race.state < ScStwRace.RUNNING ) ? 0:1
Behavior on opacity {
NumberAnimation {
duration: 200
Behavior on opacity {
NumberAnimation {
duration: 200
}
}
}
}
}
Item {
id: connectionIconContainer
@ -139,8 +90,8 @@ ToolBar {
left: parent.left
right: parent.right
bottom: parent.bottom
bottomMargin: app.landscape() ? 0:parent.height * 0.8
rightMargin: app.landscape() ? parent.width * 0.8:0
bottomMargin: app.landscape() ? parent.height * 0.8:0
rightMargin: app.landscape() ? 0:parent.width * 0.8
}
opacity: speedBackend.race.state === ScStwRace.IDLE ? 1:0
@ -164,14 +115,15 @@ ToolBar {
status: clientStateToString(speedBackend.scStwClient.state)
source: appTheme.theme.images.baseStationIcon
anchors {
top: parent.top
topMargin: 10
left: parent.left
leftMargin: 10
}
scale: 1.3
height: !app.landscape()? parent.height*0.3:parent.width*0.3
height: !app.landscape()? parent.height*0.4:parent.width*0.4
}
Row {
@ -199,18 +151,24 @@ ToolBar {
radius: width * 0.1
color: appTheme.theme.colors.success // TODO
color: getStatusColor(speedBackend.scStwClient.extensions[modelData]) // TODO
Component.onCompleted: {
refreshConnectionState()
}
function refreshConnectionState() {
var extensions = speedBackend.scStwClient.extensions[modelData]
function getStatusColor(extensions) {
for(var i = 0; i < extensions.length; i++) {
console.log(JSON.stringify(extensions[i]))
// TODO!!
if(extensions[i]["state"] !== ScStw.ExtensionConnected || extensions[i]["batteryState"] !== ScStw.BatteryFine)
return appTheme.theme.colors.error
}
return appTheme.theme.colors.success
}
Behavior on color {
ColorAnimation {
duration: 200
}
}
@ -238,18 +196,97 @@ ToolBar {
duration: 200
}
}
}
Rectangle {
id: upper_line
width: app.landscape() ? 1:parent.width
height: app.landscape() ? parent.height:1
color: appTheme.theme.colors.line
anchors.left: app.landscape() ? topContainerItm.right:parent.left
anchors.top: app.landscape() ? parent.top:topContainerItm.bottom
anchors.bottom: app.landscape() ? parent.bottom:undefined
visible: false
}
*/
states: [
State {
name: ScStwRace.IDLE
PropertyChanges {
target: control
statusText: "Press start"
}
PropertyChanges {
target: topContentLoader
sourceComponent: raceStatusLabelComponent
}
},
State {
name: ScStwRace.PREPAIRING
PropertyChanges {
target: control
statusText: "At your\nmarks"
}
PropertyChanges {
target: topContentLoader
sourceComponent: raceStatusLabelComponent
}
},
State {
name: ScStwRace.WAITING
PropertyChanges {
target: control
statusText: "Ready"
}
PropertyChanges {
target: topContentLoader
sourceComponent: raceStatusLabelComponent
}
},
State {
name: ScStwRace.STARTING
PropertyChanges {
target: control
statusText: "Starting"
}
PropertyChanges {
target: topContentLoader
sourceComponent: raceStatusLabelComponent
}
},
State {
name: ScStwRace.RUNNING
PropertyChanges {
target: topContentLoader
sourceComponent: timerColumnComponent
}
},
State {
name: ScStwRace.STOPPED
PropertyChanges {
target: topContentLoader
sourceComponent: timerColumnComponent
}
},
State {
name: ScStwRace.INCIDENT
PropertyChanges {
target: control
statusText: "Technical incident!"
}
PropertyChanges {
target: topContentLoader
sourceComponent: raceStatusLabelComponent
}
}
]
}

View File

@ -0,0 +1,106 @@
import QtQuick 2.0
import QtQuick.Controls 2.9
import QtGraphicalEffects 1.0
import de.itsblue.ScStw 2.0
import de.itsblue.ScStw.Styling 2.0
import de.itsblue.ScStw.Styling.Components 1.0
DelayButton {
id : control
text: "start"
property color backgroundColor: appTheme.theme.colors.button
property bool progressControlActivated: false
property double startProgress
delay: progressControlActivated ? 2000:0
onStartProgressChanged: {
console.log("start progress: " + startProgress)
}
Text {
id: labelText
text: control.text
anchors.centerIn: parent
font.pixelSize: parent.height * 0.16
font.family: "Helvetica"
color: enabled ? appTheme.theme.colors.text:appTheme.theme.colors.disabledText
}
Behavior on text {
//animate a text change
enabled: true
FadeAnimation {
target: labelText
}
}
contentItem: Text {
}
background: Item {
RectangularGlow {
glowRadius: 0.001
spread: 0.2
color: "black"
visible: true
cornerRadius: background.radius
anchors.fill: background
scale: 0.75
opacity: Math.pow( control.opacity, 100 )
}
Rectangle {
id: background
implicitWidth: 100
implicitHeight: 100
color: control.down ? Qt.darker(control.backgroundColor, 1.2) : control.backgroundColor
radius: size / 2
readonly property real size: Math.min(control.width, control.height)
width: size
height: size
anchors.fill: parent
Behavior on color {
ColorAnimation {
duration: 200
}
}
Canvas {
id: canvas
anchors.fill: parent
Connections {
target: control
onProgressChanged: canvas.requestPaint()
onStartProgressChanged: canvas.requestPaint()
}
onPaint: {
var progress
var showHoldProgress = (control.down && control.progressControlActivated)
if(showHoldProgress)
progress = control.progress
else
progress = control.startProgress <= 0 ? 0:1-control.startProgress
var ctx = getContext("2d")
ctx.clearRect(0, 0, width, height)
ctx.strokeStyle = showHoldProgress ? appTheme.theme.colors.error:"grey"
ctx.lineWidth = parent.width * 0.02
ctx.beginPath()
var startAngle = Math.PI * 1.5
var endAngle = startAngle + progress * Math.PI * 2
ctx.arc(width / 2, height / 2, width / 2 - ctx.lineWidth / 2 - 2, startAngle, endAngle)
ctx.stroke()
}
}
}
}
}

View File

@ -17,7 +17,6 @@
import QtQuick 2.9
import QtMultimedia 5.8
import QtQuick.Window 2.0
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
import QtQuick.Layouts 1.0
@ -35,13 +34,11 @@ import de.itsblue.ScStw.Styling 2.0
import de.itsblue.ScStw.Styling.Components 1.0
import de.itsblue.ScStwApp 2.0
Window {
ApplicationWindow {
visible: true
//width: 540
//height: 960
width: 540
height: 960
width: XscreenWidth
height: XscreenHeight
title: "ScStwApp"
Page {
@ -180,6 +177,48 @@ Window {
sizeMode: "medium"
}
PropertyChanges {
target: bottomToolBar
sizeMode: "tiny"
}
},
State {
name: ScStwRace.RUNNING
PropertyChanges {
target: topToolBar
sizeMode: "medium"
}
PropertyChanges {
target: bottomToolBar
sizeMode: "tiny"
}
},
State {
name: ScStwRace.STOPPED
PropertyChanges {
target: topToolBar
sizeMode: "large"
}
PropertyChanges {
target: bottomToolBar
sizeMode: "tiny"
}
},
State {
name: ScStwRace.INCIDENT
PropertyChanges {
target: topToolBar
sizeMode: "small"
}
PropertyChanges {
target: bottomToolBar
sizeMode: "tiny"
@ -190,17 +229,18 @@ Window {
/*------
Popups
------
------*/
SettingsDialog{
id: settingsDialog
x: startButt.x
y: startButt.y
width: startButt.width
height: startButt.height
x: centerContent.x + (centerContent.width - width) * 0.5
y: centerContent.y + (centerContent.height - height) * 0.5
width: Math.min(centerContent.width * 0.9, centerContent.height * 0.9)
height: width
}
ProfilesDialog {
/*ProfilesDialog {
id: profilesDialog
property int margin: app.landscape() ? app.height * 0.05:app.width * 0.05
@ -209,8 +249,9 @@ Window {
y: !app.landscape() ? topContainerItm.height + margin:topContainerItm.x + margin
width: app.landscape() ? app.width - topContainerItm.width - menu_container.width - margin * 2 : app.width - margin * 2
height: !app.landscape() ? app.height - topContainerItm.height - menu_container.height - margin * 2 : app.height - margin * 2
}
}*/
/*
states: [
State {
name: "IDLE"

View File

@ -27,5 +27,6 @@
<file>MainPage/TopToolBar.qml</file>
<file>MainPage/CenterContent.qml</file>
<file>MainPage/BottomToolBar.qml</file>
<file>components/MainActionButton.qml</file>
</qresource>
</RCC>

View File

@ -47,10 +47,6 @@
#include <QScreen>
#include <QQmlApplicationEngine>
#include <QtQml/QQmlContext>
//#include <QtWebView/QtWebView>
#ifdef Q_OS_ANDROID
#include <QtAndroidExtras>
#endif
#include "headers/scstwappsettings.h"
//#include "headers/speedtimer.h"
@ -61,28 +57,10 @@
int main(int argc, char *argv[])
{
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
#ifdef Q_OS_ANDROID
//set the standard volume to media
QAndroidJniObject jactivity=QtAndroid::androidActivity();
if(jactivity.isValid())
jactivity.callMethod<void>("setVolumeControlStream","(I)V",3);
//set statusbar color
QtAndroid::runOnAndroidThread([=]()
{
QAndroidJniObject window = QtAndroid::androidActivity().callObjectMethod("getWindow", "()Landroid/view/Window;");
window.callMethod<void>("addFlags", "(I)V", 0x80000000);
window.callMethod<void>("clearFlags", "(I)V", 0x04000000);
//window.callMethod<void>("setStatusBarColor", "(I)V", 0x202227); // Desired statusbar color
//QAndroidJniObject decorView = window.callObjectMethod("getDecorView", "()Landroid/view/View;");
//decorView.callMethod<void>("setSystemUiVisibility", "(I)V", 0x00002000);
});
#endif
// setup speed backend
qmlRegisterType<ScStwAppBackend>("de.itsblue.ScStwApp", 2, 0, "SpeedBackend");
qmlRegisterUncreatableType<ScStwAppSettings>("de.itsblue.ScStwApp", 2, 0, "ScStwAppSettings", "The ScStwAppSettings type is not creatable!");
@ -90,18 +68,17 @@ int main(int argc, char *argv[])
qRegisterMetaType<ScStwAppSettings::AppInternalSetting>("ScStwAppSettings::BaseStationSetting");
QQmlApplicationEngine engine;
ScStwLibraries::init();
ScStwLibraries::initStyling(&engine);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QSize size = app.screens().first()->size();
engine.rootContext()->setContextProperty("XscreenHeight", size.height());
engine.rootContext()->setContextProperty("XscreenWidth", size.width());
if (engine.rootObjects().isEmpty())
return -1;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}

View File

@ -73,7 +73,7 @@ void ScStwAppBackend::refreshTimerText() {
}
// --- refresh next start action delay progress ---
if(this->getRace()->getState() == ScStwRace::STARTING) {
if(this->getRace()->getState() == ScStwRace::WAITING || this->getRace()->getState() == ScStwRace::PREPAIRING) {
emit this->getRace()->nextStartActionDetailsChanged();
}