swift
aircrafticaofilter.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 
7 
8 using namespace swift::misc::aviation;
9 
10 namespace swift::gui::models
11 {
12  CAircraftIcaoFilter::CAircraftIcaoFilter(int id, const QString &designator, const QString &family,
13  const QString &manufacturer, const QString &description,
14  const QString &combinedType)
15  : m_id(id), m_designator(designator.trimmed().toUpper()), m_family(family.trimmed().toUpper()),
16  m_manufacturer(manufacturer.trimmed()), m_description(description.trimmed()),
17  m_combinedType(combinedType.trimmed().toUpper())
18  {
19  m_valid = !(m_id < 0 && m_combinedType.isEmpty() && m_designator.isEmpty() && m_family.isEmpty() &&
20  m_description.isEmpty() && m_manufacturer.isEmpty());
21  }
22 
24  {
25  if (!this->isValid()) { return inContainer; }
26  CAircraftIcaoCodeList outContainer;
27  const bool filterCombinedCode = !m_combinedType.isEmpty() && !m_combinedType.contains('-') &&
28  CAircraftIcaoCode::isValidCombinedType(m_combinedType);
29 
30  for (const CAircraftIcaoCode &icao : inContainer)
31  {
32  if (m_id >= 0)
33  {
34  // search only for id
35  if (icao.isLoadedFromDb() && icao.getDbKey() == m_id)
36  {
37  outContainer.push_back(icao);
38  break;
39  }
40  continue;
41  }
42  if (!m_designator.isEmpty())
43  {
44  if (!this->stringMatchesFilterExpression(icao.getDesignator(), m_designator)) { continue; }
45  }
46  if (!m_family.isEmpty())
47  {
48  if (!this->stringMatchesFilterExpression(icao.getFamily(), m_family)) { continue; }
49  }
50  if (!m_manufacturer.isEmpty())
51  {
52  if (!this->stringMatchesFilterExpression(icao.getManufacturer(), m_manufacturer)) { continue; }
53  }
54  if (!m_description.isEmpty())
55  {
56  const bool ignore =
57  !this->stringMatchesFilterExpression(icao.getModelDescription(), m_description) &&
58  !this->stringMatchesFilterExpression(icao.getModelSwiftDescription(), m_description) &&
59  !this->stringMatchesFilterExpression(icao.getModelIataDescription(), m_description);
60  if (ignore) { continue; }
61  }
62  if (filterCombinedCode)
63  {
64  if (icao.getCombinedType() != m_combinedType) { continue; }
65  }
66  outContainer.push_back(icao);
67  }
68  return outContainer;
69  }
70 } // namespace swift::gui::models
virtual swift::misc::aviation::CAircraftIcaoCodeList filter(const swift::misc::aviation::CAircraftIcaoCodeList &inContainer) const
Used container data.
bool stringMatchesFilterExpression(const QString &value, const QString &filter, Qt::CaseSensitivity cs=Qt::CaseInsensitive) const
Standard string search supporting wildcard at begin and end: "*xyz", "abc*".
Definition: modelfilter.cpp:31
void push_back(const T &value)
Appends an element at the end of the sequence.
Definition: sequence.h:305
Value object for ICAO classification.
Value object encapsulating a list of ICAO codes.
Models to be used with views, mainly QTableView.