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>()});
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");
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_UNUSED(c);
@@ -127,6 +129,7 @@ namespace BlackGui
void CDbDistributorSelectorComponent::clear()
{
ui->le_Distributor->clear();
m_currentDistributor = CDistributor();
}
void CDbDistributorSelectorComponent::dragEnterEvent(QDragEnterEvent *event)
@@ -197,11 +200,11 @@ namespace BlackGui
void CDbDistributorSelectorComponent::onDataChanged()
{
if (!sGui) { return; }
QString keyOrAlias(ui->le_Distributor->text().trimmed().toUpper());
if (!sGui || sGui->isShuttingDown() || !sGui->getWebDataServices()) { return; }
const QString keyOrAlias(ui->le_Distributor->text().trimmed().toUpper());
if (keyOrAlias.isEmpty()) { return; }
CDistributor d(sGui->getWebDataServices()->getDistributors().findByKeyOrAlias(keyOrAlias));
this->setDistributor(d);
const CDistributor distributor(sGui->getWebDataServices()->getDistributors().findByKeyOrAlias(keyOrAlias));
this->setDistributor(distributor);
}
void CDbDistributorSelectorComponent::onCompleterActivated(const QString &distributorKeyOrAlias)

View File

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

View File

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

View File

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

View File

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

View File

@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>297</width>
<height>200</height>
<width>254</width>
<height>185</height>
</rect>
</property>
<property name="minimumSize">
@@ -114,7 +114,7 @@
</widget>
</item>
<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">
<size>
<width>0</width>
@@ -173,7 +173,7 @@
</customwidget>
</customwidgets>
<tabstops>
<tabstop>distributor_Selector</tabstop>
<tabstop>comp_DistributorSelector</tabstop>
<tabstop>le_Description</tabstop>
<tabstop>le_Alias1</tabstop>
<tabstop>le_Alias2</tabstop>

View File

@@ -50,7 +50,7 @@ namespace BlackGui
connect(ui->le_Id, &QLineEdit::returnPressed, this, &CLiveryForm::onIdEntered);
// 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
connect(ui->tb_Paste, &QToolButton::clicked, this, &CLiveryForm::pasted);
@@ -59,7 +59,7 @@ namespace BlackGui
ui->drop_DropData->setAcceptedMetaTypeIds({ qMetaTypeId<CLivery>(), qMetaTypeId<CLiveryList>()});
// 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
connect(ui->pb_TempLivery, &QPushButton::pressed, this, &CLiveryForm::setTemporaryLivery);
@@ -228,6 +228,7 @@ namespace BlackGui
void CLiveryForm::onAirlineChanged(const CAirlineIcaoCode &code)
{
if (!sGui || sGui->isShuttingDown() || !sGui->getWebDataServices()) { return; }
if (!code.hasCompleteData()) { return; }
if (!code.hasValidDbKey()) { return; }