diff --git a/src/blackgui/models/distributorfilter.cpp b/src/blackgui/models/distributorfilter.cpp index 4ca7269b2..3ed7abfde 100644 --- a/src/blackgui/models/distributorfilter.cpp +++ b/src/blackgui/models/distributorfilter.cpp @@ -24,14 +24,21 @@ namespace BlackGui CDistributorList CDistributorFilter::filter(const CDistributorList &inDistributors) const { - if (!this->isValid()) { return inDistributors; } + if (!this->isValid()) { return inDistributors; } + if (this->ignoreSimulator()) { return inDistributors; } + CDistributorList outContainer; for (const CDistributor &distributor : inDistributors) { - if (!distributor.getSimulator().matchesAny(m_simulator)) { continue; } + if (!distributor.getSimulator().matchesAnyOrNone(m_simulator)) { continue; } outContainer.push_back(distributor); } return outContainer; } + + bool CDistributorFilter::ignoreSimulator() const + { + return (m_simulator.isNoSimulator() || m_simulator.isAllSimulators()); + } } // namespace } // namespace diff --git a/src/blackgui/models/distributorfilter.h b/src/blackgui/models/distributorfilter.h index 3496f9227..c551ec18e 100644 --- a/src/blackgui/models/distributorfilter.h +++ b/src/blackgui/models/distributorfilter.h @@ -33,6 +33,9 @@ namespace BlackGui virtual BlackMisc::Simulation::CDistributorList filter(const BlackMisc::Simulation::CDistributorList &inDistributors) const override; private: + //! Ignore simulator filtering? + bool ignoreSimulator() const; + BlackMisc::Simulation::CSimulatorInfo m_simulator; }; } // namespace diff --git a/src/blackmisc/simulation/simulatorinfo.cpp b/src/blackmisc/simulation/simulatorinfo.cpp index a92120261..d038b2e5f 100644 --- a/src/blackmisc/simulation/simulatorinfo.cpp +++ b/src/blackmisc/simulation/simulatorinfo.cpp @@ -144,15 +144,21 @@ namespace BlackMisc return (m_simulator & otherInfo.m_simulator) > 0; } + bool CSimulatorInfo::matchesAnyOrNone(const CSimulatorInfo &otherInfo) const + { + if (this->isNoSimulator()) { return true; } + return this->matchesAny(otherInfo); + } + int CSimulatorInfo::comparePropertyByIndex(const CPropertyIndex &index, const CSimulatorInfo &compareValue) const { - Q_UNUSED(index); + Q_UNUSED(index) return Compare::compare(m_simulator, compareValue.m_simulator); } QString CSimulatorInfo::convertToQString(bool i18n) const { - Q_UNUSED(i18n); + Q_UNUSED(i18n) const Simulator s = getSimulator(); const QString str = (s.testFlag(FSX) ? QStringLiteral("FSX ") : QString()) % diff --git a/src/blackmisc/simulation/simulatorinfo.h b/src/blackmisc/simulation/simulatorinfo.h index 195ca2bf7..1a97f8f02 100644 --- a/src/blackmisc/simulation/simulatorinfo.h +++ b/src/blackmisc/simulation/simulatorinfo.h @@ -132,6 +132,10 @@ namespace BlackMisc //! Matches any simulator bool matchesAny(const CSimulatorInfo &otherInfo) const; + //! Matches any simulator or None (NULL) + //! \remark for cases where no specified sim. also matches + bool matchesAnyOrNone(const CSimulatorInfo &otherInfo) const; + //! Simulator Simulator getSimulator() const { return static_cast(m_simulator); }