352 lines
10 KiB
QML
352 lines
10 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("Digital Rock Ranking")
|
||
|
|
||
|
Page {
|
||
|
id: app
|
||
|
|
||
|
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
|
||
|
|
||
|
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: -60
|
||
|
}
|
||
|
|
||
|
height: 50
|
||
|
|
||
|
Button {
|
||
|
id:toolButton
|
||
|
enabled: true
|
||
|
anchors {
|
||
|
left: parent.left
|
||
|
verticalCenter: parent.verticalCenter
|
||
|
leftMargin: parent.width *0.02
|
||
|
}
|
||
|
height: parent.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: parent.width
|
||
|
fillMode: Image.PreserveAspectFit
|
||
|
Behavior on scale {
|
||
|
PropertyAnimation {
|
||
|
duration: 100
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Label {
|
||
|
id: toolBarTitleLa
|
||
|
|
||
|
|
||
|
anchors {
|
||
|
verticalCenter: parent.verticalCenter
|
||
|
verticalCenterOffset: -toolBarSubTitleLa.anchors.verticalCenterOffset
|
||
|
left: toolButton.right
|
||
|
leftMargin: parent.width * 0.02
|
||
|
right: parent.right
|
||
|
}
|
||
|
|
||
|
elide: "ElideRight"
|
||
|
|
||
|
font.bold: true
|
||
|
|
||
|
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
|
||
|
|
||
|
anchors {
|
||
|
verticalCenter: parent.verticalCenter
|
||
|
verticalCenterOffset: toolBarSubTitleLa.text !== "" ? height/2:0
|
||
|
left: toolButton.right
|
||
|
leftMargin: parent.width * 0.02
|
||
|
right: parent.right
|
||
|
}
|
||
|
|
||
|
elide: "ElideRight"
|
||
|
|
||
|
font.bold: false
|
||
|
|
||
|
color: "black"
|
||
|
|
||
|
text: getText()
|
||
|
|
||
|
function getText(){
|
||
|
var titleString = "";
|
||
|
|
||
|
if(mainStack.currentItem.subTitle !== undefined){
|
||
|
titleString = mainStack.currentItem.subTitle
|
||
|
}
|
||
|
|
||
|
return(titleString)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Behavior on anchors.topMargin {
|
||
|
NumberAnimation {
|
||
|
duration: 500
|
||
|
easing.type: Easing.OutCubic
|
||
|
}
|
||
|
}
|
||
|
|
||
|
states: [
|
||
|
State {
|
||
|
name: "closed"
|
||
|
when: mainStack.depth === 1
|
||
|
PropertyChanges {
|
||
|
target: toolBar
|
||
|
anchors.topMargin: -60
|
||
|
}
|
||
|
},
|
||
|
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()
|
||
|
mainStack.push(Qt.createComponent("qrc:/Pages/CompetitionCalendarPage.qml").createObject(null, {"nation": nation}))
|
||
|
loadingDl.close()
|
||
|
}
|
||
|
|
||
|
function openResults(comp, cat, reg){
|
||
|
// comp: (int) competiotion ID
|
||
|
// cat: (int) category ID
|
||
|
// reg: (bool) false: results; true: registrations
|
||
|
|
||
|
//loadingDl.open()
|
||
|
mainStack.push(Qt.createComponent("qrc:/Pages/RankingPage.qml").createObject(null, {"comId": comp, "catId": cat, "reg": reg}))
|
||
|
//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 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 = "Alte Daten"
|
||
|
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
|
||
|
default:
|
||
|
infoLevel = 2
|
||
|
errorString = "Unexpected error ("+errorCode+")"
|
||
|
errorDescription = "Unexpected error while getting data from the server. Please try again later."
|
||
|
}
|
||
|
|
||
|
return([infoLevel, errorString, errorDescription])
|
||
|
}
|
||
|
}
|
||
|
}
|