diff --git a/src/blackgui/filters/aircraftmodelfilterdialog.cpp b/src/blackgui/filters/aircraftmodelfilterdialog.cpp index b64500ffc..504e39849 100644 --- a/src/blackgui/filters/aircraftmodelfilterdialog.cpp +++ b/src/blackgui/filters/aircraftmodelfilterdialog.cpp @@ -11,6 +11,7 @@ #include "ui_aircraftmodelfilterdialog.h" using namespace BlackGui::Models; +using namespace BlackGui::Filters; using namespace BlackMisc::Simulation; using namespace BlackMisc::Network; @@ -25,6 +26,7 @@ namespace BlackGui ui->setupUi(this); this->setWindowTitle("Filter models"); this->resize(640, 100); + connect(ui->filter_Models, &CAircraftModelFilterBar::rejectDialog, this, &CAircraftModelFilterDialog::reject); } CAircraftModelFilterDialog::~CAircraftModelFilterDialog() diff --git a/src/blackgui/filters/aircraftmodelfilterdialog.h b/src/blackgui/filters/aircraftmodelfilterdialog.h index 2f4e0b800..a5d96f8d0 100644 --- a/src/blackgui/filters/aircraftmodelfilterdialog.h +++ b/src/blackgui/filters/aircraftmodelfilterdialog.h @@ -12,8 +12,8 @@ #ifndef BLACKGUI_FILTERS_AIRCRAFTMODELFILTERFORM_H #define BLACKGUI_FILTERS_AIRCRAFTMODELFILTERFORM_H -#include "blackgui/blackguiexport.h" #include "filterdialog.h" +#include "blackgui/blackguiexport.h" #include "blackgui/models/aircraftmodelfilter.h" #include #include diff --git a/src/blackgui/filters/filterwidget.cpp b/src/blackgui/filters/filterwidget.cpp index ef01e6bb6..5c0a66adb 100644 --- a/src/blackgui/filters/filterwidget.cpp +++ b/src/blackgui/filters/filterwidget.cpp @@ -55,6 +55,7 @@ namespace BlackGui break; case CFilterBarButtons::RemoveFilter: emit changeFilter(false); + emit rejectDialog(); break; case CFilterBarButtons::ClearForm: clearForm(); diff --git a/src/blackgui/filters/filterwidget.h b/src/blackgui/filters/filterwidget.h index 5d5cd7837..486f60364 100644 --- a/src/blackgui/filters/filterwidget.h +++ b/src/blackgui/filters/filterwidget.h @@ -43,6 +43,9 @@ namespace BlackGui //! Change the filter by enabling or disabling it void changeFilter(bool enable); + //! A filter dialog is supposed to close + void rejectDialog(); + protected: //! Set and connect filter bar buttonsd void setButtonsAndCount(CFilterBarButtons *buttons); diff --git a/src/blackgui/models/aircrafticaofilter.cpp b/src/blackgui/models/aircrafticaofilter.cpp index a36494b1c..b9785c8dd 100644 --- a/src/blackgui/models/aircrafticaofilter.cpp +++ b/src/blackgui/models/aircrafticaofilter.cpp @@ -21,7 +21,10 @@ namespace BlackGui const QString &description, const QString &combinedType) : m_designator(designator.trimmed().toUpper()), m_manufacturer(name.trimmed()), m_description(description.trimmed()), m_combinedType(combinedType.trimmed().toUpper()) - { } + { + this->m_valid = !(this->m_combinedType.isEmpty() && this->m_designator.isEmpty() && + this->m_description.isEmpty() && this->m_manufacturer.isEmpty()); + } CAircraftIcaoCodeList CAircraftIcaoFilter::filter(const CAircraftIcaoCodeList &inContainer) const { @@ -51,12 +54,5 @@ namespace BlackGui } return outContainer; } - - bool CAircraftIcaoFilter::isValid() const - { - return !(this->m_combinedType.isEmpty() && this->m_designator.isEmpty() && - this->m_description.isEmpty() && this->m_manufacturer.isEmpty()); - } - } // namespace } // namespace diff --git a/src/blackgui/models/aircrafticaofilter.h b/src/blackgui/models/aircrafticaofilter.h index cd4f8bbf8..654b313f4 100644 --- a/src/blackgui/models/aircrafticaofilter.h +++ b/src/blackgui/models/aircrafticaofilter.h @@ -35,9 +35,6 @@ namespace BlackGui //! \copydoc IModelFilter::filter virtual BlackMisc::Aviation::CAircraftIcaoCodeList filter(const BlackMisc::Aviation::CAircraftIcaoCodeList &inContainer) const override; - //! \copydoc IModelFilter::isValid - virtual bool isValid() const override; - private: QString m_designator; QString m_manufacturer; diff --git a/src/blackgui/models/aircraftmodelfilter.cpp b/src/blackgui/models/aircraftmodelfilter.cpp index fc7ae4bf5..81b65cc80 100644 --- a/src/blackgui/models/aircraftmodelfilter.cpp +++ b/src/blackgui/models/aircraftmodelfilter.cpp @@ -28,7 +28,9 @@ namespace BlackGui m_liveryCode(liveryCode.trimmed().toUpper()), m_simulatorInfo(simInfo), m_distributor(distributor) - { } + { + m_valid = valid(); + } BlackMisc::Simulation::CAircraftModelList CAircraftModelFilter::filter(const CAircraftModelList &inContainer) const { @@ -91,16 +93,19 @@ namespace BlackGui return outContainer; } - bool CAircraftModelFilter::isValid() const + + + bool CAircraftModelFilter::valid() 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() && - !this->m_distributor.hasValidDbKey() && - (this->m_simulatorInfo.isNoSimulator() || this->m_simulatorInfo.isAllSimulators()) - ); + 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(); + 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 noKey = !this->m_distributor.hasValidDbKey(); + return !(noSim && noMode && noKey); } } // namespace diff --git a/src/blackgui/models/aircraftmodelfilter.h b/src/blackgui/models/aircraftmodelfilter.h index 4b6aa2bae..81ff2a069 100644 --- a/src/blackgui/models/aircraftmodelfilter.h +++ b/src/blackgui/models/aircraftmodelfilter.h @@ -36,9 +36,6 @@ namespace BlackGui //! \copydoc IModelFilter::filter virtual BlackMisc::Simulation::CAircraftModelList filter(const BlackMisc::Simulation::CAircraftModelList &inContainer) const override; - //! \copydoc IModelFilter::isValid - virtual bool isValid() const override; - private: QString m_modelKey; QString m_description; @@ -49,9 +46,9 @@ namespace BlackGui QString m_airlineName; QString m_liveryCode; BlackMisc::Simulation::CSimulatorInfo m_simulatorInfo; - BlackMisc::Simulation::CDistributor m_distributor; + BlackMisc::Simulation::CDistributor m_distributor; + bool valid() const; }; - } // namespace } // namespace diff --git a/src/blackgui/models/airlineicaofilter.cpp b/src/blackgui/models/airlineicaofilter.cpp index 0c79945f2..816805c11 100644 --- a/src/blackgui/models/airlineicaofilter.cpp +++ b/src/blackgui/models/airlineicaofilter.cpp @@ -20,7 +20,11 @@ namespace BlackGui const QString &countryIso, bool isReal, bool isVa) : m_vDesignator(vDesignator.trimmed().toUpper()), m_name(name.trimmed()), m_countryIso(countryIso.trimmed().toUpper()), m_real(isReal), m_va(isVa) - { } + { + this->m_valid = !(this->m_countryIso.isEmpty() && this->m_vDesignator.isEmpty() && + this->m_name.isEmpty() && + !m_va && !m_real); + } CAirlineIcaoCodeList CAirlineIcaoFilter::filter(const CAirlineIcaoCodeList &inContainer) const { @@ -59,13 +63,5 @@ namespace BlackGui } return outContainer; } - - bool CAirlineIcaoFilter::isValid() const - { - return !(this->m_countryIso.isEmpty() && this->m_vDesignator.isEmpty() && - this->m_name.isEmpty() && - !m_va && !m_real); - } - } // namespace } // namespace diff --git a/src/blackgui/models/airlineicaofilter.h b/src/blackgui/models/airlineicaofilter.h index 2f48a301c..8370a433c 100644 --- a/src/blackgui/models/airlineicaofilter.h +++ b/src/blackgui/models/airlineicaofilter.h @@ -31,9 +31,6 @@ namespace BlackGui //! \copydoc IModelFilter::filter virtual BlackMisc::Aviation::CAirlineIcaoCodeList filter(const BlackMisc::Aviation::CAirlineIcaoCodeList &inContainer) const override; - //! \copydoc IModelFilter::isValid - virtual bool isValid() const override; - private: QString m_vDesignator; QString m_name; diff --git a/src/blackgui/models/countryfilter.cpp b/src/blackgui/models/countryfilter.cpp index 2f0389bab..c5df745d2 100644 --- a/src/blackgui/models/countryfilter.cpp +++ b/src/blackgui/models/countryfilter.cpp @@ -18,7 +18,9 @@ namespace BlackGui { CCountryFilter::CCountryFilter(const QString &isoCode, const QString &name) : m_isoCode(isoCode.trimmed().toUpper()), m_name(name.trimmed()) - { } + { + this->m_valid = !(this->m_isoCode.isEmpty() && this->m_name.isEmpty()); + } CCountryList CCountryFilter::filter(const CCountryList &inContainer) const { @@ -43,11 +45,5 @@ namespace BlackGui } return outContainer; } - - bool CCountryFilter::isValid() const - { - return !(this->m_isoCode.isEmpty() && this->m_name.isEmpty()); - } - } // namespace } // namespace diff --git a/src/blackgui/models/countryfilter.h b/src/blackgui/models/countryfilter.h index fc4d98b29..9d72723fc 100644 --- a/src/blackgui/models/countryfilter.h +++ b/src/blackgui/models/countryfilter.h @@ -30,9 +30,6 @@ namespace BlackGui //! \copydoc IModelFilter::filter virtual BlackMisc::CCountryList filter(const BlackMisc::CCountryList &inContainer) const override; - //! \copydoc IModelFilter::isValid - virtual bool isValid() const override; - private: QString m_isoCode; QString m_name; diff --git a/src/blackgui/models/listmodelbase.cpp b/src/blackgui/models/listmodelbase.cpp index b721edc45..e81de60e2 100644 --- a/src/blackgui/models/listmodelbase.cpp +++ b/src/blackgui/models/listmodelbase.cpp @@ -350,7 +350,8 @@ namespace BlackGui template bool CListModelBase::hasFilter() const { - return m_filter && m_filter->isValid() ? true : false; + const bool f = m_filter && m_filter->isValid(); + return f; } template diff --git a/src/blackgui/models/liveryfilter.cpp b/src/blackgui/models/liveryfilter.cpp index 2ff50f77f..c0358f294 100644 --- a/src/blackgui/models/liveryfilter.cpp +++ b/src/blackgui/models/liveryfilter.cpp @@ -23,7 +23,9 @@ namespace BlackGui m_airlineIcaoDesignator(airlineDesignator.trimmed().toUpper()), m_fuselageColor(fuselageColor), m_tailColor(tailColor), m_maxColorDistance(maxColorDistance), m_colorLiveries(colorLiveries), m_airlineLiveries(airlineLiveries) - { } + { + this->m_valid = valid(); + } CLiveryList CLiveryFilter::filter(const CLiveryList &inContainer) const { @@ -63,7 +65,7 @@ namespace BlackGui return outContainer; } - bool CLiveryFilter::isValid() const + bool CLiveryFilter::valid() const { if (filterByLiveryType()) { return true; } if (m_fuselageColor.isValid() || m_tailColor.isValid()) { return true; } diff --git a/src/blackgui/models/liveryfilter.h b/src/blackgui/models/liveryfilter.h index 943d60b48..de750d09b 100644 --- a/src/blackgui/models/liveryfilter.h +++ b/src/blackgui/models/liveryfilter.h @@ -39,9 +39,6 @@ namespace BlackGui //! \copydoc IModelFilter::filter virtual BlackMisc::Aviation::CLiveryList filter(const BlackMisc::Aviation::CLiveryList &inContainer) const override; - //! \copydoc IModelFilter::isValid - virtual bool isValid() const override; - private: QString m_combinedCode; QString m_description; @@ -54,6 +51,9 @@ namespace BlackGui //! Filter by livery type such as color or airline liveries bool filterByLiveryType() const; + + //! Valid filter? + bool valid() const; }; } // namespace diff --git a/src/blackgui/models/modelfilter.h b/src/blackgui/models/modelfilter.h index 67456765e..8a90bc7d3 100644 --- a/src/blackgui/models/modelfilter.h +++ b/src/blackgui/models/modelfilter.h @@ -34,7 +34,7 @@ namespace BlackGui virtual ContainerType filter(const ContainerType &container) const = 0; //! Anything to do? - virtual bool isValid() const = 0; + bool isValid() const { return this->m_valid; } //! Enabled? virtual bool isEnabled() const { return m_enabled && isValid(); } @@ -49,6 +49,8 @@ namespace BlackGui //! Remove the * wildcards QString stripWildcard(const QString &value) const; + bool m_valid = false; //!< is filter valid + private: bool m_enabled = true; }; diff --git a/src/blackgui/views/viewbase.cpp b/src/blackgui/views/viewbase.cpp index 2e513beee..bcecf97a1 100644 --- a/src/blackgui/views/viewbase.cpp +++ b/src/blackgui/views/viewbase.cpp @@ -1094,7 +1094,14 @@ namespace BlackGui Q_ASSERT_X(provider, Q_FUNC_INFO, "Filter widget does not provide interface"); if (!provider) { return false; } std::unique_ptr> f(provider->createModelFilter()); - this->takeFilterOwnership(f); + if (f->isValid()) + { + this->takeFilterOwnership(f); + } + else + { + this->removeFilter(); + } } } else