9 #include "ui_dbreducemodelduplicates.h"
17 using namespace swift::misc::simulation;
23 CDbReduceModelDuplicates::CDbReduceModelDuplicates(QWidget *parent)
27 this->clearProgressBar();
29 this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
30 ui->tvp_RemoveModels->menuAddItems(CAircraftModelView::MenuRemoveSelectedRows);
31 ui->tvp_RemoveModels->setAircraftModelMode(CAircraftModelListModel::OwnModelSet);
33 ui->bb_ReduceModelDuplicates->button(QDialogButtonBox::Ok)->setEnabled(
false);
36 connect(ui->pb_Stop, &QPushButton::clicked,
this, &CDbReduceModelDuplicates::stop);
37 connect(
this, &QDialog::finished,
this, &CDbReduceModelDuplicates::stop);
44 this->clearProgressBar();
46 const bool changedSim = (m_simulator != simulator);
49 ui->le_Distributor->clear();
50 ui->tvp_RemoveModels->clear();
54 m_simulator = simulator;
56 if (ui->le_Distributor->text().isEmpty())
58 const CDistributor distributor = m_distributorPreferences.
get().getFirstOrDefaultDistributor(simulator);
59 ui->le_Distributor->setText(distributor.
getDbKey());
64 QCompleter *c =
new QCompleter(distributors,
this);
65 c->setCaseSensitivity(Qt::CaseInsensitive);
66 ui->le_Distributor->setCompleter(c);
67 ui->le_Models->setText(QStringLiteral(
"%1 models for simulator '%2', distributors: %3")
70 .arg(distributorCount));
75 using namespace std::chrono_literals;
78 this->clearProgressBar();
81 if (m_models.isEmpty())
84 ui->fr_Overlay->showOverlayHTMLMessage(m, 5s);
88 if (ui->le_Distributor->text().isEmpty())
91 ui->fr_Overlay->showOverlayHTMLMessage(m, 5s);
99 << keyDuplicates.
size();
100 ui->fr_Overlay->showOverlayHTMLMessage(m, 5s);
109 ui->fr_Overlay->showOverlayHTMLMessage(m, 5s);
118 ui->pb_Progress->setMaximum(distributorModels.
sizeInt());
119 ui->pb_Progress->setValue(0);
124 if (m_stop) {
break; }
125 if (!distributorModel.getLivery().isAirlineLivery()) {
continue; }
126 if (!distributorModel.getAircraftIcaoCode().hasValidDbKey()) {
continue; }
127 if (ui->rb_SameLiveryAndAircraft->isChecked())
131 distributorModel.getLivery()),
132 Qt::CaseInsensitive);
134 else if (ui->rb_SameAirlineAndAircraft->isChecked())
138 distributorModel.getAirlineIcaoCode()),
139 Qt::CaseInsensitive);
142 if (mc % 50 == 0) { ui->pb_Progress->setValue(mc); }
147 if (!m_stop) { ui->pb_Progress->setValue(distributorModels.
sizeInt()); }
148 ui->tvp_RemoveModels->updateContainerMaybeAsync(removeModels);
149 m_removeCandidates = removeModels;
156 CStatusMessage(
this).
info(u
"You can remove %1 models of the following distributors: '%2'.")
157 << removeModels.
size() << distKeys;
158 ui->fr_Overlay->showOverlayHTMLMessage(msg, 5s);
159 ui->bb_ReduceModelDuplicates->button(QDialogButtonBox::Ok)->setEnabled(
true);
164 const int delta = ui->pb_Progress->maximum() - ui->pb_Progress->minimum();
165 const double p = percentage;
166 const int value = qRound(delta * 100.0 / p);
167 ui->pb_Progress->setValue(value);
170 void CDbReduceModelDuplicates::clearProgressBar()
172 ui->pb_Progress->setMaximum(100);
173 ui->pb_Progress->setMinimum(0);
174 ui->pb_Progress->setValue(0);
175 ui->pb_Progress->setFormat(
"%v/%m");
static void processEventsFor(int milliseconds)
Process all events for some time.
bool isShuttingDown() const
Is application shutting down?
virtual ~CDbReduceModelDuplicates()
Destructor.
void process()
Process models.
virtual void updateProgressIndicator(int percentage)
Update the progress indicator 0..100.
void setModels(const swift::misc::simulation::CAircraftModelList &models, const swift::misc::simulation::CSimulatorInfo &simulator)
Set the models.
T get() const
Get a copy of the current value.
Derived & validationError(const char16_t(&format)[N])
Set the severity to error, providing a format string, and adding the validation category.
Derived & info(const char16_t(&format)[N])
Set the severity to info, providing a format string.
size_type size() const
Returns number of elements in the sequence.
bool isEmpty() const
Synonym for empty.
int sizeInt() const
Avoid compiler warnings when using with int.
Streamable status message, e.g.
QString dbKeysAsString(const QString &separator) const
The DB keys as string.
bool hasValidDbKey() const
Has valid DB key.
const QString & getDbKey() const
Get DB key.
QString toQString(bool i18n=false) const
Cast as QString.
Aircraft model (used by another pilot, my models on disk)
Value object encapsulating a list of aircraft models.
int replaceOrAddModelsWithString(const CAircraftModelList &addOrReplaceList, Qt::CaseSensitivity sensitivity)
Replace or add based on model string.
CAircraftModelList findByAircraftAndAirline(const aviation::CAircraftIcaoCode &aircraftIcaoCode, const aviation::CAirlineIcaoCode &airlineIcaoCode) const
Find by ICAO of aircraft and airline.
int removeByDistributor(const CDistributor &distributor)
Remove by distributor.
CAircraftModelList findByAircraftAndLivery(const aviation::CAircraftIcaoCode &aircraftIcaoCode, const aviation::CLivery &livery) const
Find by aircraft and livery.
CAircraftModelList findDuplicateModelStrings() const
Find duplicate model strings and return those models with at least 1 duplicate model string.
CAircraftModelList findByDistributor(const CDistributor &distributor) const
All models from given distributors.
CDistributorList getDistributors(bool onlyDbDistributors=true) const
All distributors used with models of this list.
Value object encapsulating information of software distributor.
Value object encapsulating a list of distributors.
CDistributor findByKeyOrAlias(const QString &keyOrAlias) const
Find by id or alias.
QStringList getDbKeysAndAliases(bool sort) const
All DB keys and aliases.
Simple hardcoded info about the corresponding simulator.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
High level reusable GUI components.
Models to be used with views, mainly QTableView.
Views, mainly QTableView.
Free functions in swift::misc.