From 759eb60e831bea764f4f398289ff56d711d03338 Mon Sep 17 00:00:00 2001 From: Dorian Zedler Date: Tue, 26 May 2020 17:17:33 +0200 Subject: [PATCH] - heavy cleanup - migrated some stuff to ScStwLibraries --- ScStwMonitorSrc/FadeAnimation.qml | 72 --- ScStwMonitorSrc/FancyBusyIndicator.qml | 61 --- ScStwMonitorSrc/ScStwMonitorSrc.pro | 12 +- ScStwMonitorSrc/TimerColumn.qml | 146 ----- ScStwMonitorSrc/VolumeHigh.png | Bin 1570 -> 0 bytes ScStwMonitorSrc/VolumeLow.png | Bin 5830 -> 0 bytes ScStwMonitorSrc/baseconn.cpp | 504 ------------------ ScStwMonitorSrc/baseconn.h | 153 ------ ScStwMonitorSrc/fonts/Arvo-Bold.ttf | Bin 37480 -> 0 bytes ScStwMonitorSrc/fonts/Arvo-BoldItalic.ttf | Bin 36692 -> 0 bytes ScStwMonitorSrc/fonts/Arvo-Regular.ttf | Bin 38596 -> 0 bytes ScStwMonitorSrc/fonts/Arvo-RegularItalic.ttf | Bin 34968 -> 0 bytes ScStwMonitorSrc/{ => headers}/sleepprevent.h | 0 ScStwMonitorSrc/icon/favicon.xcf | Bin 377568 -> 372878 bytes ScStwMonitorSrc/qml.qrc | 8 - ScStwMonitorSrc/{ => resources/qml}/main.qml | 50 +- ScStwMonitorSrc/resources/qml/qml.qrc | 5 + .../{ => resources/shared}/Banner.png | Bin .../{ => resources/shared}/SpeedHold.png | Bin .../shared}/fonts/PTMono-Regular.ttf | Bin ScStwMonitorSrc/resources/shared/shared.qrc | 7 + ScStwMonitorSrc/shared.qrc | 13 - ScStwMonitorSrc/{ => sources}/main.cpp | 0 ScStwMonitorSrc/{ => sources}/sleepprevent.mm | 0 shared-libraries | 2 +- 25 files changed, 49 insertions(+), 984 deletions(-) delete mode 100644 ScStwMonitorSrc/FadeAnimation.qml delete mode 100644 ScStwMonitorSrc/FancyBusyIndicator.qml delete mode 100644 ScStwMonitorSrc/TimerColumn.qml delete mode 100644 ScStwMonitorSrc/VolumeHigh.png delete mode 100644 ScStwMonitorSrc/VolumeLow.png delete mode 100755 ScStwMonitorSrc/baseconn.cpp delete mode 100755 ScStwMonitorSrc/baseconn.h delete mode 100644 ScStwMonitorSrc/fonts/Arvo-Bold.ttf delete mode 100644 ScStwMonitorSrc/fonts/Arvo-BoldItalic.ttf delete mode 100644 ScStwMonitorSrc/fonts/Arvo-Regular.ttf delete mode 100644 ScStwMonitorSrc/fonts/Arvo-RegularItalic.ttf rename ScStwMonitorSrc/{ => headers}/sleepprevent.h (100%) delete mode 100755 ScStwMonitorSrc/qml.qrc rename ScStwMonitorSrc/{ => resources/qml}/main.qml (92%) create mode 100755 ScStwMonitorSrc/resources/qml/qml.qrc rename ScStwMonitorSrc/{ => resources/shared}/Banner.png (100%) rename ScStwMonitorSrc/{ => resources/shared}/SpeedHold.png (100%) rename ScStwMonitorSrc/{ => resources/shared}/fonts/PTMono-Regular.ttf (100%) create mode 100644 ScStwMonitorSrc/resources/shared/shared.qrc delete mode 100644 ScStwMonitorSrc/shared.qrc rename ScStwMonitorSrc/{ => sources}/main.cpp (100%) rename ScStwMonitorSrc/{ => sources}/sleepprevent.mm (100%) diff --git a/ScStwMonitorSrc/FadeAnimation.qml b/ScStwMonitorSrc/FadeAnimation.qml deleted file mode 100644 index df750b1..0000000 --- a/ScStwMonitorSrc/FadeAnimation.qml +++ /dev/null @@ -1,72 +0,0 @@ -/* - Speed Climbing Stopwatch - Simple Stopwatch for Climbers - Copyright (C) 2018 Itsblue Development - Dorian Zeder - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, version 3 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -import QtQuick 2.0 - -SequentialAnimation { - id: root - property QtObject target - property int fadeDuration: 150 - property int fadeDuration_in: fadeDuration - property int fadeDuration_out: fadeDuration - - property alias outValueScale: outAnimationScale.to - property alias inValueScale: inAnimationScale.to - - property alias outValueOpacity: outAnimationOpacity.to - property alias inValueOpacity: inAnimationOpacity.to - - property string easingType: "Quad" - ParallelAnimation { - NumberAnimation { // in the default case, fade scale to 0 - id: outAnimationScale - target: root.target - property: "scale" - duration: root.fadeDuration_in - to: 0.9 - easing.type: Easing["In"+root.easingType] - } - NumberAnimation { // in the default case, fade scale to 0 - id: outAnimationOpacity - target: root.target - property: "opacity" - duration: root.fadeDuration_in - to: 0 - easing.type: Easing["In"+root.easingType] - } - } - PropertyAction { } // actually change the property targeted by the Behavior between the 2 other animations - ParallelAnimation { - NumberAnimation { // in the default case, fade scale back to 1 - id: inAnimationScale - target: root.target - property: "scale" - duration: root.fadeDuration_out - to: 1 - easing.type: Easing["Out"+root.easingType] - } - NumberAnimation { // in the default case, fade scale to 0 - id: inAnimationOpacity - target: root.target - property: "opacity" - duration: root.fadeDuration_in - to: 1 - easing.type: Easing["In"+root.easingType] - } - } - -} diff --git a/ScStwMonitorSrc/FancyBusyIndicator.qml b/ScStwMonitorSrc/FancyBusyIndicator.qml deleted file mode 100644 index 0d15d80..0000000 --- a/ScStwMonitorSrc/FancyBusyIndicator.qml +++ /dev/null @@ -1,61 +0,0 @@ -import QtQuick 2.1 -import QtQuick.Controls 2.2 - -BusyIndicator { - id: control - - property double speed: 1 - property color lineColor: "#21be2b" - - width: 100 - height: 100 - - contentItem: Canvas { - id: spinnerCanvas - anchors.fill: parent - - property double progress: 0 - - function drawSpinner(ctx, width, height, progress){ - var margins = width * 0.01 - var lineWidth = width * 0.1 - - ctx.clearRect(0,0,width,height) - - ctx.beginPath(); - ctx.arc(width * 0.5 + margins, height * 0.5 + margins, height*0.5 - margins*2 - lineWidth , 0, 2*Math.PI); - - ctx.strokeStyle = "#dedede"; - ctx.lineWidth = lineWidth - ctx.stroke(); - - ctx.beginPath(); - ctx.arc(width * 0.5 + margins, height * 0.5 + margins, height*0.5 - margins*2 - lineWidth, 2*Math.PI * progress, 2*Math.PI * progress + 0.5*Math.PI); - - ctx.strokeStyle = "#48db09"; - ctx.stroke(); - } - - - Timer { - interval: Math.floor(20 * 1/control.speed) - running: control.opacity > 0 && control.visible && control.running - repeat: true - - onTriggered: { - spinnerCanvas.progress += 0.0027*6 - if(spinnerCanvas.progress >= 1){ - spinnerCanvas.progress = 0 - } - - spinnerCanvas.requestPaint() - } - } - - onPaint: { - var ctx = getContext("2d"); - spinnerCanvas.drawSpinner(ctx, spinnerCanvas.height, spinnerCanvas.width, spinnerCanvas.progress) - } - - } -} diff --git a/ScStwMonitorSrc/ScStwMonitorSrc.pro b/ScStwMonitorSrc/ScStwMonitorSrc.pro index 88ddfa4..b29b93d 100755 --- a/ScStwMonitorSrc/ScStwMonitorSrc.pro +++ b/ScStwMonitorSrc/ScStwMonitorSrc.pro @@ -18,13 +18,12 @@ DEFINES += QT_DEPRECATED_WARNINGS #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ - main.cpp \ - baseconn.cpp \ + sources/main.cpp \ sources/scstwmonitorbackend.cpp RESOURCES += \ - qml.qrc \ - shared.qrc + resources/qml/qml.qrc \ + resources/shared/shared.qrc # include submodules @@ -44,7 +43,6 @@ else: unix:!android: target.path = /home/pi/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target HEADERS += \ - baseconn.h \ headers/scstwmonitorbackend.h DISTFILES += \ @@ -67,8 +65,8 @@ ios { xcode_product_bundle_identifier_setting.value = "de.itsblue.ScStwMonitor" OBJECTIVE_SOURCES += \ - sleepprevent.mm + sources/sleepprevent.mm OBJECTIVE_HEADERS += \ - sleepprevent.h + headers/sleepprevent.h } diff --git a/ScStwMonitorSrc/TimerColumn.qml b/ScStwMonitorSrc/TimerColumn.qml deleted file mode 100644 index 5bfc078..0000000 --- a/ScStwMonitorSrc/TimerColumn.qml +++ /dev/null @@ -1,146 +0,0 @@ -import QtQuick 2.0 -import QtQuick.Controls 2.0 -import de.itsblue.ScStw 2.0 -import de.itsblue.ScStwMonitor 2.0 - -Column { - id: timerCol - - opacity: backend.scStwClient.state === ScStwClient.CONNECTED ? 1:0 - - spacing: 0 - - Repeater { - id: timerRep - - property var clearedTimers: removeDisabledTimers(backend.race.timers) - - function removeDisabledTimers(timers) { - var ret = [] - for(var i = 0; i < timers.length; i++) { - if(timers[i]["state"] !== ScStwTimer.DISABLED) - ret.push(timers[i]) - } - return ret - } - - model: clearedTimers.length - - delegate: Item { - id: timerDel - - width: parent.width - height: timerCol.height / timerRep.model - - Label { - id: laneNameLa - - anchors { - left: parent.left - } - - leftPadding: parent.width * 0.03 - - width: parent.width * 0.15 - height: parent.height * 0.5 - - fontSizeMode: Text.Fit - - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignLeft - - text: ""//index === 0 ? "A":"B" - - color: "#2a5266" - - font.pixelSize: height - font.family: timerFont.name - - Rectangle { - anchors.fill: parent - color: "red" - opacity: 0 - } - } - - Label { - id: timerTextLa - - anchors.centerIn: parent - anchors.horizontalCenterOffset: laneNameLa.text !== "" ? parent.width * 0.06:0 - anchors.verticalCenterOffset: -(parent.height * 0.04 * reactTimeLa.opacity) - - width: parent.width * 0.8 - height: parent.height * 0.8 - - elide: "ElideRight" - color: ([ScStwTimer.WON].indexOf(timerRep.clearedTimers[index]["state"]) >= 0 ? "#6bd43b" : - [ScStwTimer.FAILED,ScStwTimer.LOST].indexOf(timerRep.clearedTimers[index]["state"]) >= 0 ? "#e03b2f": - "black") - - text: timerRep.clearedTimers[index]["text"] - - fontSizeMode: Text.Fit - - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - - font.pixelSize: height - font.family: timerFont.name - minimumPixelSize: 1 - } - - Label { - id: reactTimeLa - - property int rtime: timerRep.clearedTimers[index]["reactionTime"] - - anchors { - centerIn: parent - verticalCenterOffset: timerTextLa.contentHeight * 0.4 + reactTimeLa.contentHeight * 0.4 + timerTextLa.anchors.verticalCenterOffset - horizontalCenterOffset: parent.width * 0.06 - } - - width: parent.width * 0.6 - height: parent.height * 0.15 - - scale: enabled ? 1:0.9 - opacity: enabled ? 1:0 - - enabled: timerRep.clearedTimers[index]["state"] >= ScStwTimer.STARTING && rtime !== 0 - - fontSizeMode: Text.Fit - - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - - text: "reaction time (ms): " + Math.round(rtime) - - color: "black"//appTheme.style.textColor - - font.pixelSize: timerTextLa.font.pixelSize * 0.5 - font.family: timerFont.name - minimumPixelSize: 1 - - Behavior on opacity { - NumberAnimation { - duration: 200 - } - } - - Behavior on scale { - NumberAnimation { - duration: 200 - } - } - - } - } - } - - Behavior on opacity { - NumberAnimation { - duration: 200 - } - } -} diff --git a/ScStwMonitorSrc/VolumeHigh.png b/ScStwMonitorSrc/VolumeHigh.png deleted file mode 100644 index 0ed429325bab422e6dd45b9aee5efbb4c8b13f47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1570 zcmV+-2Hp9IP)uy0S#&dlYmB&$wVTUQFG0xnK)b*<;8K5>2s>P zy6g76^+Byp^{Lb6@7q&VeYyt{i9{liNF)-8L?V$$Bof_1U+e%1BEUAK&qm;U;B=q? zOqLr`_aH#i(62eIod9+K&j2@5{|hi0!hcECXlAs-z)QfgQljiog#RZ|BTInkZ3MUj z=m{Qi2O*rCI1Q@+t+oreC2-swfpF@CY4{4zYVQLVg*<^eBg~#Cjl2Rhfj@wU!ktDv z5weq{QAB`N8wSn}bUw90(37LF0eBA>Gx*AC-vL8G&Z;H|w#4{w8L$rc(&&3;8wXb8 zKc)I0*prf%CBSRIagVW@zyxj)*RcqG2`S1TPKYUwF(-hV0*u{u2>!Q)P%Ojm*3TsEcq4z)&ZB~jBg0r`r$ZmWzI38Arw!(MSxbn-N56(e9t&92Yxlgu@mU^^c@W$ zO!9pMXtiH}CxCe#@vg)@%+X?5?cp;Tf<3vP8Tx3HZ~C!1Ai*M_5=L}UzH;G zU->Pn5TJ?Mj<7tA+-UH1m%&eE2>Fwb;TR3;*iGPBgTDpnv!V|Te$4osK#_K;Ka zThp#^b+*^-0xVJNhZMWEX{XNkx?O-975n#!{Q|}Qn-)L_0erR~wquwXR75{;kJ9IJ z#je#G{h$R=^)KLBU@P{0pfb4|x80D%HpQ+L=V}Wz6P>sjHwV4q?I8MQoK{V(ZpK+C zLjWHULJQCXykqdI)q4)$%388~1SwxHO8~0~AqD6IUNQJQioT7oTJh2L4`i$&gc9I9 z-~(e!&l&t}QG5)0#Fk0f0%#%>6<|KF7FQE$iRA!#-RL0t)37y$*i2L*K$Zwa1@J9P zSz++06=zMNud*vcC?-Nt0emikO$L7p(0@%^4Sp&`$S*=w0=$Z?H1P$4uR9HXDo4mC zLKOnMfo;YzgkGGxk2Zd1Oz;<>OaV^dUe>TAzYn*SqQ&!o!Bld6!#`anlrO+?;C1wE<(aKxzm_!< zA-n)faer%kZZ*@}5nP3L*B}%ZU<2;y)FFefthSf@pS`IyLNNh~B)!$%#XSe;TC%37 z8buP{AmIDHbw{XHfX%oWQeqlH`2u`}{%%-TGxK(&VNHDc2M!(xVFdUQc##_KWX44B z7hn>1r9XvROhqrxZ@Vu$c_7Aqn}9vIdHi17KV?WH5{X12kw_#Gi9{liNF*xfAN1Hk U`0{4DRsaA107*qoM6N<$f+r@(jsO4v diff --git a/ScStwMonitorSrc/VolumeLow.png b/ScStwMonitorSrc/VolumeLow.png deleted file mode 100644 index 038f9671df6a1b4d4a65991b1fd68621c991d265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5830 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 = new QTimer(this); - this->timeoutTimer->setSingleShot(true); - - this->state = "disconnected"; - - connect(this->socket, SIGNAL(error(QAbstractSocket::SocketError)), - this, SLOT(gotError(QAbstractSocket::SocketError))); - - connect(this->socket, &QAbstractSocket::stateChanged, this, &BaseConn::socketStateChanged); - connect(this, &BaseConn::gotUpdate, this, &BaseConn::handleUpdate); - - this->nextConnectionId = 1; - - // init refresh timers - this->autoConnectRetryTimer = new QTimer(this); - this->autoConnectRetryTimer->setInterval(1000); - this->autoConnectRetryTimer->setSingleShot(true); - connect(this->autoConnectRetryTimer, &QTimer::timeout, this, &BaseConn::doConnectionAttempt); - this->autoConnectRetryTimer->start(); - - this->timerTextRefreshTimer = new QTimer(this); - this->timerTextRefreshTimer->setInterval(1); - this->timerTextRefreshTimer->setSingleShot(true); - connect(this->timerTextRefreshTimer, &QTimer::timeout, this, &BaseConn::refreshTimerTextList); - this->timerTextRefreshTimer->start(); -} - -void BaseConn::connectToHost() { - qDebug() << "+--- connecting"; - setState("connecting"); - - connect(this->timeoutTimer, SIGNAL(timeout()), this, SLOT(connectionTimeout())); - - //connect - this->socket->connectToHost(this->ip, this->port); - - timeoutTimer->start(3000); -} - -void BaseConn::connectionTimeout() { - this->socket->abort(); - disconnect(this->timeoutTimer, SIGNAL(timeout()), this, SLOT(connectionTimeout())); -} - -bool BaseConn::init() { - disconnect(this->timeoutTimer, SIGNAL(timeout()), this, SLOT(connectionTimeout())); - this->timeoutTimer->stop(); - - connect(this->socket, &QTcpSocket::readyRead, this, &BaseConn::readyRead); - - this->setState("connected"); - - // init remote session - QJsonArray updateSubs = {"onTimersChanged", "onRaceStateChanged", "onNextStartActionChanged"}; - QJsonObject sessionParams = {{"updateSubs", updateSubs}, {"init", true}}; - - if(this->sendCommand(1, sessionParams)["status"] != 200) { - return false; - } - - return true; -} - -void BaseConn::deInit() { -} - -void BaseConn::closeConnection() -{ - qDebug() << "+--- closing connection"; - switch (socket->state()) - { - case 0: - socket->disconnectFromHost(); - break; - case 2: - socket->abort(); - break; - default: - socket->abort(); - } - - setState("disconnected"); -} - -void BaseConn::gotError(QAbstractSocket::SocketError err) -{ - //qDebug() << "got error"; - QString strError = "unknown"; - switch (err) - { - case 0: - strError = "Connection was refused"; - break; - case 1: - strError = "Remote host closed the connection"; - this->closeConnection(); - break; - case 2: - strError = "Host address was not found"; - break; - case 5: - strError = "Connection timed out"; - break; - default: - strError = "Unknown error"; - } - - emit gotError(strError); -} - -// ------------------------------------- -// --- socket communication handling --- -// ------------------------------------- - -void BaseConn::socketStateChanged(QAbstractSocket::SocketState socketState) { - switch (socketState) { - case QAbstractSocket::UnconnectedState: - { - this->setState("disconnected"); - break; - } - case QAbstractSocket::ConnectedState: - { - if(this->init()) { - this->setState("connected"); - } - else { - this->closeConnection(); - } - - break; - } - default: - { - //qDebug() << "+ --- UNKNOWN SOCKET STATE: " << socketState; - break; - } - } -} - -QVariantMap BaseConn::sendCommand(int header, QJsonValue data){ - if(this->state != "connected"){ - return {{"status", 910}, {"data", "not connected"}}; - } - - // generate id and witing requests entry - int thisId = nextConnectionId; - //qDebug() << "sending command: " << header << " with data: " << data << " and id: " << thisId; - nextConnectionId ++; - - QEventLoop *loop = new QEventLoop(this); - QTimer *timer = new QTimer(this); - QJsonObject reply; - - this->waitingRequests.append({thisId, loop, reply}); - - QJsonObject requestObj; - requestObj.insert("id", thisId); - requestObj.insert("header", header); - requestObj.insert("data", data); - - QString jsonRequest = QJsonDocument(requestObj).toJson(); - - timer->setSingleShot(true); - // quit the loop when the timer times out - loop->connect(timer, SIGNAL(timeout()), loop, SLOT(quit())); - // quit the loop when the connection was established - // loop.connect(this, &BaseConn::gotReply, &loop, &QEventLoop::quit); - // start the timer before starting to connect - timer->start(3000); - - //write data - socket->write(jsonRequest.toLatin1()); - - //wait for an answer to finish (programm gets stuck in here) - loop->exec(); - - bool replyFound = false; - - // find reply and delete the request from waiting list - for(int i = 0; iwaitingRequests.length(); i++){ - if(this->waitingRequests[i].id == thisId){ - // request was found - replyFound = true; - // delete event loop - if(this->waitingRequests[i].loop != nullptr) { - delete this->waitingRequests[i].loop; - } - // store reply - reply = this->waitingRequests[i].reply; - // remove reply from waiting list - this->waitingRequests.removeAt(i); - } - } - - if(!replyFound) { - // some internal error occured - return {{"status", 900}, {"data", ""}}; - } - - if(timer->remainingTime() == -1){ - //the time has been triggered -> timeout - return {{"status", 911}, {"data", ""}}; - } - - delete timer; - - return {{"status", reply.value("header").toInt()}, {"data", reply.value("data").toVariant()}}; - -} - -void BaseConn::readyRead() { - - //qDebug() << "ready to ready " << socket->bytesAvailable() << " bytes" ; - QString reply = socket->readAll(); - - //qWarning() << "socket read: " << reply; - - processSocketMessage(reply); -} - -void BaseConn::processSocketMessage(QString message){ - QString startKey = ""; - QString endKey = ""; - - //qWarning() << "... processing message now ... : " << message; - - if(message == ""){ - return; - } - - if((message.startsWith(startKey) && message.endsWith(endKey)) && (message.count(startKey) == 1 && message.count(endKey) == 1)){ - // non-split message ( e.g.: 123456789 - } - else if(!message.contains(endKey) && (!this->readBuffer.isEmpty() || message.startsWith(startKey))){ - // begin of a split message ( e.g.: 123 ) - // or middle of a split message ( e.g.: 456 ) - //qWarning() << "this is a begin or middle of split a message"; - this->readBuffer += message; - return; - } - else if(!message.contains(startKey) && message.endsWith(endKey)) { - // end of a split message ( e.g.: 789 ) - - if(!this->readBuffer.isEmpty()){ - message = readBuffer + message; - readBuffer.clear(); - } - } - else if((message.count(startKey) > 1 || message.count(endKey) > 1) || (message.contains(endKey) && !message.endsWith(endKey) && message.contains(startKey) && !message.startsWith(startKey))) { - // multiple messages in one packet ( e.g.: 123456789987654321 ) - // or multiple message fragments in one message ( e.g.: 56789987654321 or 5678998765 ) - //qDebug() << "detected multiple messages"; - - int startOfSecondMessage = message.lastIndexOf(startKey); - // process first part of message - QString firstMessage = message.left(startOfSecondMessage); - this->processSocketMessage(firstMessage); - // process second part of message - QString secondMessage = message.right(message.length() - startOfSecondMessage); - this->processSocketMessage(secondMessage); - - return; - } - else { - // invalid message - return; - } - - //qWarning() << "... done processing, message: " << message; - this->socketReplyRecieved(message); -} - -void BaseConn::socketReplyRecieved(QString reply) { - reply.replace("", ""); - reply.replace("", ""); - - int id = 0; - - QJsonDocument jsonReply = QJsonDocument::fromJson(reply.toUtf8()); - QJsonObject replyObj = jsonReply.object(); - - //qDebug() << "got: " << reply; - - if(!replyObj.isEmpty()){ - id = replyObj.value("id").toInt(); - - if(id == -1) { - // this message is an update!! - emit this->gotUpdate(replyObj.toVariantMap()); - return; - } - - for(int i = 0; i < this->waitingRequests.length(); i++){ - if(this->waitingRequests[i].id == id){ - this->waitingRequests[i].reply = replyObj; - if(this->waitingRequests[i].loop != nullptr){ - this->waitingRequests[i].loop->quit(); - } - return; - } - } - } - - latestReadReply = reply; - emit gotUnexpectedReply(reply); -} - -// ------------------------ -// --- helper functions --- -// ------------------------ - -void BaseConn::doConnectionAttempt() -{ - if(this->state == "disconnected") { - qDebug() << "+--- trying to connect"; - this->connectToHost(); - } - - this->autoConnectRetryTimer->start(); -} - -void BaseConn::setState(QString newState){ - if(this->state != newState) { - qDebug() << "+--- BaseConn state changed: " << newState; - this->state = newState; - emit stateChanged(); - if(this->state == "disconnected") { - this->deInit(); - } - } -} - -int BaseConn::writeRemoteSetting(QString key, QString value) { - QJsonArray requestData; - requestData.append(key); - requestData.append(value); - return this->sendCommand(3000, requestData)["status"].toInt(); -} - -QString BaseConn::readRemoteSetting(QString key) -{ - QVariantMap reply = this->sendCommand(3001, key); - if(reply["status"] != 200){ - return "false"; - } - return reply["data"].toString(); -} - -// ------------------ -// - for timer sync - -// ------------------ - -void BaseConn::handleUpdate(QVariantMap data) { - int header = data["header"].toInt(); - switch (header) { - case 9000: - { - // the remote race state changed - this->remoteRaceState = data["data"].toInt(); - this->raceStateChanged(); - break; - } - case 9001: - { - // the remote timers have changed - this->refreshRemoteTimers(data["data"].toList()); - break; - } - case 9003: - { - // the next start action has changed - this->nextStartActionTotalDelay = data["data"].toMap()["nextActionDelay"].toDouble(); - this->nextStartActionDelayStartedAt = this->date->currentMSecsSinceEpoch() - (this->nextStartActionTotalDelay * data["data"].toMap()["nextActionDelayProg"].toDouble()); - this->nextStartAction = NextStartAction( data["data"].toMap()["nextAction"].toInt() ); - - emit this->nextStartActionChanged(); - } - - } -} - -void BaseConn::refreshRemoteTimers(QVariantList timers) { - QVariantList remoteTimers; - - for (int i = 0; i < timers.length(); i++) { - QVariantMap thisTimer = timers[i].toMap(); - if(thisTimer["state"].toInt() != DISABLED ) { - thisTimer.insert("startTime", this->date->currentMSecsSinceEpoch() - thisTimer["currTime"].toDouble()); - remoteTimers.append(thisTimer); - } - } - - this->remoteTimers = remoteTimers; -} - -void BaseConn::refreshTimerTextList() { - QVariantList tmpTimerTextList; - - for (int i = 0; i < this->remoteTimers.toList().length(); i++) { - - QString newText; - - switch (this->remoteTimers.toList()[i].toMap()["state"].toInt()) { - case IDLE: - newText = "00.000"; - break; - case STARTING: - newText = "00.000"; - break; - case WAITING: - newText = "False Start"; - break; - case RUNNING: { - double currTime = this->date->currentMSecsSinceEpoch() - this->remoteTimers.toList()[i].toMap()["startTime"].toDouble(); - QString currTimeString = (currTime < 10000 ? "0":"") + QString::number( currTime / 1000.0, 'f', 3 );//QString::number( (currTime) / 1000.0, 'f', 1 ); - newText = currTimeString; - break; - } - case WON: { - double currTime = this->remoteTimers.toList()[i].toMap()["currTime"].toDouble(); - newText = (currTime < 10000 ? "0":"") + QString::number( currTime / 1000.0, 'f', 3 ); - break; - } - case LOST: { - double currTime = this->remoteTimers.toList()[i].toMap()["currTime"].toDouble(); - newText = (currTime < 10000 ? "0":"") + QString::number( currTime / 1000.0, 'f', 3 ); - break; - } - case FAILED: - newText = "False Start"; - break; - case CANCELLED: - newText = "Cancelled"; - break; - case DISABLED: - newText = "---"; - break; - } - - QVariantMap timerMap = {{"text", newText}, {"reactTime", this->remoteTimers.toList()[i].toMap()["reactTime"].toInt()}, {"state", this->remoteTimers.toList()[i].toMap()["state"].toInt()}}; - tmpTimerTextList.append(timerMap); - } - - if(tmpTimerTextList != this->timerTextList) { - this->timerTextList = tmpTimerTextList; - emit this->timerTextChanged(); - } - - // calculate next start action delay progress - double nextStartActionRemainingDelay = this->nextStartActionTotalDelay - ( this->date->currentMSecsSinceEpoch() - this->nextStartActionDelayStartedAt ); - if(nextStartActionRemainingDelay > 0){ - this->nextStartActionDelayProgress = nextStartActionRemainingDelay / this->nextStartActionTotalDelay; - emit this->nextStartActionDelayProgressChanged(); - } - else { - this->nextStartActionDelayProgress = 0; - emit this->nextStartActionDelayProgressChanged(); - } - - this->timerTextRefreshTimer->start(); -} - -// ----------- -// - for qml - -// ----------- - -void BaseConn::setIP(const QString &ipAdress){ - this->ip = ipAdress; -} - -QString BaseConn::getIP() const -{ - return(this->ip); -} - -QString BaseConn::getState() const -{ - return(this->state); -} - -QVariant BaseConn::getTimerTextList() -{ - return this->timerTextList; -} - -int BaseConn::getRaceState() -{ - return this->remoteRaceState; -} - -double BaseConn::getNextStartActionDelayProgress() { - return this->nextStartActionDelayProgress; -} - -int BaseConn::getNextStartAction() { - return this->nextStartAction; -} diff --git a/ScStwMonitorSrc/baseconn.h b/ScStwMonitorSrc/baseconn.h deleted file mode 100755 index d7bf76f..0000000 --- a/ScStwMonitorSrc/baseconn.h +++ /dev/null @@ -1,153 +0,0 @@ -#ifndef BASECONN_H -#define BASECONN_H - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -class BaseConn : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString ipAddress READ getIP WRITE setIP) - Q_PROPERTY(QString state READ getState NOTIFY stateChanged) - Q_PROPERTY(QVariant timers READ getTimerTextList NOTIFY timerTextChanged) - Q_PROPERTY(int raceState READ getRaceState NOTIFY raceStateChanged) - - Q_PROPERTY(double nextStartActionDelayProgress READ getNextStartActionDelayProgress NOTIFY nextStartActionDelayProgressChanged) - Q_PROPERTY(int nextStartAction READ getNextStartAction NOTIFY nextStartActionChanged) - -public: - explicit BaseConn(QObject *parent = nullptr); - - // values for the socket connection - QString ip; - ushort port = 3563; - int errors; - int errors_until_disconnect = 4; - - // the current state - QString state; - // can be: - // - 'disconnected' - // - 'connecting' - // - 'connected' - - QString latestReadReply; - - //---general status values---// - - // stuff for storing the timers - enum timerState { IDLE, STARTING, WAITING, RUNNING, WON, LOST, FAILED, CANCELLED, DISABLED }; - - QVariant remoteTimers; - QVariant timerTextList; - int remoteRaceState; - - // for next start action - enum NextStartAction { AtYourMarks, Ready, Start, None }; - NextStartAction nextStartAction; - double nextStartActionDelayProgress; - // only used in remote mode: - double nextStartActionDelayStartedAt; - double nextStartActionTotalDelay; - -private: - QDateTime *date; - //to get the current time - - QTcpSocket *socket; - //socket for communication with the extention - - QTimer *autoConnectRetryTimer; // timer to frequently trigger a connection attempt to the base station - QTimer *timeoutTimer; // timer to trigger connection timeout - QTimer *timerTextRefreshTimer; // timer to refresh the text of the timers on the frontend - - QString readBuffer; - - int nextConnectionId; - - struct waitingRequest { - int id; - QEventLoop * loop; - QJsonObject reply; - }; - - QList waitingRequests; - -signals: - void stateChanged(); - //is emitted, when the connection state changes - - void gotUnexpectedReply(QString reply); - - void gotUpdate(QVariantMap data); - - void gotError(QString error); - - // for qml - void timerTextChanged(); - void raceStateChanged(); - - void nextStartActionChanged(); - void nextStartActionDelayProgressChanged(); - -public slots: - - Q_INVOKABLE void connectToHost(); - //function to connect to the base station - - void connectionTimeout(); - - Q_INVOKABLE bool init(); - Q_INVOKABLE void deInit(); - - Q_INVOKABLE void closeConnection(); - - void gotError(QAbstractSocket::SocketError err); - - // --- socket communication handling --- - - Q_INVOKABLE QVariantMap sendCommand(int header, QJsonValue data = ""); - - // helper functions - void doConnectionAttempt(); - void setState(QString newState); - int writeRemoteSetting(QString key, QString value); - QString readRemoteSetting(QString key); - - // for timer sync - void handleUpdate(QVariantMap data); - void refreshRemoteTimers(QVariantList timers); - void refreshTimerTextList(); - - // for qml - QString getIP() const; - void setIP(const QString &ipAdress); - - QString getState() const; - - QVariant getTimerTextList(); - int getRaceState(); - - Q_INVOKABLE double getNextStartActionDelayProgress(); - Q_INVOKABLE int getNextStartAction(); - -private slots: - void readyRead(); - - void processSocketMessage(QString message); - - void socketReplyRecieved(QString reply); - - void socketStateChanged(QAbstractSocket::SocketState socketState); -}; - -#endif // BASECONN_H diff --git a/ScStwMonitorSrc/fonts/Arvo-Bold.ttf b/ScStwMonitorSrc/fonts/Arvo-Bold.ttf deleted file mode 100644 index 38341b12f22fd166cb70c61e77a7a4d0d96b8fc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37480 zcmcG12Yg%A+4nhjNZz(A*|IGU$+9HxB}?+QJmYx9aU91s8Frl5*^5j<7LY*51OkN+ zk~EA`nu19~pfrrI!YJ@UN-6NNOX;AL(w3Jd_VxEa=SsHYB)t88-|sUhlJ0%Zxo14* z+0P?F2_fNRD-p?xDbsTD*R9m15pvBRakZy!Y43`W)9>pD*;r4A5Yo4Hwb`*cEQpZZ znYcf*f5pJk!*2Z>gluXjBrIy6_v#h69zn>hJ$MfoShAu2&_5!7j?Y7ctadM$-#ahx zG{2&Qn1cTEA>o0s)2oo~6d{4a#;J&OA;tyq5b>Q`%5tS4mu z0(}3U6|3g2c<;#DA%yH&0{EwhK>7)h!sM?odo4-!CgG|m5OIJAlnOJ5AkaC43UrE2 zr;Cs@aT$7x&f>wVUwm+=b3piD*d~8<-q0_jp+HQ8$fwa)IEf^A-t0&kAk!uiKqv{I z3y3Tmnl+Lj;t6xKR1~Ac7WB&hA_BEZ8Pw^pXq`HX&Pgp4@6;lSn|@TIWY-)WKC_bE zLvNu6mJOd#{)^@xq>=BxuY64-rS~t`m9K@b=wHz*S&8SnpBgvM<@>*@X3)<%bST2}YmpIlQ{*uVdgSC-yO z6W-Za)~!4YENH_nYylP+h=rti?HXASMKTBDVvDXK6pf-SQBhHrD08w-muY4L)m!ot zB`mRI1p?^UKmKKI6Y3T`bN`J!1qD4f-v7*k;U_n2pf7Hjx_?o5`J(+(<*(dxcRu*s z!iCTMbXT97t?y7#)Af(`&mX+50VvOL!hzA~$%e+kkk(FbHt<;#=qjR-WJx1$1>Q&+ zQ5p!u*nGnTy2#odqSZ!eTTI>@wSl==p$Ox!L-)S$0#L0R}=)?VHN4UA;VO`No3T+wVO+u=e43pD3?oPn|QJoeTG}Tc<5L zY*juMo~F{${&Gr9d9_(9sN>f!o6ogTNXo`!CF@n;JL!dB58ZDqi>Q=DR z!A}VOwX&DAK)Ctn(c!g+huitq2s@7o#}CV2DSsU*VtYexP_E^Bbe8IszbY@%67^IF z=P|NiV)dG3%EmK#K>buvrOX;_Ji`b7%uovZ(P2Y-93{7y)Xr=dfdC8!eN{oM%|Ef%)KcP0|J*7p7R^Fv) z^p6TvcT`;&ISVTjNiw}@LmxM#_B_8&4n6v#2E&K$Ha%eHhhlJRUbwNJi+&&?{R}pBjVgPH4esOnd7k+;H?+{ zm}{U`2AkK+2?`K=q{uw}HesiC6b5SyYSrb9V3^MdC;o{DW{brbu!WApenJwk-jQi zy^Sr~1&8>X;d1|>8%h!&APSt9E8yiO(5WnMI`GFw_t+MZUM7&3NJ~OIB@SDBPC`z2 zC^1nJB##W4b8JS!R2C`vS)-4$i%BZ0R*BcZQ}=G4Q&2Ex`@K&M%(!JiQSrk49Uc1@ zlz_dP3j6mx^77K9uRH>>#Xi5XbP4}Vi#cOIzOAuw+wtC>pKWVoBWCgxJ9P$8bC*XdHtfgH)W@C31Glzf16<-1)4cA(qoH81RKt+?UU zo6qeU-hIzK^iMli?bv*c{MF=Zk998ka?5;EvS#2E%-PBTTWo8 zHc>P(;mF8^BM3}(T+>fjWZ|~0?;YtHzr-`|{p9+jvhp%>Qc12=^KoEh|8WmF;%jn!DSZS9jOO$1R@zqVgVH;GI7}L|dw>D!rw} zX^v!zImr~85}-9gCWZ{G%EU%FQRH%ca<H5DdJYp^@5F+mN6`X#r_ zTJqD?r5W|J@|Cw4)q;K~ufx8FlTK9vOag(TIE*o9#suk#mc8*_Y1-<1EWa||` zy1c=h!GqKWKvn`XvPN+M)y2;$U31S9%9C=R^2A%Ke#TrJ&49(C*G`$c*6CsAGL%srliOH!~xQE8zputf#oenQPOfHG| zbQzZ_|LB-nhV8>wr_i&@QP)#c(pzi$vCy+&=8xaIcH?i4%-qR{^6;*X^-b2q$=A#j z)-XwE_{7nFAMft^>9=yt-*b?{=7s4pDiZg|s zH!6#jer4UQ!p+BM0M$OCG6U&7_Pn9{#F^@I0xfusf$@OIa19eqz=9;ccv>04uc4VS zQT8mxe;6hti4A~-034+*%QMvA5=QG^HJPKXL4jXq};>DF(CA?=a<1M@-&_w zN)~#92$e)g2UGyDWw@S9uv?; zVI7mQA?I*ej9S=1l%5_ArN?RQg>Ay8%7F5uv_(2GwC*p%U(q7*=5K^pHcFyAAd!&= zK>y5-YUb5=qi~Uu85jq%+7MW6A_Q$r#-kci!@GnLs(XZulGKlUDQ%LhB$c>?g2q7u zW)&R|K57Cth@@JYNhMHNC}>Tl%iWN11L8GPr_%wZl_;n%)R6J0OL@q%4 zK0~Ez9E`YJi-aF)5qY^5KlltbnM+3XgU?`ULh8hM@D_Y$qkPlA$|dqyFphf(JRj5L z;hB7V3H%TApLjX=AL!qDIruB~@3s3FCKHv^tz#MwQ264BcKQFjy7aW1tTb1;3v}3# zni2?PwW*?#${?eS+#Z&!(K_62#xJATxpU;ZJua2eMhmZ7i;K%`vu>O3_AK~O@1!;P ziSDMX+54(``aj;(d;i+%T}tckC#_EV#+Yf1sxFL9(g!-bHcYC&W=39ku-Q>$)7h-g z)iq@F9$KN?sC<1c+j2u#oIN(X9Jrh?^0o8JPbiTFY{LJpaiM3KJsV+L&ZwgDGFSu8gUj4$} zsZ;j8u%=>_Q+fRs;kK%UDdxph&Y88TsWn$=48xzs#djQdY59tmZkrwx9WM(?RB55| zYHo?GwzsT&UY(6m4)y%!V8v!Uu8#~Ap+keXv5CeK&{_%PjfqnNGb&;|C{3i8oDr){ zB!Mg(gW-2D9{@Xu!)~)$VvQIyge<#VYxfCR<)Y8-$i!~J=w@a|u`^>)ees-Hdur{R z!kp&Pj1a2VP22wXnsqPlpE~WIV^^3Q)Nm6#Ua!#daU&%GVf*6uUE;J6ZBNQG@wNgU7K(!jC7Begue?`RtW=u$C z%7Tgoke{SpY+V8@Ghm7;8ZhZu?K11ikj$)%1H@W!I+!T>aVPz9jj*QN60M%O(H5W+ z648SCE*#hBvY>QD+t1ZjWwkON7Vh zi?1qzdu8#uv-?`7?0Io*<*I^PDykM+t;@>`t^z960+r4y%Gas!=IIB{u3Gitt?jW! zs=c5H-U6EEDxuU~H@Cd3uQr9PzH{UYsaq<7-94Ku^M;wJCX%4dvvsxLd@4%vPC*e40hFbW@Sxns<$mGn$xqS{>HcWHBQ<8@-^2ybzL1K zS7G>{g;U(-K>DaQE_)JvF)6Di+Ze2m4SU_1XAbYW^Vh3Zy?lGe)O}}`$L7V+YfL$% zmgLfGI6Np}o|ksHGOb~d1v z4UlHs0f<28z*rk*h!}^of{bsR5Hr5!vD+PC&>Ry5acbd;;`OiI);4ADORFcX zE1)^uKYDrDO<#6zsy)`{zN*^(ySkMYA$e_W-fTvoXSvPsZMVF%dg+;4+9{2Xi5^P2 z{+Uf>4HX|{I%A4@CVw=kc&MU*Qd`ZeqSCoFHcX%hvTzkBn~5y&1__|edMZfc@yk!T ze1>#mGt>x%Hh$6FYep{+@o}yK0{qjU%hmvlGjm_wa9(v@a;#Bg6-VtE_>@0We>b@6*K1L=PK7Q>=D0VxYCM$9@T`9 zK-iHw)N^6RCdy1%huPo9f{oC7{FIKd(nKHuv`H|cQPA-KUEZKnj_iJWrf+s#qt`-hJlI<(uATWL@6=Ele8dQ>=k3x^Fl3lN~`Q8~tQ!)e-#vF=s zJxv`mD45Kd1IFxgX#p8w>1N0nt5Pt~0`5K?gB-gLX+PDb*F{D6Z0ZcJATU93oj7JE zJzKK!fyGjN-GS@*uq*Qt67nj2!@ls@x`&n(d@e4%O0--$bnJBrFeU*QVb28G7p$)A7@0YfE}YNwZQiI;F|-fRy)?# zn~!A#WreHf(&kra#7-phe=rgj$rL)(=%jOcm^!Crb{J}n^6hj9J@-hx5cA}j7mvgI zJ9uc(@be54hqesRNagE~zlLY+^h16u9BvM~C;Y zei=7ZF`6=r4k(o@#7X|3x)4GF1VJVlCP9=15WKOkAp(;%nZ}Tai;N1vI>}f-aG*vM zMQKhDTX7iY!3LNtlE$G_YG`a$n=sMjvJKeg*x6qB;Ymmc-_pxKdy_$60UN?(Q$j*S z5;8Dx3{0jlIP>#zbF#BCZMtX>1iLjNl>05BI7Kj)gV|n07orV5Dgl$3eT+=B(f7Sa zr?35Ku4UTn0r%6tzD;plHMOuWkKUm;;<793`HS-&7{2!4ol;1*vvk^YTUl1@+plu+ z(bhT7RT*pyQ62;>X-}`og;JVbt}Iv2D&x3VeR-3V1d4b_U9=z_7!J^!u(kJp0gc4U zvo(!lMk%=$Qn?J`$Sf`bFkDsC{cIZUie3{6iEZ|R|a8{rGbmPV(b?L zl;My*nVW1bCY-P?juBPyzL`x0i}D{FzV^;L=m<3eY@0~}WmNxM`Xb`+ySj9EfP_t6Oou6CVDO-)VV-nR)9(&jg) z!RpCm_WHJ4U)`|bwOgl7x#hKMH@&uh3eA8xSl|LPvsYi`V&b6?wDP3`9Z)k?t~`4? z-p{To>8nq5)c2J#4Fl|}ZXOPQnUW@(Fyc6pK|b>aCnX928YpC3IAVO?3Tgv~aW6Iw z_zmVHFnuEtk`g-@IHIxqSTLfM%|U%^Uu~wIiYvBaXCs4ABwr(JuJ34Ep@|pna=>dS zWN%R_mNulj^9MDTRbb#rpNQSmWoM_B@kNRjT~A)9aYj zTU0Tx7UB?JV*zW-^q!Z!;V|9^Pg(gg~R-(aQHs+tVc8o1l|iX`$77`X>bEtY#i znKdUFlIkUpriqZMV0#(J34MCaApbx#5|2-$h@~Tvl1N zyHvPsad2FAva-`p7A9NmU?G%vM!pokl`2R%Ir11V7cLQ%-Z>_EL_i+2S{@g|>6^O$ z5Li?yV!M(f1H5f%Y}@ET^OOS z`DHWia$)Kla|t>ecKfJ~g54IrNGhG-iONkgX${u+)BQKM+os+4(~iQcCKts#28}V< zQ|IVzOLac`*b{Z@e>}5dZcB;rVMP(X%(NJ^kx4Nj(FUDtGnBT@E$Z6Ql@%6aG0HXRk;vZC+`J3fS>%+~?J=r4h6mij>9Nsw-+W65 zF`A?7#R(bCO&w*++w-Y-`yB%Ha6PQSo)aGw9(2ZRPoKVZI(?05zCVERmX7>WE(Xq; z$SvNWSV|EVCTK=+mMPhzL&eCrJ3z#-D~%jJykMZAg5H6dri~0qXE4(+Qu`PfFT`1OKMX9KknM=5?uaV0dL!|b z-;tRv%`ZY(V8;&vr9b$=?;(IZnIoa zYZ!yJ3S%&k=EoznlE{Q=brjJ7em@c1_~2uVIPmZ*1EOFEzX``VtRB8NhY$<{L%GOX zVHq6`_wZmuYnHu3ZSUT&Tu9iZ{6%@^y$=yXFV-Pjxi{{@KDoM0a!cuf!tIS7GRGvO{yGz&|D(C2fr zsNNsH)5pdRvCeAr@HZ}^3lEoU+fl8=3{d*@HS~`;8&-Shm#h9ZJfOtT$c-Br85{bF z4Sz90rIfG#dO`ImDrwRn#;+&sr*x7qw#{+l9Y1V+eKBsa%y$@r&F1&nW{<+mY*2j^jM2>dLdupYv~PaWJ8r~tS<`Z83tf|L2a2v z_^dYw{vaH78G#3?8zdP35{ z;FV#)wE45gz!-B72>jxs&t`mfoT~{_XAYq#>I7r8%%(qoMY$mER?7ZBHA7486J{Tx z51br6c~;3{^EN2AQH7eoQ#8N8obxmEGIhL8^OVnDr>4cjpSJ*}jGhq&g>!&O^fIHE z-wOpP1a2tIQ6!>H1S8M`SIUH|=^3`XtoOQ+kLjy)K6YKtt;n1=!5o;H!dzFL38HFU zf~!8wG0ByfR8W_iKFO7EEVa&^l;o;+q}CTCB^6Al!8?xQ z@la~8jq1w@!#ZE~Hezv@#ryINv7GuS10_ib21k@5IFRV6UX9eTvuMLeF6c)`^5~L@ z(K^D>qo3@lEZ_aveaAlCT~WE`v!h)L3nL;t3p=|O73y@Jg<)&oq_M}2Qqw!vUh}r{ z<&hsNU%Y({bxzuJe16~0w$#^e`B~rmqcG z*n{EoFl&PvcIVV-bv7d-%~v1!6Fqi|>e@H%qBFk}E~M~NxDHfgwnidml8p#Vcs>zl zL9u;Q+=^`!n1IgBA6!0XF=a6+hE%RHQF#m?5ry+j>7{TNeaC#?5KeG;`G6= zxfLug0CsXJA*SE&2=4(i2GijLkNv|b9<^ZYZ8~R^&t&4V1PM4=!+)h-T6FH*nc=nj zhZhNl#g?H#YLk?AmEDZo?Z#7HU5}8_0l#p3GhD?SFh%Tlayd`sO~eyEl@$H1?v# zjNI13By(xIvvN+J@^|t1;o0Kh$k>XFC)aK{b6u6Q|E~V_oQ8tO}m1EW8l;-W;}Qw26g3QAG5yLjhFa>N1Njjw8gL5|?et26${1cUe(* zrbbbK`>H%tkLh4($EnETEy`;qXYBL?ODm@Be`d*|r}j=WBxlCZb^5YCbEwW#*in+& z=1sGC+vTr^KZnUDV)~}TT}z+5skwRksfGDh&1laM9vFH#D?PT@YMor>h%ac)%V~1M z+{w?gw2AL}*JE&=;P5pLG71IP2neZwkOP0X4>xIWr!AB>m?rprvi0%+jQGQ*=CeFH z;g91n22lur1TFYtk#ou7fgGhv`BZ9O`>(6}hCio~YybK6=L5&-??3x?cvu-`v>N#p z@bc_|Vr+rUe=>_5i3<=!$Qa;!YUmv^Z!rf4D1^@(0dxb6uPH6g&rP-K!U-@EzK{&+ zJ8-_N3Lf9+hEbi#|EiE&j`dfGiGJMLGvXp_=|8!nWom8v+^KucEN{4J&75l6yy>-5 znzx_0F~!@FpEtcCC8c6|UVeu+#g^!voSr_}Z8od#iJE}=YmRky9x5sQ*}&Yv8>iT+ zW-eY|zUYzC;yc@C-M6v+!YgSF9*f1(kd``$wVEV&lgqMArtGq0YX!3rR{+lzjVRJK z`TH?Eb;$>}j&gxA4_J9f3}6wW!fBu!+` zh?2AHQVrJJp3V){bY+_I=`FU(y!iOMQ472L)P;ATPQrDo`3~HM*|ai91(`-3Q-$gb zq6ww}ftr9tK{&rE!vX_eC$E@vRWM&vfx*kLQZ-O%^?UW_qa1{DUg4&AZd!s(8SC~AX5my7a%J5ECRqL z-?12zwtfJJ$y{pG{tp1Lo*-oUp9I;LySB!j!-UK{IwCn4MJwfYE5SQV{?lbOydM^Cu-! zx=yNLVF=c5g)3oI89QDKZOgo3Z2Gv*}Wz3G|0jqcb5p8mi( zJOzP+3z*a@LZ8OV@@5(hqOoVgV1+>M!{=cTqhzU)C48^>6HdG47XeI@p!Oia6%ok- zui0raQf2P#{RMBF{jPaKduC?)`X(i7J!G9YntCTK5K6y2KL4|S3~$-0{NwlY*;F*> z?-ul@Lw~wprkRu@WEawgCmPzdpw;-h`Tm91-#DwhH}7+_-ZJu!-}fK+`|vBu8_Mg$ zFZ=`jlp!MMgr*ht1?ZC@!9jrmS`7<-q|o&yV=>nzP!`eRF=~xkht}b7c#JNmu;yU{f(Sk znM4H{Q5ypH*5gjVW$wV6!WtGZMHg{n3xfj$EeQ(L1}zMsjJh)aN+M$)@?76XpDBzv z@VzA<%Gw}pKoE$7+8$W;AGYrD#!f?8;mq!~dDG@$5>r!C(lc%8>DEvdx~yZSB`z;W zkPi^j&vG4^kquv2s^e(l1jw#^loGJWZn*au-*t@zglp<8$$4H|SYG$$gC}}>1`lrP z&Rg=U3;X+Cn7#8_<)1rl_}4oRZ>p);^zb|Xx?%fw?>u~MP3fASuWVhPRzj40YrcC8jqOTFiwF;_2ZH8J^OfHANlA_O0v4$?M*7*WjG}L#LNk z6n@?~wdUGKe)F&GH~jNA=&x$sPhRAYbK`L+Ys)~cAMcT%h7E1~3DdBMN0 z#;pvDrsd+%fLOpl!%Pv}AQHsZ7 zbMkxk_>=T$u|aAF4FR=dMv`Dg*?KX-1m=MU9mCfyHs4-A)2Ur2RZGG|4t>(qy`iRN zeRn}Y_xhTe4c#s=sCIo!aXqnm%~(S2NrwaXqO3M{fYX=? zjKl(Nz=k;trx-7KviYX|()NSz?+}jfQ9d}Xd>|O2+BO{NTln}*Ey`d2{gkHq-%qjU z*kH>IKnzhic|<*AVJWcZ=km;!94bsUc}FkgP$bkc&n62RO2S07AlC@xq&zes8hHR% z>t27-huT{LJ93~lOf}}<7Xx`6m%XoAc^N2=)PSS~#u`>$T9A*B8J){+X5lgv+62q^ zU;+GQyg!WuRXqe@y|C@=@K2$3)i&m zdw!K6*$@^H6Oq+YWU&-AXV!@4Xi}y#ddl2baMlZl1i0dN*X><3sdB~b?fGrh1qSbb z-LUoP&E+uI7({9*o|2QOPif|bqb zm=H1ND#0*i?UYn&Q?4~VB)mm=B3#y|=2cBmT4`@pZEKTv=%KRZho1gm-P-?t=AIR0 zWh?G^=D*jj`{3zA%gf%)nznl1ecj#n?_E7D3!nGi-`#cpK71A?)4!j~pVE_6&{?Ms zbC0Lf;QJ_;(ZK_Dm#;EzkMY4^#167)@86Wr9f2Gy=edg3vyMNr-d2H9JshRk^>saTEW4rNL z%s0<+=e3okq?EPgxn^3Qu6t_vz+*SIwA}dEz=~&T#fmE}Pv^1SSF^6J-hGU9tA5^f z%$=TPt!U55X)m{?r9aa!qvghv3l==Kqotz(T)B;WEPewF(?HIs^ah6pAtZzeN`9;T zIN{64M7hfgU;0Qr7rty(>Y`4Os&9hlixHUbK0YVx{R8{($+?f|ss_4JS)?rVeZUBk zFoM&*5ma~sgIWG8sHV?rfVf}~Q=U0%WW*Kq2N-o_VvH&i!nWIW3eVT^umaHuA;e16 zw}0Y!(g^uN*yI1O7NH;e8kD{CN4^ihoTQOYWr>!7zB-^?fHg3e2}m~-3$B17WC1}7 zOgNgTYTCw88LmxD_@2aMa$8-2*<4U(v)4Ei=qYx^Uh9InxYj;;#bHyg*c^b_XY(>$ z-)r;f`quyDJBVsOeNE~YKEzyNu9Sbl(&_spBwq+0sy1&zU(-5&xDAs6wa)Kf=S_r> zPsI<#r!`yf6hweN2Im$LAUzvJn~0b2>4)zszyIY&-zuMLHna~vu~_iT9DZRjgV$z;6LAOyIZsabPyob3bN{swf<r1s`%pZUL>@;lK*nbxZ@eBdPlRiQIDO%0)82$tN(O{?- z;}3j_5V7BbRARy^RCz1dnF$XCH6`+bun<8Lj2zGaD0 zf~Q#{kJEyeQ?&9I`)tu$^-jH&;`0NKRnW$AT31e+%8ypuS$o?13%7E@qde_a9`+pe z-d^_tI8-=BBS*-N{pTr!8^pKJSn&bz3y%5aYIs8=lkN!Z^9z+mre4GV z)@P_gz@8|6fwa%Dkcnv&}S8| z@K5@@^6B~gJ1D`v39yQMEGkf&^`KiGZvldvVTORQnH^0Dc37Y4bCEgCU@(*zN^-JN zk{L~l$(TsP7_;+?iBsbo6VQ)o*2Dl-qZAsOR+^DrnjBV=pX5q4D$fa%xBR?+&I21K z%^PslrRyeI-KeQ<(X`4!SE9Y5yeh4vAa7 zsT1;O1-Zd%NKS&SB^OyO;Shk!DU?1541$TDR)|-aGD^{aBfuq!Brv2s3fevv8o;!V zXy&421_j6fVD^4!NLFC_qiqB&!tu~-3Zf6OaTTN@J2Mr@Bo=du&JYM+jf|)t=4Mtk zJFepU45%zF6cQG!*i47xc6y^xwJK|M^mX^FltJ1NlU2;=)%0o0dz0{HCinbRdoY=87t!YX1X<8LgV5eCrB^fd4$q}Y#ou)|VYFRv~Zh4z4 zl-4Le3rmSo&LL(zI>j7mGU@}1(totUyR5rXuRO!oPPs*_(R@XUNxio=5;pweL{vN> zF33aakcXruur{m+g)oFgL$(Lj1`$R=Cm=BJ52o8guGn6QXm9%t3)Mnbwrdn1CR2 zQBHJ1Y<*7SiYB`@-P@WaCTN5JL(Y^6dQ0z)wiHCX2+He1cye*3(r@u(J0ij}3QCfc zJ zY4p~|Kmg3n3K3<=3F`+I;MIn%1d%{GBXlE z(~QwrB<5Pi(P69Pff}Y`W*{9isq_48U<6i5GDd}oS{Si7qxJ*(B5u0=LWPD5XL?xffRD5Uk1sUNHj%<&G z9?UFGMv9pet0TsG5OG>!R-WltQV}04YM#;3=%RAPW-f{Ic6wp~f;AZV9(wFCv7T6n zo6E}?kvi}h3!@uwvcVEV*>u$)POK38u2h(+ci8Mq)MApc=#z}O*vnHCe7@I!AY*E2 zyCqX<5tX*5$Y|gH4$h z>`fYYACXVM^M`6fEM5UYhH&09*AxB)(n3BA1T7#k>JCA@8O=E7UP6p_>kk7$gG^6j zfpF2ukq)&aiqjwW6>XH6IFD0|BMo~*bTl5oNVe1MW&|K@USM!7LcQMli%uC7E1lU@ z!BJr}^ygX{Xb7eE4Q)CaE=Pw1JT8`H%qg08bYCNEV9_E3k$~Tqf(G0WWo|AF@rWEa3;VB2;@VRBAB!!neiMhTtqXT zV;S2aKa~F%>H+^-%Uq=zI`ZXb(9#UlH!UO5(d zyzzjE_4N~(-o)?Xt_ist!x+t~piil3+jb4p3 z*#v7sqP;GwrNm;g#M|QP+^ue&5!Z%!3i5Jr1b<#S1~J|Rp_&i*bCL5d3d60!pmgWE zY*uN~cJZM63T*m$d{%Zyu>#!=oFm*$z+Hg?nF`x{NKk-ACMcmaItfa6jwH{pO(p;w+JNw;?Y$HQ#M4>u*d?DQTM0n2?a*E-Fpd$AxP{10T?Yg$9@knw`$BhLWsA z_-#msv=VrHYCIk@)sCSs!B%1ICgL$BN1aBGxIp>l8|CZoZo5@JrTmK40+FF@NhQK- znuoXzz{zKpI)=0p%tMrx%4s>d?JGKC zQVSB2i&BlzsUEoa(~O#ja;B}Su3R}iFK_zQmEINYdCKz%?zEWb)WYQC;#6Zy28+mf zP&z1_klzA(^sPTLj_}j#*Eg78$D`d4c^S!~-8hC*mqm}-DId_f7o>wUF;;nn?PeN! ztK+@d`J7F>F{1_k-T*|WM2=Q)Kv@VZBB6E48-J1Cie*}hKysu#;!62jzIHa=PaN9= zpaR}tN5SEN4V>9f{9?mIJNQH$BxfRlr5__PZhYcgyj(GX!Xj<%BIiCvMlIq#@sK9y z|J$w#vnyB6$j_g#y0UV0M}B_C>QX~;R$N>bB55t`J=vfM!d2WIgHoPH7`(#q)#KyPd`elCY&VIeZc9!1QXNDiAyDSPvAx9zZHw|s1%B%?9--VX0$GLTZ2iVE}e1TSaZtw8XL-$Cb)Sto#9`_NniEm&Ph$Zpl z&|~pXJeWy@x#bHX!ofze3c>q9vX(pGV1tF$7Rt=uLCibD{lx~Jl!nx{o)Fb&VDc8J zO{J~>*KNDJ(U-9|uxf^|yg;a94xZ8f5QoZ2$l!YNX3;2ZLTSvsG+FtGu0mo+Lj z(^d~ZC!C?ptmG@JlKCbgw11>l$-Mby`eyj0XSr9hj_vO&m$uTvFq89>mL09f|Xr2v8c9!Bp4kM_>*1)xGo7rZoV{ZoRe zHV}SatvC=8#H9aT9Cm6%E{;#-lTADWhedi_9+u_pTnx)Z^Xzf`(x4!g((2L)IV=@`?RjkX|vjAwY8?F+S6>&Hd`{w*`#Xz zA+O02ZG75iAOHMdx(&Tg&zA$ zR{TXv6BC30C{{v%KPwI)W@<)YG*4XiBaAQQ&onU$k?r*lH<^&Q2)h@{Cxm4S5o!J> zT`8lGq{uSs3y#4KH-G2F!A(x_cGVImv7-^VXj^9>F~_``-NL8 z7TYeW3-bq)dB*K$SFAjHpd*{76Ur|sx+2t&$t`iz^%j@(RHs0qSOMFzT4~in%Dlxu zOp21cfy^x`N&zBLEFe-a^E#_Ihr{IyL5+=#wZyV&&N^KxT%o?SZ8$vr!r5rnHuYD4 zTp{c{{I?j5JjPhjjw3besY?3C{ z3j}dW6QkbKo0-(Z4UZYDxHzKT17SRKy0k8jlLa?8uix|aiVccW3OZl?r!B*uKF4~S zA~p!O!48njVuo1~F-%X~1_ORV5y}Pz&ZtT{3uWUW&l!k%k4v$p%7G}`10${9{cW|Y z)dG1?nHG=hpkdL*U?DEfUSDs9qBN5h z)L7z+XOt%9I4rvDud|UAiymRW#)B;LT5lB-OALs6XVxK*-yev3$4Gr~?^$At#b!0+ zq(mkM1R_#~6NIR-aia1iuja@pfD=|1XimI3r`3f|^k95^Y{~~ha{aQ&p8l5XBwb`u zXeK7nu%gNFK{%5862tA5z9oiuxkR6wlv>m`8BxzO^0O-q5jmcO+?kWoG8+3!Vv=L@ ziIE9O+s#a3EfX6=7mq!4kR)$Bv#0c8i7{qh#Bc_3KbXAAc5Z^e1?Ml6)Un9mvZDFB zr?u^#SLB(uYkJ4-d7jT=(u>UI!Zf2XtPN{^AAoQ&|t(*EuBlehP?_sOyOj@Vd7 zer$XmtH_>*5gihjifb?;E9^8kc_WQr)J%bnfJNF4-!-#!C*bTm0E)sID0GIn0i^!$ zpcWo;kq-LdORB}-O-S3B2#Nbl0GZD)s2B7+9T{_8lP!gkR7XmdEz4py#Tp{RLf||= z&8MJ11W5Y>7S%8%ZWbG@uEoL#9Qmxc7BiIzCD!`X%D!4_Txsv5tQMniTbt8ciy zvl4pGY~`h0(_Ke{6XV4_kzwYd=E}^vqLd)HATA z_MomlPlz#kptGU615{qw0Y|;vp|v6Cdwl*miz7K@NqU|JJeRkqsBls485;OpQgU+A zFO=_3%v)ZxB!3Ve5-c{D3fJf@^{Lo7m&L>^py~;ps$0-fRD!$qRDYJo-zzc zLx_z(65msc#*`x1KYT9(HHLK4^E%hy&kSiH8_1-5tuZZl&0(x-<$9t z9w0we-Pkdp*;NSmGoP3lN2477r-DQ~nJV>?3+q{?pK(g^1yA#AvM7m@mlx zYa-~4!Yz1l*de3@e?l6oHp_fN%sVt3q{I*7RMC-~k>}+|&}5O=RWwJGAE7(2-aHC9 z5HM;W;%G3lg<7OYN-kIt^qThXgCisKu94>h3OHRqAS^;lE4h*G!MjNQTY8ufK)eNr z2o7;0eUU>P5RP$(59Cc8B6;L_?I+;C4st-iudv|#zol-xYspUXM-J&3`A8F|sex54 z1JO@jZ&?I9@gz4V4dv?O1XOBbhFE45W4SSC5y#J+0Lu*jxeklDAm5x}$-AonjvTcluoA=Sc~Ily;Sq6$AfbAq_jI)}k&hcu09`k@DvwYANut!fR{nCqN>g)LD-eRZLPr5E-(=zdSxT2m`#FB8zcFCmaIA7M>|qSCJDi+y~WS6_rx; z4jv&i=0;*mr~Y1xx^x9tH6}RN3|Kd|Y|mBHvLYu{>)fj-`E_kGt8_AHb775gUi8K* zze{njVkb&)47J2rS-q3HC;w_Ot9TL@bBFSehG&6-BFgCWk~S^F=W4eDnBUM%jWA{ulo?3cZR(((d5{%KiRdNKqbO5lP5s!m4gV&a4HQ zU9-I*7BdSLfzkwepvDy=-vV|0Sz#7N!eP5W1CG!9r#fOG4?%3A;vx<c=yhyvy0wRexKV>VN0!?nqEBJV@fWbDm`UUPG_`tT$R7@)Q;xno1R?S zb$HYC2vkT~<)R_Uk1og`8bRsNoV;dNyrX=wHNUwaZe#@5j9)I&J}SV83DTk^n`kNh zgake+&?o38gRTrvi%VcO(-T*Kd1|zu)yRUld_O-Kg;|3@|I5R?Jqoi0K{Omjm^hw4 zkHTyvyDouY75p81UK-!LWDY~e&1)jeW_ryPVAy!nezuU$RG4w&QTt(YS7BC@bC>i} zr4+H>GXe~pAfTe_@w-rLZTasUY41?4WBoVM^h?^Jf8jiz3vy%G9*z9ze}&mhW?cdk z3Ko#0W#d%)Sv~UjM3|9(0mh?c^HpKCjJ%}6Ts&XRaxL4(a6X51P&D7%*5-PY5BP8ACAJWCO;Z?{p{%VHRQ2z*S{UTzJ)w6c3tzLdL3iiI`SF$ z6$yA$5C(q*l7JELs;7KpObTZsyN|b=czrXC9e15QNrm4+wvD^aM$E2j$m&&meo7H) zbm!oznfJb){CsR&@+seS4cWMyLAT;`JPLo3oot@Q`nZn6dep0c#dloYw2#4x!0ssc zq3vWfy7a-0`~_FD;7hWTEvHAXsqcZW{NTR zcIytA%~6G4P4HAPmd*;1MCh1F7HJ_YDzWmAY0K(+!MVA$jJp0z0K z#46@+0gI>GYI|{7j9rk3i4OK!>oWm03tK9^*JCDb6!?w#~=5m~~nW>(eCAnPOyKQ$b^Me5O0@ouZ}F3##+Niwc^y zKfYwn;dP~9bCi1pOPgM$MN)>7VE5arYWzlkx9 zZf^3?-|=*FBKB^g@cN-G|8*12|L`5OW+T~m2_59szWBM%1*YQM*Rz(WN+UhZTe8p# z*7C?DEde8b%Uj|svX)n|mMZOi8z)1hy<2Fm+HxFyR!<2#J?bghLJpw^kra%4EZv28 z8WCD}2AQH7Enq+5>M+mt@;PFd`vnNaoIhU3kZ2(AxJRZoBdBWhE|cU_QO|WW5pts5 zJTWk+K$?HyZrVLjU!M3~I0WY)ouD9J8X^QM@Q5PZCVUJEj9-Sjj1^eG+<4`4)drm6 zw*d#3GCcneHsGg!$OKHuZ?V`rgdt?6vR{m1kuXi{aBm0gfrSU5w@|GGZi7#e{l!1D z0r+_@#0@!JP8bTUQOHI5Esc3s`NM;+E?oGkvK_y8aa8Gk;DMv3PO%IDWtI3Yu<)YH zf=e?5l=b5>1h5p?>W>J1)051GBqw0i8p$49+ZKjG0{pHWe59Ye3E6f9eM_*xL3=?= z5vPftNJeR$^q3qbcgVlhv}@khnzT1)pU|EUXbjjD@DcvI5Y!uVA$VShHRQ*k@u6>p z<%jJK`*Zl3@Vg_rBi_+v>pqFRKJp{|cKwHjHp2nK7g4oQw@0H?X|y+bVf4qw0AsuH z*D=8{{V``_qhk-oo{y_A=}e!-YvSGUv*WLe|9SlT@&8EpI58s8p4geVFY)=LmF8sg z)8-LNh2^N_Ny|CQ-;#rp=3?-e355;q!&>6n;|p zZQ*cHc#)~-hN3r%NipaM-$6=u(mjtoIw!pJUnCSM2l#vWpBoTmK*)P7?R6doo)nsvBd zMOFr;;odR4+5x{F?{o2fo~)EUBx&*;#DL#@a^kxo(1p)w#G=7(J<37I4LHc6Rq;GR z>g8CHARWT{dgNUnBTg}gG|A!kzK9gTHq|ODMIR555;2671S}z~@=4N){_EvVQYO1d znbd)HEyN?5NsxRUDV6?2(zJ^Zr*jVX-Xl(FH7OGe$c=#yL(q{rIfAs|8HnQ{>!b=2 zA-#!+yi;U3Y?D>e1Gs(&!e?F zki38o$Z6p)`V2y5++mV|d7YGZVr&h>hSl%aZb76}7-<9JPLi!8iM7*$)r$`yJLsK} z^Fkysu<;2Uq)lj3?=u(;7``}c`;*BIotiZTFfZy#fIVIc3SuA-1#?gWK_lp|xAS}LV;&DVH4N?o* z&SdKykTvp=wgmk>OyaTb_?==t?wXFg|T1#DO<2Ui`0dN?Ri_6LWH;#-OB; zW!gb{9yb^dAW{hITm*O7AL|0T1!^R!Jivf>CM0b`b}-|ZMnmFYkvZL@hg^dnL^@7J zP+~KW_R{rqvv5}U&}=ZrniD~d?dD>0jrltB4at#^Q&{i0$fl?ySHa@6k^GoEOheGF z2kkZqFA2Xh>&-Fdc;2q)qINJPkDS5lsgZBc3;sr?j;tQ(8DX9X@=5(ClkjieCk3CR ze$x6$*C(AHwP8+7&S}GICW9e!VWEI@r2bLV4`rWdyzj!;TRf>HlgWJ8(dx(~RFiE0 zKWrk+q!2SMCM{$Yxf+yl03356nF5_^DxPsGNr1+q`=(M*$7P|*p(GhYKYjQob)??&eazAv? z2gy&#L*!@VAlCTj(5D_DgXB^Cn&X}1ZE}MAf}DiryMs(8r^w^v3Gz$wB=p)F$g|`$ zei8f`@-%s#JV#z2FOs{-OE~KPrv!*>79dut@oD! zh$`sov(7bHEQ6$LkW^c1PGAqJd#bVqY3880r$1{@$h2ClmaIWB(>(7Nq9KY@RS)W` z%{@I;j|ztBsz+^N^`KDQzTP|-V#SB*-g$#k>-rN&vp_e4mih4(cJ)M96s?LkTjwC*MV&49j_@@^FYCTvHApkMx_mR}GS9<&tW{lEgL0<1);uWLdNC($b!+FK)><_f zV6DOqph-{GpoT9uR>C~*QSIC+GrP&AYf^{L{v8y1YWoJ|bPH})n{PJXjAuQXE8DO_ zQ#*TFO}%Yhoz^Z(mwC`TtrPc5Y+Zaq$r{vV4hB|doB*-ls~&)_)+#H|#ah)nD9r62 zq#fNejL5_k%;v%H>IOD5e83J3MzC*f_!hzU3*LbL z)7hB@$8{6|cvf0%gdE$lZgvyQBXiGgk zJv}|$Jv}qK{ocN{wdxcPAB>{7U6IRsGkMRhz-=j87wkSb6h@Eq4Y%8+WB$36tq*qZ z8`^!q5fiP@>y_RRgr+WcXeg|!%UPZuU{@q%$q`!FaJhh5fQ>XU7nOYXC6slDyRtLP zFvHe%w)%7{;lzWqOBYtMv<_p*Ao>qNT{u~HnZnSRdLJj}tl4&*i`*IyjR9L#MgPGe zTjyuJe!GnDTj~>Xgkl4fJUZNLX^HR!fqIk8X2lZ?C_-D=>swu+(i?Q6w8553y3Pf8#A zq-@7NDOY2klpWY7#nw&u0|OTAlV{b8WKwo> zkZ$ft*~~|=65*q;Z()i|(`qm64a(ktYj@4e4ElrYMMIo`Y`+{$8Sc?&z{6c^VokOg zwkZ4RYGn)WHCekPmmHf(`<~Y`gUs%QY+l;QvoTgfk=wI**<5<}4c&-(RbJvow4*9M zoRuxNhTWU-(ZCw_bd)YtI;>7{moEzGk;BfVNhSTA?NCWG3 z$AZ@ViMr9t$_E~9ZR-Q9xAP8$XbR_yU^8dGx9$YNI{+}oof6G4B<7X1B^Wvp- zxTxnK8*o>$D5d>8s|#6=qF?Pho$ z3G5b%N5zZ%xZ4}xG%k5-PapwpAH~g&1=o!k0ND!?5oBL*ooBCt><3ZG0pS^ha!_~# zIV3!SJT5$fJQ3VrH_U+zfpN%#4F@+Oj`m3~M|)EEBGURP;Zy9e@G16`@G16b8M7a@ zyo@Qxh>R)7XJkx4Mulf5$PwWYWK4Jj85bTwKC625fqhQ(66~nzCD<|5OR%R^FTswh zUV@!ay#za{dI>gxk9l}PaXL?F&Gyppj6-*TPKwio&1R`R%UKI5JW~!8p3}-B4Z?GV z&Rfe;&uUG3oO7u3c+R21{ycKFI*~6pR2W`#s4#pU-fd-hU(lM$d&!}~e%_(N{xUtc zIeD)*R2ZfmDh#i}yS*&$g4R^tYYr9m*BvVC7wNg($@`*1g<-~_!th3Lov(!O7T3lS z*SSR2&!;EOvf*sfR*%`r_Pysy2YO1*SUwECyPvm~kvBQ++{eFDp}8l^0epX@=@j(l znrK@^U3F!Rs|6LSO+2Qxn(W&(z18nT-yyxQgx00mw@t6Ur2cJ5J@kd`k&FBIlyGrK z>PPy*HB!G-Z5+Y$4JX0}g!ESRc`jD;UK~BBoHWSa&CZJUNJFf0S?8@t;ew5Ri6gu3 zM%59%Z{H{Sf5acZn;dXIPov~SVzu1&Y371hHQ!09jczHtKNoNfQeTC+!dwZDZLWNn zf4MTl8Y7Fx_bVgkxk~e@sW6R&OTcD@@xn2#vt|nIz^+1!H^7;>_kdl%Ml$)AfGgo? zG+rSCY*pB%uw7xGFs(2%_W?Xz3SZG)(<K{J6^Z>Gd_^)9VL3BhFLU2HXVw z7_bYO(>fQ^Iv02vtTj4+aApT{|@JOFQ_?Oo(Z(4h;wz0?2)5KO&u8{hgXrEx>UqtrY;gI z;>*m=NQ=plg*rw4W|9n*gv$th;Bk3`+V!P+{DM@*pzLG&Zic}eM zvHrJ5@ZcR|^f5+z7T8UXDPH5$Pg7247EUY>3(u&u3>s~~){?%dvIXLaDLm6f_Hr$m zE_tQR(@2>t!!&-HFehj~j*g>@c~VDS%ZSb&Tx(?=>tA6UO&0r;D=QVIo%<>~$iJ>Z zn@+B+27D_ajbxdD4cxK5kvsG@ai^)vEOwh7t^ik}Z66s(mwVh*&OYub=Nb=?KRiTK zJV9=8m<;Tb?zIZ*(Ee>eYN9nF%J{3`j*?~>j83N!Qp zdCGs8f0}=j0lj8^Z~j1z^ZVo}zfO#elBXOaTlp@rS0GF2vX$fHEq_RM^&3R?d*(;X z{~uWkN14A9%-BgXqo{`EW=&OecLeT^%!FPYz% u-RWo~gzw$glW$<*12qbJA5CXY@`-a9^Vda_iJU0v=DSpFX?GrM*G diff --git a/ScStwMonitorSrc/fonts/Arvo-BoldItalic.ttf b/ScStwMonitorSrc/fonts/Arvo-BoldItalic.ttf deleted file mode 100644 index b87118bcfe5971b1a8ef1007b8ac32eb2505589d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36692 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 diff --git a/ScStwMonitorSrc/fonts/Arvo-Regular.ttf b/ScStwMonitorSrc/fonts/Arvo-Regular.ttf deleted file mode 100644 index d8d0ec890158d20a439e5ea12e1e7ac7e5213e89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38596 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
FNj($Ve~f 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 v%CIM diff --git a/ScStwMonitorSrc/sleepprevent.h b/ScStwMonitorSrc/headers/sleepprevent.h similarity index 100% rename from ScStwMonitorSrc/sleepprevent.h rename to ScStwMonitorSrc/headers/sleepprevent.h diff --git a/ScStwMonitorSrc/icon/favicon.xcf b/ScStwMonitorSrc/icon/favicon.xcf index 53636a65a9faf6e091185a7b7a59f49a017f0d88..584e4a24113a816ee52556f85039ab91f36fc98b 100644 GIT binary patch delta 9618 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 diff --git a/ScStwMonitorSrc/qml.qrc b/ScStwMonitorSrc/qml.qrc deleted file mode 100755 index e80de3b..0000000 --- a/ScStwMonitorSrc/qml.qrc +++ /dev/null @@ -1,8 +0,0 @@ - - - main.qml - FancyBusyIndicator.qml - TimerColumn.qml - FadeAnimation.qml - - diff --git a/ScStwMonitorSrc/main.qml b/ScStwMonitorSrc/resources/qml/main.qml similarity index 92% rename from ScStwMonitorSrc/main.qml rename to ScStwMonitorSrc/resources/qml/main.qml index 14b0ebf..f955b7a 100755 --- a/ScStwMonitorSrc/main.qml +++ b/ScStwMonitorSrc/resources/qml/main.qml @@ -7,6 +7,8 @@ import QtQuick.Layouts 1.0 import de.itsblue.ScStw 2.0 import de.itsblue.ScStwMonitor 2.0 +import de.itsblue.ScStw.Styling 2.0 +import ScStwQmlComponents 1.0 Window { id: window @@ -21,6 +23,10 @@ Window { id: app anchors.fill: parent + background: Rectangle { + color: appTheme.theme.colors.background + } + function landscape() { return app.width > app.height } @@ -30,6 +36,14 @@ Window { scStwClient.ipAddress: appSettings.baseStationIp } + ScStwAppThemeManager { + id: appTheme + + Component.onCompleted: { + appTheme.setTheme("Light") + } + } + Settings { id: appSettings property string baseStationIp: "192.168.4.1" @@ -52,11 +66,6 @@ Window { } } - FontLoader { - id: timerFont - source:"qrc:///fonts/PTMono-Regular.ttf" - } - Loader { id: mainComponentLoader @@ -96,6 +105,10 @@ Window { TimerColumn { anchors.fill: parent + timers: backend.race.timers + colors: appTheme.theme.colors + fontName: appTheme.theme.fonts.timers + opacity: !showControls || [ScStwRace.IDLE,ScStwRace.STARTING].indexOf(backend.race.state) < 0 ? 1:0 Behavior on opacity { @@ -136,7 +149,7 @@ Window { font.pixelSize: height * 0.3 - color: backend.race.state === ScStwRace.STARTING ? "#e0b928":"grey" + color: backend.race.state === ScStwRace.STARTING ? appTheme.theme.colors.warning:appTheme.theme.colors.text text: implicitText === "NEXT_START_ACTION" ? ["", "at your \nmarks", "ready", "starting..."][backend.race.nextStartActionDetails[ScStwRace.NextStartAction]+1]:implicitText @@ -245,15 +258,14 @@ Window { } } - Image { - Layout.preferredHeight: parent.height * 0.5 + Icon { + Layout.preferredHeight: parent.height * 0.7 Layout.preferredWidth: height * 0.7 Layout.alignment: Layout.Center - mipmap: true - - fillMode: Image.PreserveAspectFit - source: "qrc:/VolumeLow.png" + fontName: appTheme.theme.fonts.icons + icon: appTheme.theme.icons.volumeDown + color: appTheme.theme.colors.text } Slider { @@ -311,14 +323,14 @@ Window { } } - Image { - Layout.preferredHeight: parent.height * 0.5 - Layout.preferredWidth: height + Icon { + Layout.preferredHeight: parent.height * 0.7 + Layout.preferredWidth: height * 0.7 Layout.alignment: Layout.Center - mipmap: true - fillMode: Image.PreserveAspectFit - source: "qrc:/VolumeHigh.png" + fontName: appTheme.theme.fonts.icons + icon: appTheme.theme.icons.volumeUp + color: appTheme.theme.colors.text } } @@ -385,7 +397,7 @@ Window { anchors.fill: parent - FancyBusyIndicator { + BusyIndicator { id: loadingInd anchors.centerIn: parent diff --git a/ScStwMonitorSrc/resources/qml/qml.qrc b/ScStwMonitorSrc/resources/qml/qml.qrc new file mode 100755 index 0000000..5f6483a --- /dev/null +++ b/ScStwMonitorSrc/resources/qml/qml.qrc @@ -0,0 +1,5 @@ + + + main.qml + + diff --git a/ScStwMonitorSrc/Banner.png b/ScStwMonitorSrc/resources/shared/Banner.png similarity index 100% rename from ScStwMonitorSrc/Banner.png rename to ScStwMonitorSrc/resources/shared/Banner.png diff --git a/ScStwMonitorSrc/SpeedHold.png b/ScStwMonitorSrc/resources/shared/SpeedHold.png similarity index 100% rename from ScStwMonitorSrc/SpeedHold.png rename to ScStwMonitorSrc/resources/shared/SpeedHold.png diff --git a/ScStwMonitorSrc/fonts/PTMono-Regular.ttf b/ScStwMonitorSrc/resources/shared/fonts/PTMono-Regular.ttf similarity index 100% rename from ScStwMonitorSrc/fonts/PTMono-Regular.ttf rename to ScStwMonitorSrc/resources/shared/fonts/PTMono-Regular.ttf diff --git a/ScStwMonitorSrc/resources/shared/shared.qrc b/ScStwMonitorSrc/resources/shared/shared.qrc new file mode 100644 index 0000000..8f0bfb3 --- /dev/null +++ b/ScStwMonitorSrc/resources/shared/shared.qrc @@ -0,0 +1,7 @@ + + + fonts/PTMono-Regular.ttf + Banner.png + SpeedHold.png + + diff --git a/ScStwMonitorSrc/shared.qrc b/ScStwMonitorSrc/shared.qrc deleted file mode 100644 index fb10f14..0000000 --- a/ScStwMonitorSrc/shared.qrc +++ /dev/null @@ -1,13 +0,0 @@ - - - fonts/Arvo-Bold.ttf - fonts/Arvo-BoldItalic.ttf - fonts/Arvo-Regular.ttf - fonts/Arvo-RegularItalic.ttf - fonts/PTMono-Regular.ttf - Banner.png - SpeedHold.png - VolumeHigh.png - VolumeLow.png - - diff --git a/ScStwMonitorSrc/main.cpp b/ScStwMonitorSrc/sources/main.cpp similarity index 100% rename from ScStwMonitorSrc/main.cpp rename to ScStwMonitorSrc/sources/main.cpp diff --git a/ScStwMonitorSrc/sleepprevent.mm b/ScStwMonitorSrc/sources/sleepprevent.mm similarity index 100% rename from ScStwMonitorSrc/sleepprevent.mm rename to ScStwMonitorSrc/sources/sleepprevent.mm diff --git a/shared-libraries b/shared-libraries index 81e90dd..305656a 160000 --- a/shared-libraries +++ b/shared-libraries @@ -1 +1 @@ -Subproject commit 81e90dddec4cca57ebae4900575f58a6610d4789 +Subproject commit 305656ab1e06679326a0fe99485dfbdbb88f34b0