mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-22 23:05:36 +08:00
refs #522, consolidate mutable / make mutable thread safe
* removed mutable wherever possible in GUI classes * in vPilotReader also renamed some functions and some minor improvements
This commit is contained in:
@@ -186,7 +186,7 @@ namespace BlackGui
|
||||
|
||||
void CDbMappingComponent::ps_loadVPilotData()
|
||||
{
|
||||
if (this->m_vPilotReader.readASync(true))
|
||||
if (this->m_vPilotReader.readInBackground(true))
|
||||
{
|
||||
CLogMessage(this).info("Start loading vPilot rulesets");
|
||||
this->ui->tvp_AircraftModelsForVPilot->showLoadIndicator();
|
||||
|
||||
@@ -42,7 +42,6 @@ namespace BlackGui
|
||||
|
||||
void CAircraftIcaoForm::setValue(const BlackMisc::Aviation::CAircraftIcaoCode &icao)
|
||||
{
|
||||
this->m_aircraft = icao;
|
||||
this->ui->le_Id->setText(icao.getDbKeyAsString());
|
||||
this->ui->aircraft_Selector->setAircraftIcao(icao);
|
||||
this->ui->le_Manufacturer->setText(icao.getManufacturer());
|
||||
@@ -61,13 +60,9 @@ namespace BlackGui
|
||||
this->ui->le_Updated->setText(icao.getFormattedUtcTimestampYmdhms());
|
||||
}
|
||||
|
||||
const CAircraftIcaoCode &CAircraftIcaoForm::getValue() const
|
||||
CAircraftIcaoCode CAircraftIcaoForm::getValue() const
|
||||
{
|
||||
CAircraftIcaoCode icao(this->ui->aircraft_Selector->getAircraftIcao());
|
||||
if (icao.hasCompleteData())
|
||||
{
|
||||
m_aircraft = icao;
|
||||
}
|
||||
QString manufacturer(this->ui->le_Manufacturer->text().trimmed().toUpper());
|
||||
QString modelDescription(this->ui->le_ModelDescription->text());
|
||||
QString wtc(ui->cb_Wtc->currentText().left(1));
|
||||
@@ -78,13 +73,13 @@ namespace BlackGui
|
||||
bool legacy = this->ui->cb_Legacy->isChecked();
|
||||
bool military = this->ui->cb_Military->isChecked();
|
||||
bool realWorld = this->ui->cb_RealWorld->isChecked();
|
||||
m_aircraft.setManufacturer(manufacturer);
|
||||
m_aircraft.setModelDescription(modelDescription);
|
||||
m_aircraft.setWtc(wtc);
|
||||
m_aircraft.setCodeFlags(military, legacy, realWorld);
|
||||
m_aircraft.setRank(rank);
|
||||
m_aircraft.setCombinedType(combined);
|
||||
return m_aircraft;
|
||||
icao.setManufacturer(manufacturer);
|
||||
icao.setModelDescription(modelDescription);
|
||||
icao.setWtc(wtc);
|
||||
icao.setCodeFlags(military, legacy, realWorld);
|
||||
icao.setRank(rank);
|
||||
icao.setCombinedType(combined);
|
||||
return icao;
|
||||
}
|
||||
|
||||
CStatusMessageList CAircraftIcaoForm::validate() const
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace BlackGui
|
||||
~CAircraftIcaoForm();
|
||||
|
||||
//! Get value
|
||||
const BlackMisc::Aviation::CAircraftIcaoCode &getValue() const;
|
||||
BlackMisc::Aviation::CAircraftIcaoCode getValue() const;
|
||||
|
||||
//! Validate, empty list means OK
|
||||
BlackMisc::CStatusMessageList validate() const;
|
||||
@@ -74,7 +74,6 @@ namespace BlackGui
|
||||
|
||||
private:
|
||||
QScopedPointer<Ui::CAircraftIcaoForm> ui;
|
||||
mutable BlackMisc::Aviation::CAircraftIcaoCode m_aircraft;
|
||||
};
|
||||
|
||||
} // ns
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace BlackGui
|
||||
|
||||
void CAirlineIcaoForm::setValue(const BlackMisc::Aviation::CAirlineIcaoCode &icao)
|
||||
{
|
||||
this->m_airline = icao;
|
||||
this->m_originalCode = icao;
|
||||
this->ui->airline_Selector->setAirlineIcao(icao);
|
||||
this->ui->le_Id->setText(icao.getDbKeyAsString());
|
||||
this->ui->le_TelephonyDesignator->setText(icao.getTelephonyDesignator());
|
||||
@@ -55,13 +55,14 @@ namespace BlackGui
|
||||
this->ui->lbl_AirlineIcon->setPixmap(icao.toPixmap());
|
||||
}
|
||||
|
||||
const CAirlineIcaoCode &CAirlineIcaoForm::getValue() const
|
||||
CAirlineIcaoCode CAirlineIcaoForm::getValue() const
|
||||
{
|
||||
m_airline.setVirtualAirline(this->ui->cb_Va->isChecked());
|
||||
m_airline.setCountry(this->ui->country_Selector->getCountry());
|
||||
m_airline.setName(this->ui->le_Name->text());
|
||||
m_airline.setTelephonyDesignator(this->ui->le_TelephonyDesignator->text());
|
||||
return m_airline;
|
||||
CAirlineIcaoCode code(m_originalCode);
|
||||
code.setVirtualAirline(this->ui->cb_Va->isChecked());
|
||||
code.setCountry(this->ui->country_Selector->getCountry());
|
||||
code.setName(this->ui->le_Name->text());
|
||||
code.setTelephonyDesignator(this->ui->le_TelephonyDesignator->text());
|
||||
return code;
|
||||
}
|
||||
|
||||
CStatusMessageList CAirlineIcaoForm::validate() const
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace BlackGui
|
||||
void setValue(const BlackMisc::Aviation::CAirlineIcaoCode &icao = BlackMisc::Aviation::CAirlineIcaoCode());
|
||||
|
||||
//! Get value
|
||||
const BlackMisc::Aviation::CAirlineIcaoCode &getValue() const;
|
||||
BlackMisc::Aviation::CAirlineIcaoCode getValue() const;
|
||||
|
||||
//! Validate, empty list means OK
|
||||
BlackMisc::CStatusMessageList validate() const;
|
||||
@@ -69,8 +69,8 @@ namespace BlackGui
|
||||
void ps_droppedCode(const BlackMisc::CVariant &variantDropped);
|
||||
|
||||
private:
|
||||
QScopedPointer<Ui::CAirlineIcaoForm> ui;
|
||||
mutable BlackMisc::Aviation::CAirlineIcaoCode m_airline; // object allowing to override values
|
||||
QScopedPointer<Ui::CAirlineIcaoForm> ui;
|
||||
BlackMisc::Aviation::CAirlineIcaoCode m_originalCode; //!< object allowing to override values
|
||||
};
|
||||
|
||||
} // ns
|
||||
|
||||
@@ -42,7 +42,6 @@ namespace BlackGui
|
||||
|
||||
void CDistributorForm::setValue(const BlackMisc::Simulation::CDistributor &distributor)
|
||||
{
|
||||
this->m_distributor = distributor;
|
||||
this->ui->distributor_Selector->setDistributor(distributor);
|
||||
this->ui->le_Description->setText(distributor.getDescription());
|
||||
this->ui->le_Alias1->setText(distributor.getAlias1());
|
||||
@@ -50,15 +49,13 @@ namespace BlackGui
|
||||
this->ui->le_Updated->setText(distributor.getFormattedUtcTimestampYmdhms());
|
||||
}
|
||||
|
||||
const CDistributor &CDistributorForm::getValue() const
|
||||
CDistributor CDistributorForm::getValue() const
|
||||
{
|
||||
CDistributor d(ui->distributor_Selector->getDistributor());
|
||||
if (d.hasCompleteData()) { this->m_distributor = d;}
|
||||
|
||||
m_distributor.setAlias1(this->ui->le_Alias1->text());
|
||||
m_distributor.setAlias2(this->ui->le_Alias2->text());
|
||||
m_distributor.setDescription(this->ui->le_Description->text());
|
||||
return m_distributor;
|
||||
CDistributor distributor(ui->distributor_Selector->getDistributor());
|
||||
distributor.setAlias1(this->ui->le_Alias1->text());
|
||||
distributor.setAlias2(this->ui->le_Alias2->text());
|
||||
distributor.setDescription(this->ui->le_Description->text());
|
||||
return distributor;
|
||||
}
|
||||
|
||||
CStatusMessageList CDistributorForm::validate() const
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace BlackGui
|
||||
~CDistributorForm();
|
||||
|
||||
//! Get value
|
||||
const BlackMisc::Simulation::CDistributor &getValue() const;
|
||||
BlackMisc::Simulation::CDistributor getValue() const;
|
||||
|
||||
//! Validate, empty list means OK
|
||||
BlackMisc::CStatusMessageList validate() const;
|
||||
@@ -74,7 +74,6 @@ namespace BlackGui
|
||||
|
||||
private:
|
||||
QScopedPointer<Ui::CDistributorForm> ui;
|
||||
mutable BlackMisc::Simulation::CDistributor m_distributor; // object allowing to override values
|
||||
bool m_readOnly = false;
|
||||
};
|
||||
|
||||
|
||||
@@ -41,18 +41,19 @@ namespace BlackGui
|
||||
this->ui->editor_AirlineIcao->setProvider(provider);
|
||||
}
|
||||
|
||||
const CLivery &CLiveryForm::getValue() const
|
||||
CLivery CLiveryForm::getValue() const
|
||||
{
|
||||
CLivery livery(this->m_originalLivery);
|
||||
CAirlineIcaoCode airline(this->ui->editor_AirlineIcao->getValue());
|
||||
this->m_livery.setCombinedCode(this->ui->le_Code->text());
|
||||
this->m_livery.setAirlineIcaoCode(airline);
|
||||
this->m_livery.setDescription(this->ui->le_Description->text());
|
||||
return m_livery;
|
||||
livery.setAirlineIcaoCode(airline);
|
||||
livery.setCombinedCode(this->ui->le_Code->text());
|
||||
livery.setDescription(this->ui->le_Description->text());
|
||||
return livery;
|
||||
}
|
||||
|
||||
void CLiveryForm::setValue(const CLivery &livery)
|
||||
{
|
||||
this->m_livery = livery;
|
||||
this->m_originalLivery = livery;
|
||||
this->ui->le_Id->setText(livery.getDbKeyAsString());
|
||||
this->ui->le_Code->setText(livery.getCombinedCode());
|
||||
this->ui->le_Description->setText(livery.getDescription());
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace BlackGui
|
||||
virtual void setProvider(BlackMisc::Network::IWebDataServicesProvider *provider) override;
|
||||
|
||||
//! Value
|
||||
const BlackMisc::Aviation::CLivery &getValue() const;
|
||||
BlackMisc::Aviation::CLivery getValue() const;
|
||||
|
||||
//! Value
|
||||
void setValue(const BlackMisc::Aviation::CLivery &livery);
|
||||
@@ -72,7 +72,7 @@ namespace BlackGui
|
||||
|
||||
private:
|
||||
QScopedPointer<Ui::CLiveryForm> ui;
|
||||
mutable BlackMisc::Aviation::CLivery m_livery; //!< object whose values will be overridden
|
||||
BlackMisc::Aviation::CLivery m_originalLivery; //!< object whose values will be overridden
|
||||
};
|
||||
|
||||
} // ns
|
||||
|
||||
@@ -31,13 +31,14 @@ namespace BlackGui
|
||||
CModelMappingForm::~CModelMappingForm()
|
||||
{ }
|
||||
|
||||
const BlackMisc::Simulation::CAircraftModel &CModelMappingForm::getValue() const
|
||||
BlackMisc::Simulation::CAircraftModel CModelMappingForm::getValue() const
|
||||
{
|
||||
m_model.setSimulatorInfo(this->ui->selector_Simulator->getValue());
|
||||
m_model.setDescription(this->ui->le_Description->text());
|
||||
m_model.setModelString(this->ui->le_ModelKey->text());
|
||||
m_model.setName(this->ui->le_Name->text());
|
||||
return m_model;
|
||||
CAircraftModel model(m_originalModel);
|
||||
model.setSimulatorInfo(this->ui->selector_Simulator->getValue());
|
||||
model.setDescription(this->ui->le_Description->text());
|
||||
model.setModelString(this->ui->le_ModelKey->text());
|
||||
model.setName(this->ui->le_Name->text());
|
||||
return model;
|
||||
}
|
||||
|
||||
CStatusMessageList CModelMappingForm::validate(bool withNestedForms) const
|
||||
@@ -63,6 +64,7 @@ namespace BlackGui
|
||||
ui->le_Description->setText(model.getDescription());
|
||||
ui->le_Name->setText(model.getName());
|
||||
ui->selector_Simulator->setValue(model.getSimulatorInfo());
|
||||
m_originalModel = model;
|
||||
}
|
||||
} // ns
|
||||
} // ns
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace BlackGui
|
||||
~CModelMappingForm();
|
||||
|
||||
//! Value
|
||||
const BlackMisc::Simulation::CAircraftModel &getValue() const;
|
||||
BlackMisc::Simulation::CAircraftModel getValue() const;
|
||||
|
||||
//! Validate
|
||||
BlackMisc::CStatusMessageList validate(bool withNestedForms) const;
|
||||
@@ -58,7 +58,7 @@ namespace BlackGui
|
||||
|
||||
private:
|
||||
QScopedPointer<Ui::CModelMappingForm> ui;
|
||||
mutable BlackMisc::Simulation::CAircraftModel m_model; //!< cached last value
|
||||
BlackMisc::Simulation::CAircraftModel m_originalModel;
|
||||
};
|
||||
|
||||
} // ns
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace BlackMisc
|
||||
bool success = this->m_vPilotReader->read(false);
|
||||
if (success)
|
||||
{
|
||||
this->m_datastoreModels = this->m_vPilotReader->getRules().toAircraftModels();
|
||||
this->m_datastoreModels = this->m_vPilotReader->getAsModels();
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ namespace BlackMisc
|
||||
int keepModels(const QStringList &modelsToBeKept);
|
||||
|
||||
//! To aircraft models
|
||||
//! \note slow operation, can take a while
|
||||
BlackMisc::Simulation::CAircraftModelList toAircraftModels() const;
|
||||
|
||||
private:
|
||||
|
||||
@@ -82,12 +82,12 @@ namespace BlackMisc
|
||||
// already cached?
|
||||
{
|
||||
QReadLocker l(&m_lockData);
|
||||
if (!m_models.isEmpty() || m_rules.isEmpty()) return m_models;
|
||||
if (!m_models.isEmpty() || m_rules.isEmpty()) { return m_models; }
|
||||
if (m_shutdown) { return CAircraftModelList(); }
|
||||
}
|
||||
|
||||
// important: that can take a while and should normally
|
||||
// run in background
|
||||
if (m_shutdown) { return CAircraftModelList(); }
|
||||
CVPilotModelRuleSet rules(getRules()); // thread safe copy
|
||||
CAircraftModelList models(rules.toAircraftModels()); // long lasting operation
|
||||
QWriteLocker l(&m_lockData);
|
||||
@@ -103,6 +103,7 @@ namespace BlackMisc
|
||||
|
||||
void CVPilotRulesReader::gracefulShutdown()
|
||||
{
|
||||
QWriteLocker l(&m_lockData);
|
||||
m_shutdown = true;
|
||||
}
|
||||
|
||||
@@ -151,23 +152,23 @@ namespace BlackMisc
|
||||
return success;
|
||||
}
|
||||
|
||||
CWorker *CVPilotRulesReader::readASync(bool convertToModels)
|
||||
CWorker *CVPilotRulesReader::readInBackground(bool convertToModels)
|
||||
{
|
||||
// set a thread safe flag
|
||||
{
|
||||
QWriteLocker l(&m_lockData);
|
||||
if (m_asyncLoadInProgress) { return nullptr; }
|
||||
if (m_asyncLoadInProgress || m_shutdown) { return nullptr; }
|
||||
m_asyncLoadInProgress = true;
|
||||
}
|
||||
BlackMisc::CWorker *worker = BlackMisc::CWorker::fromTask(this, "CVPilotRulesReader", [this, convertToModels]()
|
||||
{
|
||||
this->read(convertToModels);
|
||||
});
|
||||
worker->then(this, &CVPilotRulesReader::ps_readASyncFinished);
|
||||
worker->then(this, &CVPilotRulesReader::ps_readInBackgroundFinished);
|
||||
return worker;
|
||||
}
|
||||
|
||||
void CVPilotRulesReader::ps_readASyncFinished()
|
||||
void CVPilotRulesReader::ps_readInBackgroundFinished()
|
||||
{
|
||||
QWriteLocker l(&m_lockData);
|
||||
m_asyncLoadInProgress = false;
|
||||
|
||||
@@ -71,6 +71,7 @@ namespace BlackMisc
|
||||
int countRulesLoaded() const;
|
||||
|
||||
//! Graceful shutdown
|
||||
//! \threadsafe
|
||||
void gracefulShutdown();
|
||||
|
||||
//! The standard directory for vPilot mappings
|
||||
@@ -87,11 +88,12 @@ namespace BlackMisc
|
||||
|
||||
//! Load data in background thread
|
||||
//! \threadsafe
|
||||
BlackMisc::CWorker *readASync(bool convertToModels);
|
||||
BlackMisc::CWorker *readInBackground(bool convertToModels);
|
||||
|
||||
private slots:
|
||||
//! Asyncronous read finished
|
||||
void ps_readASyncFinished();
|
||||
//! \threadsafe
|
||||
void ps_readInBackgroundFinished();
|
||||
|
||||
private:
|
||||
QStringList m_fileList; //!< list of file names
|
||||
|
||||
Reference in New Issue
Block a user