finished the implementation of speed final flowcharts, everything seems to work fine

This commit is contained in:
Dorian Zedler 2019-07-04 23:00:43 +02:00
parent bd185ad28b
commit bbcd468ec3
4 changed files with 144 additions and 39 deletions

View file

@ -26,6 +26,7 @@ ListView {
property bool loading: false property bool loading: false
property var listData property var listData
property var emptyProperties: [] property var emptyProperties: []
property bool useBuiltInPullRefresher: true
signal refresh() signal refresh()
@ -81,13 +82,17 @@ ListView {
PullRefresher { PullRefresher {
target: control target: control
visible: control.useBuiltInPullRefresher
postRefreshDelay: 0 postRefreshDelay: 0
busyIndicator: FancyBusyIndicator {} busyIndicator: FancyBusyIndicator {}
refreshPosition: height * 1.3 refreshPosition: height * 1.3
onRefreshRequested: { onRefreshRequested: {
control.refresh() if(control.useBuiltInPullRefresher) {
control.refresh()
}
} }
} }
} }

View file

@ -10,6 +10,9 @@ ListView {
property int rounds property int rounds
property int tileSize: app.height / 8 * 0.8 property int tileSize: app.height / 8 * 0.8
property int refreshes: 0
property int roundRefreshes: 1
anchors.fill: parent anchors.fill: parent
anchors.margins: 10 anchors.margins: 10
model: rounds + 2 model: rounds + 2
@ -24,18 +27,55 @@ ListView {
} }
function prepareData() { function prepareData() {
if(!control.enabled)
return
/*refreshes += 1
if(refreshes > 2){
roundRefreshes += 1
}
console.log("refreshes: " + refreshes + " rounds: " + roundRefreshes)
// create competition like data (just testing)
for(var part in flowchartData['participants']){
if(flowchartData['participants'].hasOwnProperty(part)){
for(var r = 2 + roundRefreshes; r < 7; r++){
delete flowchartData['participants'][part]["result"+r]
delete flowchartData['participants'][part]["result_rank"+r]
}
if(parseInt(flowchartData['participants'][part]["result_rank0"]) > 14 + refreshes) {
delete flowchartData['participants'][part]["result_rank2"]
}
}
}
delete flowchartData['route_names'][2]
delete flowchartData['route_names'][3]
delete flowchartData['route_names'][4]
delete flowchartData['route_names'][5]
delete flowchartData['route_names'][6]
*/
//flowchartData['route_names'] = flowchartData['route_names'].slice(0,)
// array to store the restructured data // array to store the restructured data
var allData = [] var allData = []
for(var round in flowchartData['route_names']){ //console.log(JSON.stringify(flowchartData['route_names']))
if(flowchartData['route_names'].hasOwnProperty(round) && parseInt(round) >= 0){
console.log(round)
if(allData.length > 0){ for(var round in flowchartData['route_names']){
//console.log(round)
if(flowchartData['route_names'].hasOwnProperty(round) && parseInt(round) >= 0){
//console.log(round)
/*if(allData.length > 0){
allData[allData.length-1].push(round) allData[allData.length-1].push(round)
allData[allData.length-1].push(flowchartData['route_names'][round]) allData[allData.length-1].push(flowchartData['route_names'][round])
} }*/
if(parseInt(round) === 0){ if(parseInt(round) === 0){
// this is the first round // this is the first round
@ -86,7 +126,8 @@ ListView {
} }
// push the first round to all data // push the first round to all data
finalFirstRoundPairs.push(2)
finalFirstRoundPairs.push(flowchartData['route_names'][2])
allData.push(finalFirstRoundPairs) allData.push(finalFirstRoundPairs)
} }
@ -106,6 +147,10 @@ ListView {
var thisLooser var thisLooser
var thisWinnerIsFirstOfNewPair = i%2 === 0 var thisWinnerIsFirstOfNewPair = i%2 === 0
if(thisPair[0] === undefined || thisPair[1] === undefined){
continue
}
if(thisWinnerIsFirstOfNewPair){ if(thisWinnerIsFirstOfNewPair){
nextRound.push([]) nextRound.push([])
} }
@ -117,14 +162,18 @@ ListView {
thisWinner = thisPair[0] thisWinner = thisPair[0]
thisLooser = thisPair[1] thisLooser = thisPair[1]
} }
else { else if(parseInt(thisPair[0]["result_rank"+round]) > parseInt(thisPair[1]["result_rank"+round])) {
thisWinner = thisPair[1] thisWinner = thisPair[1]
thisLooser = thisPair[0] thisLooser = thisPair[0]
} }
else {
// no result yet!!
thisPair[1]["win"] = thisPair[0]["win"] = false
//console.log("got no winner yet")
continue
}
console.log(thisWinner['firstname']+" has won in round " + round) //console.log(thisWinner['firstname']+" has won in round " + round)
//thisWinner.win = false
//thisLooser.win = true
if(round - control.rounds === 2){ if(round - control.rounds === 2){
// if we are in the 1/2 final // if we are in the 1/2 final
@ -144,24 +193,30 @@ ListView {
// small Final // small Final
allData.push([smallFinal, parseInt(round)+1]) allData.push([smallFinal, parseInt(round)+1])
break //break
} }
else { else {
//nextRound.push(round) nextRound.push(parseInt(round) + 1 )
//nextRound.push(flowchartData['route_names'][round]) nextRound.push(flowchartData['route_names'][parseInt(round) + 1])
allData.push(nextRound) allData.push(nextRound)
} }
} }
} }
} }
control.allFlowchartData = allData control.allFlowchartData = allData
//console.log(JSON.stringify(allData))
}
function getWinner(part1, part2){
} }
delegate: Column { delegate: Column {
id: roundCol id: roundCol
property int thisIndex: index property int thisIndex: index
property int thisRound: control.allFlowchartData[roundCol.thisIndex][control.allFlowchartData[roundCol.thisIndex].length-2] property int thisRound: thisRoundIsValid ? control.allFlowchartData[roundCol.thisIndex][control.allFlowchartData[roundCol.thisIndex].length-2]:-1
property bool thisRoundIsValid: control.allFlowchartData !== undefined && control.allFlowchartData[roundCol.thisIndex] !== undefined && control.allFlowchartData[roundCol.thisIndex].length > 2
property bool thisIsLastRound: thisIndex === control.model - 1 property bool thisIsLastRound: thisIndex === control.model - 1
width: app.width * 0.5 width: app.width * 0.5
@ -172,9 +227,13 @@ ListView {
Label { Label {
id: roundNameLa id: roundNameLa
width: parent.width width: parent.width
height: control.height * 0.05
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
fontSizeMode: Text.Fit
font.pixelSize: height * 0.6
font.bold: true font.bold: true
text: control.allFlowchartData[roundCol.thisIndex][control.allFlowchartData[roundCol.thisIndex].length-1] text: roundCol.thisRoundIsValid && control.allFlowchartData[roundCol.thisIndex][control.allFlowchartData[roundCol.thisIndex].length-1] !== undefined ? control.allFlowchartData[roundCol.thisIndex][control.allFlowchartData[roundCol.thisIndex].length-1] : "-"
} }
Repeater { Repeater {
@ -185,18 +244,19 @@ ListView {
property bool lowerPart: (index%2 > 0) property bool lowerPart: (index%2 > 0)
property int thisIndex: index property var matchData: roundCol.thisRoundIsValid ? control.allFlowchartData[ thisIsSmallFinal ? roundCol.thisIndex+1 : roundCol.thisIndex][ thisIsSmallFinal ? 0:matchItm.thisIndex]:undefined
property var thisMatchData: control.allFlowchartData[ thisIsSemifinal ? roundCol.thisIndex+1 : roundCol.thisIndex][matchItm.thisIndex]
property bool thisIsFinal: roundCol.thisIsLastRound && thisIndex === rectRep.model - 2
property bool thisIsSemifinal: roundCol.thisIsLastRound && thisIndex === rectRep.model - 1
Component.onCompleted: { property int thisIndex: index
if(thisIsSemifinal){ property int thisRound: parseInt(roundCol.thisRound) - (thisIsSmallFinal ? 1:0)
console.log("this is semi final") property var thisMatchData: thisMatchDataIsValid ? matchData:[]
console.log(thisMatchData)
} property bool thisMatchDataIsValid: (matchData !== undefined && matchData !== null && typeof matchData === "object" && matchData.length > 0)
console.log(thisMatchData) property bool thisMatchIsOver: thisMatchDataIsValid && thisMatchData[0]['result_rank'+thisRound] !== undefined && thisMatchData[1]['result_rank'+thisRound] !== undefined
}
property bool thisIsFinal: roundCol.thisIsLastRound && thisIndex === rectRep.model - 2
property bool thisIsSmallFinal: roundCol.thisIsLastRound && thisIndex === rectRep.model - 1
property int winnerIndex: thisMatchIsOver ? (parseInt(thisMatchData[0]['result_rank'+thisRound]) < parseInt(thisMatchData[1]['result_rank'+thisRound]) ? 0:1) : -1
height: !roundCol.thisIsLastRound ? (roundCol.height - roundNameLa.height) / rectRep.model - roundCol.spacing : (thisIsFinal ? (roundCol.height - roundNameLa.height) * 0.5 + control.tileSize * 0.5 : (roundCol.height - roundNameLa.height) - (roundCol.height - roundNameLa.height) * 0.5 + control.tileSize * 0.5 ) height: !roundCol.thisIsLastRound ? (roundCol.height - roundNameLa.height) / rectRep.model - roundCol.spacing : (thisIsFinal ? (roundCol.height - roundNameLa.height) * 0.5 + control.tileSize * 0.5 : (roundCol.height - roundNameLa.height) - (roundCol.height - roundNameLa.height) * 0.5 + control.tileSize * 0.5 )
width: parent.width width: parent.width
@ -255,6 +315,7 @@ ListView {
model: 2 model: 2
delegate: Row { delegate: Row {
height: app.landscape() ? parent.height:parent.height / 2 height: app.landscape() ? parent.height:parent.height / 2
width: app.landscape() ? parent.width / 2 : parent.width width: app.landscape() ? parent.width / 2 : parent.width
@ -262,28 +323,29 @@ ListView {
Label { Label {
height: parent.height height: parent.height
width: parent.width * 0.2 width: parent.width * (app.landscape() ? 0.1 : 0.2)
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
font.pixelSize: height * 0.6 font.pixelSize: height * 0.6
fontSizeMode: Text.Fit fontSizeMode: Text.Fit
minimumPixelSize: 1 minimumPixelSize: 1
text: matchItm.thisMatchData[index]['result_rank0'] text: matchItm.thisMatchData[index] !== undefined ? matchItm.thisMatchData[index]['result_rank0']: ""
} }
Label { Label {
height: parent.height height: parent.height
width: parent.width * 0.5 width: parent.width * 0.6
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
horizontalAlignment: app.landscape() ? Text.AlignLeft : Text.AlignHCenter
font.pixelSize: height * 0.6 font.pixelSize: height * 0.6
fontSizeMode: Text.Fit fontSizeMode: Text.Fit
minimumPixelSize: 1 minimumPixelSize: 1
color: (parseInt(matchItm.thisMatchData[0]["result_rank" + roundCol.thisRound ]) < parseInt(matchItm.thisMatchData[1]["result_rank" + roundCol.thisRound])) === (index === 0 ? true:false) ? "green":"black" color: matchItm.winnerIndex === index ? "green":"black"
text: matchItm.thisMatchData[index]['firstname'] + " " + matchItm.thisMatchData[index]['lastname'] text: matchItm.thisMatchData[index] !== undefined ? matchItm.thisMatchData[index]['firstname'] + " " + matchItm.thisMatchData[index]['lastname'] :"-"
} }
/*Rectangle { /*Rectangle {
@ -302,7 +364,6 @@ ListView {
visible: (parseInt(matchItm.thisMatchData[0]["result_rank" + roundCol.thisRound ]) < parseInt(matchItm.thisMatchData[1]["result_rank" + roundCol.thisRound])) === (index === 0 ? true:false) visible: (parseInt(matchItm.thisMatchData[0]["result_rank" + roundCol.thisRound ]) < parseInt(matchItm.thisMatchData[1]["result_rank" + roundCol.thisRound])) === (index === 0 ? true:false)
}*/ }*/
} }
} }
} }

View file

@ -43,7 +43,9 @@ DataListView {
ToolButton { ToolButton {
id: flowToolBt id: flowToolBt
visible: control.widgetData['discipline'] === 'speed' visible: speedFlowChart.enabled
enabled: control.widgetData['route_order'] === "-1" && Object.keys(control.widgetData['route_names']).length > 2
onClicked: { onClicked: {
if(speedFlowChartBackgroundRect.state === "hidden"){ if(speedFlowChartBackgroundRect.state === "hidden"){
@ -154,6 +156,8 @@ DataListView {
property int ind: index property int ind: index
property var thisData: widgetData[ "participants" ][partDel.ind] property var thisData: widgetData[ "participants" ][partDel.ind]
enabled: speedFlowChartBackgroundRect.state === "hidden"
width: parent.width width: parent.width
height: 70 height: 70
@ -250,13 +254,15 @@ DataListView {
id: partDelSecondRow id: partDelSecondRow
width: parent.width width: parent.width
height: multiResRow.enabled || multiGenResRow.enabled || resultLa.enabled ? parent.height / 2 : 0 height: multiResRow.active || multiGenResRow.active || resultLa.acitve ? parent.height / 2 : 0
Row { Row {
id: multiResRow id: multiResRow
property bool active: parseInt(widgetData[ "route_order" ]) > -1 && boulderResRep.model > 0
height: parent.height height: parent.height
width: enabled ? parent.width * 0.75:0 width: active ? parent.width * 0.75:0
enabled: parseInt(widgetData[ "route_order" ]) > -1 && boulderResRep.model > 0 enabled: parseInt(widgetData[ "route_order" ]) > -1 && boulderResRep.model > 0
@ -464,8 +470,10 @@ DataListView {
Row { Row {
id: multiGenResRow id: multiGenResRow
property bool active: ((parseInt(widgetData[ "route_order" ]) === -1) && (generalResRep.model > 0)) ? true:false
height: parent.height height: parent.height
width: enabled ? parent.width - resultLa.width:0 width: active ? parent.width - resultLa.width:0
enabled: ((parseInt(widgetData[ "route_order" ]) === -1) && (generalResRep.model > 0)) ? true:false enabled: ((parseInt(widgetData[ "route_order" ]) === -1) && (generalResRep.model > 0)) ? true:false
@ -554,6 +562,8 @@ DataListView {
Label { Label {
id: resultLa id: resultLa
property bool acitve: ( boulderResRep.model > 0 || widgetData["discipline"] !== "boulder" ) && parseInt(widgetData[ "route_order" ]) > -1
width: enabled ? parent.width * 0.25:0 width: enabled ? parent.width * 0.25:0
height: enabled ? parent.height:0 height: enabled ? parent.height:0
@ -591,6 +601,8 @@ DataListView {
property var tabs: getTabs() property var tabs: getTabs()
property var tabIndexes: [] property var tabIndexes: []
enabled: speedFlowChartBackgroundRect.state === "hidden"
anchors { anchors {
left: parent.left left: parent.left
right: parent.right right: parent.right
@ -678,14 +690,18 @@ DataListView {
color: Material.background color: Material.background
SpeedFlowChart { SpeedFlowChart {
id: speedFlowChart
anchors.fill: parent anchors.fill: parent
flowchartData: control.widgetData; enabled: control.widgetData['discipline'] === 'speed'
flowchartData: control.widgetData
//participants: control.widgetData['participants'].slice() //participants: control.widgetData['participants'].slice()
//route_names: control.widgetData['route_names'] //route_names: control.widgetData['route_names']
rounds: control.widgetData['route_names'][2].includes("8") ? 2:1 rounds: Object.keys(control.widgetData['route_names']).length > 2 ? control.widgetData['route_names']["2"].includes("8") ? 2:1 : 0
} }
states: [ states: [
@ -719,4 +735,18 @@ DataListView {
} }
] ]
} }
PullRefresher {
target: control
postRefreshDelay: 0
busyIndicator: FancyBusyIndicator {}
refreshPosition: height * 1.3
onRefreshRequested: {
control.refresh()
}
}
} }

View file

@ -579,6 +579,15 @@ Window {
loadingDl.close() loadingDl.close()
} }
function defaultString(string, defaultString){
if(string === undefined || string === null){
return defaultString
}
else {
return string
}
}
function getErrorInfo(errorCode) { function getErrorInfo(errorCode) {
var infoLevel var infoLevel