mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-02 15:15:50 +08:00
Ref T441, added progress bar and stop button to UI
This commit is contained in:
@@ -32,12 +32,15 @@ namespace BlackGui
|
||||
ui(new Ui::CDbReduceModelDuplicates)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
this->clearProgressBar();
|
||||
|
||||
this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||
ui->tvp_RemoveModels->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows);
|
||||
ui->tvp_RemoveModels->setAircraftModelMode(CAircraftModelListModel::OwnModelSet);
|
||||
ui->le_Distributor->setValidator(new CUpperCaseValidator(ui->le_Distributor));
|
||||
|
||||
connect(ui->pb_Run, &QPushButton::clicked, this, &CDbReduceModelDuplicates::process);
|
||||
connect(ui->pb_Stop, &QPushButton::clicked, this, &CDbReduceModelDuplicates::stop);
|
||||
}
|
||||
|
||||
CDbReduceModelDuplicates::~CDbReduceModelDuplicates()
|
||||
@@ -45,6 +48,8 @@ namespace BlackGui
|
||||
|
||||
void CDbReduceModelDuplicates::setModels(const CAircraftModelList &models, const CSimulatorInfo &simulator)
|
||||
{
|
||||
this->clearProgressBar();
|
||||
|
||||
const bool changedSim = (m_simulator != simulator);
|
||||
if (changedSim)
|
||||
{
|
||||
@@ -71,6 +76,10 @@ namespace BlackGui
|
||||
void CDbReduceModelDuplicates::process()
|
||||
{
|
||||
if (!sGui || sGui->isShuttingDown()) { return; }
|
||||
|
||||
this->clearProgressBar();
|
||||
m_stop = false;
|
||||
|
||||
if (m_models.isEmpty())
|
||||
{
|
||||
const CStatusMessage m = CStatusMessage(this).validationError("No models");
|
||||
@@ -103,32 +112,60 @@ namespace BlackGui
|
||||
}
|
||||
|
||||
const CAircraftModelList distributorModels = m_models.findByDistributor(distributor);
|
||||
CAircraftModelList nonDistributorModels = m_models;
|
||||
nonDistributorModels.removeByDistributor(distributor); // all models of other distrbutors
|
||||
CAircraftModelList otherDistributorsModels = m_models;
|
||||
otherDistributorsModels.removeByDistributor(distributor); // all models of other distrbutors
|
||||
CAircraftModelList removeModels;
|
||||
|
||||
ui->pb_Progress->setMaximum(distributorModels.sizeInt());
|
||||
ui->pb_Progress->setValue(0);
|
||||
|
||||
int mc = 0;
|
||||
for (const CAircraftModel &distributorModel : distributorModels)
|
||||
{
|
||||
if (m_stop) { break; }
|
||||
if (!distributorModel.getLivery().isAirlineLivery()) { continue; }
|
||||
if (!distributorModel.getAircraftIcaoCode().hasValidDbKey()) { continue; }
|
||||
if (ui->rb_SameLiveryAndAircraft->isChecked())
|
||||
{
|
||||
removeModels.replaceOrAddModelsWithString(nonDistributorModels.findByAircraftAndLivery(distributorModel.getAircraftIcaoCode(), distributorModel.getLivery()), Qt::CaseInsensitive);
|
||||
removeModels.replaceOrAddModelsWithString(otherDistributorsModels.findByAircraftAndLivery(distributorModel.getAircraftIcaoCode(), distributorModel.getLivery()), Qt::CaseInsensitive);
|
||||
}
|
||||
else if (ui->rb_SameAirlineAndAircraft->isChecked())
|
||||
{
|
||||
removeModels.replaceOrAddModelsWithString(nonDistributorModels.findByAircraftAndAirline(distributorModel.getAircraftIcaoCode(), distributorModel.getAirlineIcaoCode()), Qt::CaseInsensitive);
|
||||
removeModels.replaceOrAddModelsWithString(otherDistributorsModels.findByAircraftAndAirline(distributorModel.getAircraftIcaoCode(), distributorModel.getAirlineIcaoCode()), Qt::CaseInsensitive);
|
||||
}
|
||||
|
||||
if (mc % 50 == 0) { ui->pb_Progress->setValue(mc); }
|
||||
if (mc % 100 == 0) { CGuiApplication::processEventsFor(10); }
|
||||
mc++;
|
||||
}
|
||||
|
||||
if (!m_stop) { ui->pb_Progress->setValue(distributorModels.sizeInt()); }
|
||||
ui->tvp_RemoveModels->updateContainerMaybeAsync(removeModels);
|
||||
m_removeCandidates = removeModels;
|
||||
m_stop = false;
|
||||
|
||||
const QString distKeys = removeModels.getDistributors().dbKeysAsString(", ");
|
||||
const CStatusMessage m = removeModels.isEmpty() ?
|
||||
CStatusMessage(this).info("No duplicates to be removed!") :
|
||||
CStatusMessage(this).info("You can remove %1 models of the following distributors: '%2'.") << removeModels.size() << distKeys;
|
||||
ui->fr_Overlay->showOverlayHTMLMessage(m, 5000);
|
||||
const CStatusMessage msg = removeModels.isEmpty() ?
|
||||
CStatusMessage(this).info("No duplicates to be removed!") :
|
||||
CStatusMessage(this).info("You can remove %1 models of the following distributors: '%2'.") << removeModels.size() << distKeys;
|
||||
ui->fr_Overlay->showOverlayHTMLMessage(msg, 5000);
|
||||
}
|
||||
|
||||
void CDbReduceModelDuplicates::updateProgressIndicator(int percentage)
|
||||
{
|
||||
const int delta = ui->pb_Progress->maximum() - ui->pb_Progress->minimum();
|
||||
const double p = percentage;
|
||||
const int value = qRound(delta * 100.0 / p);
|
||||
ui->pb_Progress->setValue(value);
|
||||
}
|
||||
|
||||
void CDbReduceModelDuplicates::clearProgressBar()
|
||||
{
|
||||
ui->pb_Progress->setMaximum(100); // otherwise undetermined
|
||||
ui->pb_Progress->setMinimum(0);
|
||||
ui->pb_Progress->setValue(0);
|
||||
ui->pb_Progress->setFormat("%v/%m");
|
||||
}
|
||||
|
||||
} // ns
|
||||
} // ns
|
||||
|
||||
Reference in New Issue
Block a user