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