From c0a898c6c98bb1c0dae198f424fcb83d0f1e5309 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 14 Aug 2016 00:31:40 +0200 Subject: [PATCH] refs #555, allow to filter by file name * also allow to filter by color * and military --- .../filters/aircraftmodelfilterbar.cpp | 18 +- .../filters/aircraftmodelfilterbar.ui | 294 ++++++++++-------- src/blackgui/models/aircraftmodelfilter.cpp | 45 ++- src/blackgui/models/aircraftmodelfilter.h | 5 + 4 files changed, 223 insertions(+), 139 deletions(-) diff --git a/src/blackgui/filters/aircraftmodelfilterbar.cpp b/src/blackgui/filters/aircraftmodelfilterbar.cpp index 272b821bc..27601e0bd 100644 --- a/src/blackgui/filters/aircraftmodelfilterbar.cpp +++ b/src/blackgui/filters/aircraftmodelfilterbar.cpp @@ -40,16 +40,20 @@ namespace BlackGui this->ui->frp_SimulatorSelector->setAll(); this->ui->comp_DistributorSelector->withDistributorDescription(false); this->setButtonsAndCount(this->ui->filter_Buttons); + connect(ui->le_AircraftIcao, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); connect(ui->le_AircraftManufacturer, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); connect(ui->le_AirlineIcao, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); connect(ui->le_AirlineName, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); connect(ui->le_LiveryCode, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); connect(ui->le_ModelDescription, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); - connect(ui->le_ModelKey, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_ModelString, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_FileName, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); connect(ui->cbt_Db, &QCheckBox::toggled, this, &CAircraftModelFilterBar::ps_checkBoxChanged); connect(ui->cbt_IncludeExclude, &QCheckBox::toggled, this, &CAircraftModelFilterBar::ps_checkBoxChanged); + connect(ui->cbt_Military, &QCheckBox::toggled, this, &CAircraftModelFilterBar::ps_checkBoxChanged); + connect(ui->cbt_ColorLiveries, &QCheckBox::toggled, this, &CAircraftModelFilterBar::ps_checkBoxChanged); connect(ui->frp_SimulatorSelector, &CSimulatorSelector::changed, this, &CAircraftModelFilterBar::ps_simulatorSelectionChanged); connect(ui->comp_DistributorSelector, &CDbDistributorSelectorComponent::changedDistributor, this, &CAircraftModelFilterBar::ps_distributorChanged); @@ -57,7 +61,7 @@ namespace BlackGui CUpperCaseValidator *ucv = new CUpperCaseValidator(this); this->ui->le_AircraftIcao->setValidator(ucv); this->ui->le_AirlineIcao->setValidator(ucv); - this->ui->le_ModelKey->setValidator(ucv); + this->ui->le_ModelString->setValidator(ucv); this->ui->le_AircraftManufacturer->setValidator(ucv); this->ui->le_LiveryCode->setValidator(ucv); @@ -97,15 +101,18 @@ namespace BlackGui return std::unique_ptr( new CAircraftModelFilter( - this->ui->le_ModelKey->text(), + this->ui->le_ModelString->text(), this->ui->le_ModelDescription->text(), mf, dbf, + ui->cbt_Military->checkState(), + ui->cbt_ColorLiveries->checkState(), this->ui->le_AircraftIcao->text(), this->ui->le_AircraftManufacturer->text(), this->ui->le_AirlineIcao->text(), this->ui->le_AirlineName->text(), this->ui->le_LiveryCode->text(), + this->ui->le_FileName->text(), this->ui->frp_SimulatorSelector->getValue(), this->ui->comp_DistributorSelector->getDistributor() )); @@ -118,17 +125,20 @@ namespace BlackGui void CAircraftModelFilterBar::clearForm() { - this->ui->le_ModelKey->clear(); + this->ui->le_ModelString->clear(); this->ui->le_ModelDescription->clear(); this->ui->le_AircraftIcao->clear(); this->ui->le_AircraftManufacturer->clear(); this->ui->le_AirlineIcao->clear(); this->ui->le_AirlineName->clear(); this->ui->le_LiveryCode->clear(); + this->ui->le_FileName->clear(); this->ui->frp_SimulatorSelector->setAll(); this->ui->comp_DistributorSelector->clear(); this->ui->cbt_IncludeExclude->setCheckState(Qt::PartiallyChecked); this->ui->cbt_Db->setCheckState(Qt::PartiallyChecked); + this->ui->cbt_Military->setCheckState(Qt::PartiallyChecked); + this->ui->cbt_ColorLiveries->setCheckState(Qt::PartiallyChecked); } void CAircraftModelFilterBar::ps_simulatorSelectionChanged(const BlackMisc::Simulation::CSimulatorInfo &info) diff --git a/src/blackgui/filters/aircraftmodelfilterbar.ui b/src/blackgui/filters/aircraftmodelfilterbar.ui index eb7609c5e..2cc2419fb 100644 --- a/src/blackgui/filters/aircraftmodelfilterbar.ui +++ b/src/blackgui/filters/aircraftmodelfilterbar.ui @@ -6,8 +6,8 @@ 0 0 - 658 - 48 + 571 + 72 @@ -38,48 +38,129 @@ 2 + + + + File: + + + + + + + filename e.g. FSX/SimObjects/MyAircraft + + + + + + + Identifier + + + + + + + + 50 + 16777215 + + + + ICAO + + + + + + + + 50 + 16777215 + + + + 4 + + + ICAO + + + + + + + Airline: + + + + + + + Airline name + + + + + + + Model: + + + + + + + Manufacturer + + + + + + + Aircraft: + + + + + + + + + + Description + + + + + + + + + + Livery: + + + + + + + Code + + + - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Included/excluded models? - - - Incl. - - - true - - - - - - - DB data? - - - DB - - - true - - - - + + + DB data? + + + DB + + + true + @@ -98,7 +179,20 @@ - + + + + Included/excluded models? + + + Incl. + + + true + + + + QFrame::StyledPanel @@ -108,104 +202,39 @@ - - - - - - - - 50 - 16777215 - - - - 4 - - - ICAO - - - - - - - - 50 - 16777215 - - - - ICAO - - - - - + + - Model: - - - - - - - Manufacturer + Distributor: - - - Airline: - - - - - - - Airline name - - - - - - - Code - - - - - + - + Color liveries - Livery: + Color liv. + + + true - - - - - - - Description - - + + - - - - Aircraft: + + + + Military - - - - - - Key + + Mil. + + + true @@ -232,15 +261,18 @@ - cbt_IncludeExclude cbt_Db - le_ModelKey + cbt_IncludeExclude + le_ModelString le_ModelDescription le_AircraftIcao le_AircraftManufacturer + cbt_Military le_LiveryCode + cbt_ColorLiveries le_AirlineIcao le_AirlineName + le_FileName diff --git a/src/blackgui/models/aircraftmodelfilter.cpp b/src/blackgui/models/aircraftmodelfilter.cpp index c35240a38..0f145b0ac 100644 --- a/src/blackgui/models/aircraftmodelfilter.cpp +++ b/src/blackgui/models/aircraftmodelfilter.cpp @@ -21,16 +21,18 @@ namespace BlackGui { CAircraftModelFilter::CAircraftModelFilter(const QString &modelKey, const QString &description, CAircraftModel::ModelModeFilter modelMode, BlackMisc::Db::DbKeyStateFilter dbKeyFilter, + Qt::CheckState military, Qt::CheckState colorLiveries, const QString &aircraftIcao, const QString &aircraftManufacturer, const QString &airlineIcao, const QString &airlineName, - const QString &liveryCode, + const QString &liveryCode, const QString &fileName, const CSimulatorInfo &simInfo, const CDistributor &distributor) : m_modelKey(modelKey.trimmed().toUpper()), m_description(description.trimmed()), - m_modelMode(modelMode), m_dbKeyFilter(dbKeyFilter), + m_modelMode(modelMode), m_dbKeyFilter(dbKeyFilter), m_military(military), m_colorLiveries(colorLiveries), m_aircraftIcao(aircraftIcao.trimmed().toUpper()), m_aircraftManufacturer(aircraftManufacturer.trimmed().toUpper()), m_airlineIcao(airlineIcao.trimmed().toUpper()), m_airlineName(airlineName.trimmed().toUpper()), m_liveryCode(liveryCode.trimmed().toUpper()), + m_fileName(fileName), m_simulatorInfo(simInfo), m_distributor(distributor) { @@ -53,6 +55,34 @@ namespace BlackGui if (!this->stringMatchesFilterExpression(model.getModelString(), this->m_modelKey)) { continue; } } + if (this->m_military != Qt::PartiallyChecked) + { + if (this->m_military == Qt::Checked) + { + // military only + if (!model.isMilitary()) { continue; } + } + else if (this->m_military == Qt::Unchecked) + { + // civilian only + if (model.isMilitary()) { continue; } + } + } + + if (this->m_colorLiveries != Qt::PartiallyChecked) + { + if (this->m_colorLiveries == Qt::Checked) + { + // only color liveries + if (!model.getLivery().isColorLivery()) { continue; } + } + else if (this->m_colorLiveries == Qt::Unchecked) + { + // Only airline liveries + if (model.getLivery().isColorLivery()) { continue; } + } + } + if (!this->m_description.isEmpty()) { if (!this->stringMatchesFilterExpression(model.getDescription(), this->m_description)) { continue; } @@ -68,6 +98,11 @@ namespace BlackGui if (!model.matchesDbKeyState(this->m_dbKeyFilter)) { continue; } } + if (!this->m_fileName.isEmpty()) + { + if (!this->stringMatchesFilterExpression(model.getFileName(), this->m_fileName)) { continue; } + } + if (!this->m_aircraftIcao.isEmpty()) { if (!this->stringMatchesFilterExpression(model.getAircraftIcaoCodeDesignator(), this->m_aircraftIcao)) { continue; } @@ -108,13 +143,15 @@ namespace BlackGui const bool allEmpty = this->m_modelKey.isEmpty() && this->m_description.isEmpty() && this->m_aircraftManufacturer.isEmpty() && this->m_aircraftIcao.isEmpty() && this->m_airlineIcao.isEmpty() && this->m_airlineName.isEmpty() && - this->m_liveryCode.isEmpty(); + this->m_liveryCode.isEmpty() && this->m_fileName.isEmpty(); if (!allEmpty) { return true; } const bool noSim = this->m_simulatorInfo.isNoSimulator() || this->m_simulatorInfo.isAllSimulators(); const bool noModelMode = this->m_modelMode == CAircraftModel::Undefined || this->m_modelMode == CAircraftModel::All; const bool noDbState = this->m_dbKeyFilter == BlackMisc::Db::Undefined || this->m_dbKeyFilter == BlackMisc::Db::All; const bool noKey = !this->m_distributor.hasValidDbKey(); - return !(noSim && noModelMode && noDbState && noKey); + const bool noColorRestriction = this->m_colorLiveries == Qt::PartiallyChecked; + const bool noMilitary = this->m_military == Qt::PartiallyChecked; + return !(noSim && noModelMode && noDbState && noKey && noMilitary && noColorRestriction); } } // namespace } // namespace diff --git a/src/blackgui/models/aircraftmodelfilter.h b/src/blackgui/models/aircraftmodelfilter.h index 62536b636..cf716e4eb 100644 --- a/src/blackgui/models/aircraftmodelfilter.h +++ b/src/blackgui/models/aircraftmodelfilter.h @@ -34,9 +34,11 @@ namespace BlackGui CAircraftModelFilter(const QString &modelKey, const QString &description, BlackMisc::Simulation::CAircraftModel::ModelModeFilter modelMode, BlackMisc::Db::DbKeyStateFilter dbKeyFilter, + Qt::CheckState military, Qt::CheckState colorLiveries, const QString &aircraftIcao, const QString &aircraftManufacturer, const QString &airlineIcao, const QString &airlineName, const QString &liveryCode, + const QString &fileName, const BlackMisc::Simulation::CSimulatorInfo &simInfo = BlackMisc::Simulation::CSimulatorInfo::allSimulators(), const BlackMisc::Simulation::CDistributor &distributor = BlackMisc::Simulation::CDistributor() ); @@ -49,11 +51,14 @@ namespace BlackGui QString m_description; BlackMisc::Simulation::CAircraftModel::ModelModeFilter m_modelMode; BlackMisc::Db::DbKeyStateFilter m_dbKeyFilter; + Qt::CheckState m_military; + Qt::CheckState m_colorLiveries; QString m_aircraftIcao; QString m_aircraftManufacturer; QString m_airlineIcao; QString m_airlineName; QString m_liveryCode; + QString m_fileName; BlackMisc::Simulation::CSimulatorInfo m_simulatorInfo; BlackMisc::Simulation::CDistributor m_distributor; bool valid() const;