From 271e98f8ec4c07874ad637e8ca5f6d00a774a764 Mon Sep 17 00:00:00 2001 From: dorian Date: Tue, 30 Apr 2019 23:44:04 +0200 Subject: [PATCH] started to implement athlete management (remote, database on basestation) --- graphics/icons/user.png | Bin 10926 -> 18189 bytes graphics/icons/user_black.png | Bin 0 -> 10926 bytes headers/climbingrace.h | 1 + qml/ProfilesDialog.qml | 372 ++++++++++++++++++---------------- qml/SettingsDialog.qml | 2 + qml/main.qml | 148 +++++++------- shared.qrc | 1 + sources/apptheme.cpp | 6 +- sources/climbingrace.cpp | 16 ++ 9 files changed, 301 insertions(+), 245 deletions(-) create mode 100644 graphics/icons/user_black.png diff --git a/graphics/icons/user.png b/graphics/icons/user.png index 2255aa9459d6b514be1cf5293d85596e77211191..952e93373981f0b5302ccb7412997196aeb7a525 100644 GIT binary patch literal 18189 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 literal 10926 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 ap9kXJeh**mD6)c$038hj^+r{P=>G#KEc9mp diff --git a/graphics/icons/user_black.png b/graphics/icons/user_black.png new file mode 100644 index 0000000000000000000000000000000000000000..2255aa9459d6b514be1cf5293d85596e77211191 GIT binary patch literal 10926 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 ap9kXJeh**mD6)c$038hj^+r{P=>G#KEc9mp literal 0 HcmV?d00001 diff --git a/headers/climbingrace.h b/headers/climbingrace.h index 5382646..bac10c7 100644 --- a/headers/climbingrace.h +++ b/headers/climbingrace.h @@ -95,6 +95,7 @@ public slots: Q_INVOKABLE void disconnectBaseStation(); Q_INVOKABLE QString getBaseStationState(); Q_INVOKABLE QVariant getBaseStationConnections(); + Q_INVOKABLE QVariant getAthletes(); Q_INVOKABLE bool reloadBaseStationIpAdress(); }; diff --git a/qml/ProfilesDialog.qml b/qml/ProfilesDialog.qml index 203675a..dd17bd4 100644 --- a/qml/ProfilesDialog.qml +++ b/qml/ProfilesDialog.qml @@ -20,183 +20,50 @@ import QtMultimedia 5.8 import QtQuick.Window 2.2 import QtQuick.Controls 2.2 import QtQuick.Layouts 1.3 +import QtGraphicalEffects 1.0 import com.itsblue.speedclimbingstopwatch 1.0 -import "./components/ProgressCircle.qml" +import "./components" Popup { id: root - x: startButt.x - y: startButt.y - width: startButt.width - height: startButt.height + modal: true dim: false + opacity: 0 + enter: Transition { - NumberAnimation { properties: "scale"; from: 0; to: 1; duration: 300; easing.type: Easing.Linear } + NumberAnimation { properties: "opacity"; to: 1; duration: 300; easing.type: Easing.InOutQuad } + NumberAnimation { properties: "scale"; from: 0.9; to: 1; duration: 300; easing.type: Easing.InOutQuad } } exit: Transition { - NumberAnimation { properties: "scale"; from: 1; to: 0; duration: 300; easing.type: Easing.Linear } + NumberAnimation { properties: "opacity"; to: 0; duration: 300; easing.type: Easing.InOutQuad } + NumberAnimation { properties: "scale"; from: 1; to: 0.9; duration: 300; easing.type: Easing.InOutQuad } } - background: Rectangle { - radius: width * 0.5 - color: "white" - border.color: "grey" - border.width: 1 + background: Item { - Label { - id: head_text - text: profiles_stack.currentItem.title - font.pixelSize: headlineUnderline.width * 0.1 - anchors { - horizontalCenter: parent.horizontalCenter - top: parent.top - topMargin: headlineUnderline.anchors.topMargin / 2 - height / 2 - } + RectangularGlow { + id: backgroundEffect + glowRadius: 7 + spread: 0.02 + color: "black" + opacity: 0.18 + anchors.fill: backgroundRect + cornerRadius: backgroundRect.radius + scale: 1 } Rectangle { - id: headlineUnderline - height: 1 - width: parent.width - color: "grey" - anchors { - top: parent.top - left: parent.left - right: parent.right - topMargin: parent.height * 0.15 - rightMargin: parent.radius - Math.sqrt(Math.pow(parent.radius,2)-Math.pow(parent.radius-anchors.topMargin,2)) - leftMargin: parent.radius - Math.sqrt(Math.pow(parent.radius,2)-Math.pow(parent.radius-anchors.topMargin,2)) - } - } - - ProgressCircle { - id: prog - property string text: "connecting.." + id: backgroundRect anchors.fill: parent - opacity: 0 - lineWidth: 5 - - arcBegin: 0 - arcEnd: 0 - - Timer { - id: prog_refresh - running: false - interval: 1 - repeat: true - onTriggered: { - prog.arcEnd = 360 * ( _cppBuzzerConn.get("connection_progress") / 100 ) - } - } - - Label { - id: content - text: parent.text - anchors.centerIn: parent - font.pixelSize: parent.width * 0.1 - - } - } - - Button { - id: head_back - - anchors { - left: parent.left - leftMargin: parent.width * 0.17 - top:parent.top - topMargin: parent.height * 0.01 - } - height: parent.height * 0.13 - width:height - - background: Rectangle { - radius: width * 0.5 - color: head_back.pressed ? "lightgrey":"white" - border.color: "grey" - border.width: 1 - Image { - anchors.fill: parent - anchors.margins: parent.width * 0.2 - source: "qrc:/graphics/icons/back_black.png" - } - } - - onClicked: profiles_stack.depth > 1 ? profiles_stack.pop():root.close() - - Behavior on opacity { - NumberAnimation { - duration: 100 - } - } - } - - Button { - id: head_add - - anchors { - right: parent.right - rightMargin: parent.width * 0.17 - top:parent.top - topMargin: parent.height * 0.01 - } - height: parent.height * 0.13 - width:height - - background: Rectangle { - radius: width * 0.5 - color: parent.pressed ? "lightgrey":"white" - border.color: "grey" - border.width: 1 - Label { - anchors { - top: parent.top - topMargin: parent.height/2 - height*0.55 - left: parent.left - leftMargin: parent.width/2 - width/2 - } - opacity: profiles_stack.currentItem.secondButt === "add" ? 1:0 - text: "+" - font.pixelSize: parent.height - } - - Image { - anchors.fill: parent - anchors.margins: parent.width * 0.2 - source: "qrc:/graphics/icons/ok_black.png" - opacity: profiles_stack.currentItem.secondButt === "ok" ? 1:0 - } - } - - onClicked: { - switch(profiles_stack.currentItem.secondButt){ - case "add": - profiles_stack.push(addProfileComp) - break - case "ok": - if(profileModel.model.append(profiles_stack.currentItem.newProfileName)){ - profiles_stack.pop() - } - } - - } - - Behavior on opacity { - NumberAnimation { - duration: 100 - } - } + radius: width * 0.1 + color: appTheme.style.viewColor } } - ListView { - id: profileModel - model: SqlProfileModel{} - } StackView { id: profiles_stack @@ -205,10 +72,10 @@ Popup { width: headlineUnderline.width anchors { - top: parent.top + top: topContainerItm.bottom left: parent.left leftMargin: ( parent.width - headlineUnderline.width ) / 2 - topMargin: headlineUnderline.anchors.topMargin * 1.2 + //topMargin: headlineUnderline.anchors.topMargin * 1.2 bottom: parent.bottom bottomMargin: headlineUnderline.anchors.topMargin } @@ -220,27 +87,23 @@ Popup { /*-----List of all profiles-----*/ Component { id: profileListComp - Tumbler { - id: control - property string title: "profiles" - property string secondButt: "add" - model: SqlProfileModel{} - delegate: Text { - text: model.name - color: control.visualFocus ? control.palette.highlight : control.palette.text - font: control.font - opacity: 1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2) - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - } - } - /* + ListView { id: profileList - model: profileModel.model + property string title: "profiles" property string secondButt: "add" + property var listData: speedBackend.getAthletes() + + model: listData.length + + Connections { + target: root + onOpened: { + listData = speedBackend.getAthletes() + } + } Label { opacity: profileList.count <= 0 ? 1:0 @@ -257,7 +120,7 @@ Popup { delegate: SwipeDelegate { id: swipeDelegate - text: model.name + text: profileList.listData[index]["fullName"] width: profileList.width font.pixelSize: profiles_stack.text_pixelSize @@ -357,7 +220,7 @@ Popup { } ScrollIndicator.vertical: ScrollIndicator { } } - */ + } /*-----Option to add a profile-----*/ @@ -422,4 +285,163 @@ Popup { } } } + + Item { + id: topContainerItm + + anchors { + top: parent.top + horizontalCenter: parent.horizontalCenter + } + + height: parent.height * 0.15 + width: backgroundRect.width + + RectangularGlow { + id: headerUnderlineEffect + glowRadius: 7 + spread: 0.02 + color: "black" + opacity: 0.18 + anchors.fill: headlineUnderline + scale: 1 + } + + Rectangle { + id: headlineUnderline + height: 1 + width: parent.width + color: "grey" + anchors { + bottom: parent.bottom + left: parent.left + right: parent.right + } + } + + Canvas { + + id: headerBackground + + anchors.fill: parent + + property color color: appTheme.style.viewColor + + onPaint: { + var ctx = getContext("2d"); + + ctx.beginPath(); + ctx.fillStyle = headerBackground.color + ctx.moveTo(0, 0); + //ctx.arc(centreX, centreY, root.width / 2, 1 * Math.PI, 2*Math.PI, false); + ctx.lineTo(width, 0); + ctx.lineTo(width, height); + ctx.lineTo(0, height); + ctx.lineTo(0, 0); + ctx.fill(); + } + } + + Label { + id: head_text + + anchors { + centerIn: parent + } + + width: parent.width * 0.8 + height: parent.height * 0.8 + + fontSizeMode: Text.Fit + font.pixelSize: headlineUnderline.width * 0.1 + minimumPixelSize: 0 + + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + + text: profiles_stack.currentItem.title + + } + + } + + FancyButton { + id: head_back + + anchors { + left: parent.left + leftMargin: -parent.width * 0.03 + top:parent.top + topMargin: -parent.height * 0.03 + } + + height: parent.height * 0.1 + width: height + + glowOpacity: Math.pow( root.opacity, 100 ) + + backgroundColor: appTheme.style.buttonColor + + image: "qrc:/graphics/icons/back_black.png" + + onClicked: profiles_stack.depth > 1 ? profiles_stack.pop():root.close() + + Behavior on opacity { + NumberAnimation { + duration: 100 + } + } + } + + FancyButton { + id: head_add + + anchors { + right: parent.right + rightMargin: -parent.width * 0.03 + top:parent.top + topMargin: -parent.height * 0.03 + } + height: parent.height * 0.1 + width:height + + glowOpacity: Math.pow( root.opacity, 100 ) + + backgroundColor: appTheme.style.buttonColor + + image: "qrc:/graphics/icons/ok_black.png" + imageScale: profiles_stack.currentItem.secondButt === "ok" ? 1:0 + + Label { + anchors { + top: parent.top + topMargin: parent.height/2 - height*0.55 + left: parent.left + leftMargin: parent.width/2 - width/2 + } + opacity: profiles_stack.currentItem.secondButt === "add" ? 1:0 + text: "+" + font.pixelSize: parent.height + } + + onClicked: { + switch(profiles_stack.currentItem.secondButt){ + case "add": + profiles_stack.push(addProfileComp) + break + case "ok": + if(profileModel.model.append(profiles_stack.currentItem.newProfileName)){ + profiles_stack.pop() + } + } + + } + + Behavior on opacity { + NumberAnimation { + duration: 100 + } + } + } + } diff --git a/qml/SettingsDialog.qml b/qml/SettingsDialog.qml index c519723..4affffb 100644 --- a/qml/SettingsDialog.qml +++ b/qml/SettingsDialog.qml @@ -58,10 +58,12 @@ Popup { enter: Transition { NumberAnimation { properties: "opacity"; to: 1; duration: 300; easing.type: Easing.InOutQuad } + NumberAnimation { properties: "scale"; from: 0.9; to: 1; duration: 300; easing.type: Easing.InOutQuad } } exit: Transition { NumberAnimation { properties: "opacity"; to: 0; duration: 300; easing.type: Easing.InOutQuad } + NumberAnimation { properties: "scale"; from: 1; to: 0.9; duration: 300; easing.type: Easing.InOutQuad } } background: Rectangle { diff --git a/qml/main.qml b/qml/main.qml index 27cf705..b47296d 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -481,9 +481,18 @@ Window { } } - // ProfilesDialog { - // id: profilesDialog - // } + ProfilesDialog { + id: profilesDialog + + property int margin: root.landscape() ? root.height * 0.05:root.width * 0.05 + + x: root.landscape() ? topContainerItm.width + margin:topContainerItm.x + margin + y: !root.landscape() ? topContainerItm.height + margin:topContainerItm.x + margin + width: root.landscape() ? root.width - topContainerItm.width - menu_container.width - margin * 2 : root.width - margin * 2 + height: !root.landscape() ? root.height - topContainerItm.height - menu_container.height - margin * 2 : root.height - margin * 2 + + + } /*------------------- lower line and menu @@ -512,6 +521,7 @@ Window { Item { id: menu_container + anchors { bottom: parent.bottom right: parent.right @@ -533,83 +543,85 @@ Window { } } - FancyButton { - id: settingsButt + Grid { + id: loweMenuGrd - anchors { - //center - verticalCenter: root.landscape() ? undefined:parent.verticalCenter - horizontalCenter: root.landscape() ? parent.horizontalCenter:undefined - //set anchors - left: root.landscape() ? undefined:parent.left - top: root.landscape() ? parent.top:undefined - //align in landscape mode - //for two buttons: topMargin: root.landscape() ? (parent.height - (height * 2)) / 3:undefined - topMargin: root.landscape() ? (parent.height * 0.5 - (height * 0.5)):undefined - //align in portrait mode - //for two buttons: leftMargin: root.landscape() ? undefined:(parent.width - width * 2) / 3 - leftMargin: root.landscape() ? undefined:(parent.width * 0.5 - width * 0.5) - } + property int spacingMultiplier: 200 * (getActiveChildren() - 1) + property int activeChildren: getActiveChildren() - height: root.landscape() ? parent.width * 0.7:parent.height * 0.7 - width: height - - onClicked: { - settingsDialog.open() - } - - image: appTheme.style.settIcon - - backgroundColor: parent.pressed ? appTheme.style.buttonPressedColor:appTheme.style.buttonColor - - } - - /* - RoundButton { - id: profilesButt - - anchors { - verticalCenter: root.landscape() ? undefined:parent.verticalCenter - horizontalCenter: root.landscape() ? parent.horizontalCenter:undefined - left: root.landscape() ? undefined:settingsButt.right - top: root.landscape() ? settingsButt.bottom:undefined - topMargin: root.landscape() ? (parent.height - (height * 2)) / 3:undefined - leftMargin: root.landscape() ? undefined:(parent.width - width * 2) / 3 - } - - height: root.landscape() ? parent.width * 0.7:parent.height * 0.7 - width: height - - onPressedChanged: { - if(pressed){ - background.color = "lightgrey" + function getActiveChildren() { + var childrenCount = 0 + for (var i = 0; i < children.length; i++) + { + if(children[i].enabled){ + childrenCount ++ + } } - else { - background.color = "white" + + return childrenCount + } + + anchors.centerIn: parent + + height: childrenRect.height + width: childrenRect.width + + rows: root.landscape() ? activeChildren:1 + columns: root.landscape() ? 1:activeChildren + + spacing: 0// root.landscape() ? parent.height * spacingMultiplier * 0.001:parent.width * spacingMultiplier * 0.001 + + Behavior on spacingMultiplier { + NumberAnimation { + duration: 200 } } - onClicked: { - profilesDialog.open() + FancyButton { + id: settingsButt + + height: root.landscape() ? menu_container.width * 0.7:menu_container.height * 0.7 + width: height + + onClicked: { + settingsDialog.open() + } + + image: appTheme.style.settIcon + + backgroundColor: parent.pressed ? appTheme.style.buttonPressedColor:appTheme.style.buttonColor + } - background: Rectangle { - color: "white" - border.color: "grey" - border.width: 1 - radius: width / 2 + Item { + height: profilesButt.height + width: profilesButt.height + } - Image { - id: profilesButt_Image - source: "qrc:/graphics/icons/user.png" - anchors.centerIn: parent - height: parent.height * 0.5 - width: parent.width * 0.5 - mipmap: true + FancyButton { + id: profilesButt + + enabled: height > 0 + + height: speedBackend.baseStationState === "connected" ? root.landscape() ? menu_container.width * 0.7:menu_container.height * 0.7:0 + width: height + + onClicked: { + profilesDialog.open() + } + + image: appTheme.style.profilesIcon + + backgroundColor: parent.pressed ? appTheme.style.buttonPressedColor:appTheme.style.buttonColor + + Behavior on height { + NumberAnimation { + duration: 200 + } } } } - */ + } diff --git a/shared.qrc b/shared.qrc index 3485eea..a5e6cc5 100644 --- a/shared.qrc +++ b/shared.qrc @@ -25,5 +25,6 @@ graphics/icons/BaseStation_black.png graphics/icons/buzzer.png graphics/icons/startpad.png + graphics/icons/user_black.png diff --git a/sources/apptheme.cpp b/sources/apptheme.cpp index 81db4fd..74e7ddd 100644 --- a/sources/apptheme.cpp +++ b/sources/apptheme.cpp @@ -34,7 +34,8 @@ AppTheme::AppTheme(QObject *parent) : QObject(parent) {"settIcon", "qrc:/graphics/icons/settings.png"}, {"buzzerIcon", "qrc:/graphics/icons/buzzer.png"}, {"startpadIcon", "qrc:/graphics/icons/startpad.png"}, - {"baseStationIcon", "qrc:/graphics/icons/BaseStation.png"} + {"baseStationIcon", "qrc:/graphics/icons/BaseStation.png"}, + {"profilesIcon", "qrc:/graphics/icons/user.png"} }; this->darkTheme = tmpDarkTheme; @@ -70,7 +71,8 @@ AppTheme::AppTheme(QObject *parent) : QObject(parent) {"settIcon", "qrc:/graphics/icons/settings_black.png"}, {"buzzerIcon", "qrc:/graphics/icons/buzzer_black.png"}, {"startpadIcon", "qrc:/graphics/icons/startpad_black.png"}, - {"baseStationIcon", "qrc:/graphics/icons/BaseStation_black.png"} + {"baseStationIcon", "qrc:/graphics/icons/BaseStation_black.png"}, + {"profilesIcon", "qrc:/graphics/icons/user_black.png"} }; this->lightTheme = tmpLightTheme; diff --git a/sources/climbingrace.cpp b/sources/climbingrace.cpp index 50922c1..7afce26 100644 --- a/sources/climbingrace.cpp +++ b/sources/climbingrace.cpp @@ -515,6 +515,22 @@ QVariant ClimbingRace::getBaseStationConnections() { return baseConn->getConnections(); } +QVariant ClimbingRace::getAthletes() { + QVariantMap reply = this->baseConn->sendCommand(4003); + + if(reply["status"] != 200){ + //handle Error!! + qDebug() << "+ --- error getting athletes: " << reply["status"]; + return false; + } + + QVariantList tmpAthletes = reply["data"].toList(); + + qDebug() << tmpAthletes; + + return tmpAthletes; +} + bool ClimbingRace::reloadBaseStationIpAdress() { if(this->baseConn->state == "disconnected"){ this->baseConn->setIP(pGlobalAppSettings->loadSetting("baseStationIpAdress"));