Ref T261, Ref T251 gnd flag support in context/client provider

* allow to set gnd.flag capability via context/client
* utility functions in client provider
This commit is contained in:
Klaus Basan
2018-05-17 23:54:39 +02:00
parent 06a4efba51
commit e3465f432c
9 changed files with 72 additions and 8 deletions

View File

@@ -100,14 +100,25 @@ namespace BlackMisc
}
bool CClientProvider::addClientGndCapability(const CCallsign &callsign)
{
return this->setClientGndCapability(callsign, true);
}
bool CClientProvider::setClientGndCapability(const CCallsign &callsign, bool supportGndFlag)
{
CClient client = this->getClientOrDefaultForCallsign(callsign);
// need to change?
if (!client.isValid()) { return false; } // no client
if (client.hasGndFlagCapability()) { return true; } // already set, but set
client.addCapability(CClient::FsdWithGroundFlag);
if (client.hasGndFlagCapability() == supportGndFlag) { return true; } // already set, but set
if (supportGndFlag)
{
client.addCapability(CClient::FsdWithGroundFlag);
}
else
{
client.removeCapability(CClient::FsdWithGroundFlag);
}
QWriteLocker l(&m_lockClient);
m_clients.replaceOrAddObjectByCallsign(client);
return true;

View File

@@ -73,6 +73,10 @@ namespace BlackMisc
//! Add gnd.flag capability
//! \threadsafe
virtual bool addClientGndCapability(const Aviation::CCallsign &callsign) = 0;
//! Set gnd.flag capability
//! \threadsafe
virtual bool setClientGndCapability(const Aviation::CCallsign &callsign, bool supportGndFlag) = 0;
};
//! Direct in memory access to client (network client) data
@@ -93,6 +97,7 @@ namespace BlackMisc
virtual int removeClient(const Aviation::CCallsign &callsign) override;
virtual bool autoAdjustCientGndCapability(const Aviation::CAircraftSituation &situation) override;
virtual bool addClientGndCapability(const Aviation::CCallsign &callsign) override;
virtual bool setClientGndCapability(const Aviation::CCallsign &callsign, bool supportGndFlag) override;
//! @}
private: