From 9f646f215cde39d01fde39630ce49c1c91fde238 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 12 Jan 2016 01:16:44 +0100 Subject: [PATCH] refs #571, allow to select distributor by key or alias * removed redundant getId function * functions for completer --- .../dbdistributorselectorcomponent.cpp | 27 ++++++++++-------- .../dbdistributorselectorcomponent.h | 4 +-- src/blackmisc/simulation/distributor.cpp | 10 +++---- src/blackmisc/simulation/distributor.h | 7 ++--- src/blackmisc/simulation/distributorlist.cpp | 28 ++++++++++++++++--- src/blackmisc/simulation/distributorlist.h | 5 +++- 6 files changed, 53 insertions(+), 28 deletions(-) diff --git a/src/blackgui/components/dbdistributorselectorcomponent.cpp b/src/blackgui/components/dbdistributorselectorcomponent.cpp index 4f9d5a3b1..da041a2e4 100644 --- a/src/blackgui/components/dbdistributorselectorcomponent.cpp +++ b/src/blackgui/components/dbdistributorselectorcomponent.cpp @@ -54,27 +54,29 @@ namespace BlackGui void CDbDistributorSelectorComponent::setDistributor(const CDistributor &distributor) { - this->ui->le_Distributor->setText(distributor.getId()); - ui->lbl_Description->setText(distributor.getDescription()); + QString key(distributor.getDbKey()); + if (key.isEmpty()) { return; } if (distributor != m_currentDistributor) { + this->ui->le_Distributor->setText(key); m_currentDistributor = distributor; emit changedDistributor(distributor); } } - void CDbDistributorSelectorComponent::setDistributor(const QString &distributorKey) + void CDbDistributorSelectorComponent::setDistributor(const QString &distributorKeyOrAlias) { - QString key(distributorKey.toUpper().trimmed()); - CDistributor d(getDistributors().findByKey(key)); - ui->lbl_Description->setText(""); + QString keyOrAlias(distributorKeyOrAlias.toUpper().trimmed()); + if (this->m_currentDistributor.matchesKeyOrAlias(keyOrAlias)) { return; } + CDistributor d(getDistributors().findByKeyOrAlias(keyOrAlias)); if (d.hasCompleteData()) { this->setDistributor(d); } else { - this->ui->le_Distributor->setText(key); + this->ui->lbl_Description->setText(""); + this->ui->le_Distributor->setText(keyOrAlias); } } @@ -153,7 +155,9 @@ namespace BlackGui { if (count > 0) { - QCompleter *c = new QCompleter(this->getDistributors().toDbKeyList(), this); + QStringList keysAndAliases(this->getDistributors().getDbKeysAndAliases()); + keysAndAliases.sort(Qt::CaseInsensitive); + QCompleter *c = new QCompleter(keysAndAliases, this); c->setCaseSensitivity(Qt::CaseInsensitive); c->setCompletionMode(QCompleter::PopupCompletion); c->setMaxVisibleItems(10); @@ -175,13 +179,14 @@ namespace BlackGui { if (!hasProvider()) { return; } QString key(this->ui->le_Distributor->text().trimmed().toUpper()); - CDistributor d(this->getDistributors().findByKey(key)); + if (key.isEmpty()) { return; } + CDistributor d(this->getDistributors().findByKeyOrAlias(key)); this->setDistributor(d); } - void CDbDistributorSelectorComponent::ps_completerActivated(const QString &distributorKey) + void CDbDistributorSelectorComponent::ps_completerActivated(const QString &distributorKeyOrAlias) { - this->setDistributor(distributorKey); + this->setDistributor(distributorKeyOrAlias); } } // ns diff --git a/src/blackgui/components/dbdistributorselectorcomponent.h b/src/blackgui/components/dbdistributorselectorcomponent.h index 017f2bd5c..0569e9dcc 100644 --- a/src/blackgui/components/dbdistributorselectorcomponent.h +++ b/src/blackgui/components/dbdistributorselectorcomponent.h @@ -50,7 +50,7 @@ namespace BlackGui void setDistributor(const BlackMisc::Simulation::CDistributor &distributor); //! Current Distributor - void setDistributor(const QString &distributorKey); + void setDistributor(const QString &distributorKeyOrAlias); //! Distributor BlackMisc::Simulation::CDistributor getDistributor() const; @@ -92,7 +92,7 @@ namespace BlackGui void ps_dataChanged(); //! Data have been changed - void ps_completerActivated(const QString &distributorKey); + void ps_completerActivated(const QString &distributorKeyOrAlias); private: QScopedPointer ui; diff --git a/src/blackmisc/simulation/distributor.cpp b/src/blackmisc/simulation/distributor.cpp index fe53c2da4..3eaf517ff 100644 --- a/src/blackmisc/simulation/distributor.cpp +++ b/src/blackmisc/simulation/distributor.cpp @@ -16,9 +16,9 @@ namespace BlackMisc { CDistributor::CDistributor() { } - CDistributor::CDistributor(const QString &id) + CDistributor::CDistributor(const QString &key) { - this->setDbKey(id); + this->setDbKey(key); } CDistributor::CDistributor(const QString &id, const QString &description, const QString &alias1, const QString &alias2) : @@ -27,11 +27,11 @@ namespace BlackMisc this->setDbKey(id); } - bool CDistributor::matchesIdOrAlias(const QString &idOrAlias) const + bool CDistributor::matchesKeyOrAlias(const QString &keyOrAlias) const { - QString s(idOrAlias.trimmed().toUpper()); + QString s(keyOrAlias.trimmed().toUpper()); if (s.isEmpty()) { return false; } - return (getId() == s || getAlias1() == s || getAlias2() == s); + return (getDbKey() == s || getAlias1() == s || getAlias2() == s); } CVariant CDistributor::propertyByIndex(const CPropertyIndex &index) const diff --git a/src/blackmisc/simulation/distributor.h b/src/blackmisc/simulation/distributor.h index b5da55844..e93033ec6 100644 --- a/src/blackmisc/simulation/distributor.h +++ b/src/blackmisc/simulation/distributor.h @@ -40,14 +40,11 @@ namespace BlackMisc CDistributor(); //! Constructor - CDistributor(const QString &id); + CDistributor(const QString &key); //! Constructor CDistributor(const QString &id, const QString &description, const QString &alias1, const QString &alias2); - //! Id - const QString &getId() const { return this->getDbKey(); } - //! Get description const QString &getDescription() const { return this->m_description;} @@ -76,7 +73,7 @@ namespace BlackMisc bool hasAlias2() const { return !this->m_alias2.isEmpty(); } //! Matches id or alias - bool matchesIdOrAlias(const QString &idOrAlias) const; + bool matchesKeyOrAlias(const QString &keyOrAlias) const; //! \copydoc CValueObject::propertyByIndex CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; diff --git a/src/blackmisc/simulation/distributorlist.cpp b/src/blackmisc/simulation/distributorlist.cpp index f6b7d3c84..1be3a59f5 100644 --- a/src/blackmisc/simulation/distributorlist.cpp +++ b/src/blackmisc/simulation/distributorlist.cpp @@ -20,12 +20,12 @@ namespace BlackMisc CSequence(other) { } - CDistributor CDistributorList::findByIdOrAlias(const QString &idOrAlias) + CDistributor CDistributorList::findByKeyOrAlias(const QString &keyOrAlias) { - if (idOrAlias.isEmpty()) { return CDistributor(); } + if (keyOrAlias.isEmpty()) { return CDistributor(); } for (const CDistributor &distributor : (*this)) { - if (distributor.matchesIdOrAlias(idOrAlias)) { return distributor; } + if (distributor.matchesKeyOrAlias(keyOrAlias)) { return distributor; } } return CDistributor(); } @@ -39,10 +39,30 @@ namespace BlackMisc if (d.hasCompleteData()) { return d; } // more lenient search - return this->findByIdOrAlias(k); + return this->findByKeyOrAlias(k); } return CDistributor(); } + QStringList CDistributorList::getDbKeysAndAliases() const + { + if (this->isEmpty()) { return QStringList(); } + QStringList sl; + for (const CDistributor &d : *this) + { + if (!d.hasValidDbKey()) { continue; } + sl.append(d.getDbKey()); + if (d.hasAlias1()) + { + sl.append(d.getAlias1()); + } + if (d.hasAlias2()) + { + sl.append(d.getAlias2()); + } + } + return sl; + } + } // namespace } // namespace diff --git a/src/blackmisc/simulation/distributorlist.h b/src/blackmisc/simulation/distributorlist.h index 8e4453ed2..8801a089e 100644 --- a/src/blackmisc/simulation/distributorlist.h +++ b/src/blackmisc/simulation/distributorlist.h @@ -41,10 +41,13 @@ namespace BlackMisc CDistributorList(const CSequence &other); //! Find by id or alias - CDistributor findByIdOrAlias(const QString &name); + CDistributor findByKeyOrAlias(const QString &keyOrAlias); //! Best match by given pattern CDistributor smartDistributorSelector(const CDistributor &distributorPattern); + + //! All DB keys and aliases + QStringList getDbKeysAndAliases() const; }; } //namespace } // namespace