refs #634, improved completers

* mostly to avoid roundtrips (set->changed signal->set again...)
* better sort for ICAO completer
This commit is contained in:
Klaus Basan
2016-04-11 19:34:23 +02:00
parent 95044e7854
commit d9e550beef
8 changed files with 41 additions and 14 deletions

View File

@@ -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)

View File

@@ -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);

View File

@@ -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)

View File

@@ -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;
//! @}

View File

@@ -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()

View File

@@ -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;
//! @}

View File

@@ -13,7 +13,6 @@ namespace BlackMisc
{
namespace Aviation
{
CAircraftIcaoCodeList::CAircraftIcaoCodeList(const CSequence<CAircraftIcaoCode> &other) :
CSequence<CAircraftIcaoCode>(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(); }

View File

@@ -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;