/* 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.12 import "../Components" DataListView { id: control property bool ready property string title: control.widgetData['name'] === undefined ? "":control.widgetData['name'] property string subTitle: getSubtitle() property bool titleIsPageTitle: true property Component headerComponent: RowLayout { height: parent.height spacing: 0 ToolButton { id: shareToolBt onClicked: shareWidget(control.title) text: "\uf1e0" font.family: fa5solid.name } ToolButton { id: moreToolBt onClicked: { control.changeCat() } text: "\uf142" font.family: fa5solid.name } } property var widgetData: currentWidgetData property var athletes function getSubtitle() { var titleString if(control.widgetData["categorys"] === undefined) return "" for(var i = 0; i < control.widgetData["categorys"].length; i ++ ){ //console.log("checking " + i + ": cat: " + parseInt(control.widgetData["categorys"][i]["GrpId"]) + " searched cat: " + params.cat) if(parseInt(control.widgetData["categorys"][i]["GrpId"]) === parseInt(params.cat)){ titleString = control.widgetData["categorys"][i]["name"] } } //% "(Registration)" var addition = qsTrId("#registrationHeadline") if(titleString) return addition + " " + titleString else return "" } function getText(athleteData){ var fedName // federation name if(widgetData["federations"] !== undefined){ // not an international competition -> get name of federation for(var i = 0; i < widgetData["federations"].length; i ++ ){ //console.log("checking " + i + ": cat: " + parseInt(widgetData["categorys"][i]["GrpId"]) + " searched cat: " + root.catId) if(widgetData["federations"][i]["fed_id"] === athleteData["reg_fed_id"]){ fedName = widgetData["federations"][i]["shortcut"] } } } else { // an international competition -> get nation fedName = athleteData["nation"] } return athleteData["firstname"] + " " + athleteData["lastname"] + " (" + fedName + ")" } function changeCat() { var cats = control.widgetData["categorys"] cats.sort(function(a, b) { return parseInt(a["GrpId"]) - parseInt(b["GrpId"]); }); var selectOptions = [] for(var prop in cats){ if (cats.hasOwnProperty(prop) && parseInt(cats[prop]["GrpId"]) !== parseInt(params.cat)) { // append all cats and ignore the current one //console.log("found cat: ", cats[prop]['name']) selectOptions.push({text: cats[prop]['name'], data:{cat: cats[prop]['GrpId']}}) } } selector.appear(selectOptions, qsTrId("#selectCategory"), //% "Show results" "" + qsTrId("#showResults") + "") } function filterAthletes(athletes) { if(!params.cat) { params.cat = control.widgetData["categorys"][0]["GrpId"] } var filtered = athletes.filter(function(athlete){ var res = String(athlete.cat).toLowerCase() === String(params.cat).toLowerCase() return res }) return filtered } Connections { target: selector function onSelectionFinished(index, data) { if(data.cat !== undefined){ updateData({cat: data.cat}, true) } } function onLinkActivated(link) { selector.close() var tmpParams = params tmpParams.type = "" app.openWidget(tmpParams) } } Component.onCompleted: { athletes = filterAthletes(widgetData["athletes"]) if(athletes.length > 0){ control.ready = true control.status = 200 } else { control.ready = false control.status = 901 } } onRefresh: { updateData({}, false) } onWidgetDataChanged: { athletes = [] athletes = filterAthletes(widgetData["athletes"]) } model: athletes delegate: ItemDelegate { id: partDel property int thisIndex: index property var thisData: modelData opacity: 0 scale: 0.9 width: control.width onThisDataChanged: { fadeInPa.start() } onClicked: { app.openWidget({person:thisData["PerId"]}) } ParallelAnimation { id: fadeInPa NumberAnimation { target: partDel; property: "opacity"; from: 0; to: 1.0; duration: 400 } NumberAnimation { target: partDel; property: "scale"; from: 0.8; to: 1.0; duration: 400 } } text: "" highlighted: partDel.thisIndex % 2 == 0 Label { anchors.fill: parent anchors.leftMargin: parent.width * 0.05 verticalAlignment: Text.AlignVCenter font.bold: true font.pixelSize: Math.abs( height * 0.3 ) elide: "ElideRight" text: control.getText(partDel.thisData) } } }