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