swift
aircraftmodelfilterbar.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2015 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QCheckBox>
7 #include <QLineEdit>
8 #include <QPointer>
9 #include <QTimer>
10 #include <QtGlobal>
11 
12 #include "ui_aircraftmodelfilterbar.h"
13 
18 #include "gui/uppercasevalidator.h"
19 #include "misc/db/datastore.h"
22 
23 using namespace swift::misc::simulation;
24 using namespace swift::misc::db;
25 using namespace swift::gui;
26 using namespace swift::gui::models;
27 using namespace swift::gui::components;
28 
29 namespace swift::gui::filters
30 {
31  CAircraftModelFilterBar::CAircraftModelFilterBar(QWidget *parent)
32  : CFilterWidget(parent), ui(new Ui::CAircraftModelFilterBar)
33  {
34  ui->setupUi(this);
35 
36  ui->comp_SimulatorSelector->setMode(CSimulatorSelector::CheckBoxes);
37  ui->comp_SimulatorSelector->setNoSelectionMeansAll(true);
38  ui->comp_SimulatorSelector->setRememberSelection(false);
39  ui->comp_SimulatorSelector->checkAll();
40 
41  ui->comp_DistributorSelector->withDistributorDescription(false);
42  this->setButtonsAndCount(ui->filter_Buttons);
43 
45  ui->le_AircraftIcao->setValidator(ucv);
46  ui->le_AirlineIcao->setValidator(ucv);
47  ui->le_ModelString->setValidator(ucv);
48  ui->le_AircraftManufacturer->setValidator(ucv);
49  ui->le_LiveryCode->setValidator(ucv);
50  ui->le_Id->setValidator(new QIntValidator(ui->le_Id));
51 
52  // reset form
53  this->clearForm();
54 
55  // connect deferred, avoid to filter during the UI "swing in period"
56  QPointer<CAircraftModelFilterBar> myself(this);
57  QTimer::singleShot(2500, this, [=] {
58  if (!myself) { return; }
59  this->connectTriggerFilterSignals();
60  });
61  }
62 
64 
65  void CAircraftModelFilterBar::displayCount(bool show) { ui->filter_Buttons->displayCount(show); }
66 
67  std::unique_ptr<IModelFilter<CAircraftModelList>> CAircraftModelFilterBar::createModelFilter() const
68  {
69  CAircraftModel::ModelModeFilter mf = CAircraftModel::All;
70  if (ui->cbt_IncludeExclude->checkState() == Qt::Checked) { mf = CAircraftModel::Include; }
71  else if (ui->cbt_IncludeExclude->checkState() == Qt::Unchecked) { mf = CAircraftModel::Exclude; }
72 
73  DbKeyStateFilter dbf = swift::misc::db::All;
74  if (ui->cbt_Db->checkState() == Qt::Checked) { dbf = swift::misc::db::Valid; }
75  else if (ui->cbt_Db->checkState() == Qt::Unchecked) { dbf = swift::misc::db::Invalid; }
76 
77  return std::make_unique<CAircraftModelFilter>(
78  convertDbId(ui->le_Id->text()), ui->le_ModelString->text(), ui->le_ModelDescription->text(), mf, dbf,
79  ui->cbt_Military->checkState(), ui->cbt_ColorLiveries->checkState(), ui->le_AircraftIcao->text(),
80  ui->le_AircraftManufacturer->text(), ui->le_AirlineIcao->text(), ui->le_AirlineName->text(),
81  ui->le_LiveryCode->text(), ui->le_FileName->text(), ui->comp_CombinedType->getCombinedType(),
82  ui->comp_SimulatorSelector->getValue(), ui->comp_DistributorSelector->getDistributor());
83  }
84 
85  void CAircraftModelFilterBar::onRowCountChanged(int count, bool withFilter)
86  {
87  ui->filter_Buttons->onRowCountChanged(count, withFilter);
88  }
89 
91  {
92  ui->le_ModelString->clear();
93  ui->le_ModelDescription->clear();
94  ui->le_AircraftIcao->clear();
95  ui->le_AircraftManufacturer->clear();
96  ui->le_AirlineIcao->clear();
97  ui->le_AirlineName->clear();
98  ui->le_LiveryCode->clear();
99  ui->le_FileName->clear();
100  ui->comp_SimulatorSelector->checkAll();
101  ui->comp_DistributorSelector->clear();
102  ui->comp_CombinedType->clear();
103  ui->cbt_IncludeExclude->setCheckState(Qt::PartiallyChecked);
104  ui->cbt_Db->setCheckState(Qt::PartiallyChecked);
105  ui->cbt_Military->setCheckState(Qt::PartiallyChecked);
106  ui->cbt_ColorLiveries->setCheckState(Qt::PartiallyChecked);
107  }
108 
109  void CAircraftModelFilterBar::onSimulatorSelectionChanged(const CSimulatorInfo &info)
110  {
111  Q_UNUSED(info);
112  this->triggerFilter();
113  }
114 
115  void CAircraftModelFilterBar::onDistributorChanged(const CDistributor &distributor)
116  {
117  Q_UNUSED(distributor);
118  this->triggerFilter();
119  }
120 
121  void CAircraftModelFilterBar::onCombinedTypeChanged(const QString &combinedType)
122  {
123  Q_UNUSED(combinedType);
124  this->triggerFilter();
125  }
126 
127  void CAircraftModelFilterBar::onCheckBoxChanged(bool state)
128  {
129  Q_UNUSED(state);
130  triggerFilter();
131  }
132 
133  void CAircraftModelFilterBar::connectTriggerFilterSignals()
134  {
135  connect(ui->le_AircraftIcao, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
136  connect(ui->le_AircraftManufacturer, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
137  connect(ui->le_AirlineIcao, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
138  connect(ui->le_AirlineName, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
139  connect(ui->le_LiveryCode, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
140  connect(ui->le_Id, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
141  connect(ui->le_ModelDescription, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
142  connect(ui->le_ModelString, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
143  connect(ui->le_FileName, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
144 
145  connect(ui->cbt_Db, &QCheckBox::clicked, this, &CAircraftModelFilterBar::onCheckBoxChanged);
146  connect(ui->cbt_IncludeExclude, &QCheckBox::clicked, this, &CAircraftModelFilterBar::onCheckBoxChanged);
147  connect(ui->cbt_Military, &QCheckBox::clicked, this, &CAircraftModelFilterBar::onCheckBoxChanged);
148  connect(ui->cbt_ColorLiveries, &QCheckBox::clicked, this, &CAircraftModelFilterBar::onCheckBoxChanged);
149 
150  connect(ui->comp_SimulatorSelector, &CSimulatorSelector::changed, this,
151  &CAircraftModelFilterBar::onSimulatorSelectionChanged);
152  connect(ui->comp_DistributorSelector, &CDbDistributorSelectorComponent::changedDistributor, this,
153  &CAircraftModelFilterBar::onDistributorChanged);
154  connect(ui->comp_CombinedType, &CAircraftCombinedTypeSelector::changedCombinedType, this,
155  &CAircraftModelFilterBar::onCombinedTypeChanged);
156  }
157 } // namespace swift::gui::filters
virtual std::unique_ptr< models::IModelFilter< swift::misc::simulation::CAircraftModelList > > createModelFilter() const
Get the filter, this is the filter itself, not its widget or dialog.
virtual void clearForm()
Clear the filter form.
virtual void onRowCountChanged(int count, bool withFilter)
Row count has been changed.
Base for filter dialog.
Definition: filterwidget.h:21
virtual void triggerFilter()
Trigger filtering.
void setButtonsAndCount(CFilterBarButtons *buttons)
Set and connect filter bar buttons.
static int convertDbId(const QString &candidate)
Convert DB id.
Value object encapsulating information of software distributor.
Definition: distributor.h:33
Simple hardcoded info about the corresponding simulator.
Definition: simulatorinfo.h:41
High level reusable GUI components.
Definition: aboutdialog.cpp:13
Filter to search data sets.
Models to be used with views, mainly QTableView.
GUI related classes.
auto singleShot(int msec, QObject *target, F &&task)
Starts a single-shot timer which will call a task in the thread of the given object when it times out...
Definition: threadutils.h:30