From d9a35563e373a111dd540517a81bc2e1e0fd5e2c Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 9 Aug 2016 01:37:01 +0200 Subject: [PATCH] refs #720, allow to filter by DB data * tristate checkboxes * can hide count element * tab order --- .../filters/aircraftmodelfilterbar.cpp | 38 ++++++++++++++++--- src/blackgui/filters/aircraftmodelfilterbar.h | 3 ++ .../filters/aircraftmodelfilterbar.ui | 23 ++++++----- .../filters/aircraftmodelfilterdialog.cpp | 1 + src/blackgui/filters/filterbarbuttons.cpp | 5 +++ src/blackgui/filters/filterbarbuttons.h | 4 +- src/blackgui/models/aircraftmodelfilter.cpp | 21 ++++++---- src/blackgui/models/aircraftmodelfilter.h | 6 ++- 8 files changed, 76 insertions(+), 25 deletions(-) diff --git a/src/blackgui/filters/aircraftmodelfilterbar.cpp b/src/blackgui/filters/aircraftmodelfilterbar.cpp index 8ea60dc0b..272b821bc 100644 --- a/src/blackgui/filters/aircraftmodelfilterbar.cpp +++ b/src/blackgui/filters/aircraftmodelfilterbar.cpp @@ -15,6 +15,7 @@ #include "blackgui/uppercasevalidator.h" #include "blackmisc/simulation/aircraftmodel.h" #include "blackmisc/simulation/aircraftmodellist.h" +#include "blackmisc/db/datastore.h" #include "ui_aircraftmodelfilterbar.h" #include @@ -22,6 +23,7 @@ #include using namespace BlackMisc::Simulation; +using namespace BlackMisc::Db; using namespace BlackGui; using namespace BlackGui::Models; using namespace BlackGui::Components; @@ -46,8 +48,8 @@ namespace BlackGui 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->cbt_Db, &QCheckBox::toggled, this, &CAircraftModelFilterBar::ps_checkBoxChanged); + connect(ui->cbt_IncludeExclude, &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); @@ -66,15 +68,39 @@ namespace BlackGui CAircraftModelFilterBar::~CAircraftModelFilterBar() { } + void CAircraftModelFilterBar::displayCount(bool show) + { + ui->filter_Buttons->displayCount(show); + } + 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; } + CAircraftModel::ModelModeFilter mf = CAircraftModel::All; + if (ui->cbt_IncludeExclude->checkState() == Qt::Checked) + { + mf = CAircraftModel::Include; + } + else if (ui->cbt_IncludeExclude->checkState() == Qt::Unchecked) + { + mf = CAircraftModel::Exclude; + } + + BlackMisc::Db::DbKeyStateFilter dbf = BlackMisc::Db::All; + if (ui->cbt_Db->checkState() == Qt::Checked) + { + dbf = BlackMisc::Db::Valid; + } + else if (ui->cbt_Db->checkState() == Qt::Unchecked) + { + dbf = BlackMisc::Db::Invalid; + } + return std::unique_ptr( new CAircraftModelFilter( this->ui->le_ModelKey->text(), this->ui->le_ModelDescription->text(), mf, + dbf, this->ui->le_AircraftIcao->text(), this->ui->le_AircraftManufacturer->text(), this->ui->le_AirlineIcao->text(), @@ -101,8 +127,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); + this->ui->cbt_IncludeExclude->setCheckState(Qt::PartiallyChecked); + this->ui->cbt_Db->setCheckState(Qt::PartiallyChecked); } void CAircraftModelFilterBar::ps_simulatorSelectionChanged(const BlackMisc::Simulation::CSimulatorInfo &info) diff --git a/src/blackgui/filters/aircraftmodelfilterbar.h b/src/blackgui/filters/aircraftmodelfilterbar.h index 76839005a..31e8ac97e 100644 --- a/src/blackgui/filters/aircraftmodelfilterbar.h +++ b/src/blackgui/filters/aircraftmodelfilterbar.h @@ -47,6 +47,9 @@ namespace BlackGui //! Destructor ~CAircraftModelFilterBar(); + //! Show count + void displayCount(bool show); + //! \copydoc Models::IModelFilterProvider::createModelFilter virtual std::unique_ptr> createModelFilter() const override; diff --git a/src/blackgui/filters/aircraftmodelfilterbar.ui b/src/blackgui/filters/aircraftmodelfilterbar.ui index c394a634f..eb7609c5e 100644 --- a/src/blackgui/filters/aircraftmodelfilterbar.ui +++ b/src/blackgui/filters/aircraftmodelfilterbar.ui @@ -39,7 +39,7 @@ 2 - + 0 @@ -54,27 +54,27 @@ 0 - + - Included models + Included/excluded models? - In. + Incl. - + true - + - Excluded models + DB data? - Ex. + DB - + true @@ -177,6 +177,9 @@ + + + Livery: @@ -229,6 +232,8 @@ + cbt_IncludeExclude + cbt_Db le_ModelKey le_ModelDescription le_AircraftIcao diff --git a/src/blackgui/filters/aircraftmodelfilterdialog.cpp b/src/blackgui/filters/aircraftmodelfilterdialog.cpp index b78954636..e98537057 100644 --- a/src/blackgui/filters/aircraftmodelfilterdialog.cpp +++ b/src/blackgui/filters/aircraftmodelfilterdialog.cpp @@ -28,6 +28,7 @@ namespace BlackGui ui->setupUi(this); this->setWindowTitle("Filter models"); this->resize(640, 100); + ui->filter_Models->displayCount(false); connect(ui->filter_Models, &CAircraftModelFilterBar::rejectDialog, this, &CAircraftModelFilterDialog::reject); } diff --git a/src/blackgui/filters/filterbarbuttons.cpp b/src/blackgui/filters/filterbarbuttons.cpp index 90e7a8c5e..060d3a39c 100644 --- a/src/blackgui/filters/filterbarbuttons.cpp +++ b/src/blackgui/filters/filterbarbuttons.cpp @@ -31,6 +31,11 @@ namespace BlackGui CFilterBarButtons::~CFilterBarButtons() { } + void CFilterBarButtons::displayCount(bool show) + { + ui->le_Count->setVisible(show); + } + void CFilterBarButtons::ps_buttonClicked() { QObject *sender = QObject::sender(); diff --git a/src/blackgui/filters/filterbarbuttons.h b/src/blackgui/filters/filterbarbuttons.h index 4a5f839b8..d0243fd53 100644 --- a/src/blackgui/filters/filterbarbuttons.h +++ b/src/blackgui/filters/filterbarbuttons.h @@ -49,6 +49,9 @@ namespace BlackGui //! Destructor ~CFilterBarButtons(); + //! Show the counter + void displayCount(bool show); + signals: //! Filter button clicked void buttonClicked(FilterButton filterButton); @@ -67,7 +70,6 @@ namespace BlackGui private: QScopedPointer ui; }; - } // ns } // ns diff --git a/src/blackgui/models/aircraftmodelfilter.cpp b/src/blackgui/models/aircraftmodelfilter.cpp index bed947a4b..c35240a38 100644 --- a/src/blackgui/models/aircraftmodelfilter.cpp +++ b/src/blackgui/models/aircraftmodelfilter.cpp @@ -19,13 +19,15 @@ namespace BlackGui { namespace Models { - CAircraftModelFilter::CAircraftModelFilter(const QString &modelKey, const QString &description, CAircraftModel::ModelModeFilter modelMode, + CAircraftModelFilter::CAircraftModelFilter(const QString &modelKey, const QString &description, + CAircraftModel::ModelModeFilter modelMode, BlackMisc::Db::DbKeyStateFilter dbKeyFilter, 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_modelKey(modelKey.trimmed().toUpper()), m_description(description.trimmed()), + m_modelMode(modelMode), m_dbKeyFilter(dbKeyFilter), 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()), @@ -56,11 +58,16 @@ namespace BlackGui if (!this->stringMatchesFilterExpression(model.getDescription(), this->m_description)) { continue; } } - if (this->m_modelMode != CAircraftModel::Undefined) + if (this->m_modelMode != CAircraftModel::All && this->m_modelMode != CAircraftModel::Undefined) { if (!model.matchesMode(this->m_modelMode)) { continue; } } + if (this->m_dbKeyFilter != BlackMisc::Db::All && this->m_dbKeyFilter != BlackMisc::Db::Undefined) + { + if (!model.matchesDbKeyState(this->m_dbKeyFilter)) { continue; } + } + if (!this->m_aircraftIcao.isEmpty()) { if (!this->stringMatchesFilterExpression(model.getAircraftIcaoCodeDesignator(), this->m_aircraftIcao)) { continue; } @@ -96,8 +103,6 @@ namespace BlackGui return outContainer; } - - bool CAircraftModelFilter::valid() const { const bool allEmpty = this->m_modelKey.isEmpty() && this->m_description.isEmpty() && @@ -106,10 +111,10 @@ namespace BlackGui this->m_liveryCode.isEmpty(); if (!allEmpty) { return true; } const bool noSim = this->m_simulatorInfo.isNoSimulator() || this->m_simulatorInfo.isAllSimulators(); - const bool noMode = this->m_modelMode == CAircraftModel::Undefined || this->m_modelMode == CAircraftModel::All; + 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 && noMode && noKey); + return !(noSim && noModelMode && noDbState && noKey); } - } // namespace } // namespace diff --git a/src/blackgui/models/aircraftmodelfilter.h b/src/blackgui/models/aircraftmodelfilter.h index 28d237321..62536b636 100644 --- a/src/blackgui/models/aircraftmodelfilter.h +++ b/src/blackgui/models/aircraftmodelfilter.h @@ -18,6 +18,7 @@ #include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/distributor.h" #include "blackmisc/simulation/simulatorinfo.h" +#include "blackmisc/db/datastore.h" #include @@ -30,7 +31,9 @@ namespace BlackGui { public: //! Constructor - CAircraftModelFilter(const QString &modelKey, const QString &description, BlackMisc::Simulation::CAircraftModel::ModelModeFilter modelMode, + CAircraftModelFilter(const QString &modelKey, const QString &description, + BlackMisc::Simulation::CAircraftModel::ModelModeFilter modelMode, + BlackMisc::Db::DbKeyStateFilter dbKeyFilter, const QString &aircraftIcao, const QString &aircraftManufacturer, const QString &airlineIcao, const QString &airlineName, const QString &liveryCode, @@ -45,6 +48,7 @@ namespace BlackGui QString m_modelKey; QString m_description; BlackMisc::Simulation::CAircraftModel::ModelModeFilter m_modelMode; + BlackMisc::Db::DbKeyStateFilter m_dbKeyFilter; QString m_aircraftIcao; QString m_aircraftManufacturer; QString m_airlineIcao;