mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 11:55:35 +08:00
Ref T259, Ref T243 use enum for client capabilities
This commit is contained in:
@@ -38,37 +38,53 @@ namespace BlackMisc
|
||||
return m_user.hasCallsign();
|
||||
}
|
||||
|
||||
void CClient::setCapability(bool hasCapability, CClient::Capabilities capability)
|
||||
void CClient::addCapability(CClient::Capability capability)
|
||||
{
|
||||
m_capabilities.addValue(static_cast<int>(capability), hasCapability);
|
||||
Capabilities cap = this->getCapabilities();
|
||||
cap |= capability;
|
||||
this->setCapabilities(cap);
|
||||
}
|
||||
|
||||
void CClient::setCapabilities(const CPropertyIndexVariantMap &capabilities)
|
||||
void CClient::removeCapability(CClient::Capability capability)
|
||||
{
|
||||
m_capabilities = capabilities;
|
||||
Capabilities cap = this->getCapabilities();
|
||||
cap &= ~capability;
|
||||
this->setCapabilities(cap);
|
||||
|
||||
}
|
||||
|
||||
void CClient::setCapabilities(const Capabilities &capabilities)
|
||||
{
|
||||
m_capabilities = static_cast<int>(capabilities);
|
||||
}
|
||||
|
||||
QString CClient::getCapabilitiesAsString() const
|
||||
{
|
||||
const Capabilities cap = this->getCapabilities();
|
||||
QStringList sl;
|
||||
if (this->hasCapability(FsdAtisCanBeReceived)) sl << "ATIS";
|
||||
if (this->hasCapability(FsdWithInterimPositions)) sl << "interim pos.";
|
||||
if (this->hasCapability(FsdWithIcaoCodes)) sl << "ICAO";
|
||||
if (this->hasCapability(FsdWithAircraftConfig)) sl << "aircraft config";
|
||||
if (sl.isEmpty()) return "";
|
||||
if (cap.testFlag(FsdAtisCanBeReceived)) sl << "ATIS";
|
||||
if (cap.testFlag(FsdWithInterimPositions)) sl << "interim pos.";
|
||||
if (cap.testFlag(FsdWithIcaoCodes)) sl << "ICAO";
|
||||
if (cap.testFlag(FsdWithAircraftConfig)) sl << "aircraft config";
|
||||
if (cap.testFlag(FsdWithGroundFlag)) sl << "gnd.flag";
|
||||
if (cap.testFlag(FsdModelString)) sl << "modelstring";
|
||||
if (sl.isEmpty()) { return QStringLiteral(""); }
|
||||
return sl.join(", ");
|
||||
}
|
||||
|
||||
bool CClient::hasCapability(CClient::Capabilities capability) const
|
||||
bool CClient::hasCapability(Capability capability) const
|
||||
{
|
||||
if (m_capabilities.contains(capability))
|
||||
{
|
||||
return m_capabilities.value(capability).toBool();
|
||||
return this->getCapabilities().testFlag(capability);
|
||||
}
|
||||
else
|
||||
|
||||
bool CClient::hasAircraftPartsCapability() const
|
||||
{
|
||||
return false;
|
||||
return this->hasCapability(FsdWithAircraftConfig);
|
||||
}
|
||||
|
||||
bool CClient::hasGndFlagCapability() const
|
||||
{
|
||||
return this->hasCapability(FsdWithGroundFlag);
|
||||
}
|
||||
|
||||
void CClient::setUserCallsign(const Aviation::CCallsign &callsign)
|
||||
@@ -76,34 +92,29 @@ namespace BlackMisc
|
||||
m_user.setCallsign(callsign);
|
||||
}
|
||||
|
||||
void CClient::setQueriedModelString(const QString &modelString)
|
||||
{
|
||||
m_modelString = modelString.trimmed();
|
||||
if (!modelString.isEmpty()) { this->addCapability(CClient::FsdModelString); }
|
||||
}
|
||||
|
||||
CVariant CClient::propertyByIndex(const CPropertyIndex &index) const
|
||||
{
|
||||
if (index.isMyself()) { return CVariant::from(*this); }
|
||||
const ColumnIndex i = index.frontCasted<ColumnIndex>();
|
||||
switch (i)
|
||||
{
|
||||
case IndexCapabilities:
|
||||
return CVariant::fromValue(m_capabilities);
|
||||
case IndexCapabilitiesString:
|
||||
return CVariant(this->getCapabilitiesAsString());
|
||||
case IndexCallsign:
|
||||
return this->getCallsign().propertyByIndex(index.copyFrontRemoved());
|
||||
case IndexUser:
|
||||
return this->getUser().propertyByIndex(index.copyFrontRemoved());
|
||||
case IndexModelString:
|
||||
return CVariant(m_modelString);
|
||||
case IndexServer:
|
||||
return CVariant(m_server);
|
||||
case IndexVoiceCapabilities:
|
||||
return m_voiceCapabilities.propertyByIndex(index.copyFrontRemoved());
|
||||
case IndexVoiceCapabilitiesPixmap:
|
||||
return CVariant::from(m_voiceCapabilities.toPixmap());
|
||||
case IndexVoiceCapabilitiesIcon:
|
||||
return CVariant::fromValue(m_voiceCapabilities.toIcon());
|
||||
case IndexVoiceCapabilitiesString:
|
||||
return CVariant(m_voiceCapabilities.toQString(true));
|
||||
default:
|
||||
return CValueObject::propertyByIndex(index);
|
||||
case IndexCapabilities: return CVariant::fromValue(m_capabilities);
|
||||
case IndexCapabilitiesString: return CVariant(this->getCapabilitiesAsString());
|
||||
case IndexCallsign: return this->getCallsign().propertyByIndex(index.copyFrontRemoved());
|
||||
case IndexUser: return this->getUser().propertyByIndex(index.copyFrontRemoved());
|
||||
case IndexModelString: return CVariant(m_modelString);
|
||||
case IndexServer: return CVariant(m_server);
|
||||
case IndexVoiceCapabilities: return m_voiceCapabilities.propertyByIndex(index.copyFrontRemoved());
|
||||
case IndexVoiceCapabilitiesPixmap: return CVariant::from(m_voiceCapabilities.toPixmap());
|
||||
case IndexVoiceCapabilitiesIcon: return CVariant::fromValue(m_voiceCapabilities.toIcon());
|
||||
case IndexVoiceCapabilitiesString: return CVariant(m_voiceCapabilities.toQString(true));
|
||||
default: return CValueObject::propertyByIndex(index);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,27 +124,13 @@ namespace BlackMisc
|
||||
const ColumnIndex i = index.frontCasted<ColumnIndex>();
|
||||
switch (i)
|
||||
{
|
||||
case IndexCapabilities:
|
||||
m_capabilities = variant.value<CPropertyIndexVariantMap>();
|
||||
break;
|
||||
case IndexModelString:
|
||||
m_modelString = variant.toQString();
|
||||
break;
|
||||
case IndexServer:
|
||||
m_server = variant.toQString();
|
||||
break;
|
||||
case IndexUser:
|
||||
m_user.setPropertyByIndex(index.copyFrontRemoved(), variant);
|
||||
break;
|
||||
case IndexCallsign:
|
||||
m_user.setCallsign(variant.value<BlackMisc::Aviation::CCallsign>());
|
||||
break;
|
||||
case IndexVoiceCapabilities:
|
||||
m_voiceCapabilities.setPropertyByIndex(index.copyFrontRemoved(), variant);
|
||||
break;
|
||||
default:
|
||||
CValueObject::setPropertyByIndex(index, variant);
|
||||
break;
|
||||
case IndexCapabilities: m_capabilities = variant.toInt(); break;
|
||||
case IndexModelString: m_modelString = variant.toQString(); break;
|
||||
case IndexServer: m_server = variant.toQString(); break;
|
||||
case IndexUser: m_user.setPropertyByIndex(index.copyFrontRemoved(), variant); break;
|
||||
case IndexCallsign: m_user.setCallsign(variant.value<BlackMisc::Aviation::CCallsign>()); break;
|
||||
case IndexVoiceCapabilities: m_voiceCapabilities.setPropertyByIndex(index.copyFrontRemoved(), variant); break;
|
||||
default: CValueObject::setPropertyByIndex(index, variant); break;
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
||||
@@ -12,18 +12,16 @@
|
||||
#ifndef BLACKMISC_NETWORK_CLIENT_H
|
||||
#define BLACKMISC_NETWORK_CLIENT_H
|
||||
|
||||
#include "user.h"
|
||||
#include "voicecapabilities.h"
|
||||
#include "blackmisc/simulation/aircraftmodel.h"
|
||||
#include "blackmisc/aviation/callsign.h"
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
#include "blackmisc/icon.h"
|
||||
#include "blackmisc/metaclass.h"
|
||||
#include "blackmisc/network/user.h"
|
||||
#include "blackmisc/network/voicecapabilities.h"
|
||||
#include "blackmisc/propertyindex.h"
|
||||
#include "blackmisc/propertyindexvariantmap.h"
|
||||
#include "blackmisc/simulation/aircraftmodel.h"
|
||||
#include "blackmisc/valueobject.h"
|
||||
#include "blackmisc/variant.h"
|
||||
|
||||
#include <QMetaType>
|
||||
#include <QString>
|
||||
|
||||
@@ -51,25 +49,29 @@ namespace BlackMisc
|
||||
};
|
||||
|
||||
//! The Capabilities enum
|
||||
enum Capabilities
|
||||
enum Capability
|
||||
{
|
||||
FsdWithInterimPositions = CPropertyIndex::GlobalIndexClientCapabilities, //!< interim positions
|
||||
FsdWithIcaoCodes, //!< basically means it is a pilot client handling ICAO code pacakages
|
||||
FsdAtisCanBeReceived, //!< ATIS
|
||||
FsdWithAircraftConfig //!< Aircraft parts
|
||||
None = 0,
|
||||
FsdWithInterimPositions = 1 << 0,
|
||||
FsdWithIcaoCodes = 1 << 1, //!< basically means it is a pilot client handling ICAO code packages
|
||||
FsdAtisCanBeReceived = 1 << 2, //!< ATIS
|
||||
FsdWithAircraftConfig = 1 << 3, //!< Aircraft parts
|
||||
FsdWithGroundFlag = 1 << 4, //!< supports gnd. flag (in position)
|
||||
FsdModelString = 1 << 5
|
||||
};
|
||||
Q_DECLARE_FLAGS(Capabilities, Capability)
|
||||
|
||||
//! Default constructor.
|
||||
CClient() = default;
|
||||
|
||||
//! Construct by callsign and optional model string
|
||||
CClient(const BlackMisc::Aviation::CCallsign &callsign, const QString &modelString = {});
|
||||
CClient(const Aviation::CCallsign &callsign, const QString &modelString = {});
|
||||
|
||||
//! Constructor.
|
||||
CClient(const CUser &user) : m_user(user) {}
|
||||
|
||||
//! Callsign used with other client
|
||||
const BlackMisc::Aviation::CCallsign &getCallsign() const { return m_user.getCallsign(); }
|
||||
const Aviation::CCallsign &getCallsign() const { return m_user.getCallsign(); }
|
||||
|
||||
//! ATC client
|
||||
bool isAtc() const { return getCallsign().isAtcAlikeCallsign(); }
|
||||
@@ -78,19 +80,28 @@ namespace BlackMisc
|
||||
bool isValid() const;
|
||||
|
||||
//! Get capabilities
|
||||
CPropertyIndexVariantMap getCapabilities() const { return m_capabilities; }
|
||||
|
||||
//! Set capability
|
||||
void setCapability(bool hasCapability, Capabilities capability);
|
||||
Capabilities getCapabilities() const { return static_cast<Capabilities>(m_capabilities); }
|
||||
|
||||
//! Set capabilities
|
||||
void setCapabilities(const CPropertyIndexVariantMap &capabilities);
|
||||
void setCapabilities(const Capabilities &capabilities);
|
||||
|
||||
//! Get capabilities
|
||||
QString getCapabilitiesAsString() const;
|
||||
|
||||
//! Has capability?
|
||||
bool hasCapability(Capabilities capability) const;
|
||||
bool hasCapability(Capability capability) const;
|
||||
|
||||
//! Supports aircraft parts?
|
||||
bool hasAircraftPartsCapability() const;
|
||||
|
||||
//! Supports gnd.flag?
|
||||
bool hasGndFlagCapability() const;
|
||||
|
||||
//! Add capability
|
||||
void addCapability(Capability capability);
|
||||
|
||||
//! Remove capability
|
||||
void removeCapability(Capability capability);
|
||||
|
||||
//! Get voice capabilities
|
||||
const CVoiceCapabilities &getVoiceCapabilities() const { return m_voiceCapabilities;}
|
||||
@@ -126,7 +137,7 @@ namespace BlackMisc
|
||||
bool hasQueriedModelString() const { return !m_modelString.isEmpty(); }
|
||||
|
||||
//! Set model
|
||||
void setQueriedModelString(const QString &modelString) { m_modelString = modelString.trimmed(); }
|
||||
void setQueriedModelString(const QString &modelString);
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::Icon::toIcon()
|
||||
CIcon toIcon() const { return m_user.toIcon(); }
|
||||
@@ -142,7 +153,7 @@ namespace BlackMisc
|
||||
|
||||
private:
|
||||
CUser m_user;
|
||||
CPropertyIndexVariantMap m_capabilities;
|
||||
int m_capabilities = static_cast<int>(None);
|
||||
QString m_modelString;
|
||||
QString m_server;
|
||||
CVoiceCapabilities m_voiceCapabilities;
|
||||
@@ -151,7 +162,7 @@ namespace BlackMisc
|
||||
CClient,
|
||||
BLACK_METAMEMBER(user),
|
||||
BLACK_METAMEMBER(modelString),
|
||||
BLACK_METAMEMBER(capabilities, 0, DisabledForComparison | DisabledForJson),
|
||||
BLACK_METAMEMBER(capabilities),
|
||||
BLACK_METAMEMBER(server),
|
||||
BLACK_METAMEMBER(voiceCapabilities)
|
||||
);
|
||||
|
||||
@@ -17,5 +17,16 @@ namespace BlackMisc
|
||||
|
||||
CClientList::CClientList(const CSequence &other) : CSequence<CClient>(other)
|
||||
{ }
|
||||
|
||||
bool CClientList::hasCapability(const Aviation::CCallsign &callsign, CClient::Capability capability) const
|
||||
{
|
||||
return this->getCapabilities(callsign).testFlag(capability);
|
||||
}
|
||||
|
||||
CClient::Capabilities CClientList::getCapabilities(const Aviation::CCallsign &callsign) const
|
||||
{
|
||||
if (this->isEmpty()) { return static_cast<CClient::Capabilities>(CClient::None); }
|
||||
return this->findFirstByCallsign(callsign).getCapabilities();
|
||||
}
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -27,8 +27,8 @@ namespace BlackMisc
|
||||
//! Value object encapsulating a list of voice rooms.
|
||||
class BLACKMISC_EXPORT CClientList :
|
||||
public CSequence<CClient>,
|
||||
public BlackMisc::Aviation::ICallsignObjectList<CClient, CClientList>,
|
||||
public BlackMisc::Mixin::MetaType<CClientList>
|
||||
public Aviation::ICallsignObjectList<CClient, CClientList>,
|
||||
public Mixin::MetaType<CClientList>
|
||||
{
|
||||
public:
|
||||
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CClientList)
|
||||
@@ -38,6 +38,12 @@ namespace BlackMisc
|
||||
|
||||
//! Construct from a base class object.
|
||||
CClientList(const CSequence &other);
|
||||
|
||||
//! Has client for callsign the given capability?
|
||||
bool hasCapability(const Aviation::CCallsign &callsign, CClient::Capability capability) const;
|
||||
|
||||
//! Capabilities of client for callsign
|
||||
CClient::Capabilities getCapabilities(const Aviation::CCallsign &callsign) const;
|
||||
};
|
||||
} //namespace
|
||||
} // namespace
|
||||
|
||||
@@ -115,15 +115,14 @@ namespace BlackMisc
|
||||
GlobalIndexCCoordinateGeodetic = 5200,
|
||||
GlobalIndexCElevationPlane = 5300,
|
||||
GlobalIndexCClient = 6000,
|
||||
GlobalIndexClientCapabilities = 6100, //!< used with map key
|
||||
GlobalIndexCUser = 6200,
|
||||
GlobalIndexCAuthenticatedUser = 6300,
|
||||
GlobalIndexCRole = 6400,
|
||||
GlobalIndexCServer = 6500,
|
||||
GlobalIndexCFsdSetup = 6600,
|
||||
GlobalIndexCUrl = 6700,
|
||||
GlobalIndexCUrlLog = 6800,
|
||||
GlobalIndexCRemoteFile = 6900,
|
||||
GlobalIndexCUser = 6100,
|
||||
GlobalIndexCAuthenticatedUser = 6200,
|
||||
GlobalIndexCRole = 6300,
|
||||
GlobalIndexCServer = 6400,
|
||||
GlobalIndexCFsdSetup = 6500,
|
||||
GlobalIndexCUrl = 6600,
|
||||
GlobalIndexCUrlLog = 6700,
|
||||
GlobalIndexCRemoteFile = 6800,
|
||||
GlobalIndexCEcosystem = 7000,
|
||||
GlobalIndexCRawFsdMessage = 7100,
|
||||
GlobalIndexCAircraftModel = 8000,
|
||||
|
||||
@@ -119,16 +119,16 @@ namespace BlackMisc
|
||||
|
||||
CClientList CTesting::getClients(int number)
|
||||
{
|
||||
BlackMisc::Network::CClientList list;
|
||||
CClientList list;
|
||||
for (int i = 0; i < number; i++)
|
||||
{
|
||||
CCallsign cs(QString("DXX%1").arg(i));
|
||||
QString rn = QString("Joe Doe%1").arg(i);
|
||||
const CCallsign cs(QString("DXX%1").arg(i));
|
||||
const QString rn = QString("Joe Doe%1").arg(i);
|
||||
CUser user(QString::number(i), rn, cs);
|
||||
user.setCallsign(cs);
|
||||
CClient client(user);
|
||||
client.setCapability(true, CClient::FsdWithInterimPositions);
|
||||
client.setCapability(true, CClient::FsdWithIcaoCodes);
|
||||
client.addCapability(CClient::FsdWithInterimPositions);
|
||||
client.addCapability(CClient::FsdWithIcaoCodes);
|
||||
const QString myFooModel = QString("fooModel %1").arg(i);
|
||||
client.setQueriedModelString(myFooModel);
|
||||
list.push_back(client);
|
||||
|
||||
Reference in New Issue
Block a user