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 
44  auto *ucv = new CUpperCaseValidator(this);
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"
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);
141  connect(ui->le_ModelDescription, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
142  connect(ui->le_ModelString, &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
std::unique_ptr< models::IModelFilter< swift::misc::simulation::CAircraftModelList > > createModelFilter() const
Get the filter, this is the filter itself, not its widget or dialog.
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:14
Filter to search data sets.
Models to be used with views, mainly QTableView.
GUI related classes.
void clicked(bool checked)
void returnPressed()
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
void show()