414 lines
12 KiB
QML
414 lines
12 KiB
QML
import QtQuick 2.9
|
|
import QtQuick.Window 2.2
|
|
import QtQuick.Controls 2.4
|
|
|
|
import com.itsblue.digitalRockRanking 1.0
|
|
|
|
import "./Pages"
|
|
import "./Components"
|
|
|
|
Window {
|
|
visible: true
|
|
width: 540
|
|
height: 960
|
|
title: qsTr("blueROCK")
|
|
|
|
Page {
|
|
id: app
|
|
|
|
property int errorCode: -1
|
|
|
|
property var competitionCategoryColors: {
|
|
"61": "lightgrey",
|
|
"58": "lightgreen",
|
|
|
|
"69": "#B8C8FF",
|
|
"70": "#F0F0F0",
|
|
"71": "#D8E8FF",
|
|
"256": "#D8E8FF"
|
|
}
|
|
|
|
anchors.fill: parent
|
|
|
|
Shortcut {
|
|
sequences: ["Esc", "Back"]
|
|
enabled: mainStack.depth > 1
|
|
onActivated: {
|
|
if(!mainStack.currentItem.locked){
|
|
mainStack.pop()
|
|
}
|
|
}
|
|
}
|
|
|
|
ServerConn {
|
|
id: serverConn
|
|
|
|
Component.onCompleted: {
|
|
//serverConn.refreshFoodplan()
|
|
}
|
|
}
|
|
|
|
StackView {
|
|
id: mainStack
|
|
|
|
//enabled: !loadingDl.opened
|
|
|
|
anchors {
|
|
top: toolBar.bottom
|
|
left: parent.left
|
|
right: parent.right
|
|
bottom: parent.bottom
|
|
}
|
|
|
|
initialItem: startPgComp
|
|
|
|
Component {
|
|
id: startPgComp
|
|
StartPage {}
|
|
}
|
|
|
|
popEnter: Transition {
|
|
XAnimator {
|
|
from: (mainStack.mirrored ? -1 : 1) * -mainStack.width
|
|
to: 0
|
|
duration: 500
|
|
easing.type: Easing.OutCubic
|
|
}
|
|
}
|
|
|
|
popExit: Transition {
|
|
XAnimator {
|
|
from: 0
|
|
to: (mainStack.mirrored ? -1 : 1) * mainStack.width
|
|
duration: 500
|
|
easing.type: Easing.OutCubic
|
|
}
|
|
}
|
|
|
|
pushEnter: Transition {
|
|
XAnimator {
|
|
from: (mainStack.mirrored ? -1 : 1) * mainStack.width
|
|
to: 0
|
|
duration: 500
|
|
easing.type: Easing.OutCubic
|
|
}
|
|
}
|
|
|
|
pushExit: Transition {
|
|
XAnimator {
|
|
from: 0
|
|
to: (mainStack.mirrored ? -1 : 1) * -mainStack.width
|
|
duration: 500
|
|
easing.type: Easing.OutCubic
|
|
}
|
|
}
|
|
}
|
|
|
|
AppToolBar {
|
|
id: toolBar
|
|
|
|
anchors {
|
|
top: parent.top
|
|
left: parent.left
|
|
right: parent.right
|
|
topMargin: -height
|
|
}
|
|
|
|
height: 50
|
|
|
|
showErrorBar: true
|
|
|
|
Row {
|
|
|
|
anchors.fill: parent
|
|
|
|
spacing: width * 0.02
|
|
|
|
Item {
|
|
id: spacer
|
|
width: 1
|
|
height: parent.height
|
|
}
|
|
|
|
Button {
|
|
id:toolButton
|
|
|
|
anchors {
|
|
verticalCenter: parent.verticalCenter
|
|
}
|
|
|
|
height: parent.height * 0.5
|
|
width: height
|
|
|
|
onClicked: {
|
|
if(!mainStack.currentItem.locked){
|
|
mainStack.pop()
|
|
}
|
|
}
|
|
|
|
onPressed: toolButton.scale = 0.9
|
|
onReleased: toolButton.scale = 1.0
|
|
|
|
background: Image {
|
|
source: "qrc:/icons/backDark.png"
|
|
|
|
height: parent.height
|
|
width: height
|
|
|
|
fillMode: Image.PreserveAspectFit
|
|
Behavior on scale {
|
|
PropertyAnimation {
|
|
duration: 100
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Column {
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
height: childrenRect.height
|
|
width: parent.width - extraComponentLoader.width - toolButton.width - 3 * parent.spacing
|
|
|
|
Label {
|
|
id: toolBarTitleLa
|
|
|
|
width: parent.width
|
|
|
|
elide: "ElideRight"
|
|
|
|
font.bold: true
|
|
verticalAlignment: Text.AlignVCenter
|
|
|
|
color: "black"
|
|
|
|
text: getText()
|
|
|
|
function getText(){
|
|
var titleString = "";
|
|
|
|
if(!mainStack.currentItem.titleIsPageTitle){
|
|
for(var i=1; i<mainStack.depth; i++){
|
|
if(i > 1){
|
|
titleString += " > "
|
|
}
|
|
|
|
titleString += mainStack.get(i).title
|
|
}
|
|
}
|
|
else {
|
|
titleString = mainStack.currentItem.title
|
|
}
|
|
|
|
return(titleString)
|
|
}
|
|
}
|
|
|
|
Label {
|
|
id: toolBarSubTitleLa
|
|
|
|
width: parent.width
|
|
height: text !== "" ? undefined:0
|
|
|
|
elide: "ElideRight"
|
|
|
|
font.bold: false
|
|
|
|
color: "black"
|
|
|
|
text: getText()
|
|
|
|
function getText(){
|
|
var titleString = "";
|
|
|
|
if(mainStack.currentItem.subTitle !== undefined){
|
|
titleString = mainStack.currentItem.subTitle
|
|
}
|
|
|
|
return(titleString)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
Loader {
|
|
id: extraComponentLoader
|
|
|
|
height: parent.height
|
|
width: status === Loader.Ready ? parent.width * 0.4 - toolButton.width - 3 * parent.spacing:0
|
|
|
|
anchors {
|
|
top: parent.top
|
|
bottom: parent.bottom
|
|
}
|
|
|
|
sourceComponent: mainStack.currentItem.headerComponent
|
|
}
|
|
|
|
}
|
|
|
|
Behavior on anchors.topMargin {
|
|
NumberAnimation {
|
|
duration: 500
|
|
easing.type: Easing.OutCubic
|
|
}
|
|
}
|
|
|
|
states: [
|
|
State {
|
|
name: "closed"
|
|
when: mainStack.depth === 1
|
|
PropertyChanges {
|
|
target: toolBar
|
|
anchors.topMargin: -height
|
|
}
|
|
},
|
|
State {
|
|
name: "open"
|
|
when: mainStack.depth > 1
|
|
PropertyChanges {
|
|
target: toolBar
|
|
anchors.topMargin: 0
|
|
}
|
|
}
|
|
]
|
|
}
|
|
|
|
Dialog {
|
|
id: loadingDl
|
|
|
|
x: ( app.width - width ) / 2
|
|
y: ( app.height - height ) / 2
|
|
|
|
modal: true
|
|
closePolicy: Dialog.NoAutoClose
|
|
|
|
contentItem: Column {
|
|
FancyBusyIndicator {
|
|
running: true
|
|
}
|
|
|
|
Label {
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
font.bold: true
|
|
|
|
text: "loading..."
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
function landscape(){
|
|
return app.height < app.width
|
|
}
|
|
|
|
function openCalendar(nation){
|
|
loadingDl.open()
|
|
|
|
var calComp = Qt.createComponent("qrc:/Pages/CompetitionCalendarPage.qml").createObject(null, {"nation": nation})
|
|
app.errorCode = calComp.status
|
|
if(calComp.ready){
|
|
mainStack.push(calComp)
|
|
}
|
|
else {
|
|
delete(calComp)
|
|
}
|
|
|
|
loadingDl.close()
|
|
}
|
|
|
|
function openResults(comp, cat, status){
|
|
// comp: (int) competiotion ID
|
|
// cat: (int) category ID
|
|
// reg: (int) 0: result imported into ranking; 1: result-service result available; 2: result-service startlist available; 3: old non result-server startlist (no longer used); 4: starters / registration data
|
|
|
|
loadingDl.open()
|
|
|
|
var rankComp = Qt.createComponent("qrc:/Pages/RankingPage.qml").createObject(null, {"comId": comp, "catId": cat, "catStatus": status})
|
|
app.errorCode = rankComp.status
|
|
|
|
if(rankComp.ready){
|
|
mainStack.push(rankComp)
|
|
}
|
|
else {
|
|
delete(rankComp)
|
|
}
|
|
|
|
|
|
loadingDl.close()
|
|
}
|
|
|
|
function getErrorInfo(errorCode) {
|
|
|
|
var infoLevel
|
|
// 0 - ok
|
|
// 1 - info
|
|
// 2 - error
|
|
|
|
var errorString
|
|
var errorDescription
|
|
|
|
switch(errorCode) {
|
|
case 0:
|
|
infoLevel = 2
|
|
errorString = "No connection to server"
|
|
errorDescription = "Please check your internet connection and try again."
|
|
break
|
|
case 200:
|
|
infoLevel = 0
|
|
errorString = "Success"
|
|
errorDescription = "The request was successfull"
|
|
break
|
|
case 401:
|
|
infoLevel = 2
|
|
errorString = "Authentication required"
|
|
errorDescription = "The server asked for user credentinals, please chack them and try again"
|
|
break
|
|
case 500:
|
|
infoLevel = 2
|
|
errorString = "Internal server error"
|
|
errorDescription = "The server was unable to process this request, this is probaply the servers vault. Please try again later."
|
|
break
|
|
case 900:
|
|
infoLevel = 2
|
|
errorString = "Internal processing error"
|
|
errorDescription = "The server has sent some data that could ot be processed. Please try again later"
|
|
break
|
|
case 901:
|
|
infoLevel = 1
|
|
errorString = "No Data"
|
|
errorDescription = "There is currently no data available. Please try again later."
|
|
break
|
|
case 902:
|
|
infoLevel = 1
|
|
errorString = "Cached (old) data"
|
|
errorDescription = "Es konnte keine Verbindung zum Server hergestellt werden, aber es sind noch alte Daten gespeichert."
|
|
break
|
|
case 903:
|
|
infoLevel = 1
|
|
errorString = "Ungültiger Aufruf"
|
|
errorDescription = "Die aufgerufene Funktion ist momentan nicht verfügbar, bitte versuche es später erneut."
|
|
break
|
|
case 904:
|
|
infoLevel = 2
|
|
errorString = "Incompatible API"
|
|
errorDescription = "Please make shure that you are using the latest version of this app and try again."
|
|
break
|
|
case 905:
|
|
infoLevel = 1
|
|
errorString = "Loading..."
|
|
errorDescription = "Please wait while we're loading some data"
|
|
break
|
|
default:
|
|
infoLevel = 2
|
|
errorString = "Unexpected error ("+errorCode+")"
|
|
errorDescription = "Unexpected error while getting data from the server. Please try again later."
|
|
}
|
|
|
|
return([infoLevel, errorString, errorDescription])
|
|
}
|
|
}
|
|
}
|