8 #include "ui_ownaircraftcomponent.h"
22 using namespace swift::config;
24 using namespace swift::misc::aviation;
25 using namespace swift::misc::simulation;
26 using namespace swift::misc::network;
28 using namespace swift::core::context;
32 COwnAircraftComponent::COwnAircraftComponent(QWidget *parent) : QFrame(parent), ui(new Ui::
COwnAircraftComponent)
35 ui->selector_AircraftIcao->displayWithIcaoDescription(
false);
36 ui->selector_AirlineIcao->displayWithIcaoDescription(
false);
37 ui->selector_AircraftIcao->displayMode(CDbAircraftIcaoSelectorComponent::DisplayIcaoAndId);
38 ui->selector_AirlineIcao->displayMode(CDbAirlineIcaoSelectorComponent::DisplayVDesignatorAndId);
40 ui->cb_Model->setChecked(
true);
41 ui->cb_Livery->setChecked(
true);
44 ui->lblp_AircraftCombinedType->setToolTips(
"ok",
"wrong");
45 ui->lblp_AirlineIcao->setToolTips(
"ok",
"wrong");
46 ui->lblp_AircraftIcao->setToolTips(
"ok",
"wrong");
47 ui->lblp_Callsign->setToolTips(
"ok",
"wrong");
49 constexpr
int MaxLength = 10;
50 constexpr
int MinLength = 0;
53 ui->le_Callsign->setMaxLength(MaxLength);
54 ui->le_Callsign->setValidator(ucv);
56 ui->le_AircraftCombinedType->setMaxLength(3);
58 ui->comp_ModelStringCompleter->setSourceVisible(CAircraftModelStringCompleter::OwnModels,
false);
59 ui->comp_ModelStringCompleter->selectSource(CAircraftModelStringCompleter::ModelSet);
63 &COwnAircraftComponent::onModelStringSendChanged);
66 &COwnAircraftComponent::changedAircraftIcao, Qt::QueuedConnection);
68 &COwnAircraftComponent::changedAirlineIcao, Qt::QueuedConnection);
69 connect(ui->pb_Clear, &QPushButton::clicked,
this, &COwnAircraftComponent::clearLivery, Qt::QueuedConnection);
74 &COwnAircraftComponent::onSimulatorModelChanged, Qt::QueuedConnection);
76 &COwnAircraftComponent::onSimulatorStatusChanged, Qt::QueuedConnection);
90 else if (CBuildConfig::isLocalDeveloperDebugBuild()) { ui->le_Callsign->setText(
"SWIFT"); }
94 void COwnAircraftComponent::onSimulatorModelChanged(
const CAircraftModel &model)
98 if (isNetworkConnected) {
return; }
105 if (!reverseModel.isLoadedFromDb()) { reverseModel = model; }
108 const QString modelStr(reverseModel.hasModelString() ? reverseModel.getModelString() :
"<unknown>");
109 if (!reverseModel.hasModelString())
112 << modelStr << reverseModel.toQString();
121 void COwnAircraftComponent::onModelStringSendChanged()
123 if (!this->hasValidContexts()) {
return; }
125 const QString modelString = ui->comp_ModelStringCompleter->getModelString();
126 if (modelString.isEmpty()) {
return; }
128 this->setGuiIcaoValues(model,
false);
131 void COwnAircraftComponent::onSimulatorStatusChanged(
int status)
133 ISimulator::SimulatorStatus s =
static_cast<ISimulator::SimulatorStatus
>(status);
135 if (!this->hasValidContexts()) {
return; }
155 ui->lblp_AircraftCombinedType->setTicked(validCombinedType);
156 if (!validCombinedType) { msgs.
addValidationMessage(
"Invalid combined type", CStatusMessage::SeverityError); }
159 const bool validAirlineDesignator =
161 ui->lblp_AirlineIcao->setTicked(validAirlineDesignator);
162 if (!validAirlineDesignator)
168 ui->lblp_AircraftIcao->setTicked(validAircraftDesignator);
169 if (!validAircraftDesignator)
174 const bool validCallsign = CCallsign::isValidAircraftCallsign(values.
ownCallsign);
175 ui->lblp_Callsign->setTicked(validCallsign);
176 if (!validCallsign) { msgs.
addValidationMessage(
"Invalid callsign", CStatusMessage::SeverityError); }
195 values.
ownAirlineIcao = ui->selector_AirlineIcao->getAirlineIcao();
199 values.
ownLiverySend = ui->le_SendLivery->text().trimmed().toUpper();
200 values.
useLivery = ui->cb_Livery->isChecked();
207 const CCallsign cs(ui->le_Callsign->text().trimmed().toUpper());
211 void COwnAircraftComponent::changedAirlineIcao(
const CAirlineIcaoCode &icao)
217 bool COwnAircraftComponent::setGuiIcaoValues(
const CAircraftModel &model,
bool onlyIfEmpty)
219 bool changed =
false;
220 if (!onlyIfEmpty || !ui->selector_AircraftIcao->isSet())
224 if (!onlyIfEmpty || !ui->selector_AirlineIcao->isSet())
229 if (!onlyIfEmpty || ui->le_AircraftCombinedType->text().trimmed().isEmpty())
232 if (ui->le_AircraftCombinedType->text() != combined)
234 ui->le_AircraftCombinedType->setText(combined);
238 if (!onlyIfEmpty || ui->le_SendLivery->text().trimmed().isEmpty())
241 if (ui->le_SendLivery->text() != ls)
243 ui->le_SendLivery->setText(ls);
249 return valid ? changed :
false;
252 void COwnAircraftComponent::highlightModelField(
const CAircraftModel &model)
254 if (!model.
hasModelString()) { ui->le_SimulatorModel->setProperty(
"validation",
"error"); }
255 else if (!model.
isLoadedFromDb()) { ui->le_SimulatorModel->setProperty(
"validation",
"warning"); }
256 else { ui->le_SimulatorModel->setProperty(
"validation",
"ok"); }
257 ui->le_SimulatorModel->setStyleSheet(
"");
260 bool COwnAircraftComponent::hasValidContexts()
const
270 void COwnAircraftComponent::clearLivery() { ui->le_SendLivery->clear(); }
276 return IContextOwnAircraft::getDefaultOwnAircraftModel();
281 if (!this->hasValidContexts()) {
return; }
290 ui->le_SimulatorModel->setText(modelAndKey);
291 ui->le_SimulatorModel->home(
false);
292 this->highlightModelField(model);
295 ui->comp_ModelStringCompleter->setSimulator(sim);
296 m_lastAircraftModel.
set(model);
300 CCrashHandler::instance()->crashAndLogInfoSimulator(simStr);
305 ui->le_SimulatorModel->clear();
306 this->highlightModelField();
317 this->setGuiIcaoValues(model,
false);
324 ui->le_AircraftCombinedType->clear();
325 ui->selector_AircraftIcao->clear();
326 ui->selector_AirlineIcao->clear();
333 if (!this->hasValidContexts()) {
return false; }
340 bool changedIcaoCodes =
false;
344 changedIcaoCodes =
true;
349 changedIcaoCodes =
true;
354 return changedIcaoCodes;
SWIFT_CORE_EXPORT swift::core::CApplication * sApp
Single instance of application object.
const context::IContextOwnAircraft * getIContextOwnAircraft() const
Direct access to contexts if a CCoreFacade has been initialized.
bool hasWebDataServices() const
Web data services available?
const context::IContextNetwork * getIContextNetwork() const
Direct access to contexts if a CCoreFacade has been initialized.
bool isShuttingDown() const
Is application shutting down?
const context::IContextSimulator * getIContextSimulator() const
Direct access to contexts if a CCoreFacade has been initialized.
bool supportsContexts(bool ignoreShutdownTest=false) const
Supports contexts.
CWebDataServices * getWebDataServices() const
Get the web data services.
swift::misc::simulation::CAircraftModel getModelForModelString(const QString &modelString) const
Model for model string if any.
virtual bool isConnected() const =0
Network connected?
virtual bool updateOwnIcaoCodes(const swift::misc::aviation::CAircraftIcaoCode &aircraftIcaoCode, const swift::misc::aviation::CAirlineIcaoCode &airlineIcaoCode)=0
Set ICAO data.
virtual swift::misc::simulation::CSimulatedAircraft getOwnAircraft() const =0
Get own aircraft.
virtual swift::misc::simulation::CSimulatorPluginInfo getSimulatorPluginInfo() const =0
Simulator info, currently loaded plugin.
bool isSimulatorAvailable() const
Simulator avialable (driver available)?
virtual swift::misc::simulation::CSimulatorInternals getSimulatorInternals() const =0
Simulator setup.
virtual ISimulator::SimulatorStatus getSimulatorStatus() const =0
Simulator combined status.
void setAllowedCharacters09AZ()
Set the allowed characters as 0-9 and A-Z.
void modelStringChanged()
Model has been changed.
void changedAircraftIcao(const swift::misc::aviation::CAircraftIcaoCode &icao)
ICAO was changed.
void changedAirlineIcao(const swift::misc::aviation::CAirlineIcaoCode &icao)
ICAO was changed.
swift::misc::CStatusMessageList validate() const
Validate aircaft.
void aircraftDataChanged()
Changed values.
void setUser(const swift::misc::network::CUser &user)
Set a user.
bool updateOwnAircaftIcaoValuesFromGuiValues()
Update own ICAO values (own aircraft from what is set in the GUI)
virtual ~COwnAircraftComponent()
Destructor.
void setOwnModelAndIcaoValues(const swift::misc::simulation::CAircraftModel &ownModel={})
Own model and ICAO data for GUI and own aircraft.
swift::misc::aviation::CCallsign getCallsignFromGui() const
Values from GUI.
CGuiAircraftValues getAircraftValuesFromGui() const
Values from GUI.
T get() const
Get a copy of the current value.
CStatusMessage set(const typename Trait::type &value, qint64 timestamp=0)
Write a new value. Must be called from the thread in which the owner lives.
Class for emitting a log message.
Derived & validationInfo(const char16_t(&format)[N])
Set the severity to info, providing a format string, and adding the validation category.
Status messages, e.g. from Core -> GUI.
void addValidationMessage(const QString &validationText, CStatusMessage::StatusSeverity severity)
Convenience function to push back a validation message.
bool isSuccess() const
All messages are marked as success.
Value object for ICAO classification.
bool hasValidDesignator() const
Valid aircraft designator?
const QString & getCombinedType() const
Get type, e.g. "L2J".
Value object for ICAO classification.
const QString & getDesignator() const
Get airline, e.g. "DLH".
bool hasValidDesignator() const
Airline designator available?
Value object encapsulating information of a callsign.
const QString & asString() const
Get callsign (normalized)
bool isLoadedFromDb() const
Loaded from DB.
QString toQString(bool i18n=false) const
Cast as QString.
Value object encapsulating information of a user.
const aviation::CCallsign & getCallsign() const
Get associated callsign.
bool hasCallsign() const
Has associated callsign?
Aircraft model (used by another pilot, my models on disk)
QString getSwiftLiveryString(bool aircraftIcao=true, bool livery=true, bool model=true) const
swift livery string (to be sent via network)
const aviation::CAirlineIcaoCode & getAirlineIcaoCode() const
Airline ICAO code.
const aviation::CLivery & getLivery() const
Get livery.
const QString & getModelString() const
Model key, either queried or loaded from simulator model.
bool hasAircraftDesignator() const
Has aircraft designator?
const aviation::CAircraftIcaoCode & getAircraftIcaoCode() const
Aircraft ICAO code.
QString getModelStringAndDbKey() const
Model string and DB key (if available)
QString asHtmlSummary(const QString &separator="<br>") const
As a brief HTML summary (e.g. used in tooltips)
bool hasModelString() const
Non empty model string?
Comprehensive information of an aircraft.
const aviation::CAircraftIcaoCode & getAircraftIcaoCode() const
Get aircraft ICAO info.
const simulation::CAircraftModel & getModel() const
Get model (model used for mapping)
const aviation::CAirlineIcaoCode & getAirlineIcaoCode() const
Airline ICAO code if any.
Simple hardcoded info about the corresponding simulator.
Simulator internals for flight simulators. Those are obtained from a running simulator and represent ...
QString getSimulatorVersion() const
Simulator version info, something like "10.3.2".
const QString & getSimulator() const
Simulator.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Backend services of the swift project, like dealing with the network or the simulators.
High level reusable GUI components.
Free functions in swift::misc.
GUI aircraft values, formatted.
swift::misc::aviation::CAirlineIcaoCode ownAirlineIcao
ICAO airline.
QString ownAircraftCombinedType
own aircraft combined type
QString ownAircraftSimulatorModelString
own aircraft model string
QString ownLiverySend
send livery
QString ownAircraftModelStringSend
send model string
swift::misc::aviation::CCallsign ownCallsign
own aircraft callsign
swift::misc::aviation::CAircraftIcaoCode ownAircraftIcao
ICAO aircraft.
bool useModelString
use model string