app/resources/qml/main.qml

281 lines
6.7 KiB
QML

/*
Speed Climbing Stopwatch - Simple Stopwatch for Climbers
Copyright (C) 2018 Itsblue Development - Dorian Zeder
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, version 3 of the License.
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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick 2.9
import QtMultimedia 5.8
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
import QtQuick.Layouts 1.0
import "."
import "./components"
import "./ProfilesDialog"
import "./SettingsDialog"
import "./components/layout"
import "./MainPage"
//import QtQuick.Layouts 1.11
import de.itsblue.ScStw 2.0
import de.itsblue.ScStw.Styling 2.0
import de.itsblue.ScStw.Styling.Components 1.0
import de.itsblue.ScStwApp 2.0
ApplicationWindow {
visible: true
width: 540
height: 960
title: "ScStwApp"
Page {
id: app
anchors.fill: parent
state: scStwRemoteRace.state
Rectangle {
id: backgroundRect
anchors.fill: parent
color: appTheme.theme.colors.background
Behavior on color {
ColorAnimation {
duration: 200
}
}
}
ScStw {
id: scStw
}
ScStwClient {
id: scStwClient
property ScStwSetting ipSetting: scStwAppSettings.getSetting(ScStwAppSettings.BaseStationIpSetting, ScStwAppSettings.KeyLevel)
ipAddress: ipSetting.value
}
ScStwAppSettings {
id: scStwAppSettings
scStwClient: scStwClient
}
ScStwTimer {
id: defaultTimer
}
ScStwRemoteRace {
id: scStwRemoteRace
autoRefreshTimerText: true
settings: scStwAppSettings
scStwClient: scStwClient
Component.onCompleted: {
scStwRemoteRace.addTimer(defaultTimer)
}
onStateChanged: {
if(scStwRemoteRace.state !== ScStwRace.IDLE) {
settingsDialog.close()
profilesDialog.close()
}
}
}
SpeedBackend {
id: speedBackend
scStwClient: scStwClient
}
ScStwAppThemeManager {
id: appTheme
property ScStwSetting setting: scStwAppSettings.getSetting(ScStwAppSettings.AppThemeSetting, ScStwAppSettings.KeyLevel)
themeName: setting.value
}
// ---------------
// - Main layout -
// ---------------
GridLayout {
id: mainLayout
anchors.fill: parent
columns: app.landscape() ? 3:1
rows: app.landscape() ? 1:3
TopToolBar {
id: topToolBar
state: app.state
sizeMode: "large"
}
CenterContent {
id: centerContent
state: app.state
Layout.fillWidth: true
Layout.fillHeight: true
}
BottomToolBar {
id: bottomToolBar
sizeMode: "tiny"
}
}
states: [
State {
name: ScStwRace.IDLE
PropertyChanges {
target: topToolBar
sizeMode: "small"
}
PropertyChanges {
target: bottomToolBar
sizeMode: "small"
}
},
State {
name: ScStwRace.PREPAIRING
PropertyChanges {
target: topToolBar
sizeMode: "medium"
}
PropertyChanges {
target: bottomToolBar
sizeMode: "tiny"
}
},
State {
name: ScStwRace.WAITING
PropertyChanges {
target: topToolBar
sizeMode: "medium"
}
PropertyChanges {
target: bottomToolBar
sizeMode: "tiny"
}
},
State {
name: ScStwRace.STARTING
PropertyChanges {
target: topToolBar
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"
}
}
]
/*------
Popups
------*/
SettingsDialog{
id: settingsDialog
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 {
id: profilesDialog
property int margin: app.landscape() ? app.height * 0.05:app.width * 0.05
x: centerContent.x + margin
y: centerContent.y + margin
width: centerContent.width - margin * 2
height: centerContent.height - margin * 2
}
function landscape(){
return(app.height < app.width)
}
}
}