swift
Loading...
Searching...
No Matches
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
19#include "misc/db/datastore.h"
22
23using namespace swift::misc::simulation;
24using namespace swift::misc::db;
25using namespace swift::gui;
26using namespace swift::gui::models;
27using namespace swift::gui::components;
28
29namespace swift::gui::filters
30{
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, [=, this] {
58 if (!myself)
59 {
60 return;
61 }
62 this->connectTriggerFilterSignals();
63 });
64 }
65
67
68 void CAircraftModelFilterBar::displayCount(bool show) { ui->filter_Buttons->displayCount(show); }
69
70 std::unique_ptr<IModelFilter<CAircraftModelList>> CAircraftModelFilterBar::createModelFilter() const
71 {
72 CAircraftModel::ModelModeFilter mf = CAircraftModel::All;
73 if (ui->cbt_IncludeExclude->checkState() == Qt::Checked)
74 {
75 mf = CAircraftModel::Include;
76 }
77 else if (ui->cbt_IncludeExclude->checkState() == Qt::Unchecked)
78 {
79 mf = CAircraftModel::Exclude;
80 }
81
82 DbKeyStateFilter dbf = swift::misc::db::All;
83 if (ui->cbt_Db->checkState() == Qt::Checked)
84 {
85 dbf = swift::misc::db::Valid;
86 }
87 else if (ui->cbt_Db->checkState() == Qt::Unchecked)
88 {
89 dbf = swift::misc::db::Invalid;
90 }
91
92 return std::make_unique<CAircraftModelFilter>(
93 convertDbId(ui->le_Id->text()), ui->le_ModelString->text(), ui->le_ModelDescription->text(), mf, dbf,
94 ui->cbt_Military->checkState(), ui->cbt_ColorLiveries->checkState(), ui->le_AircraftIcao->text(),
95 ui->le_AircraftManufacturer->text(), ui->le_AirlineIcao->text(), ui->le_AirlineName->text(),
96 ui->le_LiveryCode->text(), ui->le_FileName->text(), ui->comp_CombinedType->getCombinedType(),
97 ui->comp_SimulatorSelector->getValue(), ui->comp_DistributorSelector->getDistributor());
98 }
99
100 void CAircraftModelFilterBar::onRowCountChanged(int count, bool withFilter)
101 {
102 ui->filter_Buttons->onRowCountChanged(count, withFilter);
103 }
104
106 {
107 ui->le_ModelString->clear();
108 ui->le_ModelDescription->clear();
109 ui->le_AircraftIcao->clear();
110 ui->le_AircraftManufacturer->clear();
111 ui->le_AirlineIcao->clear();
112 ui->le_AirlineName->clear();
113 ui->le_LiveryCode->clear();
114 ui->le_FileName->clear();
115 ui->comp_SimulatorSelector->checkAll();
116 ui->comp_DistributorSelector->clear();
117 ui->comp_CombinedType->clear();
118 ui->cbt_IncludeExclude->setCheckState(Qt::PartiallyChecked);
119 ui->cbt_Db->setCheckState(Qt::PartiallyChecked);
120 ui->cbt_Military->setCheckState(Qt::PartiallyChecked);
121 ui->cbt_ColorLiveries->setCheckState(Qt::PartiallyChecked);
122 }
123
124 void CAircraftModelFilterBar::onSimulatorSelectionChanged(const CSimulatorInfo &info)
125 {
126 Q_UNUSED(info);
127 this->triggerFilter();
128 }
129
130 void CAircraftModelFilterBar::onDistributorChanged(const CDistributor &distributor)
131 {
132 Q_UNUSED(distributor);
133 this->triggerFilter();
134 }
135
136 void CAircraftModelFilterBar::onCombinedTypeChanged(const QString &combinedType)
137 {
138 Q_UNUSED(combinedType);
139 this->triggerFilter();
140 }
141
142 void CAircraftModelFilterBar::onCheckBoxChanged(bool state)
143 {
144 Q_UNUSED(state);
146 }
147
148 void CAircraftModelFilterBar::connectTriggerFilterSignals()
149 {
151 connect(ui->le_AircraftManufacturer, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
156 connect(ui->le_ModelDescription, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
159
160 connect(ui->cbt_Db, &QCheckBox::clicked, this, &CAircraftModelFilterBar::onCheckBoxChanged);
161 connect(ui->cbt_IncludeExclude, &QCheckBox::clicked, this, &CAircraftModelFilterBar::onCheckBoxChanged);
162 connect(ui->cbt_Military, &QCheckBox::clicked, this, &CAircraftModelFilterBar::onCheckBoxChanged);
163 connect(ui->cbt_ColorLiveries, &QCheckBox::clicked, this, &CAircraftModelFilterBar::onCheckBoxChanged);
164
165 connect(ui->comp_SimulatorSelector, &CSimulatorSelector::changed, this,
166 &CAircraftModelFilterBar::onSimulatorSelectionChanged);
167 connect(ui->comp_DistributorSelector, &CDbDistributorSelectorComponent::changedDistributor, this,
168 &CAircraftModelFilterBar::onDistributorChanged);
170 &CAircraftModelFilterBar::onCombinedTypeChanged);
171 }
172} // namespace swift::gui::filters
void changedCombinedType(const QString &cominedType)
Combined type has beend changed.
void changedDistributor(const swift::misc::simulation::CDistributor &distributor)
Distributor was changed.
void changed(const swift::misc::simulation::CSimulatorInfo &simulator)
Value has been changed.
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.
CAircraftModelFilterBar(QWidget *parent=nullptr)
Constructor.
virtual void triggerFilter()
Trigger filtering.
void setButtonsAndCount(CFilterBarButtons *buttons)
Set and connect filter bar buttons.
static int convertDbId(const QString &candidate)
Convert DB id.
CFilterWidget(QWidget *parent=nullptr)
Constructor.
Value object encapsulating information of software distributor.
Definition distributor.h:33
Simple hardcoded info about the corresponding simulator.
High level reusable GUI components.
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)
QObject * parent() const const
QWidget(QWidget *parent, Qt::WindowFlags f)
void show()