From 7d785b4e3ba2c60b7f44bb6dc72720604dc2d6e0 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 21 Mar 2016 04:14:30 +0100 Subject: [PATCH] refs #618, allow to filter my include/exclude --- .../filters/aircraftmodelfilterbar.cpp | 17 ++ src/blackgui/filters/aircraftmodelfilterbar.h | 3 + .../filters/aircraftmodelfilterbar.ui | 178 ++++++++++-------- src/blackgui/models/aircraftmodelfilter.cpp | 22 ++- src/blackgui/models/aircraftmodelfilter.h | 4 +- src/blackmisc/simulation/aircraftmodel.cpp | 8 + src/blackmisc/simulation/aircraftmodel.h | 14 +- 7 files changed, 158 insertions(+), 88 deletions(-) diff --git a/src/blackgui/filters/aircraftmodelfilterbar.cpp b/src/blackgui/filters/aircraftmodelfilterbar.cpp index a7d6f8b72..24c791cbf 100644 --- a/src/blackgui/filters/aircraftmodelfilterbar.cpp +++ b/src/blackgui/filters/aircraftmodelfilterbar.cpp @@ -10,7 +10,9 @@ #include "aircraftmodelfilterbar.h" #include "ui_aircraftmodelfilterbar.h" #include "blackgui/uppercasevalidator.h" +#include "blackmisc/simulation/aircraftmodel.h" +using namespace BlackMisc::Simulation; using namespace BlackGui; using namespace BlackGui::Models; using namespace BlackGui::Components; @@ -34,6 +36,10 @@ namespace BlackGui 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->cb_Include, &QCheckBox::toggled, this, &CAircraftModelFilterBar::ps_checkBoxChanged); + connect(ui->cb_Exclude, &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); @@ -52,10 +58,13 @@ namespace BlackGui std::unique_ptr > CAircraftModelFilterBar::createModelFilter() const { + CAircraftModel::ModelModeFilter mf = this->ui->cb_Include->isChecked() ? CAircraftModel::Include : CAircraftModel::Undefined; + if (this->ui->cb_Exclude->isChecked()) { mf |= CAircraftModel::Exclude; } return std::unique_ptr( new CAircraftModelFilter( this->ui->le_ModelKey->text(), this->ui->le_ModelDescription->text(), + mf, this->ui->le_AircraftIcao->text(), this->ui->le_AircraftManufacturer->text(), this->ui->le_AirlineIcao->text(), @@ -82,6 +91,8 @@ namespace BlackGui this->ui->le_LiveryCode->clear(); this->ui->frp_SimulatorSelector->setAll(); this->ui->comp_DistributorSelector->clear(); + this->ui->cb_Exclude->setChecked(true); + this->ui->cb_Include->setChecked(true); } void CAircraftModelFilterBar::ps_simulatorSelectionChanged(const BlackMisc::Simulation::CSimulatorInfo &info) @@ -95,5 +106,11 @@ namespace BlackGui Q_UNUSED(distributor); this->triggerFilter(); } + + void CAircraftModelFilterBar::ps_checkBoxChanged(bool state) + { + Q_UNUSED(state); + triggerFilter(); + } } // ns } // ns diff --git a/src/blackgui/filters/aircraftmodelfilterbar.h b/src/blackgui/filters/aircraftmodelfilterbar.h index 99702c9bc..046e4b3f0 100644 --- a/src/blackgui/filters/aircraftmodelfilterbar.h +++ b/src/blackgui/filters/aircraftmodelfilterbar.h @@ -57,6 +57,9 @@ namespace BlackGui //! Distributor changed void ps_distributorChanged(const BlackMisc::Simulation::CDistributor &distributor); + //! Checkbox has been changed + void ps_checkBoxChanged(bool state); + private: QScopedPointer ui; }; diff --git a/src/blackgui/filters/aircraftmodelfilterbar.ui b/src/blackgui/filters/aircraftmodelfilterbar.ui index ccefc3ac8..c394a634f 100644 --- a/src/blackgui/filters/aircraftmodelfilterbar.ui +++ b/src/blackgui/filters/aircraftmodelfilterbar.ui @@ -38,10 +38,92 @@ 2 - - + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Included models + + + In. + + + true + + + + + + + Excluded models + + + Ex. + + + true + + + + + + + + + + + 50 + 0 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + + + 50 + 16777215 + + + + 4 + - Manufacturer + ICAO @@ -65,26 +147,17 @@ - - - - - 50 - 16777215 - - - - 4 - + + - ICAO + Manufacturer - - - - Code + + + + Airline: @@ -95,6 +168,13 @@ + + + + Code + + + @@ -102,13 +182,6 @@ - - - - Airline: - - - @@ -119,13 +192,6 @@ - - - - Key - - - @@ -133,48 +199,10 @@ - - - - - 50 - 0 - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 60 - 20 - - - - - - - - - - - QFrame::StyledPanel - - - QFrame::Raised + + + + Key diff --git a/src/blackgui/models/aircraftmodelfilter.cpp b/src/blackgui/models/aircraftmodelfilter.cpp index ac1f08ba6..fc7ae4bf5 100644 --- a/src/blackgui/models/aircraftmodelfilter.cpp +++ b/src/blackgui/models/aircraftmodelfilter.cpp @@ -16,15 +16,13 @@ namespace BlackGui { namespace Models { - - CAircraftModelFilter::CAircraftModelFilter( - const QString &modelKey, const QString &description, - const QString &aircraftIcao, const QString &aircraftManufacturer, - const QString &airlineIcao, const QString &airlineName, - const QString &liveryCode, - const CSimulatorInfo &simInfo, - const CDistributor &distributor) : - m_modelKey(modelKey.trimmed()), m_description(description.trimmed()), + CAircraftModelFilter::CAircraftModelFilter(const QString &modelKey, const QString &description, CAircraftModel::ModelModeFilter modelMode, + const QString &aircraftIcao, const QString &aircraftManufacturer, + const QString &airlineIcao, const QString &airlineName, + const QString &liveryCode, + const CSimulatorInfo &simInfo, + const CDistributor &distributor) : + m_modelKey(modelKey.trimmed().toUpper()), m_description(description.trimmed()), m_modelMode(modelMode), 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()), @@ -53,6 +51,11 @@ namespace BlackGui if (!this->stringMatchesFilterExpression(model.getDescription(), this->m_description)) { continue; } } + if (this->m_modelMode != CAircraftModel::Undefined) + { + if (!model.matchesMode(this->m_modelMode)) { continue; } + } + if (!this->m_aircraftIcao.isEmpty()) { if (!this->stringMatchesFilterExpression(model.getAircraftIcaoCodeDesignator(), this->m_aircraftIcao)) { continue; } @@ -91,6 +94,7 @@ namespace BlackGui bool CAircraftModelFilter::isValid() const { return !(this->m_modelKey.isEmpty() && this->m_description.isEmpty() && + (this->m_modelMode != CAircraftModel::Undefined && this->m_modelMode != CAircraftModel::All) && this->m_aircraftManufacturer.isEmpty() && this->m_aircraftIcao.isEmpty() && this->m_airlineIcao.isEmpty() && this->m_airlineName.isEmpty() && this->m_liveryCode.isEmpty() && diff --git a/src/blackgui/models/aircraftmodelfilter.h b/src/blackgui/models/aircraftmodelfilter.h index 76c4029ed..4b6aa2bae 100644 --- a/src/blackgui/models/aircraftmodelfilter.h +++ b/src/blackgui/models/aircraftmodelfilter.h @@ -20,13 +20,12 @@ namespace BlackGui { namespace Models { - //! Filter for aircraft models class BLACKGUI_EXPORT CAircraftModelFilter : public IModelFilter { public: //! Constructor - CAircraftModelFilter(const QString &modelKey, const QString &description, + CAircraftModelFilter(const QString &modelKey, const QString &description, BlackMisc::Simulation::CAircraftModel::ModelModeFilter modelMode, const QString &aircraftIcao, const QString &aircraftManufacturer, const QString &airlineIcao, const QString &airlineName, const QString &liveryCode, @@ -43,6 +42,7 @@ namespace BlackGui private: QString m_modelKey; QString m_description; + BlackMisc::Simulation::CAircraftModel::ModelModeFilter m_modelMode; QString m_aircraftIcao; QString m_aircraftManufacturer; QString m_airlineIcao; diff --git a/src/blackmisc/simulation/aircraftmodel.cpp b/src/blackmisc/simulation/aircraftmodel.cpp index 2e9494318..643bede39 100644 --- a/src/blackmisc/simulation/aircraftmodel.cpp +++ b/src/blackmisc/simulation/aircraftmodel.cpp @@ -295,6 +295,11 @@ namespace BlackMisc return distributors.matchesAnyKeyOrAlias(this->m_distributor.getDbKey()); } + bool CAircraftModel::matchesMode(ModelModeFilter mode) const + { + return (mode & this->m_modelMode) > 0; + } + const CIcon &CAircraftModel::getModelModeAsIcon() const { switch (this->getModelMode()) @@ -303,6 +308,8 @@ namespace BlackMisc return CIconList::iconByIndex(CIcons::ModelInclude); case Exclude: return CIconList::iconByIndex(CIcons::ModelExclude); + case Undefined: + return CIconList::iconByIndex(CIcons::StandardIconUnknown16); default: Q_ASSERT_X(false, Q_FUNC_INFO, "wrong mode"); break; @@ -332,6 +339,7 @@ namespace BlackMisc if (this->m_fileName.isEmpty()) { this->setFileName(otherModel.getFileName()); } if (this->m_callsign.isEmpty()) { this->setCallsign(otherModel.getCallsign()); } if (this->m_modelType == TypeUnknown) { this->m_modelType = otherModel.getModelType(); } + if (this->m_modelMode == Undefined) { this->m_modelType = otherModel.getModelType(); } if (this->m_simulator.isUnspecified()) { this->setSimulatorInfo(otherModel.getSimulatorInfo()); diff --git a/src/blackmisc/simulation/aircraftmodel.h b/src/blackmisc/simulation/aircraftmodel.h index 9d97cc6d0..f4fd240fa 100644 --- a/src/blackmisc/simulation/aircraftmodel.h +++ b/src/blackmisc/simulation/aircraftmodel.h @@ -49,10 +49,14 @@ namespace BlackMisc //! Mode enum ModelMode { - Include, - Exclude + Undefined = 0, + Include = 1 << 0, + Exclude = 1 << 1 }; + //! Supposed to be used only in filter operations + Q_DECLARE_FLAGS(ModelModeFilter, ModelMode) + //! Indexes enum ColumnIndex { @@ -201,6 +205,9 @@ namespace BlackMisc //! Model mode ModelMode getModelMode() const { return m_modelMode; } + //! Matches given mode? + bool matchesMode(BlackMisc::Simulation::CAircraftModel::ModelModeFilter mode) const; + //! Model mode as string const QString &getModelModeAsString() const { return modelModeToString(getModelMode()); } @@ -309,8 +316,11 @@ BLACK_DECLARE_TUPLE_CONVERSION( attr(o.m_modelType), attr(o.m_modelMode) )) + Q_DECLARE_METATYPE(BlackMisc::Simulation::CAircraftModel) Q_DECLARE_METATYPE(BlackMisc::Simulation::CAircraftModel::ModelType) Q_DECLARE_METATYPE(BlackMisc::Simulation::CAircraftModel::ModelMode) +Q_DECLARE_METATYPE(BlackMisc::Simulation::CAircraftModel::ModelModeFilter) +Q_DECLARE_OPERATORS_FOR_FLAGS(BlackMisc::Simulation::CAircraftModel::ModelModeFilter) #endif // guard