shared-libraries/ScStwLibraries/headers/client/scstwremoterace.h

87 lines
2.7 KiB
C++

/****************************************************************************
** 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 <http://www.gnu.org/licenses/>.
****************************************************************************/
#ifndef SCSTWREMOTEMONITORRACE_H
#define SCSTWREMOTEMONITORRACE_H
#include <QObject>
#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<ScStwRemoteTimer*> remoteTimers;
QList<ScStwTimer*> 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();
void setTimers(QList<ScStwTimer*> timers, bool deleteOldTimers);
signals:
void scStwClientChanged();
};
#endif // SCSTWREMOTEMONITORRACE_H