From d9e550beefd032697149a2c22ce9162b14078a90 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 11 Apr 2016 19:34:23 +0200 Subject: [PATCH] refs #634, improved completers * mostly to avoid roundtrips (set->changed signal->set again...) * better sort for ICAO completer --- .../components/dbairlineicaoselectorbase.cpp | 11 +++++------ .../components/dbairlineicaoselectorbase.h | 2 +- .../dbairlineicaoselectorcomponent.cpp | 5 +++-- .../dbairlineicaoselectorcomponent.h | 2 +- .../dbairlinenameselectorcomponent.cpp | 5 +++-- .../dbairlinenameselectorcomponent.h | 2 +- .../aviation/aircrafticaocodelist.cpp | 19 ++++++++++++++++++- src/blackmisc/aviation/aircrafticaocodelist.h | 9 +++++++++ 8 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/blackgui/components/dbairlineicaoselectorbase.cpp b/src/blackgui/components/dbairlineicaoselectorbase.cpp index 4d7dc5245..89dc51ee1 100644 --- a/src/blackgui/components/dbairlineicaoselectorbase.cpp +++ b/src/blackgui/components/dbairlineicaoselectorbase.cpp @@ -37,13 +37,12 @@ namespace BlackGui CDbAirlineIcaoSelectorBase::~CDbAirlineIcaoSelectorBase() { } - void CDbAirlineIcaoSelectorBase::setAirlineIcao(const CAirlineIcaoCode &icao) + bool CDbAirlineIcaoSelectorBase::setAirlineIcao(const CAirlineIcaoCode &icao) { - if (icao != m_currentIcao) - { - m_currentIcao = icao; - emit changedAirlineIcao(icao); - } + if (icao == m_currentIcao) { return false; } + m_currentIcao = icao; + emit changedAirlineIcao(icao); + return true; } bool CDbAirlineIcaoSelectorBase::setAirlineIcao(int key) diff --git a/src/blackgui/components/dbairlineicaoselectorbase.h b/src/blackgui/components/dbairlineicaoselectorbase.h index 5f0f40976..c9bc9699e 100644 --- a/src/blackgui/components/dbairlineicaoselectorbase.h +++ b/src/blackgui/components/dbairlineicaoselectorbase.h @@ -38,7 +38,7 @@ namespace BlackGui virtual ~CDbAirlineIcaoSelectorBase(); //! Current airline ICAO - virtual void setAirlineIcao(const BlackMisc::Aviation::CAirlineIcaoCode &icao); + virtual bool setAirlineIcao(const BlackMisc::Aviation::CAirlineIcaoCode &icao); //! Current airline ICAO by key bool setAirlineIcao(int key); diff --git a/src/blackgui/components/dbairlineicaoselectorcomponent.cpp b/src/blackgui/components/dbairlineicaoselectorcomponent.cpp index 028bd896c..2b343efd8 100644 --- a/src/blackgui/components/dbairlineicaoselectorcomponent.cpp +++ b/src/blackgui/components/dbairlineicaoselectorcomponent.cpp @@ -44,12 +44,13 @@ namespace BlackGui this->ui->le_Airline->setReadOnly(readOnly); } - void CDbAirlineIcaoSelectorComponent::setAirlineIcao(const CAirlineIcaoCode &icao) + bool CDbAirlineIcaoSelectorComponent::setAirlineIcao(const CAirlineIcaoCode &icao) { - CDbAirlineIcaoSelectorBase::setAirlineIcao(icao); + if (!CDbAirlineIcaoSelectorBase::setAirlineIcao(icao)) { return false; } const QString icaoStr(icao.getVDesignator()); this->ui->le_Airline->setText(icaoStr); ui->lbl_Description->setText(icao.getName()); + return true; } void CDbAirlineIcaoSelectorComponent::withIcaoDescription(bool description) diff --git a/src/blackgui/components/dbairlineicaoselectorcomponent.h b/src/blackgui/components/dbairlineicaoselectorcomponent.h index bdee15d1f..073e21df6 100644 --- a/src/blackgui/components/dbairlineicaoselectorcomponent.h +++ b/src/blackgui/components/dbairlineicaoselectorcomponent.h @@ -41,7 +41,7 @@ namespace BlackGui //! \name Base class overrides //! @{ virtual void setReadOnly(bool readOnly) override; - virtual void setAirlineIcao(const BlackMisc::Aviation::CAirlineIcaoCode &icao) override; + virtual bool setAirlineIcao(const BlackMisc::Aviation::CAirlineIcaoCode &icao) override; virtual void clear() override; //! @} diff --git a/src/blackgui/components/dbairlinenameselectorcomponent.cpp b/src/blackgui/components/dbairlinenameselectorcomponent.cpp index b4cca55a9..781dad99d 100644 --- a/src/blackgui/components/dbairlinenameselectorcomponent.cpp +++ b/src/blackgui/components/dbairlinenameselectorcomponent.cpp @@ -35,11 +35,12 @@ namespace BlackGui // no inline destructor, read QScopedPointer Forward Declared Pointers } - void CDbAirlineNameSelectorComponent::setAirlineIcao(const CAirlineIcaoCode &icao) + bool CDbAirlineNameSelectorComponent::setAirlineIcao(const CAirlineIcaoCode &icao) { - CDbAirlineIcaoSelectorBase::setAirlineIcao(icao); + if (!CDbAirlineIcaoSelectorBase::setAirlineIcao(icao)) { return false; } QString name(icao.getName()); this->ui->le_AirlineName->setText(name); + return true; } void CDbAirlineNameSelectorComponent::clear() diff --git a/src/blackgui/components/dbairlinenameselectorcomponent.h b/src/blackgui/components/dbairlinenameselectorcomponent.h index 3ac1af53c..b5c3b18dd 100644 --- a/src/blackgui/components/dbairlinenameselectorcomponent.h +++ b/src/blackgui/components/dbairlinenameselectorcomponent.h @@ -40,7 +40,7 @@ namespace BlackGui //! \name Base class overrides //! @{ virtual void setReadOnly(bool readOnly) override; - virtual void setAirlineIcao(const BlackMisc::Aviation::CAirlineIcaoCode &icao) override; + virtual bool setAirlineIcao(const BlackMisc::Aviation::CAirlineIcaoCode &icao) override; virtual void clear() override; //! @} diff --git a/src/blackmisc/aviation/aircrafticaocodelist.cpp b/src/blackmisc/aviation/aircrafticaocodelist.cpp index 5ae029ae0..4f78d593d 100644 --- a/src/blackmisc/aviation/aircrafticaocodelist.cpp +++ b/src/blackmisc/aviation/aircrafticaocodelist.cpp @@ -13,7 +13,6 @@ namespace BlackMisc { namespace Aviation { - CAircraftIcaoCodeList::CAircraftIcaoCodeList(const CSequence &other) : CSequence(other) { } @@ -81,6 +80,24 @@ namespace BlackMisc }); } + CAircraftIcaoCodeList CAircraftIcaoCodeList::findWithIataCode(bool removeWhenSameAsDesignator) const + { + return this->findBy([&](const CAircraftIcaoCode & code) + { + if (!code.hasIataCode()) { return false; } + return !removeWhenSameAsDesignator || !code.isIataSameAsDesignator(); + }); + } + + CAircraftIcaoCodeList CAircraftIcaoCodeList::findWithFamily(bool removeWhenSameAsDesignator) const + { + return this->findBy([&](const CAircraftIcaoCode & code) + { + if (!code.hasFamily()) { return false; } + return !removeWhenSameAsDesignator || !code.isFamilySameAsDesignator(); + }); + } + CAircraftIcaoCode CAircraftIcaoCodeList::findFirstByDesignatorAndRank(const QString &designator) const { if (!CAircraftIcaoCode::isValidDesignator(designator)) { return CAircraftIcaoCode(); } diff --git a/src/blackmisc/aviation/aircrafticaocodelist.h b/src/blackmisc/aviation/aircrafticaocodelist.h index f7349c22b..6f5e43bed 100644 --- a/src/blackmisc/aviation/aircrafticaocodelist.h +++ b/src/blackmisc/aviation/aircrafticaocodelist.h @@ -59,6 +59,12 @@ namespace BlackMisc //! Find by model description CAircraftIcaoCodeList findByDescription(const QString &description) const; + //! Those with IATA code + CAircraftIcaoCodeList findWithIataCode(bool removeWhenSameAsDesignator) const; + + //! Those with family + CAircraftIcaoCodeList findWithFamily(bool removeWhenSameAsDesignator) const; + //! Find by designator, then best match by rank CAircraftIcaoCode findFirstByDesignatorAndRank(const QString &designator) const; @@ -68,6 +74,9 @@ namespace BlackMisc //! Sort by rank void sortByRank(); + //! Sort by designator first, then by rank + void sortByDesignatorAndRank(); + //! For selection completion QStringList toCompleterStrings(bool withIataCodes = false, bool withFamily = false, bool sort = true) const;