swift
Loading...
Searching...
No Matches
aircraftmodelfilter.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
10
11using namespace swift::misc::simulation;
12
13namespace swift::gui::models
14{
15 CAircraftModelFilter::CAircraftModelFilter(int id, const QString &modelKey, const QString &description,
16 CAircraftModel::ModelModeFilter modelMode,
17 swift::misc::db::DbKeyStateFilter dbKeyFilter, Qt::CheckState military,
18 Qt::CheckState colorLiveries, const QString &aircraftIcao,
19 const QString &aircraftManufacturer, const QString &airlineIcao,
20 const QString &airlineName, const QString &liveryCode,
21 const QString &fileName, const QString &combinedType,
22 const CSimulatorInfo &simInfo, const CDistributor &distributor)
23 : m_id(id), m_modelKey(modelKey.trimmed().toUpper()), m_description(description.trimmed()),
24 m_modelMode(modelMode), m_dbKeyFilter(dbKeyFilter), m_military(military), m_colorLiveries(colorLiveries),
25 m_aircraftIcao(aircraftIcao.trimmed().toUpper()),
26 m_aircraftManufacturer(aircraftManufacturer.trimmed().toUpper()),
27 m_airlineIcao(airlineIcao.trimmed().toUpper()), m_airlineName(airlineName.trimmed().toUpper()),
28 m_liveryCode(liveryCode.trimmed().toUpper()), m_fileName(fileName), m_combinedType(combinedType),
29 m_simulatorInfo(simInfo), m_distributor(distributor)
30 {
31 m_valid = this->valid();
32 }
33
35 {
36 if (!this->isEnabled())
37 {
38 return inContainer;
39 }
40 CAircraftModelList outContainer;
41 for (const CAircraftModel &model : inContainer)
42 {
43 if (m_id >= 0)
44 {
45 // search only for id
46 if (model.isLoadedFromDb() && model.getDbKey() == m_id)
47 {
48 outContainer.push_back(model);
49 break;
50 }
51 continue;
52 }
53
54 if (!m_simulatorInfo.isAllSimulators())
55 {
56 if (!m_simulatorInfo.matchesAny(model.getSimulator()))
57 {
58 continue;
59 }
60 }
61
62 if (!m_modelKey.isEmpty())
63 {
64 if (!this->stringMatchesFilterExpression(model.getModelString(), m_modelKey))
65 {
66 continue;
67 }
68 }
69
70 if (m_military != Qt::PartiallyChecked)
71 {
72 if (m_military == Qt::Checked)
73 {
74 // military only
75 if (!model.isMilitary())
76 {
77 continue;
78 }
79 }
80 else if (m_military == Qt::Unchecked)
81 {
82 // civilian only
83 if (model.isMilitary())
84 {
85 continue;
86 }
87 }
88 }
89
90 if (m_colorLiveries != Qt::PartiallyChecked)
91 {
92 if (m_colorLiveries == Qt::Checked)
93 {
94 // only color liveries
95 if (!model.getLivery().isColorLivery())
96 {
97 continue;
98 }
99 }
100 else if (m_colorLiveries == Qt::Unchecked)
101 {
102 // Only airline liveries
103 if (model.getLivery().isColorLivery())
104 {
105 continue;
106 }
107 }
108 }
109
110 if (!m_description.isEmpty())
111 {
112 if (!this->stringMatchesFilterExpression(model.getDescription(), m_description))
113 {
114 continue;
115 }
116 }
117
118 if (m_modelMode != CAircraftModel::All && m_modelMode != CAircraftModel::Undefined)
119 {
120 if (!model.matchesMode(m_modelMode))
121 {
122 continue;
123 }
124 }
125
126 if (m_dbKeyFilter != swift::misc::db::All && m_dbKeyFilter != swift::misc::db::Undefined)
127 {
128 if (!model.matchesDbKeyState(m_dbKeyFilter))
129 {
130 continue;
131 }
132 }
133
134 if (!m_fileName.isEmpty())
135 {
136 if (!this->stringMatchesFilterExpression(model.getFileName(), m_fileName))
137 {
138 continue;
139 }
140 }
141
142 if (!m_aircraftIcao.isEmpty())
143 {
144 if (!this->stringMatchesFilterExpression(model.getAircraftIcaoCodeDesignator(), m_aircraftIcao))
145 {
146 continue;
147 }
148 }
149
150 if (!m_aircraftManufacturer.isEmpty())
151 {
152 if (!this->stringMatchesFilterExpression(model.getAircraftIcaoCode().getManufacturer(),
153 m_aircraftManufacturer))
154 {
155 continue;
156 }
157 }
158
159 if (!m_airlineIcao.isEmpty())
160 {
161 if (!this->stringMatchesFilterExpression(model.getAirlineIcaoCodeDesignator(), m_airlineIcao))
162 {
163 continue;
164 }
165 }
166
167 if (!m_airlineName.isEmpty())
168 {
169 if (!this->stringMatchesFilterExpression(model.getAirlineIcaoCode().getName(), m_airlineName))
170 {
171 continue;
172 }
173 }
174
175 if (!m_liveryCode.isEmpty())
176 {
177 if (!this->stringMatchesFilterExpression(model.getLivery().getCombinedCode(), m_liveryCode))
178 {
179 continue;
180 }
181 }
182
183 if (m_distributor.hasValidDbKey())
184 {
185 if (!model.getDistributor().matchesKeyOrAlias(m_distributor))
186 {
187 continue;
188 }
189 }
190
191 if (!m_combinedType.isEmpty())
192 {
193 if (!model.getAircraftIcaoCode().matchesCombinedType(m_combinedType))
194 {
195 continue;
196 }
197 }
198
199 outContainer.push_back(model);
200 }
201 return outContainer;
202 }
203
204 bool CAircraftModelFilter::valid() const
205 {
206 const bool allEmpty = m_id < 0 && m_modelKey.isEmpty() && m_description.isEmpty() &&
207 m_aircraftManufacturer.isEmpty() && m_aircraftIcao.isEmpty() && m_airlineIcao.isEmpty() &&
208 m_airlineName.isEmpty() && m_liveryCode.isEmpty() && m_fileName.isEmpty() &&
209 m_combinedType.isEmpty();
210 if (!allEmpty)
211 {
212 return true;
213 }
214 const bool noSim = m_simulatorInfo.isNoSimulator() || m_simulatorInfo.isAllSimulators();
215 const bool noModelMode = (m_modelMode == CAircraftModel::Undefined || m_modelMode == CAircraftModel::All);
216 const bool noDbState = (m_dbKeyFilter == swift::misc::db::Undefined || m_dbKeyFilter == swift::misc::db::All);
217 const bool noKey = !m_distributor.hasValidDbKey();
218 const bool noColorRestriction = (m_colorLiveries == Qt::PartiallyChecked);
219 const bool noMilitary = (m_military == Qt::PartiallyChecked);
220 return !(noSim && noModelMode && noDbState && noKey && noMilitary && noColorRestriction);
221 }
222} // namespace swift::gui::models
swift::misc::simulation::CAircraftModelList filter(const swift::misc::simulation::CAircraftModelList &inContainer) const
Used container data.
CAircraftModelFilter(int id, const QString &modelKey, const QString &description, swift::misc::simulation::CAircraftModel::ModelModeFilter modelMode, swift::misc::db::DbKeyStateFilter dbKeyFilter, Qt::CheckState military, Qt::CheckState colorLiveries, const QString &aircraftIcao, const QString &aircraftManufacturer, const QString &airlineIcao, const QString &airlineName, const QString &liveryCode, const QString &fileName, const QString &combinedType, const swift::misc::simulation::CSimulatorInfo &simInfo=swift::misc::simulation::CSimulatorInfo::allSimulators(), const swift::misc::simulation::CDistributor &distributor=swift::misc::simulation::CDistributor())
Constructor.
bool stringMatchesFilterExpression(const QString &value, const QString &filter, Qt::CaseSensitivity cs=Qt::CaseInsensitive) const
void push_back(const T &value)
Appends an element at the end of the sequence.
Definition sequence.h:308
bool hasValidDbKey() const
Has valid DB key.
Definition datastore.h:195
Aircraft model (used by another pilot, my models on disk).
Value object encapsulating a list of aircraft models.
Value object encapsulating information of software distributor.
Definition distributor.h:33
Simple hardcoded info about the corresponding simulator.
bool isAllSimulators() const
Is all simulators?
bool isNoSimulator() const
No simulator?
Models to be used with views, mainly QTableView.
bool isEmpty() const const
CheckState