/**************************************************************************** ** ScStw Libraries ** Copyright (C) 2020 Itsblue development ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . ****************************************************************************/ #ifndef SCSTWREMOTEMONITORRACE_H #define SCSTWREMOTEMONITORRACE_H #include #include "scstwrace.h" #include "scstwclient.h" #include "scstwremotetimer.h" #include "scstwsoundplayer.h" class ScStwRemoteRace : public ScStwRace { Q_OBJECT Q_PROPERTY(ScStwClient* scStwClient READ getScStwClient WRITE setScStwClient NOTIFY scStwClientChanged) public: ScStwRemoteRace(QObject *parent = nullptr); ScStwRemoteRace(ScStwClient *scStwClient, ScStwSettings *settings = nullptr, QObject *parent = nullptr); enum RaceMode { LOCAL, REMOTE }; protected: double currentStartTotalDelay; double currentStartDelayStartedAt; double latestStartDelayProgress; bool isReadyForNextState; bool readySoundEnabled; private: ScStwClient *scStwClient; QList remoteTimers; QList localTimers; public slots: ScStw::StatusCode start(bool asyncronous = true); ScStw::StatusCode cancel(); ScStw::StatusCode stop(); ScStw::StatusCode reset(); ScStw::StatusCode setTimerDisabled(int id, bool disabled); bool addTimer(ScStwTimer *timer); QVariantMap getCurrentStartDelay(); bool getIsReadyForNextState(); bool getReadySoundEnabled(); ScStwClient *getScStwClient(); void setScStwClient(ScStwClient *client); private slots: void handleBaseStationSignal(ScStw::SignalKey key, QVariant data); bool refreshRemoteTimers(QVariantList remoteTimers); void rebuildRemoteTimers(QVariantList remoteTimers); void refreshDetails(QVariantMap details); void handleClientStateChange(); void refreshCompetitionMode(); RaceMode getMode(); bool local(); signals: void scStwClientChanged(); }; #endif // SCSTWREMOTEMONITORRACE_H