Ref T292, Ref T285 further form improvements

* avoid roundtrips by airline digest signal
* style such as removed "private slots"
* fixing distributor form's clear
This commit is contained in:
Klaus Basan
2018-07-25 02:32:29 +02:00
parent 94bf4b2249
commit 77f10938d9
7 changed files with 65 additions and 47 deletions

View File

@@ -51,9 +51,11 @@ namespace BlackGui
this->setAcceptedMetaTypeIds({qMetaTypeId<CDistributor>(), qMetaTypeId<CDistributorList>()}); this->setAcceptedMetaTypeIds({qMetaTypeId<CDistributor>(), qMetaTypeId<CDistributorList>()});
ui->le_Distributor->setValidator(new CUpperCaseValidator(this)); ui->le_Distributor->setValidator(new CUpperCaseValidator(this));
bool c = connect(ui->le_Distributor, &QLineEdit::returnPressed, this, &CDbDistributorSelectorComponent::onDataChanged); bool c = connect(ui->le_Distributor, &QLineEdit::editingFinished, this, &CDbDistributorSelectorComponent::onDataChanged, Qt::QueuedConnection);
Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect"); Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect");
c = connect(sApp->getWebDataServices(), &CWebDataServices::dataRead, this, &CDbDistributorSelectorComponent::onDistributorsRead); // c = connect(ui->le_Distributor, &QLineEdit::returnPressed, this, &CDbDistributorSelectorComponent::returnPressed, Qt::QueuedConnection);
// Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect");
c = connect(sApp->getWebDataServices(), &CWebDataServices::dataRead, this, &CDbDistributorSelectorComponent::onDistributorsRead, Qt::QueuedConnection);
Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect"); Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect");
Q_UNUSED(c); Q_UNUSED(c);
@@ -127,6 +129,7 @@ namespace BlackGui
void CDbDistributorSelectorComponent::clear() void CDbDistributorSelectorComponent::clear()
{ {
ui->le_Distributor->clear(); ui->le_Distributor->clear();
m_currentDistributor = CDistributor();
} }
void CDbDistributorSelectorComponent::dragEnterEvent(QDragEnterEvent *event) void CDbDistributorSelectorComponent::dragEnterEvent(QDragEnterEvent *event)
@@ -197,11 +200,11 @@ namespace BlackGui
void CDbDistributorSelectorComponent::onDataChanged() void CDbDistributorSelectorComponent::onDataChanged()
{ {
if (!sGui) { return; } if (!sGui || sGui->isShuttingDown() || !sGui->getWebDataServices()) { return; }
QString keyOrAlias(ui->le_Distributor->text().trimmed().toUpper()); const QString keyOrAlias(ui->le_Distributor->text().trimmed().toUpper());
if (keyOrAlias.isEmpty()) { return; } if (keyOrAlias.isEmpty()) { return; }
CDistributor d(sGui->getWebDataServices()->getDistributors().findByKeyOrAlias(keyOrAlias)); const CDistributor distributor(sGui->getWebDataServices()->getDistributors().findByKeyOrAlias(keyOrAlias));
this->setDistributor(d); this->setDistributor(distributor);
} }
void CDbDistributorSelectorComponent::onCompleterActivated(const QString &distributorKeyOrAlias) void CDbDistributorSelectorComponent::onCompleterActivated(const QString &distributorKeyOrAlias)

View File

@@ -63,8 +63,8 @@ namespace BlackGui
void CAirlineIcaoForm::setValue(const CAirlineIcaoCode &icao) void CAirlineIcaoForm::setValue(const CAirlineIcaoCode &icao)
{ {
if (m_originalCode == icao) { return; } if (m_currentCode == icao) { return; }
m_originalCode = icao; m_currentCode = icao;
ui->selector_AirlineDesignator->setAirlineIcao(icao); ui->selector_AirlineDesignator->setAirlineIcao(icao);
ui->selector_AirlineName->setAirlineIcao(icao); ui->selector_AirlineName->setAirlineIcao(icao);
@@ -89,15 +89,15 @@ namespace BlackGui
// sometimes artefacts when icon is displayed // sometimes artefacts when icon is displayed
this->repaint(); this->repaint();
if (m_originalCode.hasCompleteData()) if (m_currentCode.hasCompleteData())
{ {
emit airlineChanged(m_originalCode); emit this->airlineChanged(m_currentCode);
} }
} }
CAirlineIcaoCode CAirlineIcaoForm::getValue() const CAirlineIcaoCode CAirlineIcaoForm::getValue() const
{ {
CAirlineIcaoCode code(m_originalCode); CAirlineIcaoCode code(m_currentCode);
code.setVirtualAirline(ui->cb_Va->isChecked()); code.setVirtualAirline(ui->cb_Va->isChecked());
code.setMilitary(ui->cb_Military->isChecked()); code.setMilitary(ui->cb_Military->isChecked());
code.setCountry(ui->country_Selector->getCountry()); code.setCountry(ui->country_Selector->getCountry());
@@ -164,7 +164,7 @@ namespace BlackGui
void CAirlineIcaoForm::resetValue() void CAirlineIcaoForm::resetValue()
{ {
this->setValue(m_originalCode); this->setValue(m_currentCode);
} }
void CAirlineIcaoForm::jsonPasted(const QString &json) void CAirlineIcaoForm::jsonPasted(const QString &json)
@@ -209,11 +209,7 @@ namespace BlackGui
void CAirlineIcaoForm::onIdEntered() void CAirlineIcaoForm::onIdEntered()
{ {
if (!sGui || !sGui->hasWebDataServices()) if (!sGui || sGui->isShuttingDown() || !sGui->hasWebDataServices()) { return; }
{
ui->le_Id->undo();
return;
}
const int id = ui->le_Id->text().toInt(); const int id = ui->le_Id->text().toInt();
const CAirlineIcaoCode icao = sGui->getWebDataServices()->getAirlineIcaoCodeForDbKey(id); const CAirlineIcaoCode icao = sGui->getWebDataServices()->getAirlineIcaoCodeForDbKey(id);
@@ -224,5 +220,10 @@ namespace BlackGui
} }
this->setValue(icao); this->setValue(icao);
} }
void CAirlineIcaoForm::emitAirlineChangedDigest()
{
emit this->airlineChangedDigest(m_currentCode);
}
} // ns } // ns
} // ns } // ns

View File

@@ -15,14 +15,13 @@
#include "blackgui/blackguiexport.h" #include "blackgui/blackguiexport.h"
#include "blackgui/editors/form.h" #include "blackgui/editors/form.h"
#include "blackmisc/aviation/airlineicaocode.h" #include "blackmisc/aviation/airlineicaocode.h"
#include "blackmisc/digestsignal.h"
#include "blackmisc/statusmessagelist.h" #include "blackmisc/statusmessagelist.h"
#include "blackmisc/variant.h" #include "blackmisc/variant.h"
#include <QObject> #include <QObject>
#include <QScopedPointer> #include <QScopedPointer>
class QWidget;
namespace Ui { class CAirlineIcaoForm; } namespace Ui { class CAirlineIcaoForm; }
namespace BlackGui namespace BlackGui
{ {
@@ -71,6 +70,9 @@ namespace BlackGui
//! Airline has been changed //! Airline has been changed
void airlineChanged(const BlackMisc::Aviation::CAirlineIcaoCode &airlineIcao); void airlineChanged(const BlackMisc::Aviation::CAirlineIcaoCode &airlineIcao);
//! Airline has been changed
void airlineChangedDigest(const BlackMisc::Aviation::CAirlineIcaoCode &airlineIcao);
protected: protected:
//! \copydoc CForm::jsonPasted //! \copydoc CForm::jsonPasted
virtual void jsonPasted(const QString &json) override; virtual void jsonPasted(const QString &json) override;
@@ -81,9 +83,13 @@ namespace BlackGui
//! Id entered //! Id entered
void onIdEntered(); void onIdEntered();
//! Emit the digest signal
void emitAirlineChangedDigest();
private: private:
QScopedPointer<Ui::CAirlineIcaoForm> ui; QScopedPointer<Ui::CAirlineIcaoForm> ui;
BlackMisc::Aviation::CAirlineIcaoCode m_originalCode; //!< object allowing to override values BlackMisc::CDigestSignal m_digestChanges { this, &CAirlineIcaoForm::airlineChanged, &CAirlineIcaoForm::emitAirlineChangedDigest, 500, 3 };
BlackMisc::Aviation::CAirlineIcaoCode m_currentCode; //!< object allowing to override values
}; };
} // ns } // ns
} //ns } //ns

View File

@@ -34,14 +34,15 @@ namespace BlackGui
ui(new Ui::CDistributorForm) ui(new Ui::CDistributorForm)
{ {
ui->setupUi(this); ui->setupUi(this);
this->setFocusProxy(ui->distributor_Selector); this->setFocusProxy(ui->comp_DistributorSelector);
ui->le_Updated->setReadOnly(true); ui->le_Updated->setReadOnly(true);
ui->distributor_Selector->withDistributorDescription(false); ui->comp_DistributorSelector->withDistributorDescription(false);
ui->lai_Id->set(CIcons::appDistributors16(), "Id:"); ui->lai_Id->set(CIcons::appDistributors16(), "Id:");
// drag and drop // drag and drop
connect(ui->drop_DropData, &CDropSite::droppedValueObject, this, &CDistributorForm::ps_droppedCode); connect(ui->drop_DropData, &CDropSite::droppedValueObject, this, &CDistributorForm::onDroppedCode);
connect(ui->distributor_Selector, &CDbDistributorSelectorComponent::changedDistributor, this, &CDistributorForm::setValue); connect(ui->comp_DistributorSelector, &CDbDistributorSelectorComponent::changedDistributor, this, &CDistributorForm::setValue);
// connect(ui->comp_DistributorSelector, &CDbDistributorSelectorComponent::returnPressed, this, &CDistributorForm::onReturnPressed);
ui->drop_DropData->setInfoText("<drop distributor>"); ui->drop_DropData->setInfoText("<drop distributor>");
ui->drop_DropData->setAcceptedMetaTypeIds({ qMetaTypeId<CDistributor>(), qMetaTypeId<CDistributorList>()}); ui->drop_DropData->setAcceptedMetaTypeIds({ qMetaTypeId<CDistributor>(), qMetaTypeId<CDistributorList>()});
} }
@@ -51,10 +52,10 @@ namespace BlackGui
bool CDistributorForm::setValue(const BlackMisc::Simulation::CDistributor &distributor) bool CDistributorForm::setValue(const BlackMisc::Simulation::CDistributor &distributor)
{ {
const CDistributor currentDistributor(this->getValue()); if (m_currentDistributor == distributor) { return false; }
if (currentDistributor == distributor) { return false; } m_currentDistributor = distributor;
ui->distributor_Selector->setDistributor(distributor); ui->comp_DistributorSelector->setDistributor(distributor);
ui->le_Description->setText(distributor.getDescription()); ui->le_Description->setText(distributor.getDescription());
ui->le_Alias1->setText(distributor.getAlias1()); ui->le_Alias1->setText(distributor.getAlias1());
ui->le_Alias2->setText(distributor.getAlias2()); ui->le_Alias2->setText(distributor.getAlias2());
@@ -69,7 +70,7 @@ namespace BlackGui
CDistributor CDistributorForm::getValue() const CDistributor CDistributorForm::getValue() const
{ {
CDistributor distributor(ui->distributor_Selector->getDistributor()); CDistributor distributor(ui->comp_DistributorSelector->getDistributor());
distributor.setAlias1(ui->le_Alias1->text()); distributor.setAlias1(ui->le_Alias1->text());
distributor.setAlias2(ui->le_Alias2->text()); distributor.setAlias2(ui->le_Alias2->text());
distributor.setDescription(ui->le_Description->text()); distributor.setDescription(ui->le_Description->text());
@@ -105,7 +106,7 @@ namespace BlackGui
ui->le_Alias1->setReadOnly(readOnly); ui->le_Alias1->setReadOnly(readOnly);
ui->le_Alias2->setReadOnly(readOnly); ui->le_Alias2->setReadOnly(readOnly);
ui->le_Description->setReadOnly(readOnly); ui->le_Description->setReadOnly(readOnly);
ui->distributor_Selector->setReadOnly(readOnly); ui->comp_DistributorSelector->setReadOnly(readOnly);
ui->drop_DropData->setVisible(!readOnly); ui->drop_DropData->setVisible(!readOnly);
this->forceStyleSheetUpdate(); this->forceStyleSheetUpdate();
} }
@@ -113,17 +114,18 @@ namespace BlackGui
void CDistributorForm::setSelectOnly() void CDistributorForm::setSelectOnly()
{ {
this->setReadOnly(true); this->setReadOnly(true);
ui->distributor_Selector->setReadOnly(false); ui->comp_DistributorSelector->setReadOnly(false);
ui->drop_DropData->setVisible(true); ui->drop_DropData->setVisible(true);
} }
void CDistributorForm::clear() void CDistributorForm::clear()
{ {
setValue(CDistributor()); this->setValue(CDistributor());
ui->distributor_Selector->setReadOnly(false); ui->comp_DistributorSelector->clear();
ui->comp_DistributorSelector->setReadOnly(false);
} }
void CDistributorForm::ps_droppedCode(const BlackMisc::CVariant &variantDropped) void CDistributorForm::onDroppedCode(const BlackMisc::CVariant &variantDropped)
{ {
CDistributor distributor; CDistributor distributor;
if (variantDropped.canConvert<CDistributor>()) if (variantDropped.canConvert<CDistributor>())
@@ -142,5 +144,10 @@ namespace BlackGui
} }
this->setValue(distributor); this->setValue(distributor);
} }
bool CDistributorForm::hasAnyUiDetailsValues() const
{
return !(ui->le_Alias1->text().isEmpty() && ui->le_Alias2->text().isEmpty() && ui->le_Description->text().isEmpty() && ui->le_Updated->text().isEmpty());
}
} // ns } // ns
} // ns } // ns

View File

@@ -21,7 +21,6 @@
#include <QObject> #include <QObject>
#include <QScopedPointer> #include <QScopedPointer>
class QWidget;
namespace Ui { class CDistributorForm; } namespace Ui { class CDistributorForm; }
namespace BlackGui namespace BlackGui
{ {
@@ -30,8 +29,7 @@ namespace BlackGui
/*! /*!
* Distributor form * Distributor form
*/ */
class BLACKGUI_EXPORT CDistributorForm : class BLACKGUI_EXPORT CDistributorForm : public CForm
public CForm
{ {
Q_OBJECT Q_OBJECT
@@ -61,7 +59,6 @@ namespace BlackGui
//! Clear //! Clear
void clear(); void clear();
public slots:
//! Set value //! Set value
bool setValue(const BlackMisc::Simulation::CDistributor &distributor = BlackMisc::Simulation::CDistributor()); bool setValue(const BlackMisc::Simulation::CDistributor &distributor = BlackMisc::Simulation::CDistributor());
@@ -69,12 +66,15 @@ namespace BlackGui
//! \copydoc CForm::jsonPasted //! \copydoc CForm::jsonPasted
virtual void jsonPasted(const QString &json) override; virtual void jsonPasted(const QString &json) override;
private slots:
//! Variant has been dropped
void ps_droppedCode(const BlackMisc::CVariant &variantDropped);
private: private:
//! Variant has been dropped
void onDroppedCode(const BlackMisc::CVariant &variantDropped);
//! Any UI values in the details fields
bool hasAnyUiDetailsValues() const;
QScopedPointer<Ui::CDistributorForm> ui; QScopedPointer<Ui::CDistributorForm> ui;
BlackMisc::Simulation::CDistributor m_currentDistributor;
bool m_readOnly = false; bool m_readOnly = false;
}; };
} // ns } // ns

View File

@@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>297</width> <width>254</width>
<height>200</height> <height>185</height>
</rect> </rect>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
@@ -114,7 +114,7 @@
</widget> </widget>
</item> </item>
<item row="0" column="1" colspan="2"> <item row="0" column="1" colspan="2">
<widget class="BlackGui::Components::CDbDistributorSelectorComponent" name="distributor_Selector"> <widget class="BlackGui::Components::CDbDistributorSelectorComponent" name="comp_DistributorSelector">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>0</width>
@@ -173,7 +173,7 @@
</customwidget> </customwidget>
</customwidgets> </customwidgets>
<tabstops> <tabstops>
<tabstop>distributor_Selector</tabstop> <tabstop>comp_DistributorSelector</tabstop>
<tabstop>le_Description</tabstop> <tabstop>le_Description</tabstop>
<tabstop>le_Alias1</tabstop> <tabstop>le_Alias1</tabstop>
<tabstop>le_Alias2</tabstop> <tabstop>le_Alias2</tabstop>

View File

@@ -50,7 +50,7 @@ namespace BlackGui
connect(ui->le_Id, &QLineEdit::returnPressed, this, &CLiveryForm::onIdEntered); connect(ui->le_Id, &QLineEdit::returnPressed, this, &CLiveryForm::onIdEntered);
// selector // selector
connect(ui->comp_LiverySelector, &CDbLiverySelectorComponent::changedLivery, this, &CLiveryForm::setValue); connect(ui->comp_LiverySelector, &CDbLiverySelectorComponent::changedLivery, this, &CLiveryForm::setValue, Qt::QueuedConnection);
// drag and drop, paste // drag and drop, paste
connect(ui->tb_Paste, &QToolButton::clicked, this, &CLiveryForm::pasted); connect(ui->tb_Paste, &QToolButton::clicked, this, &CLiveryForm::pasted);
@@ -59,7 +59,7 @@ namespace BlackGui
ui->drop_DropData->setAcceptedMetaTypeIds({ qMetaTypeId<CLivery>(), qMetaTypeId<CLiveryList>()}); ui->drop_DropData->setAcceptedMetaTypeIds({ qMetaTypeId<CLivery>(), qMetaTypeId<CLiveryList>()});
// embedded form // embedded form
connect(ui->editor_AirlineIcao, &CAirlineIcaoForm::airlineChanged, this, &CLiveryForm::onAirlineChanged); connect(ui->editor_AirlineIcao, &CAirlineIcaoForm::airlineChangedDigest, this, &CLiveryForm::onAirlineChanged, Qt::QueuedConnection);
// Set as temp.livery or search color // Set as temp.livery or search color
connect(ui->pb_TempLivery, &QPushButton::pressed, this, &CLiveryForm::setTemporaryLivery); connect(ui->pb_TempLivery, &QPushButton::pressed, this, &CLiveryForm::setTemporaryLivery);
@@ -228,6 +228,7 @@ namespace BlackGui
void CLiveryForm::onAirlineChanged(const CAirlineIcaoCode &code) void CLiveryForm::onAirlineChanged(const CAirlineIcaoCode &code)
{ {
if (!sGui || sGui->isShuttingDown() || !sGui->getWebDataServices()) { return; }
if (!code.hasCompleteData()) { return; } if (!code.hasCompleteData()) { return; }
if (!code.hasValidDbKey()) { return; } if (!code.hasValidDbKey()) { return; }