implemented rankings and finished off results
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<manifest package="com.itsblue.drRanking" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.01b" android:versionCode="1" android:installLocation="auto">
|
<manifest package="com.itsblue.blueROCK" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.01b" android:versionCode="1" android:installLocation="auto">
|
||||||
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="DigitalRockRanking" android:icon="@drawable/icon">
|
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="blueROCK" android:icon="@drawable/icon">
|
||||||
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="DigitalRockRanking" android:screenOrientation="unspecified" android:launchMode="singleTop">
|
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="blueROCK (for digitalROCK)" android:screenOrientation="unspecified" android:launchMode="singleTop">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN"/>
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
|
@ -11,7 +11,7 @@
|
||||||
<!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
|
<!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
|
||||||
<!-- Application arguments -->
|
<!-- Application arguments -->
|
||||||
|
|
||||||
<meta-data android:name="android.app.lib_name" android:value="DigitalRockRanking"/>
|
<meta-data android:name="android.app.lib_name" android:value="blueROCK"/>
|
||||||
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
|
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
|
||||||
<meta-data android:name="android.app.repository" android:value="default"/>
|
<meta-data android:name="android.app.repository" android:value="default"/>
|
||||||
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
|
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
|
||||||
|
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 67 KiB |
|
@ -27,7 +27,7 @@ public slots:
|
||||||
void refreshFoodplan();
|
void refreshFoodplan();
|
||||||
|
|
||||||
QVariant getCalendar(QString nation, int year);
|
QVariant getCalendar(QString nation, int year);
|
||||||
QVariant getRanking(int competitionId, int categoryId, bool registrationData = false, const int routeNumber = -2);
|
QVariant getRanking(int competitionId, int categoryId, bool registrationData = false, bool rankingData = false, const int routeNumber = -2);
|
||||||
|
|
||||||
// functions for qml
|
// functions for qml
|
||||||
QVariant getFoodplan();
|
QVariant getFoodplan();
|
||||||
|
|
|
@ -28,7 +28,6 @@ Item {
|
||||||
property int errorCode: app.errorCode
|
property int errorCode: app.errorCode
|
||||||
|
|
||||||
onErrorCodeChanged: {
|
onErrorCodeChanged: {
|
||||||
console.log("new error code: " + errorCode)
|
|
||||||
if(!([-1, 200, 905].indexOf(app.errorCode) >= 0) && control.showErrorBar){
|
if(!([-1, 200, 905].indexOf(app.errorCode) >= 0) && control.showErrorBar){
|
||||||
animateErrorBar.start()
|
animateErrorBar.start()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.9
|
||||||
import QtQuick.Controls 2.4
|
import QtQuick.Controls 2.4
|
||||||
|
|
||||||
DataListView {
|
DataListView {
|
||||||
id: control
|
id: control
|
||||||
|
|
||||||
property var listData: ({})
|
property var listData: ({})
|
||||||
|
signal closeAll()
|
||||||
|
|
||||||
onListDataChanged: {
|
onListDataChanged: {
|
||||||
model = listData[ root.listKey ] === undefined ? 0:listData[ root.listKey ].length
|
model = listData[ root.listKey ] === undefined ? 0:listData[ root.listKey ].length
|
||||||
|
@ -17,11 +18,32 @@ DataListView {
|
||||||
|
|
||||||
property int ind: index
|
property int ind: index
|
||||||
|
|
||||||
|
state: "closed"
|
||||||
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: 70
|
height: 70
|
||||||
|
|
||||||
text: ""
|
text: ""
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
if(state === "closed"){
|
||||||
|
// close all other delegates
|
||||||
|
control.closeAll()
|
||||||
|
|
||||||
|
state = "opened"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
state = "closed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: control
|
||||||
|
onCloseAll: {
|
||||||
|
partDel.state = "closed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
|
@ -35,8 +57,14 @@ DataListView {
|
||||||
Column {
|
Column {
|
||||||
id: partDelCol
|
id: partDelCol
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors {
|
||||||
anchors.margins: 5
|
top: parent.top
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
margins: 5
|
||||||
|
}
|
||||||
|
|
||||||
|
height: 70 - 2 * anchors.margins
|
||||||
|
|
||||||
Row {
|
Row {
|
||||||
id: partDelFirstRow
|
id: partDelFirstRow
|
||||||
|
@ -45,19 +73,25 @@ DataListView {
|
||||||
height: parent.height - partDelSecondRow.height
|
height: parent.height - partDelSecondRow.height
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
|
id: resultRankLa
|
||||||
|
|
||||||
height: parent.height
|
height: parent.height
|
||||||
width: parent.width * 0.1
|
width: parent.width * 0.1
|
||||||
|
|
||||||
|
enabled: text !== ""
|
||||||
|
|
||||||
fontSizeMode: Text.Fit
|
fontSizeMode: Text.Fit
|
||||||
font.bold: true
|
font.bold: true
|
||||||
font.pixelSize: Math.abs( partDelSecondRow.height > 0 ? height * 0.6:height * 0.4 )
|
font.pixelSize: Math.abs( partDelSecondRow.height > 0 ? height * 0.6:height * 0.4 )
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
|
||||||
text: listData[ "participants" ][index]["result_rank"]
|
text: listData[ "participants" ][index]["result_rank"] === undefined ? "":listData[ "participants" ][index]["result_rank"]
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
|
id: nameLa
|
||||||
|
|
||||||
height: parent.height
|
height: parent.height
|
||||||
width: parent.width * 0.5
|
width: parent.width * 0.5
|
||||||
|
|
||||||
|
@ -66,11 +100,14 @@ DataListView {
|
||||||
font.pixelSize: Math.abs( partDelSecondRow.height > 0 ? height * 0.6:height * 0.4 )
|
font.pixelSize: Math.abs( partDelSecondRow.height > 0 ? height * 0.6:height * 0.4 )
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
minimumPixelSize: 1
|
||||||
|
|
||||||
text: listData[ "participants" ][index]["firstname"] + " " + listData[ "participants" ][index]["lastname"]
|
text: listData[ "participants" ][index]["firstname"] + " " + listData[ "participants" ][index]["lastname"]
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
|
id: fedLa
|
||||||
|
|
||||||
height: parent.height
|
height: parent.height
|
||||||
width: parent.width * 0.4
|
width: parent.width * 0.4
|
||||||
|
|
||||||
|
@ -96,319 +133,160 @@ DataListView {
|
||||||
id: partDelSecondRow
|
id: partDelSecondRow
|
||||||
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: multiResRow.enabled || multiGenResRow.enabled || resultLa.enabled ? parent.height / 2:0
|
height: pointsLa.enabled ? parent.height / 2:0
|
||||||
|
|
||||||
Row {
|
Item {
|
||||||
id: multiResRow
|
id: spacer
|
||||||
|
|
||||||
height: parent.height
|
height: parent.height
|
||||||
width: enabled ? parent.width * 0.75:0
|
width: resultRankLa.width
|
||||||
|
|
||||||
enabled: parseInt(listData[ "route_order" ]) > -1 && boulderResRep.model > 0
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
id: boulderResRep
|
|
||||||
|
|
||||||
model: parseInt(listData[ "route_num_problems" ])
|
|
||||||
|
|
||||||
function getDataForIcon(index){
|
|
||||||
var resultString = listData[ "participants" ][partDel.ind]["boulder"+(index+1)]
|
|
||||||
|
|
||||||
var resultList = []
|
|
||||||
|
|
||||||
if( resultString !== undefined){
|
|
||||||
resultString = resultString.replace("t", "")
|
|
||||||
resultString = resultString.replace("z", "")
|
|
||||||
resultString = resultString.replace("b", "")
|
|
||||||
resultList = resultString.split(" ")
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
while (resultList.length < 2){
|
|
||||||
resultList.unshift(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
return resultList
|
|
||||||
}
|
|
||||||
|
|
||||||
delegate: Item {
|
|
||||||
id: boulderResItm
|
|
||||||
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
width: parent.width / ( boulderResRep.model )
|
|
||||||
height: parent.height
|
|
||||||
|
|
||||||
Canvas {
|
|
||||||
id: boulderResCv
|
|
||||||
|
|
||||||
property var resultData: boulderResRep.getDataForIcon(index)
|
|
||||||
|
|
||||||
anchors.centerIn: parent
|
|
||||||
|
|
||||||
height: parent.height > parent.width ? parent.width * 0.9:parent.height * 0.9
|
|
||||||
width: height
|
|
||||||
|
|
||||||
onPaint: {
|
|
||||||
var width = boulderResCv.width * 0.9
|
|
||||||
var height = boulderResCv.height * 0.9
|
|
||||||
|
|
||||||
var radius = width * 0.3
|
|
||||||
|
|
||||||
var offsetX = width * 0.05
|
|
||||||
var offsetY = height * 0.05
|
|
||||||
|
|
||||||
var context = getContext("2d");
|
|
||||||
|
|
||||||
context.beginPath();
|
|
||||||
|
|
||||||
context.moveTo(0 + offsetX + radius, 0 + offsetY);
|
|
||||||
|
|
||||||
// top line
|
|
||||||
context.lineTo(width - radius + offsetX, 0 + offsetY);
|
|
||||||
// top right corner
|
|
||||||
context.arc(width-radius + offsetX, radius + offsetY, radius, 1.5 * Math.PI, 0);
|
|
||||||
// right line
|
|
||||||
context.lineTo(width + offsetX, height - radius + offsetY);
|
|
||||||
// bottom right corner
|
|
||||||
context.arc(width-radius + offsetX, height - radius + offsetY, radius, 0, 0.5 * Math.PI);
|
|
||||||
// bottom line
|
|
||||||
context.lineTo(0 + radius + offsetX, height + offsetY);
|
|
||||||
// bottom left corner
|
|
||||||
context.arc(radius + offsetY, height - radius + offsetY, radius, 0.5 * Math.PI, Math.PI);
|
|
||||||
// left line
|
|
||||||
context.lineTo(0 + offsetX, radius + offsetY);
|
|
||||||
// top left corner
|
|
||||||
context.arc(radius + offsetX, radius + offsetY, radius, Math.PI, 1.5 * Math.PI);
|
|
||||||
|
|
||||||
// fill
|
|
||||||
context.fillStyle = "#b7b7b7";
|
|
||||||
context.fill();
|
|
||||||
|
|
||||||
// outline
|
|
||||||
context.lineWidth = 1;
|
|
||||||
context.strokeStyle = '#424242';
|
|
||||||
context.stroke();
|
|
||||||
|
|
||||||
if(resultData[1] > 0){
|
|
||||||
|
|
||||||
// the first triangle
|
|
||||||
context.beginPath();
|
|
||||||
|
|
||||||
// top right corner
|
|
||||||
context.arc(width-radius + offsetX, radius + offsetY, radius, 1.75 * Math.PI, 0);
|
|
||||||
|
|
||||||
// right line
|
|
||||||
context.lineTo(width + offsetX, height - radius + offsetY);
|
|
||||||
|
|
||||||
// bottom right corner
|
|
||||||
context.arc(width-radius + offsetX, height - radius + offsetY, radius, 0, 0.5 * Math.PI);
|
|
||||||
|
|
||||||
// bottom line
|
|
||||||
context.lineTo(0 + radius + offsetX, height + offsetY);
|
|
||||||
// bottom left corner
|
|
||||||
context.arc(radius + offsetX, height - radius + offsetY, radius, 0.5 * Math.PI, 0.75 * Math.PI);
|
|
||||||
context.closePath();
|
|
||||||
|
|
||||||
context.fillStyle = "#44ed38";
|
|
||||||
context.fill();
|
|
||||||
|
|
||||||
// outline
|
|
||||||
context.lineWidth = 1;
|
|
||||||
context.strokeStyle = '#424242';
|
|
||||||
context.stroke();
|
|
||||||
|
|
||||||
|
|
||||||
if(resultData[0] > 0){
|
|
||||||
// the second triangle
|
|
||||||
context.beginPath();
|
|
||||||
// bottom left corner
|
|
||||||
context.arc(radius + offsetX, height - radius + offsetY, radius, 0.75 * Math.PI, 1 * Math.PI);
|
|
||||||
// left line
|
|
||||||
context.lineTo(0 + offsetX, radius + offsetY);
|
|
||||||
// top left corner
|
|
||||||
context.arc(radius + offsetX, radius + offsetY, radius, Math.PI, 1.5 * Math.PI);
|
|
||||||
// top line
|
|
||||||
context.lineTo(width - radius + offsetX, 0 + offsetY);
|
|
||||||
// top right corner
|
|
||||||
context.arc(width-radius + offsetX, radius + offsetY, radius, 1.5 * Math.PI, 1.75 * Math.PI);
|
|
||||||
|
|
||||||
context.closePath();
|
|
||||||
|
|
||||||
context.fillStyle = "#44ed38";
|
|
||||||
context.fill();
|
|
||||||
|
|
||||||
// outline
|
|
||||||
context.lineWidth = 1;
|
|
||||||
context.strokeStyle = '#424242';
|
|
||||||
context.stroke();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
id: boulderResZoneLa
|
id: pointsLa
|
||||||
|
|
||||||
anchors {
|
|
||||||
right: parent.right
|
|
||||||
bottom: parent.bottom
|
|
||||||
margins: boulderResCv.height * 0.05
|
|
||||||
}
|
|
||||||
|
|
||||||
height: parent.height / 2
|
|
||||||
width: parent.width / 2
|
|
||||||
|
|
||||||
visible: text !== "0"
|
|
||||||
|
|
||||||
fontSizeMode: Text.Fit
|
|
||||||
font.pixelSize: height
|
|
||||||
minimumPixelSize: 0
|
|
||||||
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
|
|
||||||
text: boulderResCv.resultData[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
id: boulderResTopLa
|
|
||||||
|
|
||||||
anchors {
|
|
||||||
left: parent.left
|
|
||||||
top: parent.top
|
|
||||||
margins: boulderResCv.height * 0.05
|
|
||||||
}
|
|
||||||
|
|
||||||
height: parent.height / 2
|
|
||||||
width: parent.width / 2
|
|
||||||
|
|
||||||
visible: text !== "0"
|
|
||||||
|
|
||||||
fontSizeMode: Text.Fit
|
|
||||||
font.pixelSize: height
|
|
||||||
minimumPixelSize: 0
|
|
||||||
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
|
|
||||||
text: boulderResCv.resultData[0]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
|
||||||
id: multiGenResRow
|
|
||||||
|
|
||||||
height: parent.height
|
|
||||||
width: enabled ? parent.width - resultLa.width:0
|
|
||||||
|
|
||||||
enabled: ((parseInt(listData[ "route_order" ]) === -1) && (generalResRep.model > 0)) ? true:false
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
id: generalResRep
|
|
||||||
|
|
||||||
property var routes: getRoutes()
|
|
||||||
model: routes.length
|
|
||||||
|
|
||||||
function getRoutes() {
|
|
||||||
|
|
||||||
var obj = listData["route_names"]
|
|
||||||
var routes = []
|
|
||||||
|
|
||||||
for(var prop in obj) {
|
|
||||||
// go through the whole array and search for data keys
|
|
||||||
if (obj.hasOwnProperty(prop) && prop > -1) {
|
|
||||||
routes.push([prop, obj[prop]])
|
|
||||||
//console.log("found " + obj[prop] + " at index " + prop)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
routes.sort(function(a, b) {
|
|
||||||
return a[0] - b[0];
|
|
||||||
});
|
|
||||||
|
|
||||||
return routes
|
|
||||||
}
|
|
||||||
|
|
||||||
delegate: Item {
|
|
||||||
id: boulderGenResItm
|
|
||||||
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
width: parent.width / ( generalResRep.model )
|
|
||||||
height: parent.height
|
|
||||||
|
|
||||||
visible: boulderGenResLa.text != ""
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
|
|
||||||
anchors {
|
|
||||||
left: parent.left
|
|
||||||
}
|
|
||||||
|
|
||||||
width: 1
|
|
||||||
height: parent.height
|
|
||||||
|
|
||||||
visible: index === 0
|
|
||||||
|
|
||||||
color: "grey"
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
anchors {
|
|
||||||
right: parent.right
|
|
||||||
}
|
|
||||||
|
|
||||||
width: 1
|
|
||||||
height: parent.height
|
|
||||||
|
|
||||||
color: "grey"
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
id: boulderGenResLa
|
|
||||||
anchors.centerIn: parent
|
|
||||||
|
|
||||||
height: parent.height
|
|
||||||
width: parent.width * 0.9
|
|
||||||
|
|
||||||
fontSizeMode: Text.Fit
|
|
||||||
font.pixelSize: Math.abs( height * 0.6 )
|
|
||||||
minimumPixelSize: 0
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
|
|
||||||
text: listData[ "participants" ][partDel.ind]["result"+(generalResRep.routes[index][0])] === undefined ? "":listData[ "participants" ][partDel.ind]["result"+(generalResRep.routes[index][0])]
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
id: resultLa
|
|
||||||
|
|
||||||
width: enabled ? parent.width * 0.25:0
|
width: enabled ? parent.width * 0.25:0
|
||||||
height: enabled ? parent.height:0
|
height: enabled ? parent.height:0
|
||||||
|
|
||||||
enabled: ( boulderResRep.model > 0 || listData["discipline"] !== "boulder" ) && parseInt(listData[ "route_order" ]) > -1
|
|
||||||
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
|
||||||
fontSizeMode: Text.Fit
|
fontSizeMode: Text.Fit
|
||||||
font.pixelSize: Math.abs( height * 0.6 )
|
font.pixelSize: Math.abs( height * 0.6 )
|
||||||
minimumPixelSize: 0
|
minimumPixelSize: 1
|
||||||
|
|
||||||
text: listData[ "participants" ][partDel.ind]["result"] === undefined ? "":listData[ "participants" ][partDel.ind]["result"]
|
text: listData[ "participants" ][partDel.ind]["points"] === undefined ? "":"points: "+listData[ "participants" ][partDel.ind]["points"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Column {
|
||||||
|
id: detailResultsCol
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
top: partDelCol.bottom
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
margins: 5
|
||||||
|
}
|
||||||
|
|
||||||
|
height: enabled ? ( 20 + spacing ) * detailResultRowRep.model:0
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
id: detailResultRowRep
|
||||||
|
|
||||||
|
property var compResults: getCompResults()
|
||||||
|
|
||||||
|
model: compResults.length
|
||||||
|
|
||||||
|
function getCompResults() {
|
||||||
|
|
||||||
|
var obj = control.listData["route_names"]
|
||||||
|
var resultData = []
|
||||||
|
|
||||||
|
for(var prop in obj) {
|
||||||
|
// go through the whole array and search for data keys
|
||||||
|
if (obj.hasOwnProperty(prop) && control.listData["participants"][partDel.ind]["result" + prop.replace(" ", "")] !== undefined ) {
|
||||||
|
resultData.unshift([prop, obj[prop].replace("\n", " - ")])
|
||||||
|
//console.log("found " + obj[prop] + " at index " + prop)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultData
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate: Row {
|
||||||
|
width: parent.width
|
||||||
|
height: detailResultsCol.height / detailResultRowRep.model - detailResultsCol.spacing
|
||||||
|
|
||||||
|
visible: height > 0
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: spacer_
|
||||||
|
|
||||||
|
height: parent.height
|
||||||
|
width: parent.width * 0.15
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
|
||||||
|
height: parent.height
|
||||||
|
width: parent.width / 2
|
||||||
|
|
||||||
|
fontSizeMode: Text.Fit
|
||||||
|
font.bold: true
|
||||||
|
font.pixelSize: Math.abs( partDelSecondRow.height > 0 ? height * 0.6:height * 0.4 )
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
minimumPixelSize: 1
|
||||||
|
|
||||||
|
text: detailResultRowRep.compResults[index][1]
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: detailResultListLa
|
||||||
|
|
||||||
|
height: parent.height
|
||||||
|
width: parent.width * 0.35
|
||||||
|
|
||||||
|
fontSizeMode: Text.Fit
|
||||||
|
font.pixelSize: Math.abs( partDelSecondRow.height > 0 ? height * 0.6:height * 0.4 )
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
minimumPixelSize: 1
|
||||||
|
|
||||||
|
text: control.listData["participants"][partDel.ind]["result"+detailResultRowRep.compResults[index][0].replace(" ", "")] === undefined ? "":control.listData["participants"][partDel.ind]["result"+detailResultRowRep.compResults[index][0].replace(" ", "")].replace("\n", " ")
|
||||||
|
}
|
||||||
|
|
||||||
|
Behavior on height {
|
||||||
|
NumberAnimation {
|
||||||
|
duration: 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
states: [
|
||||||
|
State {
|
||||||
|
name: "closed"
|
||||||
|
PropertyChanges {
|
||||||
|
target: partDel
|
||||||
|
height: 70
|
||||||
|
}
|
||||||
|
|
||||||
|
PropertyChanges {
|
||||||
|
target: detailResultsCol
|
||||||
|
enabled: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
State {
|
||||||
|
name: "opened"
|
||||||
|
PropertyChanges {
|
||||||
|
target: partDel
|
||||||
|
height: 70 + detailResultsCol.height
|
||||||
|
}
|
||||||
|
|
||||||
|
PropertyChanges {
|
||||||
|
target: detailResultsCol
|
||||||
|
enabled: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
transitions: [
|
||||||
|
Transition {
|
||||||
|
from: "*"
|
||||||
|
to: "*"
|
||||||
|
NumberAnimation {
|
||||||
|
properties: "height"
|
||||||
|
duration: 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,5 +57,4 @@ DataListView {
|
||||||
|
|
||||||
return listData[ "athletes" ][index]["firstname"] + " " + listData[ "athletes" ][index]["lastname"] + " (" + fedName + ")"
|
return listData[ "athletes" ][index]["firstname"] + " " + listData[ "athletes" ][index]["lastname"] + " (" + fedName + ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
417
resources/qml/Components/ResultView.qml
Normal file
|
@ -0,0 +1,417 @@
|
||||||
|
import QtQuick 2.9
|
||||||
|
import QtQuick.Controls 2.4
|
||||||
|
|
||||||
|
DataListView {
|
||||||
|
id: control
|
||||||
|
|
||||||
|
property var listData: ({})
|
||||||
|
|
||||||
|
onListDataChanged: {
|
||||||
|
model = listData[ root.listKey ] === undefined ? 0:listData[ root.listKey ].length
|
||||||
|
}
|
||||||
|
|
||||||
|
model: listData[ root.listKey ] === undefined ? 0:listData[ root.listKey ].length
|
||||||
|
|
||||||
|
delegate: ItemDelegate {
|
||||||
|
id: partDel
|
||||||
|
|
||||||
|
property int ind: index
|
||||||
|
|
||||||
|
width: parent.width
|
||||||
|
height: 70
|
||||||
|
|
||||||
|
text: ""
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
width: partDel.width
|
||||||
|
|
||||||
|
color: partDel.ind % 2 == 0 ? "white":"lightgrey"
|
||||||
|
|
||||||
|
opacity: 0.2
|
||||||
|
}
|
||||||
|
|
||||||
|
Column {
|
||||||
|
id: partDelCol
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: 5
|
||||||
|
|
||||||
|
Row {
|
||||||
|
id: partDelFirstRow
|
||||||
|
|
||||||
|
width: parent.width
|
||||||
|
height: parent.height - partDelSecondRow.height
|
||||||
|
|
||||||
|
Label {
|
||||||
|
height: parent.height
|
||||||
|
width: parent.width * 0.1
|
||||||
|
|
||||||
|
fontSizeMode: Text.Fit
|
||||||
|
font.bold: true
|
||||||
|
font.pixelSize: Math.abs( partDelSecondRow.height > 0 ? height * 0.6:height * 0.4 )
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
|
||||||
|
text: listData[ "participants" ][index]["result_rank"]
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
height: parent.height
|
||||||
|
width: parent.width * 0.5
|
||||||
|
|
||||||
|
fontSizeMode: Text.Fit
|
||||||
|
font.bold: true
|
||||||
|
font.pixelSize: Math.abs( partDelSecondRow.height > 0 ? height * 0.6:height * 0.4 )
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
|
||||||
|
text: listData[ "participants" ][index]["firstname"] + " " + listData[ "participants" ][index]["lastname"]
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
height: parent.height
|
||||||
|
width: parent.width * 0.4
|
||||||
|
|
||||||
|
fontSizeMode: Text.Fit
|
||||||
|
font.bold: false
|
||||||
|
font.pixelSize: Math.abs( partDelSecondRow.height > 0 ? height * 0.4:height * 0.3 )
|
||||||
|
minimumPixelSize: height * 0.3
|
||||||
|
|
||||||
|
elide: "ElideRight"
|
||||||
|
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
|
||||||
|
text: "<html>(<a href=\"" + (listData[ "participants" ][index]["fed_url"] === undefined ? "":listData[ "participants" ][index]["fed_url"]).toString() + "\">" + (listData[ "display_athlete" ] === "nation" ? listData[ "participants" ][index]["nation"] : listData[ "participants" ][index]["federation"]) + "</a>)</html>"
|
||||||
|
|
||||||
|
onLinkActivated: {
|
||||||
|
Qt.openUrlExternally(link)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Row {
|
||||||
|
id: partDelSecondRow
|
||||||
|
|
||||||
|
width: parent.width
|
||||||
|
height: multiResRow.enabled || multiGenResRow.enabled || resultLa.enabled ? parent.height / 2:0
|
||||||
|
|
||||||
|
Row {
|
||||||
|
id: multiResRow
|
||||||
|
|
||||||
|
height: parent.height
|
||||||
|
width: enabled ? parent.width * 0.75:0
|
||||||
|
|
||||||
|
enabled: parseInt(listData[ "route_order" ]) > -1 && boulderResRep.model > 0
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
id: boulderResRep
|
||||||
|
|
||||||
|
model: parseInt(listData[ "route_num_problems" ])
|
||||||
|
|
||||||
|
function getDataForIcon(index){
|
||||||
|
var resultString = listData[ "participants" ][partDel.ind]["boulder"+(index+1)]
|
||||||
|
|
||||||
|
var resultList = []
|
||||||
|
|
||||||
|
if( resultString !== undefined){
|
||||||
|
resultString = resultString.replace("t", "")
|
||||||
|
resultString = resultString.replace("z", "")
|
||||||
|
resultString = resultString.replace("b", "")
|
||||||
|
resultList = resultString.split(" ")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
while (resultList.length < 2){
|
||||||
|
resultList.unshift(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultList
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate: Item {
|
||||||
|
id: boulderResItm
|
||||||
|
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
|
||||||
|
width: parent.width / ( boulderResRep.model )
|
||||||
|
height: parent.height
|
||||||
|
|
||||||
|
Canvas {
|
||||||
|
id: boulderResCv
|
||||||
|
|
||||||
|
property var resultData: boulderResRep.getDataForIcon(index)
|
||||||
|
|
||||||
|
anchors.centerIn: parent
|
||||||
|
|
||||||
|
height: parent.height > parent.width ? parent.width * 0.9:parent.height * 0.9
|
||||||
|
width: height
|
||||||
|
|
||||||
|
onPaint: {
|
||||||
|
var width = 24//boulderResCv.width * 0.9
|
||||||
|
var height = width
|
||||||
|
|
||||||
|
var radius = width * 0.3
|
||||||
|
|
||||||
|
var offsetX = width * 0.05
|
||||||
|
var offsetY = height * 0.05
|
||||||
|
|
||||||
|
console.log("drawing result rect with width: " + width + " and height: " + height)
|
||||||
|
|
||||||
|
var context = getContext("2d");
|
||||||
|
|
||||||
|
context.beginPath();
|
||||||
|
|
||||||
|
context.moveTo(0 + offsetX + radius, 0 + offsetY);
|
||||||
|
|
||||||
|
// top line
|
||||||
|
context.lineTo(width - radius + offsetX, 0 + offsetY);
|
||||||
|
// top right corner
|
||||||
|
context.arc(width-radius + offsetX, radius + offsetY, radius, 1.5 * Math.PI, 0);
|
||||||
|
// right line
|
||||||
|
context.lineTo(width + offsetX, height - radius + offsetY);
|
||||||
|
// bottom right corner
|
||||||
|
context.arc(width-radius + offsetX, height - radius + offsetY, radius, 0, 0.5 * Math.PI);
|
||||||
|
// bottom line
|
||||||
|
context.lineTo(0 + radius + offsetX, height + offsetY);
|
||||||
|
// bottom left corner
|
||||||
|
context.arc(radius + offsetY, height - radius + offsetY, radius, 0.5 * Math.PI, Math.PI);
|
||||||
|
// left line
|
||||||
|
context.lineTo(0 + offsetX, radius + offsetY);
|
||||||
|
// top left corner
|
||||||
|
context.arc(radius + offsetX, radius + offsetY, radius, Math.PI, 1.5 * Math.PI);
|
||||||
|
|
||||||
|
// fill
|
||||||
|
context.fillStyle = "#b7b7b7";
|
||||||
|
context.fill();
|
||||||
|
|
||||||
|
// outline
|
||||||
|
context.lineWidth = 1;
|
||||||
|
context.strokeStyle = '#424242';
|
||||||
|
context.stroke();
|
||||||
|
|
||||||
|
if(resultData[1] > 0){
|
||||||
|
|
||||||
|
// the first triangle
|
||||||
|
context.beginPath();
|
||||||
|
|
||||||
|
// top right corner
|
||||||
|
context.arc(width-radius + offsetX, radius + offsetY, radius, 1.75 * Math.PI, 0);
|
||||||
|
|
||||||
|
// right line
|
||||||
|
context.lineTo(width + offsetX, height - radius + offsetY);
|
||||||
|
|
||||||
|
// bottom right corner
|
||||||
|
context.arc(width-radius + offsetX, height - radius + offsetY, radius, 0, 0.5 * Math.PI);
|
||||||
|
|
||||||
|
// bottom line
|
||||||
|
context.lineTo(0 + radius + offsetX, height + offsetY);
|
||||||
|
// bottom left corner
|
||||||
|
context.arc(radius + offsetX, height - radius + offsetY, radius, 0.5 * Math.PI, 0.75 * Math.PI);
|
||||||
|
context.closePath();
|
||||||
|
|
||||||
|
context.fillStyle = "#44ed38";
|
||||||
|
context.fill();
|
||||||
|
|
||||||
|
// outline
|
||||||
|
context.lineWidth = 1;
|
||||||
|
context.strokeStyle = '#424242';
|
||||||
|
context.stroke();
|
||||||
|
|
||||||
|
|
||||||
|
if(resultData[0] > 0){
|
||||||
|
// the second triangle
|
||||||
|
context.beginPath();
|
||||||
|
// bottom left corner
|
||||||
|
context.arc(radius + offsetX, height - radius + offsetY, radius, 0.75 * Math.PI, 1 * Math.PI);
|
||||||
|
// left line
|
||||||
|
context.lineTo(0 + offsetX, radius + offsetY);
|
||||||
|
// top left corner
|
||||||
|
context.arc(radius + offsetX, radius + offsetY, radius, Math.PI, 1.5 * Math.PI);
|
||||||
|
// top line
|
||||||
|
context.lineTo(width - radius + offsetX, 0 + offsetY);
|
||||||
|
// top right corner
|
||||||
|
context.arc(width-radius + offsetX, radius + offsetY, radius, 1.5 * Math.PI, 1.75 * Math.PI);
|
||||||
|
|
||||||
|
context.closePath();
|
||||||
|
|
||||||
|
context.fillStyle = "#44ed38";
|
||||||
|
context.fill();
|
||||||
|
|
||||||
|
// outline
|
||||||
|
context.lineWidth = 1;
|
||||||
|
context.strokeStyle = '#424242';
|
||||||
|
context.stroke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: boulderResZoneLa
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
right: parent.right
|
||||||
|
bottom: parent.bottom
|
||||||
|
margins: boulderResCv.height * 0.05
|
||||||
|
}
|
||||||
|
|
||||||
|
height: parent.height / 2
|
||||||
|
width: parent.width / 2
|
||||||
|
|
||||||
|
visible: text !== "0"
|
||||||
|
|
||||||
|
fontSizeMode: Text.Fit
|
||||||
|
font.pixelSize: height
|
||||||
|
minimumPixelSize: 1
|
||||||
|
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
|
||||||
|
text: boulderResCv.resultData[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: boulderResTopLa
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
top: parent.top
|
||||||
|
margins: boulderResCv.height * 0.05
|
||||||
|
}
|
||||||
|
|
||||||
|
height: parent.height / 2
|
||||||
|
width: parent.width / 2
|
||||||
|
|
||||||
|
visible: text !== "0"
|
||||||
|
|
||||||
|
fontSizeMode: Text.Fit
|
||||||
|
font.pixelSize: height
|
||||||
|
minimumPixelSize: 1
|
||||||
|
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
|
||||||
|
text: boulderResCv.resultData[0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Row {
|
||||||
|
id: multiGenResRow
|
||||||
|
|
||||||
|
height: parent.height
|
||||||
|
width: enabled ? parent.width - resultLa.width:0
|
||||||
|
|
||||||
|
enabled: ((parseInt(listData[ "route_order" ]) === -1) && (generalResRep.model > 0)) ? true:false
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
id: generalResRep
|
||||||
|
|
||||||
|
property var routes: getRoutes()
|
||||||
|
model: routes.length
|
||||||
|
|
||||||
|
function getRoutes() {
|
||||||
|
|
||||||
|
var obj = listData["route_names"]
|
||||||
|
var routes = []
|
||||||
|
|
||||||
|
for(var prop in obj) {
|
||||||
|
// go through the whole array and search for data keys
|
||||||
|
if (obj.hasOwnProperty(prop) && prop > -1) {
|
||||||
|
routes.push([prop, obj[prop]])
|
||||||
|
//console.log("found " + obj[prop] + " at index " + prop)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
routes.sort(function(a, b) {
|
||||||
|
return a[0] - b[0];
|
||||||
|
});
|
||||||
|
|
||||||
|
return routes
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate: Item {
|
||||||
|
id: boulderGenResItm
|
||||||
|
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
|
||||||
|
width: parent.width / ( generalResRep.model )
|
||||||
|
height: parent.height
|
||||||
|
|
||||||
|
visible: boulderGenResLa.text != ""
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
}
|
||||||
|
|
||||||
|
width: 1
|
||||||
|
height: parent.height
|
||||||
|
|
||||||
|
visible: index === 0
|
||||||
|
|
||||||
|
color: "grey"
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors {
|
||||||
|
right: parent.right
|
||||||
|
}
|
||||||
|
|
||||||
|
width: 1
|
||||||
|
height: parent.height
|
||||||
|
|
||||||
|
color: "grey"
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: boulderGenResLa
|
||||||
|
anchors.centerIn: parent
|
||||||
|
|
||||||
|
height: parent.height
|
||||||
|
width: parent.width * 0.9
|
||||||
|
|
||||||
|
fontSizeMode: Text.Fit
|
||||||
|
font.pixelSize: Math.abs( height * 0.6 )
|
||||||
|
minimumPixelSize: 1
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
|
||||||
|
text: listData[ "participants" ][partDel.ind]["result"+(generalResRep.routes[index][0])] === undefined ? "":listData[ "participants" ][partDel.ind]["result"+(generalResRep.routes[index][0])]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: resultLa
|
||||||
|
|
||||||
|
width: enabled ? parent.width * 0.25:0
|
||||||
|
height: enabled ? parent.height:0
|
||||||
|
|
||||||
|
enabled: ( boulderResRep.model > 0 || listData["discipline"] !== "boulder" ) && parseInt(listData[ "route_order" ]) > -1
|
||||||
|
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
|
||||||
|
fontSizeMode: Text.Fit
|
||||||
|
font.pixelSize: Math.abs( height * 0.6 )
|
||||||
|
minimumPixelSize: 1
|
||||||
|
|
||||||
|
text: listData[ "participants" ][partDel.ind]["result"] === undefined ? "":listData[ "participants" ][partDel.ind]["result"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -36,20 +36,21 @@ DataListView {
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
height: parent.height
|
height: parent.height
|
||||||
width: parent.width * 0.4
|
width: parent.width * 0.5
|
||||||
|
|
||||||
fontSizeMode: Text.Fit
|
fontSizeMode: Text.Fit
|
||||||
font.bold: true
|
font.bold: true
|
||||||
font.pixelSize: Math.abs( height * 0.6 )
|
font.pixelSize: Math.abs( height * 0.45 )
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
minimumPixelSize: 1
|
||||||
|
|
||||||
text: listData[ "participants" ][index]["firstname"] + " " + listData[ "participants" ][index]["lastname"]
|
text: listData[ "participants" ][index]["firstname"] + " " + listData[ "participants" ][index]["lastname"]
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
height: parent.height
|
height: parent.height
|
||||||
width: parent.width * 0.5
|
width: parent.width * 0.3
|
||||||
|
|
||||||
fontSizeMode: Text.Fit
|
fontSizeMode: Text.Fit
|
||||||
font.bold: false
|
font.bold: false
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.9
|
||||||
import QtQuick.Controls 2.4
|
import QtQuick.Controls 2.4
|
||||||
import QtQuick.Controls.Material 2.3
|
import QtQuick.Controls.Material 2.3
|
||||||
|
|
||||||
|
@ -16,49 +16,91 @@ Page {
|
||||||
|
|
||||||
Row {
|
Row {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
anchors.rightMargin: parent.width * 0.05
|
anchors.rightMargin: 5
|
||||||
|
|
||||||
spacing: anchors.rightMargin
|
spacing: width * 0.05
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
|
||||||
width: parent.width - toolButton.width - parent.spacing
|
width: parent.width * 0.4
|
||||||
height: parent.height * 0.6
|
height: parent.height * 0.6
|
||||||
|
|
||||||
fontSizeMode: Text.Fit
|
fontSizeMode: Text.Fit
|
||||||
font.pixelSize: height
|
font.pixelSize: height
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
horizontalAlignment: Text.AlignRight
|
horizontalAlignment: Text.AlignHCenter
|
||||||
minimumPixelSize: 0
|
minimumPixelSize: 1
|
||||||
|
|
||||||
text: root.year
|
text: root.year
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
id:toolButton
|
id:yearToolBt
|
||||||
|
|
||||||
anchors {
|
anchors {
|
||||||
verticalCenter: parent.verticalCenter
|
verticalCenter: parent.verticalCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
height: parent.height * 0.5
|
height: parent.height * 0.5
|
||||||
width: height
|
width: parent.width * 0.25
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
yearSelectPu.open()
|
yearSelectPu.open()
|
||||||
}
|
}
|
||||||
|
|
||||||
onPressed: toolButton.scale = 0.9
|
onPressed: yearToolBt.scale = 0.9
|
||||||
onReleased: toolButton.scale = 1.0
|
onReleased: yearToolBt.scale = 1.0
|
||||||
|
|
||||||
background: Image {
|
background: Image {
|
||||||
|
|
||||||
|
anchors.centerIn: parent
|
||||||
|
|
||||||
source: "qrc:/icons/calendar.png"
|
source: "qrc:/icons/calendar.png"
|
||||||
|
|
||||||
height: parent.height
|
height: parent.height > parent.width ? parent.width : parent.height
|
||||||
width: height
|
width: height
|
||||||
|
|
||||||
|
mipmap: true
|
||||||
|
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
Behavior on scale {
|
||||||
|
PropertyAnimation {
|
||||||
|
duration: 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button {
|
||||||
|
id: cupToolBt
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
height: parent.height * 0.5
|
||||||
|
width: parent.width * 0.25
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
cupSelectPu.open()
|
||||||
|
}
|
||||||
|
|
||||||
|
onPressed: cupToolBt.scale = 0.9
|
||||||
|
onReleased: cupToolBt.scale = 1.0
|
||||||
|
|
||||||
|
background: Image {
|
||||||
|
|
||||||
|
anchors.centerIn: parent
|
||||||
|
|
||||||
|
source: "qrc:/icons/cup.png"
|
||||||
|
|
||||||
|
height: parent.height > parent.width ? parent.width : parent.height
|
||||||
|
width: height
|
||||||
|
|
||||||
|
mipmap: true
|
||||||
|
|
||||||
fillMode: Image.PreserveAspectFit
|
fillMode: Image.PreserveAspectFit
|
||||||
Behavior on scale {
|
Behavior on scale {
|
||||||
PropertyAnimation {
|
PropertyAnimation {
|
||||||
|
@ -93,6 +135,9 @@ Page {
|
||||||
root.status = 200
|
root.status = 200
|
||||||
root.calendarData = ret["data"]
|
root.calendarData = ret["data"]
|
||||||
calendarList.listData = ret["data"]["competitions"]
|
calendarList.listData = ret["data"]["competitions"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (root.calendarData !== undefined ){
|
else if (root.calendarData !== undefined ){
|
||||||
// there is still old data available
|
// there is still old data available
|
||||||
|
@ -112,6 +157,7 @@ Page {
|
||||||
|
|
||||||
loadingDl.close()
|
loadingDl.close()
|
||||||
app.errorCode = root.status
|
app.errorCode = root.status
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,6 +178,34 @@ Page {
|
||||||
root.loadData(root.nation, root.year)
|
root.loadData(root.nation, root.year)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onModelChanged: {
|
||||||
|
autoScroll()
|
||||||
|
}
|
||||||
|
|
||||||
|
function autoScroll() {
|
||||||
|
if(parseInt(root.year) === new Date().getFullYear()){
|
||||||
|
for(var i = 0; i < listData.length; i ++){
|
||||||
|
// get the start date pf the competition
|
||||||
|
var startDate = Date.fromLocaleString(Qt.locale(), calendarList.listData[i]["date"], "yyyy-MM-dd")
|
||||||
|
|
||||||
|
// get the duration of the competition
|
||||||
|
var durationString = calendarList.listData[i]["duration"] === undefined ? "1":calendarList.listData[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(calendarList.listData[i]["date"] + ": " + startDate + " to " + endDate)
|
||||||
|
|
||||||
|
if(endDate.getTime() < new Date().getTime()){
|
||||||
|
// end date is already over -> move the list view up!
|
||||||
|
calendarList.positionViewAtIndex(i, ListView.Top)
|
||||||
|
//console.log("moving down!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
delegate: ItemDelegate {
|
delegate: ItemDelegate {
|
||||||
id: competitionDel
|
id: competitionDel
|
||||||
|
|
||||||
|
@ -139,12 +213,15 @@ Page {
|
||||||
property string date: calendarList.listData[index]["date_span"]
|
property string date: calendarList.listData[index]["date_span"]
|
||||||
property var cats: calendarList.listData[index]["cats"]
|
property var cats: calendarList.listData[index]["cats"]
|
||||||
property int catId: calendarList.listData[index]["cat_id"]
|
property int catId: calendarList.listData[index]["cat_id"]
|
||||||
|
property bool over
|
||||||
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: compDelCol.height + 10
|
height: compDelCol.height + 10
|
||||||
|
|
||||||
|
enabled: calendarList.listData[index]["cats"] !== undefined && calendarList.listData[index]["cats"].length > 0
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
catSelectPu.appear(index)
|
catSelectPu.appear(index, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
|
@ -155,7 +232,6 @@ Page {
|
||||||
opacity: 0.5
|
opacity: 0.5
|
||||||
|
|
||||||
color: app.competitionCategoryColors[catId]
|
color: app.competitionCategoryColors[catId]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
|
@ -217,48 +293,125 @@ Page {
|
||||||
id: catSelectPu
|
id: catSelectPu
|
||||||
|
|
||||||
property int index: -1
|
property int index: -1
|
||||||
property var catObj: calendarList.listData[catSelectPu.index] !== undefined ? calendarList.listData[catSelectPu.index]["cats"]:undefined
|
property bool cupCat: false
|
||||||
|
property var catObj: undefined
|
||||||
|
|
||||||
x: root.width / 2 - width / 2
|
x: 0 //root.width / 2 - width / 2
|
||||||
y: root.height / 2 - height / 2
|
y: root.height - height //root.height / 2 - height / 2
|
||||||
|
|
||||||
width: root.width * 0.8
|
width: root.width
|
||||||
height: root.height * 0.6
|
height: catsLv.height //root.height * 0.6
|
||||||
|
|
||||||
modal: true
|
modal: true
|
||||||
focus: true
|
focus: true
|
||||||
|
|
||||||
title: qsTr("select category")
|
title: qsTr("select category")
|
||||||
|
|
||||||
function appear(index) {
|
function appear(index, cupCat) {
|
||||||
catSelectPu.open()
|
catSelectPu.cupCat = cupCat
|
||||||
catSelectPu.index = index
|
catSelectPu.index = index
|
||||||
|
|
||||||
|
if(cupCat){
|
||||||
|
catSelectPu.catObj = root.calendarData["cups"][index]["cats"]
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
catSelectPu.catObj = calendarList.listData[index]["cats"]
|
||||||
}
|
}
|
||||||
|
|
||||||
contentItem: ListView {
|
catSelectPu.open()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function getText(index){
|
||||||
|
// ----------------------------
|
||||||
|
// get the text
|
||||||
|
// returns list with [catId, catName]
|
||||||
|
|
||||||
|
if(catSelectPu.cupCat){
|
||||||
|
var catName // category name
|
||||||
|
var catId // category id
|
||||||
|
|
||||||
|
for(var i = 0; i < root.calendarData["cats"].length; i ++ ){
|
||||||
|
//console.log("checking " + i + ": cat: " + parseInt(listData["categorys"][i]["GrpId"]) + " searched cat: " + root.catId)
|
||||||
|
if(root.calendarData["cats"][i]["rkey"] === root.calendarData["cups"][catSelectPu.index]["cats"][index] && root.calendarData["cats"][i]["sex"] !== undefined){
|
||||||
|
catName = root.calendarData["cats"][i]["name"]
|
||||||
|
catId = root.calendarData["cats"][i]["GrpId"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [catId, catName]
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return [catSelectPu.catObj[index]["GrpId"], catSelectPu.catObj[index]["name"]]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ListView {
|
||||||
id: catsLv
|
id: catsLv
|
||||||
|
|
||||||
|
property int delegateHeight: 50
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
top: parent.top
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
}
|
||||||
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: root.height * 0.6
|
height: root.height * 0.6 < ( (delegateHeight + spacing) * model ) ? root.height * 0.6 : (delegateHeight + spacing) * model + 75
|
||||||
|
|
||||||
model: catSelectPu.catObj !== undefined ? catSelectPu.catObj.length:0
|
model: catSelectPu.catObj !== undefined ? catSelectPu.catObj.length:0
|
||||||
|
|
||||||
|
ScrollIndicator.vertical: ScrollIndicator {
|
||||||
|
parent: catsLv.parent
|
||||||
|
anchors {
|
||||||
|
top: catsLv.top
|
||||||
|
left: catsLv.right
|
||||||
|
margins: 10
|
||||||
|
leftMargin: 3
|
||||||
|
bottom: catsLv.bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
delegate: Button {
|
delegate: Button {
|
||||||
id: catBt
|
id: catBt
|
||||||
|
|
||||||
|
property var catData: catSelectPu.getText(index)
|
||||||
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
height: text !== "" ? catsLv.delegateHeight:0
|
||||||
|
|
||||||
flat: true
|
flat: true
|
||||||
|
|
||||||
text: catSelectPu.catObj[index]["name"]
|
text: catData[1]
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
catSelectPu.close()
|
catSelectPu.close()
|
||||||
app.openResults(calendarList.listData[catSelectPu.index]["WetId"], catSelectPu.catObj[index]["GrpId"], catSelectPu.catObj[index]["status"] )
|
app.openResults( catSelectPu.cupCat ? root.calendarData["cups"][catSelectPu.index]["SerId"]:calendarList.listData[catSelectPu.index]["WetId"], catData[0], catSelectPu.cupCat ? -1:catSelectPu.catObj[index]["status"] )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enter: Transition {
|
||||||
|
NumberAnimation { property: "opacity"; from: 0.0; to: 1.0 }
|
||||||
|
NumberAnimation {
|
||||||
|
property: "y"
|
||||||
|
from: root.height - catSelectPu.height * 0.7
|
||||||
|
to: root.height - catSelectPu.height
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit: Transition {
|
||||||
|
NumberAnimation { property: "opacity"; from: 1.0; to: 0.0 }
|
||||||
|
NumberAnimation {
|
||||||
|
property: "y"
|
||||||
|
from: root.height - catSelectPu.height
|
||||||
|
to: root.height - catSelectPu.height * 0.7
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Dialog {
|
Dialog {
|
||||||
|
@ -266,10 +419,10 @@ Page {
|
||||||
|
|
||||||
property var yearList: root.calendarData["years"]
|
property var yearList: root.calendarData["years"]
|
||||||
|
|
||||||
x: root.width / 2 - width / 2
|
x: 0 //root.width / 2 - width / 2
|
||||||
y: root.height / 2 - height / 2
|
y: root.height - height //root.height / 2 - height / 2
|
||||||
|
|
||||||
width: root.width * 0.8
|
width: root.width
|
||||||
height: root.height * 0.6
|
height: root.height * 0.6
|
||||||
|
|
||||||
modal: true
|
modal: true
|
||||||
|
@ -285,6 +438,20 @@ Page {
|
||||||
|
|
||||||
model: yearSelectPu.yearList !== undefined ? yearSelectPu.yearList.length:0
|
model: yearSelectPu.yearList !== undefined ? yearSelectPu.yearList.length:0
|
||||||
|
|
||||||
|
clip: true
|
||||||
|
|
||||||
|
ScrollIndicator.vertical: ScrollIndicator {
|
||||||
|
parent: yearsLv.parent
|
||||||
|
anchors {
|
||||||
|
top: yearsLv.top
|
||||||
|
left: yearsLv.right
|
||||||
|
margins: 10
|
||||||
|
leftMargin: 3
|
||||||
|
bottom: yearsLv.bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
delegate: Button {
|
delegate: Button {
|
||||||
id: yearBt
|
id: yearBt
|
||||||
|
|
||||||
|
@ -302,6 +469,111 @@ Page {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enter: Transition {
|
||||||
|
NumberAnimation { property: "opacity"; from: 0.0; to: 1.0 }
|
||||||
|
NumberAnimation {
|
||||||
|
property: "y"
|
||||||
|
from: root.height - yearSelectPu.height * 0.7
|
||||||
|
to: root.height - yearSelectPu.height
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit: Transition {
|
||||||
|
NumberAnimation { property: "opacity"; from: 1.0; to: 0.0 }
|
||||||
|
NumberAnimation {
|
||||||
|
property: "y"
|
||||||
|
from: root.height - yearSelectPu.height
|
||||||
|
to: root.height - yearSelectPu.height * 0.7
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Dialog {
|
||||||
|
id: cupSelectPu
|
||||||
|
|
||||||
|
property var cupList: getCupList()
|
||||||
|
|
||||||
|
function getCupList() {
|
||||||
|
if(root.nation === "") {
|
||||||
|
root.calendarData["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"]})
|
||||||
|
}
|
||||||
|
return root.calendarData["cups"]
|
||||||
|
}
|
||||||
|
|
||||||
|
x: 0 //root.width / 2 - width / 2
|
||||||
|
y: root.height - height //root.height / 2 - height / 2
|
||||||
|
|
||||||
|
width: root.width
|
||||||
|
height: cupsLv.height //root.height * 0.6
|
||||||
|
|
||||||
|
modal: true
|
||||||
|
focus: true
|
||||||
|
|
||||||
|
title: qsTr("select cup")
|
||||||
|
|
||||||
|
ListView {
|
||||||
|
id: cupsLv
|
||||||
|
|
||||||
|
property int delegateHeight: 50
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
top: parent.top
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
}
|
||||||
|
|
||||||
|
width: parent.width
|
||||||
|
height: root.height * 0.6 < ( (delegateHeight + spacing) * model ) ? root.height * 0.6 : (delegateHeight + spacing) * model + 75
|
||||||
|
|
||||||
|
model: cupSelectPu.cupList !== undefined ? cupSelectPu.cupList.length:0
|
||||||
|
|
||||||
|
ScrollIndicator.vertical: ScrollIndicator {
|
||||||
|
parent: cupsLv.parent
|
||||||
|
anchors {
|
||||||
|
top: cupsLv.top
|
||||||
|
left: cupsLv.right
|
||||||
|
margins: 10
|
||||||
|
leftMargin: 3
|
||||||
|
bottom: cupsLv.bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate: Button {
|
||||||
|
id: cupBt
|
||||||
|
|
||||||
|
width: parent.width
|
||||||
|
height: cupsLv.delegateHeight
|
||||||
|
|
||||||
|
flat: true
|
||||||
|
|
||||||
|
text: cupSelectPu.cupList[index]["name"]
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
cupSelectPu.close()
|
||||||
|
catSelectPu.appear(index, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enter: Transition {
|
||||||
|
NumberAnimation { property: "opacity"; from: 0.0; to: 1.0 }
|
||||||
|
NumberAnimation {
|
||||||
|
property: "y"
|
||||||
|
from: root.height - cupSelectPu.height * 0.7
|
||||||
|
to: root.height - cupSelectPu.height
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit: Transition {
|
||||||
|
NumberAnimation { property: "opacity"; from: 1.0; to: 0.0 }
|
||||||
|
NumberAnimation {
|
||||||
|
property: "y"
|
||||||
|
from: root.height - cupSelectPu.height
|
||||||
|
to: root.height - cupSelectPu.height * 0.7
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.9
|
||||||
import QtQuick.Controls 2.4
|
import QtQuick.Controls 2.4
|
||||||
import QtGraphicalEffects 1.0
|
import QtGraphicalEffects 1.0
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ Page {
|
||||||
property int catStatus: undefined
|
property int catStatus: undefined
|
||||||
property int routeNumber: -2
|
property int routeNumber: -2
|
||||||
|
|
||||||
|
property bool rak: catStatus === -1 // ranking (cup) data
|
||||||
property bool reg: catStatus === 4 || catStatus === undefined // registration data
|
property bool reg: catStatus === 4 || catStatus === undefined // registration data
|
||||||
property bool res: catStatus === 0 || catStatus === 1 // result data
|
property bool res: catStatus === 0 || catStatus === 1 // result data
|
||||||
property bool stl: catStatus === 2 || catStatus === 3 // startlist data
|
property bool stl: catStatus === 2 || catStatus === 3 // startlist data
|
||||||
|
@ -31,21 +32,21 @@ Page {
|
||||||
property string compNameKey: root.reg ? "name":"comp_name"
|
property string compNameKey: root.reg ? "name":"comp_name"
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
root.loadData(root.comId, root.catId, root.reg, root.routeNumber)
|
root.loadData(root.comId, root.catId, root.reg, root.rak, root.routeNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadData(comp, cat, reg, route){
|
function loadData(comp, cat, reg, rak, route){
|
||||||
loadingDl.open()
|
loadingDl.open()
|
||||||
root.status = 905
|
root.status = 905
|
||||||
console.log("[info][QML] getting ranking data of comp: " + comp + " and cat: " + cat + " reg: " + reg)
|
console.log("[info][QML] getting ranking data of comp: " + comp + " , cat: " + cat + " and status: " + root.catStatus)
|
||||||
var ret = serverConn.getRanking(comp, cat, reg, route)
|
var ret = serverConn.getRanking(comp, cat, reg, rak, route)
|
||||||
|
|
||||||
root.status = ret["status"]
|
root.status = ret["status"]
|
||||||
|
|
||||||
if(parseInt(ret["status"]) === 200){
|
if(parseInt(ret["status"]) === 200){
|
||||||
// request was successfull -> prepare data
|
// request was successfull -> prepare data
|
||||||
if(root.reg){
|
if(root.reg){
|
||||||
// if the data i sregistration data, athletes of other cats need to be removed
|
// if the data is registration data, athletes of other cats need to be removed
|
||||||
|
|
||||||
var validAthletes = []
|
var validAthletes = []
|
||||||
|
|
||||||
|
@ -59,6 +60,10 @@ Page {
|
||||||
|
|
||||||
root.rankingData = ret["data"]
|
root.rankingData = ret["data"]
|
||||||
}
|
}
|
||||||
|
else if(root.rak){
|
||||||
|
root.rankingData = ret["data"]
|
||||||
|
root.routeNumber = root.rankingData["route_order"] === undefined ? -2:root.rankingData["route_order"]
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
root.rankingData = ret["data"]
|
root.rankingData = ret["data"]
|
||||||
root.routeNumber = root.rankingData["route_order"] === undefined ? -2:root.rankingData["route_order"]
|
root.routeNumber = root.rankingData["route_order"] === undefined ? -2:root.rankingData["route_order"]
|
||||||
|
@ -117,6 +122,9 @@ Page {
|
||||||
else if(root.stl) {
|
else if(root.stl) {
|
||||||
addition = "(Startlist) "
|
addition = "(Startlist) "
|
||||||
}
|
}
|
||||||
|
else if(root.rak) {
|
||||||
|
addition = "(Ranking) "
|
||||||
|
}
|
||||||
|
|
||||||
return addition + titleString
|
return addition + titleString
|
||||||
|
|
||||||
|
@ -140,7 +148,7 @@ Page {
|
||||||
listData: root.reg ? root.rankingData:({})
|
listData: root.reg ? root.rankingData:({})
|
||||||
|
|
||||||
onRefresh: {
|
onRefresh: {
|
||||||
root.loadData(root.comId, root.catId, root.reg, root.routeNumber)
|
root.loadData(root.comId, root.catId, root.reg, root.rak, root.routeNumber)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -153,7 +161,7 @@ Page {
|
||||||
|
|
||||||
visible: root.res
|
visible: root.res
|
||||||
|
|
||||||
RankingView {
|
ResultView {
|
||||||
id: rankViewRv
|
id: rankViewRv
|
||||||
|
|
||||||
anchors {
|
anchors {
|
||||||
|
@ -167,10 +175,10 @@ Page {
|
||||||
|
|
||||||
status: root.status
|
status: root.status
|
||||||
|
|
||||||
listData: root.reg ? ({}):root.rankingData
|
listData: root.res ? root.rankingData:({})
|
||||||
|
|
||||||
onRefresh: {
|
onRefresh: {
|
||||||
root.loadData(root.comId, root.catId, root.reg, root.routeNumber)
|
root.loadData(root.comId, root.catId, root.reg, root.rak, root.routeNumber)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,7 +267,7 @@ Page {
|
||||||
console.log("changing to index: " + index + " (" + routeSelectTb.tabs[index][0] + ", " + routeSelectTb.tabs[index][1] + ")")
|
console.log("changing to index: " + index + " (" + routeSelectTb.tabs[index][0] + ", " + routeSelectTb.tabs[index][1] + ")")
|
||||||
if(root.routeNumber !== routeSelectTb.tabs[index][0]){
|
if(root.routeNumber !== routeSelectTb.tabs[index][0]){
|
||||||
root.routeNumber = routeSelectTb.tabs[index][0]
|
root.routeNumber = routeSelectTb.tabs[index][0]
|
||||||
root.loadData(root.comId, root.catId, root.reg, root.routeNumber)
|
root.loadData(root.comId, root.catId, root.reg, root.rak, root.routeNumber)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -285,7 +293,30 @@ Page {
|
||||||
listData: root.stl ? root.rankingData:({})
|
listData: root.stl ? root.rankingData:({})
|
||||||
|
|
||||||
onRefresh: {
|
onRefresh: {
|
||||||
root.loadData(root.comId, root.catId, root.reg, root.routeNumber)
|
root.loadData(root.comId, root.catId, root.reg, root.rak, root.routeNumber)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: rankinglItm
|
||||||
|
// item for startlist data
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
visible: root.rak
|
||||||
|
|
||||||
|
RankingView {
|
||||||
|
id: rankingRv
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
status: root.status
|
||||||
|
|
||||||
|
listData: root.rak ? root.rankingData:({})
|
||||||
|
|
||||||
|
onRefresh: {
|
||||||
|
root.loadData(root.comId, root.catId, root.reg, root.rak, root.routeNumber)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ Window {
|
||||||
visible: true
|
visible: true
|
||||||
width: 540
|
width: 540
|
||||||
height: 960
|
height: 960
|
||||||
title: qsTr("Digital Rock Ranking")
|
title: qsTr("blueROCK")
|
||||||
|
|
||||||
Page {
|
Page {
|
||||||
id: app
|
id: app
|
||||||
|
@ -234,7 +234,7 @@ Window {
|
||||||
id: extraComponentLoader
|
id: extraComponentLoader
|
||||||
|
|
||||||
height: parent.height
|
height: parent.height
|
||||||
width: status === Loader.Ready ? parent.width * 0.35 - toolButton.width - 3 * parent.spacing:0
|
width: status === Loader.Ready ? parent.width * 0.4 - toolButton.width - 3 * parent.spacing:0
|
||||||
|
|
||||||
anchors {
|
anchors {
|
||||||
top: parent.top
|
top: parent.top
|
||||||
|
|
|
@ -9,8 +9,9 @@
|
||||||
<file>Components/FancyBusyIndicator.qml</file>
|
<file>Components/FancyBusyIndicator.qml</file>
|
||||||
<file>Components/InfoArea.qml</file>
|
<file>Components/InfoArea.qml</file>
|
||||||
<file>Components/DataListView.qml</file>
|
<file>Components/DataListView.qml</file>
|
||||||
<file>Components/RankingView.qml</file>
|
<file>Components/ResultView.qml</file>
|
||||||
<file>Components/RegistrationView.qml</file>
|
<file>Components/RegistrationView.qml</file>
|
||||||
<file>Components/StartlistView.qml</file>
|
<file>Components/StartlistView.qml</file>
|
||||||
|
<file>Components/RankingView.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
BIN
resources/shared/icons/cup.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
|
@ -6,5 +6,6 @@
|
||||||
<file>icons/back.png</file>
|
<file>icons/back.png</file>
|
||||||
<file>icons/backDark.png</file>
|
<file>icons/backDark.png</file>
|
||||||
<file>icons/calendar.png</file>
|
<file>icons/calendar.png</file>
|
||||||
|
<file>icons/cup.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -38,9 +38,9 @@ QVariant ServerConn::getCalendar(QString nation, int year){
|
||||||
return rankingData;
|
return rankingData;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant ServerConn::getRanking(int competiotionId, int categoryId, bool registrationData, int routeNumber) {
|
QVariant ServerConn::getRanking(int competiotionId, int categoryId, bool registrationData, bool rankingData, int routeNumber) {
|
||||||
|
|
||||||
QString requestUrl = "http://egw.ifsc-climbing.org/egw/ranking/json.php?comp="+ QString::number( competiotionId ) +"&cat="+ QString::number( categoryId ) + (registrationData ? "&type=starters":"") + "&route=" + ((routeNumber == -2) ? "":QString::number(routeNumber));
|
QString requestUrl = "http://egw.ifsc-climbing.org/egw/ranking/json.php?" + QString(rankingData ? "cup":"comp") + "=" + QString::number( competiotionId ) + "&cat=" + QString::number( categoryId ) + (registrationData ? "&type=starters":"") + "&route=" + ((routeNumber == -2) ? "":QString::number(routeNumber));
|
||||||
|
|
||||||
qDebug() << requestUrl;
|
qDebug() << requestUrl;
|
||||||
|
|
||||||
|
@ -53,9 +53,9 @@ QVariant ServerConn::getRanking(int competiotionId, int categoryId, bool registr
|
||||||
|
|
||||||
QJsonDocument jsonReply = QJsonDocument::fromJson(ret["text"].toString().toUtf8());
|
QJsonDocument jsonReply = QJsonDocument::fromJson(ret["text"].toString().toUtf8());
|
||||||
|
|
||||||
QVariantMap rankingData = {{"status", 200}, {"data", jsonReply.toVariant()}};
|
QVariantMap data = {{"status", 200}, {"data", jsonReply.toVariant()}};
|
||||||
|
|
||||||
return rankingData;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|