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 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 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]) } } }