From 6c81a0259a6865d24d28787a599171fba25baecd Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 15 Jan 2016 23:10:39 +0100 Subject: [PATCH] refs #575, using livery completer * embedded in form * rectified readOnly / only for selection * added uper case validator where missing * selecting airline triggers loading of default livery --- .../components/dbairlineicaoselectorbase.cpp | 2 -- .../dbairlineicaoselectorcomponent.cpp | 3 +- .../dbairlineicaoselectorcomponent.h | 2 +- .../components/dbcountryselectorcomponent.cpp | 4 +-- .../dbdistributorselectorcomponent.cpp | 4 +-- .../dbdistributorselectorcomponent.h | 8 ++--- .../components/dbmappingcomponent.cpp | 6 ++-- src/blackgui/editors/aircrafticaoform.cpp | 16 +++++---- src/blackgui/editors/aircrafticaoform.h | 6 ++-- src/blackgui/editors/airlineicaoform.cpp | 33 ++++++++++++----- src/blackgui/editors/airlineicaoform.h | 7 ++++ src/blackgui/editors/distributorform.cpp | 11 +++--- src/blackgui/editors/distributorform.h | 8 ++--- src/blackgui/editors/form.h | 4 +++ src/blackgui/editors/liveryform.cpp | 35 +++++++++++++++---- src/blackgui/editors/liveryform.h | 16 +++++---- src/blackgui/editors/liveryform.ui | 19 ++++++---- src/blackgui/editors/modelmappingform.cpp | 5 +++ src/blackgui/editors/modelmappingform.h | 3 ++ 19 files changed, 129 insertions(+), 63 deletions(-) diff --git a/src/blackgui/components/dbairlineicaoselectorbase.cpp b/src/blackgui/components/dbairlineicaoselectorbase.cpp index 99d07b994..974760577 100644 --- a/src/blackgui/components/dbairlineicaoselectorbase.cpp +++ b/src/blackgui/components/dbairlineicaoselectorbase.cpp @@ -125,12 +125,10 @@ namespace BlackGui Q_ASSERT_X(c, Q_FUNC_INFO, "missing converter"); this->connect(c, static_cast(&QCompleter::activated), this, &CDbAirlineIcaoSelectorBase::ps_completerActivated); m_completer.reset(c); // deletes any old completer - this->setReadOnly(false); } else { this->m_completer.reset(nullptr); - this->setReadOnly(true); } } } diff --git a/src/blackgui/components/dbairlineicaoselectorcomponent.cpp b/src/blackgui/components/dbairlineicaoselectorcomponent.cpp index be973b499..4a63f8e30 100644 --- a/src/blackgui/components/dbairlineicaoselectorcomponent.cpp +++ b/src/blackgui/components/dbairlineicaoselectorcomponent.cpp @@ -10,10 +10,10 @@ #include "dbairlineicaoselectorcomponent.h" #include "ui_dbairlineicaoselectorcomponent.h" #include "blackgui/guiutility.h" +#include "blackgui/uppercasevalidator.h" #include "blackmisc/datastoreutility.h" #include - using namespace BlackGui; using namespace BlackMisc; using namespace BlackMisc::Aviation; @@ -27,6 +27,7 @@ namespace BlackGui ui(new Ui::CDbAirlineIcaoSelectorComponent) { ui->setupUi(this); + ui->le_Airline->setValidator(new CUpperCaseValidator(this)); connect(ui->le_Airline, &QLineEdit::returnPressed, this, &CDbAirlineIcaoSelectorComponent::ps_dataChanged); } diff --git a/src/blackgui/components/dbairlineicaoselectorcomponent.h b/src/blackgui/components/dbairlineicaoselectorcomponent.h index 076ef2f84..6c0676a22 100644 --- a/src/blackgui/components/dbairlineicaoselectorcomponent.h +++ b/src/blackgui/components/dbairlineicaoselectorcomponent.h @@ -44,7 +44,7 @@ namespace BlackGui //! \copydoc CDbAirlineIcaoSelectorBase::setAirlineIcao virtual void setAirlineIcao(const BlackMisc::Aviation::CAirlineIcaoCode &icao) override; - //! Display distributor description + //! Display ICAO description void withIcaoDescription(bool description); //! \copydoc CDbAirlineIcaoSelectorBase::clear diff --git a/src/blackgui/components/dbcountryselectorcomponent.cpp b/src/blackgui/components/dbcountryselectorcomponent.cpp index ed8b3abdc..c7c5671db 100644 --- a/src/blackgui/components/dbcountryselectorcomponent.cpp +++ b/src/blackgui/components/dbcountryselectorcomponent.cpp @@ -95,7 +95,9 @@ namespace BlackGui { this->ui->le_CountryIso->setReadOnly(readOnly); this->ui->le_CountryName->setReadOnly(readOnly); + this->ui->le_CountryName->setEnabled((!readOnly)); this->ui->lbl_CountryIcon->setVisible(!readOnly); + this->setEnabled(!readOnly); } bool CDbCountrySelectorComponent::isSet() const @@ -165,12 +167,10 @@ namespace BlackGui this->ui->le_CountryName->setCompleter(c); m_completerCountryNames.reset(c); // deletes any old completer - this->setReadOnly(false); } else { this->m_completerCountryNames.reset(nullptr); - this->setReadOnly(true); } } } diff --git a/src/blackgui/components/dbdistributorselectorcomponent.cpp b/src/blackgui/components/dbdistributorselectorcomponent.cpp index da041a2e4..fea932f5c 100644 --- a/src/blackgui/components/dbdistributorselectorcomponent.cpp +++ b/src/blackgui/components/dbdistributorselectorcomponent.cpp @@ -164,12 +164,12 @@ namespace BlackGui this->connect(c, static_cast(&QCompleter::activated), this, &CDbDistributorSelectorComponent::ps_completerActivated); this->ui->le_Distributor->setCompleter(c); - m_completerDistributorNames.reset(c); // deletes any old completer + m_completerDistributors.reset(c); // deletes any old completer this->setReadOnly(false); } else { - this->m_completerDistributorNames.reset(nullptr); + this->m_completerDistributors.reset(nullptr); this->setReadOnly(true); } } diff --git a/src/blackgui/components/dbdistributorselectorcomponent.h b/src/blackgui/components/dbdistributorselectorcomponent.h index 0569e9dcc..c206e9341 100644 --- a/src/blackgui/components/dbdistributorselectorcomponent.h +++ b/src/blackgui/components/dbdistributorselectorcomponent.h @@ -96,10 +96,10 @@ namespace BlackGui private: QScopedPointer ui; - QScopedPointer m_completerDistributorNames; - QMetaObject::Connection m_signalConnection; + QScopedPointer m_completerDistributors; + QMetaObject::Connection m_signalConnection; BlackMisc::Simulation::CDistributor m_currentDistributor; }; - } -} + } // ns +} // ns #endif // guard diff --git a/src/blackgui/components/dbmappingcomponent.cpp b/src/blackgui/components/dbmappingcomponent.cpp index f86cea884..ced58d77f 100644 --- a/src/blackgui/components/dbmappingcomponent.cpp +++ b/src/blackgui/components/dbmappingcomponent.cpp @@ -62,9 +62,9 @@ namespace BlackGui ui->tvp_OwnAircraftModels->updateContainerMaybeAsync(this->m_cachedOwnModels.get()); // how to display forms - ui->editor_AircraftIcao->setMappingMode(true); - ui->editor_Distributor->setMappingMode(true); - ui->editor_Livery->setMappingMode(true); + ui->editor_AircraftIcao->setSelectOnly(); + ui->editor_Distributor->setSelectOnly(); + ui->editor_Livery->setSelectOnly(); this->ui->tw_ModelsToBeMapped->setTabIcon(TabStash, CIcons::appDbStash16()); this->ui->tw_ModelsToBeMapped->setTabIcon(TabOwnModels, CIcons::appModels16()); diff --git a/src/blackgui/editors/aircrafticaoform.cpp b/src/blackgui/editors/aircrafticaoform.cpp index e400ac17c..7b9e3f863 100644 --- a/src/blackgui/editors/aircrafticaoform.cpp +++ b/src/blackgui/editors/aircrafticaoform.cpp @@ -127,6 +127,16 @@ namespace BlackGui this->ui->cb_Legacy->setCheckable(!readOnly); this->ui->cb_Military->setCheckable(!readOnly); this->ui->cb_RealWorld->setCheckable(!readOnly); + + this->ui->cb_Wtc->setEnabled(!readOnly); + this->ui->cb_Rank->setEnabled(!readOnly); + this->ui->combined_TypeSelector->setReadOnly(readOnly); + } + + void CAircraftIcaoForm::setSelectOnly() + { + this->setReadOnly(true); + this->ui->aircraft_Selector->setReadOnly(false); } void CAircraftIcaoForm::clear() @@ -134,12 +144,6 @@ namespace BlackGui setValue(CAircraftIcaoCode()); } - void CAircraftIcaoForm::setMappingMode(bool mappingMode) - { - this->setReadOnly(mappingMode); - this->ui->aircraft_Selector->setReadOnly(!mappingMode); - } - void CAircraftIcaoForm::setProvider(Network::IWebDataServicesProvider *webDataReaderProvider) { CWebDataServicesAware::setProvider(webDataReaderProvider); diff --git a/src/blackgui/editors/aircrafticaoform.h b/src/blackgui/editors/aircrafticaoform.h index 3610b5694..12dd3e5db 100644 --- a/src/blackgui/editors/aircrafticaoform.h +++ b/src/blackgui/editors/aircrafticaoform.h @@ -55,12 +55,12 @@ namespace BlackGui //! \copydoc CForm::setReadOnly virtual void setReadOnly(bool readOnly) override; + //! \copydoc CForm::setSelectOnly + virtual void setSelectOnly() override; + //! Clear void clear(); - //! Mapping mode - void setMappingMode(bool mappingMode); - //! \copydoc CWebDataServicesAware::setProvider virtual void setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider) override; diff --git a/src/blackgui/editors/airlineicaoform.cpp b/src/blackgui/editors/airlineicaoform.cpp index 8a457976e..8de06da34 100644 --- a/src/blackgui/editors/airlineicaoform.cpp +++ b/src/blackgui/editors/airlineicaoform.cpp @@ -45,15 +45,23 @@ namespace BlackGui void CAirlineIcaoForm::setValue(const BlackMisc::Aviation::CAirlineIcaoCode &icao) { - this->m_originalCode = icao; - this->ui->selector_AirlineDesignator->setAirlineIcao(icao); - this->ui->selector_AirlineName->setAirlineIcao(icao); - this->ui->le_Id->setText(icao.getDbKeyAsString()); - this->ui->le_TelephonyDesignator->setText(icao.getTelephonyDesignator()); - this->ui->le_Updated->setText(icao.getFormattedUtcTimestampYmdhms()); - this->ui->cb_Va->setChecked(icao.isVirtualAirline()); - this->ui->country_Selector->setCountry(icao.getCountry()); - this->ui->lbl_AirlineIcon->setPixmap(icao.toPixmap()); + if (this->m_originalCode != icao) + { + this->m_originalCode = icao; + this->ui->selector_AirlineDesignator->setAirlineIcao(icao); + this->ui->selector_AirlineName->setAirlineIcao(icao); + this->ui->le_Id->setText(icao.getDbKeyAsString()); + this->ui->le_TelephonyDesignator->setText(icao.getTelephonyDesignator()); + this->ui->le_Updated->setText(icao.getFormattedUtcTimestampYmdhms()); + this->ui->cb_Va->setChecked(icao.isVirtualAirline()); + this->ui->country_Selector->setCountry(icao.getCountry()); + this->ui->lbl_AirlineIcon->setPixmap(icao.toPixmap()); + + if (this->m_originalCode.hasCompleteData()) + { + emit airlineChanged(this->m_originalCode); + } + } } CAirlineIcaoCode CAirlineIcaoForm::getValue() const @@ -99,6 +107,13 @@ namespace BlackGui this->ui->cb_Va->setEnabled(!readOnly); } + void CAirlineIcaoForm::setSelectOnly() + { + this->setReadOnly(true); + this->ui->selector_AirlineDesignator->setReadOnly(false); + this->ui->selector_AirlineName->setReadOnly(false); + } + void CAirlineIcaoForm::clear() { setValue(CAirlineIcaoCode()); diff --git a/src/blackgui/editors/airlineicaoform.h b/src/blackgui/editors/airlineicaoform.h index d1c855388..22662e8c9 100644 --- a/src/blackgui/editors/airlineicaoform.h +++ b/src/blackgui/editors/airlineicaoform.h @@ -58,12 +58,19 @@ namespace BlackGui //! \copydoc CForm::setReadOnly virtual void setReadOnly(bool readOnly) override; + //! \copydoc CForm::setSelectOnly + virtual void setSelectOnly() override; + //! Clear void clear(); //! \copydoc CWebDataReaderAware::setProvider virtual void setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider) override; + signals: + //! Airline has been changed + void airlineChanged(const BlackMisc::Aviation::CAirlineIcaoCode &airlineIcao); + private slots: //! Variant has been dropped void ps_droppedCode(const BlackMisc::CVariant &variantDropped); diff --git a/src/blackgui/editors/distributorform.cpp b/src/blackgui/editors/distributorform.cpp index 954017464..1f329dd5c 100644 --- a/src/blackgui/editors/distributorform.cpp +++ b/src/blackgui/editors/distributorform.cpp @@ -89,17 +89,18 @@ namespace BlackGui this->ui->distributor_Selector->setReadOnly(readOnly); } + void CDistributorForm::setSelectOnly() + { + this->setReadOnly(true); + this->ui->distributor_Selector->setReadOnly(false); + } + void CDistributorForm::clear() { setValue(CDistributor()); this->ui->distributor_Selector->setReadOnly(false); } - void CDistributorForm::setMappingMode(bool mappingMode) - { - this->setReadOnly(mappingMode); - } - void CDistributorForm::setProvider(Network::IWebDataServicesProvider *webDataReaderProvider) { CWebDataServicesAware::setProvider(webDataReaderProvider); diff --git a/src/blackgui/editors/distributorform.h b/src/blackgui/editors/distributorform.h index 37dca9192..1c9495a76 100644 --- a/src/blackgui/editors/distributorform.h +++ b/src/blackgui/editors/distributorform.h @@ -53,14 +53,14 @@ namespace BlackGui bool isDropAllowed() const; //! \copydoc CForm::setReadOnly - void setReadOnly(bool readOnly); + virtual void setReadOnly(bool readOnly) override; + + //! \copydoc CForm::setSelectOnly + virtual void setSelectOnly() override; //! Clear void clear(); - //! Mapping mode - void setMappingMode(bool mappingMode); - //! \copydoc CWebDataReaderAware::setProvider virtual void setProvider(BlackMisc::Network::IWebDataServicesProvider *webDataReaderProvider); diff --git a/src/blackgui/editors/form.h b/src/blackgui/editors/form.h index 9c5645e5c..c17d0907f 100644 --- a/src/blackgui/editors/form.h +++ b/src/blackgui/editors/form.h @@ -35,6 +35,10 @@ namespace BlackGui //! Set editable virtual void setReadOnly(bool readOnly) = 0; + //! Read only, but entity can be selected (normally used in mapping). + //! Use setReadOnly to reset this very state + virtual void setSelectOnly() = 0; + //! Is read only? bool isReadOnly() const { return m_readOnly; } diff --git a/src/blackgui/editors/liveryform.cpp b/src/blackgui/editors/liveryform.cpp index 6a2ad1156..b7cf2a8f3 100644 --- a/src/blackgui/editors/liveryform.cpp +++ b/src/blackgui/editors/liveryform.cpp @@ -13,6 +13,7 @@ using namespace BlackMisc; using namespace BlackMisc::Aviation; +using namespace BlackGui::Components; namespace BlackGui { @@ -26,11 +27,18 @@ namespace BlackGui this->ui->le_Id->setReadOnly(true); this->ui->le_Updated->setReadOnly(true); this->ui->lai_Id->set(CIcons::appLiveries16(), "Id:"); + this->ui->livery_Selector->withLiveryDescription(false); + + // selector + connect(this->ui->livery_Selector, &CDbLiverySelectorComponent::changedLivery, this, &CLiveryForm::setValue); // drag and drop connect(this->ui->drop_DropData, &CDropSite::droppedValueObject, this, &CLiveryForm::ps_droppedLivery); this->ui->drop_DropData->setInfoText(""); this->ui->drop_DropData->setAcceptedMetaTypeIds({ qMetaTypeId(), qMetaTypeId()}); + + // embedded form + connect(this->ui->editor_AirlineIcao, &CAirlineIcaoForm::airlineChanged, this, &CLiveryForm::ps_airlineChanged); } CLiveryForm::~CLiveryForm() { } @@ -39,23 +47,22 @@ namespace BlackGui { CWebDataServicesAware::setProvider(provider); this->ui->editor_AirlineIcao->setProvider(provider); + this->ui->livery_Selector->setProvider(provider); } CLivery CLiveryForm::getValue() const { - CLivery livery(this->m_originalLivery); + CLivery livery(this->ui->livery_Selector->getLivery()); CAirlineIcaoCode airline(this->ui->editor_AirlineIcao->getValue()); livery.setAirlineIcaoCode(airline); - livery.setCombinedCode(this->ui->le_Code->text()); livery.setDescription(this->ui->le_Description->text()); return livery; } void CLiveryForm::setValue(const CLivery &livery) { - this->m_originalLivery = livery; + this->ui->livery_Selector->setLivery(livery); this->ui->le_Id->setText(livery.getDbKeyAsString()); - this->ui->le_Code->setText(livery.getCombinedCode()); this->ui->le_Description->setText(livery.getDescription()); this->ui->le_Updated->setText(livery.getFormattedUtcTimestampYmdhms()); this->ui->color_Fuselage->setColor(livery.getColorFuselage()); @@ -94,15 +101,18 @@ namespace BlackGui void CLiveryForm::setReadOnly(bool readOnly) { this->m_readOnly = readOnly; - this->ui->le_Code->setReadOnly(readOnly); + this->ui->livery_Selector->setReadOnly(readOnly); this->ui->le_Description->setReadOnly(readOnly); this->ui->color_Fuselage->setReadOnly(readOnly); this->ui->color_Tail->setReadOnly(readOnly); + this->ui->editor_AirlineIcao->setReadOnly(readOnly); } - void CLiveryForm::setMappingMode(bool mappingMode) + void CLiveryForm::setSelectOnly() { - this->setReadOnly(mappingMode); + this->setReadOnly(true); + this->ui->livery_Selector->setReadOnly(false); + this->ui->editor_AirlineIcao->setSelectOnly(); } void CLiveryForm::clear() @@ -127,5 +137,16 @@ namespace BlackGui this->setValue(livery); } + void CLiveryForm::ps_airlineChanged(const CAirlineIcaoCode &code) + { + if (!code.hasCompleteData()) { return; } + if (!code.hasValidDbKey()) { return; } + + CLivery stdLivery(this->getLiveries().findStdLiveryByAirlineIcaoDesignator(code)); + if (stdLivery.hasValidDbKey()) + { + this->setValue(stdLivery); + } + } } // ns } // ns diff --git a/src/blackgui/editors/liveryform.h b/src/blackgui/editors/liveryform.h index af12a84fa..3a3185eaf 100644 --- a/src/blackgui/editors/liveryform.h +++ b/src/blackgui/editors/liveryform.h @@ -45,9 +45,6 @@ namespace BlackGui //! Value BlackMisc::Aviation::CLivery getValue() const; - //! Value - void setValue(const BlackMisc::Aviation::CLivery &livery); - //! Validate, empty list means OK BlackMisc::CStatusMessageList validate(bool withNestedForms) const; @@ -60,21 +57,26 @@ namespace BlackGui //! \copydoc CForm::setReadOnly virtual void setReadOnly(bool readOnly) override; - //! Mapping mode - void setMappingMode(bool mappingMode); + //! \copydoc CForm::setSelectOnly + virtual void setSelectOnly() override; //! Clear data void clear(); + public slots: + //! Value + void setValue(const BlackMisc::Aviation::CLivery &livery); + private slots: //! Livery dropped void ps_droppedLivery(const BlackMisc::CVariant &variantDropped); + //! Airline of embedded form has changed + void ps_airlineChanged(const BlackMisc::Aviation::CAirlineIcaoCode &code); + private: QScopedPointer ui; - BlackMisc::Aviation::CLivery m_originalLivery; //!< object whose values will be overridden }; - } // ns } // ns diff --git a/src/blackgui/editors/liveryform.ui b/src/blackgui/editors/liveryform.ui index 9ad467027..bc8ca3fb9 100644 --- a/src/blackgui/editors/liveryform.ui +++ b/src/blackgui/editors/liveryform.ui @@ -61,9 +61,12 @@ 0 - - - Livery code + + + QFrame::StyledPanel + + + QFrame::Raised @@ -126,9 +129,6 @@ Code: - - le_Code - @@ -246,10 +246,15 @@
blackgui/editors/airlineicaoform.h
1 + + BlackGui::Components::CDbLiverySelectorComponent + QFrame +
blackgui/components/dbliveryselectorcomponent.h
+ 1 +
le_Id - le_Code le_Description le_Updated diff --git a/src/blackgui/editors/modelmappingform.cpp b/src/blackgui/editors/modelmappingform.cpp index eab37f9fa..ac3281450 100644 --- a/src/blackgui/editors/modelmappingform.cpp +++ b/src/blackgui/editors/modelmappingform.cpp @@ -56,6 +56,11 @@ namespace BlackGui this->ui->le_Name->setReadOnly(readOnly); } + void CModelMappingForm::setSelectOnly() + { + this->setReadOnly(true); + } + void CModelMappingForm::setValue(BlackMisc::Simulation::CAircraftModel &model) { ui->le_ModelKey->setText(model.getModelString()); diff --git a/src/blackgui/editors/modelmappingform.h b/src/blackgui/editors/modelmappingform.h index ed77d648c..366a0bc08 100644 --- a/src/blackgui/editors/modelmappingform.h +++ b/src/blackgui/editors/modelmappingform.h @@ -45,6 +45,9 @@ namespace BlackGui //! \copydoc CForm::setReadOnly virtual void setReadOnly(bool readOnly) override; + //! \copydoc CForm::setSelectOnly + virtual void setSelectOnly() override; + public slots: //! Set model void setValue(BlackMisc::Simulation::CAircraftModel &model);