From 7f1591c972d36ebb1d10cf38f5b9e1ff0cf66b95 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 23 Dec 2018 06:08:21 +0100 Subject: [PATCH] Filter, deferred connect of "setFilter" signals to avoid filtering during "swing-in" of UI --- .../filters/aircraftmodelfilterbar.cpp | 56 ++++++++++++------- src/blackgui/filters/aircraftmodelfilterbar.h | 4 +- src/blackgui/filters/distributorfilterbar.cpp | 18 +++++- src/blackgui/filters/distributorfilterbar.h | 3 + 4 files changed, 59 insertions(+), 22 deletions(-) diff --git a/src/blackgui/filters/aircraftmodelfilterbar.cpp b/src/blackgui/filters/aircraftmodelfilterbar.cpp index 9e621f65c..be3ae5942 100644 --- a/src/blackgui/filters/aircraftmodelfilterbar.cpp +++ b/src/blackgui/filters/aircraftmodelfilterbar.cpp @@ -21,6 +21,8 @@ #include #include #include +#include +#include using namespace BlackMisc::Simulation; using namespace BlackMisc::Db; @@ -37,28 +39,15 @@ namespace BlackGui ui(new Ui::CAircraftModelFilterBar) { ui->setupUi(this); - ui->frp_SimulatorSelector->checkAll(); + + ui->comp_SimulatorSelector->setMode(CSimulatorSelector::CheckBoxes); + ui->comp_SimulatorSelector->setNoSelectionMeansAll(true); + ui->comp_SimulatorSelector->setRememberSelection(false); + ui->comp_SimulatorSelector->checkAll(); + ui->comp_DistributorSelector->withDistributorDescription(false); this->setButtonsAndCount(ui->filter_Buttons); - connect(ui->le_AircraftIcao, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); - connect(ui->le_AircraftManufacturer, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); - connect(ui->le_AirlineIcao, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); - connect(ui->le_AirlineName, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); - connect(ui->le_LiveryCode, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); - connect(ui->le_Id, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); - connect(ui->le_ModelDescription, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); - connect(ui->le_ModelString, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); - connect(ui->le_FileName, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); - - connect(ui->cbt_Db, &QCheckBox::clicked, this, &CAircraftModelFilterBar::ps_checkBoxChanged); - connect(ui->cbt_IncludeExclude, &QCheckBox::clicked, this, &CAircraftModelFilterBar::ps_checkBoxChanged); - connect(ui->cbt_Military, &QCheckBox::clicked, this, &CAircraftModelFilterBar::ps_checkBoxChanged); - connect(ui->cbt_ColorLiveries, &QCheckBox::clicked, this, &CAircraftModelFilterBar::ps_checkBoxChanged); - - connect(ui->frp_SimulatorSelector, &CSimulatorSelector::changed, this, &CAircraftModelFilterBar::ps_simulatorSelectionChanged); - connect(ui->comp_DistributorSelector, &CDbDistributorSelectorComponent::changedDistributor, this, &CAircraftModelFilterBar::ps_distributorChanged); - CUpperCaseValidator *ucv = new CUpperCaseValidator(this); ui->le_AircraftIcao->setValidator(ucv); ui->le_AirlineIcao->setValidator(ucv); @@ -69,6 +58,14 @@ namespace BlackGui // reset form this->clearForm(); + + // connect deferred, avoid to filter during the UI "swing in period" + QPointer myself(this); + QTimer::singleShot(2500, this, [ = ] + { + if (!myself) { return; } + this->connectTriggerFilterSignals(); + }); } CAircraftModelFilterBar::~CAircraftModelFilterBar() @@ -160,5 +157,26 @@ namespace BlackGui Q_UNUSED(state); triggerFilter(); } + + void CAircraftModelFilterBar::connectTriggerFilterSignals() + { + connect(ui->le_AircraftIcao, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_AircraftManufacturer, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_AirlineIcao, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_AirlineName, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_LiveryCode, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_Id, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_ModelDescription, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_ModelString, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_FileName, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + + connect(ui->cbt_Db, &QCheckBox::clicked, this, &CAircraftModelFilterBar::onCheckBoxChanged); + connect(ui->cbt_IncludeExclude, &QCheckBox::clicked, this, &CAircraftModelFilterBar::onCheckBoxChanged); + connect(ui->cbt_Military, &QCheckBox::clicked, this, &CAircraftModelFilterBar::onCheckBoxChanged); + connect(ui->cbt_ColorLiveries, &QCheckBox::clicked, this, &CAircraftModelFilterBar::onCheckBoxChanged); + + connect(ui->comp_SimulatorSelector, &CSimulatorSelector::changed, this, &CAircraftModelFilterBar::onSimulatorSelectionChanged); + connect(ui->comp_DistributorSelector, &CDbDistributorSelectorComponent::changedDistributor, this, &CAircraftModelFilterBar::onDistributorChanged); + } } // ns } // ns diff --git a/src/blackgui/filters/aircraftmodelfilterbar.h b/src/blackgui/filters/aircraftmodelfilterbar.h index cd1763163..f798958ea 100644 --- a/src/blackgui/filters/aircraftmodelfilterbar.h +++ b/src/blackgui/filters/aircraftmodelfilterbar.h @@ -70,7 +70,9 @@ namespace BlackGui //! Checkbox has been changed void onCheckBoxChanged(bool state); - private: + //! Trigger filter by changing a value + void connectTriggerFilterSignals(); + QScopedPointer ui; }; } // ns diff --git a/src/blackgui/filters/distributorfilterbar.cpp b/src/blackgui/filters/distributorfilterbar.cpp index 633a0d86a..2d971e680 100644 --- a/src/blackgui/filters/distributorfilterbar.cpp +++ b/src/blackgui/filters/distributorfilterbar.cpp @@ -32,12 +32,21 @@ namespace BlackGui ui->setupUi(this); ui->comp_Simulator->setMode(CSimulatorSelector::CheckBoxes); ui->comp_Simulator->setNoSelectionMeansAll(true); - this->setButtonsAndCount(ui->filter_Buttons); + ui->comp_Simulator->setRememberSelection(false); + ui->comp_Simulator->checkAll(); - connect(ui->comp_Simulator, &CSimulatorSelector::changed, this, &CFilterWidget::triggerFilter); + this->setButtonsAndCount(ui->filter_Buttons); // reset form this->clearForm(); + + // connect deferred, avoid to filter during the UI "swing in period" + QPointer myself(this); + QTimer::singleShot(2500, this, [ = ] + { + if (!myself) { return; } + this->connectTriggerFilterSignals(); + }); } CDistributorFilterBar::~CDistributorFilterBar() @@ -62,5 +71,10 @@ namespace BlackGui { ui->comp_Simulator->clear(); } + + void CDistributorFilterBar::connectTriggerFilterSignals() + { + connect(ui->comp_Simulator, &CSimulatorSelector::changed, this, &CFilterWidget::triggerFilter); + } } // ns } // ns diff --git a/src/blackgui/filters/distributorfilterbar.h b/src/blackgui/filters/distributorfilterbar.h index 8b1aa352b..0ebddc147 100644 --- a/src/blackgui/filters/distributorfilterbar.h +++ b/src/blackgui/filters/distributorfilterbar.h @@ -56,6 +56,9 @@ namespace BlackGui virtual void clearForm() override; private: + //! Trigger filter by changing a value + void connectTriggerFilterSignals(); + QScopedPointer ui; }; } // ns