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
This commit is contained in:
Klaus Basan
2016-01-15 23:10:39 +01:00
parent 8d57566a24
commit 6c81a0259a
19 changed files with 129 additions and 63 deletions

View File

@@ -125,12 +125,10 @@ namespace BlackGui
Q_ASSERT_X(c, Q_FUNC_INFO, "missing converter");
this->connect(c, static_cast<void (QCompleter::*)(const QString &)>(&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);
}
}
}

View File

@@ -10,10 +10,10 @@
#include "dbairlineicaoselectorcomponent.h"
#include "ui_dbairlineicaoselectorcomponent.h"
#include "blackgui/guiutility.h"
#include "blackgui/uppercasevalidator.h"
#include "blackmisc/datastoreutility.h"
#include <QMimeData>
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);
}

View File

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

View File

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

View File

@@ -164,12 +164,12 @@ namespace BlackGui
this->connect(c, static_cast<void (QCompleter::*)(const QString &)>(&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);
}
}

View File

@@ -96,10 +96,10 @@ namespace BlackGui
private:
QScopedPointer<Ui::CDbDistributorSelectorComponent> ui;
QScopedPointer<QCompleter> m_completerDistributorNames;
QMetaObject::Connection m_signalConnection;
QScopedPointer<QCompleter> m_completerDistributors;
QMetaObject::Connection m_signalConnection;
BlackMisc::Simulation::CDistributor m_currentDistributor;
};
}
}
} // ns
} // ns
#endif // guard

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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("<drop livery>");
this->ui->drop_DropData->setAcceptedMetaTypeIds({ qMetaTypeId<CLivery>(), qMetaTypeId<CLiveryList>()});
// 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

View File

@@ -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::CLiveryForm> ui;
BlackMisc::Aviation::CLivery m_originalLivery; //!< object whose values will be overridden
};
} // ns
} // ns

View File

@@ -61,9 +61,12 @@
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="le_Code">
<property name="placeholderText">
<string>Livery code</string>
<widget class="BlackGui::Components::CDbLiverySelectorComponent" name="livery_Selector">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
@@ -126,9 +129,6 @@
<property name="text">
<string>Code:</string>
</property>
<property name="buddy">
<cstring>le_Code</cstring>
</property>
</widget>
</item>
<item row="2" column="0">
@@ -246,10 +246,15 @@
<header>blackgui/editors/airlineicaoform.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>BlackGui::Components::CDbLiverySelectorComponent</class>
<extends>QFrame</extends>
<header>blackgui/components/dbliveryselectorcomponent.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>le_Id</tabstop>
<tabstop>le_Code</tabstop>
<tabstop>le_Description</tabstop>
<tabstop>le_Updated</tabstop>
</tabstops>

View File

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

View File

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