/* blueROCK - for digital rock Copyright (C) 2019 Dorian Zedler This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ import QtQuick 2.9 import QtQuick.Controls 2.4 import QtQuick.Layouts 1.3 import "../Components" DataListView { id: control property bool ready property string title: (params.nation === "" ? "IFSC":params.nation === "GER" ? "DAV":"SAC") + " " + qsTr("competition calendar") + " " + control.year property Component headerComponent: RowLayout { height: parent.height spacing: 0 ToolButton { id:yearToolBt onClicked: { control.changeYear() } icon.name: "calendar" } ToolButton { id: cupToolBt onClicked: { control.openCup() } icon.name: "cup" } } property var widgetData: currentWidgetData property int year: new Date().getFullYear() anchors.fill: parent //boundsBehavior: Flickable.StopAtBounds model: widgetData["competitions"].length onRefresh: { updateData({}, false) } Component.onCompleted: { if(model > 0){ control.ready = true control.status = 200 } else { control.ready = false control.status = 901 } autoScroll() // if the IFSC Calendar is open -> add the worldranking if(params.nation === ""){ control.widgetData['cups'].unshift({"SerId":"","rkey":"","name":"Worldranking","modified":"2018-10-24 16:11:12","modifier":"","year":"","num_comps":"","cats":["ICC-COA","ICC-HD","ICC-MED","ICC_F","ICC_FB","ICC_FS","ICC_M","ICC_MB","ICC_MS"]}) } } function autoScroll() { // function to scroll to the next competition that is not already over var compList = control.widgetData["competitions"] //console.log("scrolling") if(parseInt(control.year) === new Date().getFullYear()){ for(var i = 0; i < compList.length; i ++){ // get the start date pf the competition var startDate = Date.fromLocaleString(Qt.locale(), compList[i]["date"], "yyyy-MM-dd") // get the duration of the competition var durationString = compList[i]["duration"] === undefined ? "1":compList[i]["duration"] var days = parseInt(durationString.replace(/\D/g,'')) // calculate the end date of the competition var endDate = new Date(startDate.valueOf()) endDate.setDate(endDate.getDate() + days); //console.log(compList[i]["date"] + ": " + startDate + " to " + endDate) if(endDate.getTime() < new Date().getTime()){ // end date is already over -> move the list view down! control.positionViewAtIndex(i, ListView.Top) //console.log("moving down!") } } } else { //console.log("not current year") } } function getCompCatData(compCatId) { var obj = app.compCats for(var prop in obj) { // go through the whole array and search for data keys if (obj.hasOwnProperty(prop) && obj[prop]["cat_id"].indexOf(compCatId) >= 0) { //console.log("found cat: " + obj[prop]['label']) return obj[prop] } } } function openComp(compIndex){ var cats = control.widgetData["competitions"][compIndex]["cats"] cats.sort(function(a, b) { return parseInt(a["GrpId"]) - parseInt(b["GrpId"]); }); var selectOptions = [] for(var prop in cats){ if (cats.hasOwnProperty(prop)) { selectOptions.push({text: cats[prop]["name"], data:{cat: cats[prop]["GrpId"], comp: control.widgetData["competitions"][compIndex]["WetId"], status:cats[prop]["status"]}}) } } selector.appear(selectOptions, qsTr("select category")) } function changeYear(){ var years = control.widgetData["years"] var selectOptions = [] for(var prop in years){ if (years.hasOwnProperty(prop)) { selectOptions.push({text: years[prop], data:{year: years[prop]}}) } } selector.appear(selectOptions, qsTr("select Year")) } function openCup(state, data) { var cups = control.widgetData["cups"] var prop var selectOptions = [] var selectTitle = "" if(state === undefined){ // opened for the first time -> select cup selectTitle = qsTr("select cup") cups.sort(function(a, b) { return parseInt(b["SerId"]) - parseInt(a["SerId"]); }); for(prop in cups){ if (cups.hasOwnProperty(prop)) { selectOptions.push({text: cups[prop]["name"], data:{cup: cups[prop]["SerId"]}}) } } } else if(state === 1){ // opened for the second time -> select cat var cup // find the selected cup for(prop in cups){ if (cups.hasOwnProperty(prop) && cups[prop]['SerId'] === data.cup) { cup = cups[prop] } } if(cup === undefined){ // cup was not found return } selectTitle = cup['name'] + ": " + qsTr("select category") // build a list with all cat in the cup out of the cat keys (rkey) given in the cup.cats for(prop in cup['cats']){ if (cup['cats'].hasOwnProperty(prop)) { // search the rkey in the cat list for(var i = 0; i < control.widgetData["cats"].length; i ++ ){ if(control.widgetData["cats"][i]["rkey"] === cup["cats"][prop] && control.widgetData["cats"][i]["sex"] !== undefined){ // found it -> append it to the select list var catName = control.widgetData["cats"][i]["name"] // name of cat var catId = control.widgetData["cats"][i]["GrpId"] // id of cat selectOptions.push({text: catName, data:{cup: data.cup, cat: catId}}) } } } } } selector.appear(selectOptions, selectTitle) } Connections { target: parent.selector onSelectionFinished: { if(data.comp !== undefined){ console.log(data.status) app.openWidget({comp: data.comp, cat: data.cat, type:data.status === 4 ? 'starters':''}) } else if(data.year !== undefined){ updateData({year: data.year}, true) control.year = data.year } else if(data.cup !== undefined && data.cat === undefined){ control.openCup(1,data) } else if(data.cup !== undefined && data.cat !== undefined){ app.openWidget({cup: data.cup, cat: data.cat}) } } } delegate: ItemDelegate { id: competitionDel property bool over property var thisData: control.widgetData["competitions"][index] property string name: thisData["name"] property string date: thisData["date_span"] property var cats: thisData["cats"] property int catId: thisData["cat_id"] === undefined ? 0:thisData["cat_id"] width: parent.width height: compDelCol.height + 10 enabled: thisData["cats"] !== undefined && thisData["cats"].length > 0 opacity: 0 scale: 0.9 onThisDataChanged: { fadeInPa.start() } onClicked: { control.openComp(index) } ParallelAnimation { id: fadeInPa NumberAnimation { target: competitionDel; property: "opacity"; from: 0; to: 1.0; duration: 400 } NumberAnimation { target: competitionDel; property: "scale"; from: 0.8; to: 1.0; duration: 400 } } Rectangle { id: delBackroundRect anchors.fill: parent opacity: 0.5 color: control.getCompCatData(catId) === undefined ? "white":control.getCompCatData(catId)["bgcolor"] } Column { id: compDelCol anchors.centerIn: parent width: parent.width * 0.97 spacing: 10 Label { id: nameLa width: parent.width font.bold: true wrapMode: Text.WordWrap text: name } /*Label { id: infola width: parent.width text: thisData.info }*/ Label { id: dateLa color: "grey" text: date } } Rectangle { id: bottomLineRa anchors { bottom: parent.bottom left: parent.left right: parent.right } height: 1 color: "lightgrey" } } }