mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-18 03:15:34 +08:00
Ref T441, added progress bar and stop button to UI
This commit is contained in:
@@ -24,6 +24,9 @@ namespace BlackCore
|
|||||||
//! Update the progress indicator 0..100
|
//! Update the progress indicator 0..100
|
||||||
virtual void updateProgressIndicator(int percentage) = 0;
|
virtual void updateProgressIndicator(int percentage) = 0;
|
||||||
|
|
||||||
|
//! Dtor
|
||||||
|
virtual ~IProgressIndicator() {}
|
||||||
|
|
||||||
//! Same as updateProgressIndicator but processing events
|
//! Same as updateProgressIndicator but processing events
|
||||||
void updateProgressIndicatorAndProcessEvents(int percentage)
|
void updateProgressIndicatorAndProcessEvents(int percentage)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -306,13 +306,15 @@ namespace BlackGui
|
|||||||
CAircraftModelList models = ui->tvp_OwnModelSet->containerOrFilteredContainer();
|
CAircraftModelList models = ui->tvp_OwnModelSet->containerOrFilteredContainer();
|
||||||
const CSimulatorInfo simulator = this->getModelSetSimulator();
|
const CSimulatorInfo simulator = this->getModelSetSimulator();
|
||||||
m_reduceModelsDialog->setModels(models, simulator);
|
m_reduceModelsDialog->setModels(models, simulator);
|
||||||
QDialog::DialogCode ret = static_cast<QDialog::DialogCode>(m_reduceModelsDialog->exec());
|
const QDialog::DialogCode ret = static_cast<QDialog::DialogCode>(m_reduceModelsDialog->exec());
|
||||||
if (ret != QDialog::Accepted) { return; }
|
if (ret != QDialog::Accepted) { return; }
|
||||||
const CAircraftModelList removeModels = m_reduceModelsDialog->getRemoveCandidates();
|
const CAircraftModelList removeModels = m_reduceModelsDialog->getRemoveCandidates();
|
||||||
const CSimulatorInfo removeSimulator = m_reduceModelsDialog->getSimulator();
|
const CSimulatorInfo removeSimulator = m_reduceModelsDialog->getSimulator();
|
||||||
if (removeModels.isEmpty()) { return; }
|
if (removeModels.isEmpty()) { return; }
|
||||||
const QSet<int> keys = removeModels.toDbKeySet();
|
// const QSet<int> keys = removeModels.toDbKeySet();
|
||||||
models.removeObjectsWithKeys(keys);
|
// models.removeObjectsWithKeys(keys);
|
||||||
|
const QStringList modelStrings = removeModels.getModelStringList(false);
|
||||||
|
models.removeModelsWithString(modelStrings, Qt::CaseInsensitive); // by strings also removes if id is missing
|
||||||
this->setModelSet(models, removeSimulator);
|
this->setModelSet(models, removeSimulator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,12 +32,15 @@ namespace BlackGui
|
|||||||
ui(new Ui::CDbReduceModelDuplicates)
|
ui(new Ui::CDbReduceModelDuplicates)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
this->clearProgressBar();
|
||||||
|
|
||||||
this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||||
ui->tvp_RemoveModels->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows);
|
ui->tvp_RemoveModels->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows);
|
||||||
ui->tvp_RemoveModels->setAircraftModelMode(CAircraftModelListModel::OwnModelSet);
|
ui->tvp_RemoveModels->setAircraftModelMode(CAircraftModelListModel::OwnModelSet);
|
||||||
ui->le_Distributor->setValidator(new CUpperCaseValidator(ui->le_Distributor));
|
ui->le_Distributor->setValidator(new CUpperCaseValidator(ui->le_Distributor));
|
||||||
|
|
||||||
connect(ui->pb_Run, &QPushButton::clicked, this, &CDbReduceModelDuplicates::process);
|
connect(ui->pb_Run, &QPushButton::clicked, this, &CDbReduceModelDuplicates::process);
|
||||||
|
connect(ui->pb_Stop, &QPushButton::clicked, this, &CDbReduceModelDuplicates::stop);
|
||||||
}
|
}
|
||||||
|
|
||||||
CDbReduceModelDuplicates::~CDbReduceModelDuplicates()
|
CDbReduceModelDuplicates::~CDbReduceModelDuplicates()
|
||||||
@@ -45,6 +48,8 @@ namespace BlackGui
|
|||||||
|
|
||||||
void CDbReduceModelDuplicates::setModels(const CAircraftModelList &models, const CSimulatorInfo &simulator)
|
void CDbReduceModelDuplicates::setModels(const CAircraftModelList &models, const CSimulatorInfo &simulator)
|
||||||
{
|
{
|
||||||
|
this->clearProgressBar();
|
||||||
|
|
||||||
const bool changedSim = (m_simulator != simulator);
|
const bool changedSim = (m_simulator != simulator);
|
||||||
if (changedSim)
|
if (changedSim)
|
||||||
{
|
{
|
||||||
@@ -71,6 +76,10 @@ namespace BlackGui
|
|||||||
void CDbReduceModelDuplicates::process()
|
void CDbReduceModelDuplicates::process()
|
||||||
{
|
{
|
||||||
if (!sGui || sGui->isShuttingDown()) { return; }
|
if (!sGui || sGui->isShuttingDown()) { return; }
|
||||||
|
|
||||||
|
this->clearProgressBar();
|
||||||
|
m_stop = false;
|
||||||
|
|
||||||
if (m_models.isEmpty())
|
if (m_models.isEmpty())
|
||||||
{
|
{
|
||||||
const CStatusMessage m = CStatusMessage(this).validationError("No models");
|
const CStatusMessage m = CStatusMessage(this).validationError("No models");
|
||||||
@@ -103,32 +112,60 @@ namespace BlackGui
|
|||||||
}
|
}
|
||||||
|
|
||||||
const CAircraftModelList distributorModels = m_models.findByDistributor(distributor);
|
const CAircraftModelList distributorModels = m_models.findByDistributor(distributor);
|
||||||
CAircraftModelList nonDistributorModels = m_models;
|
CAircraftModelList otherDistributorsModels = m_models;
|
||||||
nonDistributorModels.removeByDistributor(distributor); // all models of other distrbutors
|
otherDistributorsModels.removeByDistributor(distributor); // all models of other distrbutors
|
||||||
CAircraftModelList removeModels;
|
CAircraftModelList removeModels;
|
||||||
|
|
||||||
|
ui->pb_Progress->setMaximum(distributorModels.sizeInt());
|
||||||
|
ui->pb_Progress->setValue(0);
|
||||||
|
|
||||||
|
int mc = 0;
|
||||||
for (const CAircraftModel &distributorModel : distributorModels)
|
for (const CAircraftModel &distributorModel : distributorModels)
|
||||||
{
|
{
|
||||||
|
if (m_stop) { break; }
|
||||||
if (!distributorModel.getLivery().isAirlineLivery()) { continue; }
|
if (!distributorModel.getLivery().isAirlineLivery()) { continue; }
|
||||||
if (!distributorModel.getAircraftIcaoCode().hasValidDbKey()) { continue; }
|
if (!distributorModel.getAircraftIcaoCode().hasValidDbKey()) { continue; }
|
||||||
if (ui->rb_SameLiveryAndAircraft->isChecked())
|
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())
|
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);
|
ui->tvp_RemoveModels->updateContainerMaybeAsync(removeModels);
|
||||||
m_removeCandidates = removeModels;
|
m_removeCandidates = removeModels;
|
||||||
|
m_stop = false;
|
||||||
|
|
||||||
const QString distKeys = removeModels.getDistributors().dbKeysAsString(", ");
|
const QString distKeys = removeModels.getDistributors().dbKeysAsString(", ");
|
||||||
const CStatusMessage m = removeModels.isEmpty() ?
|
const CStatusMessage msg = removeModels.isEmpty() ?
|
||||||
CStatusMessage(this).info("No duplicates to be removed!") :
|
CStatusMessage(this).info("No duplicates to be removed!") :
|
||||||
CStatusMessage(this).info("You can remove %1 models of the following distributors: '%2'.") << removeModels.size() << distKeys;
|
CStatusMessage(this).info("You can remove %1 models of the following distributors: '%2'.") << removeModels.size() << distKeys;
|
||||||
ui->fr_Overlay->showOverlayHTMLMessage(m, 5000);
|
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
|
||||||
} // ns
|
} // ns
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#ifndef BLACKGUI_COMPONENTS_DBREDUCEMODELDUPLICATES_H
|
#ifndef BLACKGUI_COMPONENTS_DBREDUCEMODELDUPLICATES_H
|
||||||
#define BLACKGUI_COMPONENTS_DBREDUCEMODELDUPLICATES_H
|
#define BLACKGUI_COMPONENTS_DBREDUCEMODELDUPLICATES_H
|
||||||
|
|
||||||
|
#include "blackcore/progress.h"
|
||||||
#include "blackmisc/simulation/aircraftmodellist.h"
|
#include "blackmisc/simulation/aircraftmodellist.h"
|
||||||
#include "blackmisc/simulation/settings/modelsettings.h"
|
#include "blackmisc/simulation/settings/modelsettings.h"
|
||||||
#include "blackmisc/settingscache.h"
|
#include "blackmisc/settingscache.h"
|
||||||
@@ -25,7 +26,9 @@ namespace BlackGui
|
|||||||
namespace Components
|
namespace Components
|
||||||
{
|
{
|
||||||
//! Reduce modelss
|
//! Reduce modelss
|
||||||
class CDbReduceModelDuplicates : public QDialog
|
class CDbReduceModelDuplicates :
|
||||||
|
public QDialog,
|
||||||
|
public BlackCore::IProgressIndicator
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -34,7 +37,7 @@ namespace BlackGui
|
|||||||
explicit CDbReduceModelDuplicates(QWidget *parent = nullptr);
|
explicit CDbReduceModelDuplicates(QWidget *parent = nullptr);
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~CDbReduceModelDuplicates();
|
virtual ~CDbReduceModelDuplicates() override;
|
||||||
|
|
||||||
//! Set the models
|
//! Set the models
|
||||||
void setModels(const BlackMisc::Simulation::CAircraftModelList &models, const BlackMisc::Simulation::CSimulatorInfo &simulator);
|
void setModels(const BlackMisc::Simulation::CAircraftModelList &models, const BlackMisc::Simulation::CSimulatorInfo &simulator);
|
||||||
@@ -42,6 +45,9 @@ namespace BlackGui
|
|||||||
//! Process models
|
//! Process models
|
||||||
void process();
|
void process();
|
||||||
|
|
||||||
|
//! \copydoc BlackCore::IProgressIndicator::updateProgressIndicator
|
||||||
|
virtual void updateProgressIndicator(int percentage) override;
|
||||||
|
|
||||||
//! The models to be removed
|
//! The models to be removed
|
||||||
const BlackMisc::Simulation::CAircraftModelList &getRemoveCandidates() const { return m_removeCandidates; }
|
const BlackMisc::Simulation::CAircraftModelList &getRemoveCandidates() const { return m_removeCandidates; }
|
||||||
|
|
||||||
@@ -49,7 +55,14 @@ namespace BlackGui
|
|||||||
const BlackMisc::Simulation::CSimulatorInfo &getSimulator() const { return m_simulator; }
|
const BlackMisc::Simulation::CSimulatorInfo &getSimulator() const { return m_simulator; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
//! Clear progress bar
|
||||||
|
void clearProgressBar();
|
||||||
|
|
||||||
|
//! Stop
|
||||||
|
void stop() { m_stop = true; }
|
||||||
|
|
||||||
QScopedPointer<Ui::CDbReduceModelDuplicates> ui;
|
QScopedPointer<Ui::CDbReduceModelDuplicates> ui;
|
||||||
|
bool m_stop = false;
|
||||||
BlackMisc::Simulation::CSimulatorInfo m_simulator;
|
BlackMisc::Simulation::CSimulatorInfo m_simulator;
|
||||||
BlackMisc::Simulation::CAircraftModelList m_models;
|
BlackMisc::Simulation::CAircraftModelList m_models;
|
||||||
BlackMisc::Simulation::CAircraftModelList m_removeCandidates;
|
BlackMisc::Simulation::CAircraftModelList m_removeCandidates;
|
||||||
|
|||||||
@@ -124,17 +124,18 @@
|
|||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="hs_Button">
|
<widget class="QProgressBar" name="pb_Progress">
|
||||||
<property name="orientation">
|
<property name="value">
|
||||||
<enum>Qt::Horizontal</enum>
|
<number>24</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
</widget>
|
||||||
<size>
|
</item>
|
||||||
<width>40</width>
|
<item>
|
||||||
<height>20</height>
|
<widget class="QPushButton" name="pb_Stop">
|
||||||
</size>
|
<property name="text">
|
||||||
|
<string>stop</string>
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="pb_Run">
|
<widget class="QPushButton" name="pb_Run">
|
||||||
@@ -177,7 +178,7 @@
|
|||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="standardButtons">
|
<property name="standardButtons">
|
||||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
<set>QDialogButtonBox::Close</set>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -201,8 +202,9 @@
|
|||||||
<tabstop>le_Distributor</tabstop>
|
<tabstop>le_Distributor</tabstop>
|
||||||
<tabstop>rb_SameLiveryAndAircraft</tabstop>
|
<tabstop>rb_SameLiveryAndAircraft</tabstop>
|
||||||
<tabstop>rb_SameAirlineAndAircraft</tabstop>
|
<tabstop>rb_SameAirlineAndAircraft</tabstop>
|
||||||
<tabstop>tvp_RemoveModels</tabstop>
|
<tabstop>pb_Stop</tabstop>
|
||||||
<tabstop>pb_Run</tabstop>
|
<tabstop>pb_Run</tabstop>
|
||||||
|
<tabstop>tvp_RemoveModels</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections>
|
<connections>
|
||||||
|
|||||||
Reference in New Issue
Block a user