swift
liveryfilter.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 #include "misc/aviation/livery.h"
8 
9 using namespace swift::misc::aviation;
10 
11 namespace swift::gui::models
12 {
13  CLiveryFilter::CLiveryFilter(int id, const QString &combinedCode, const QString &descriptiom,
14  const QString &airlineDesignator, const swift::misc::CRgbColor &fuselageColor,
15  const swift::misc::CRgbColor &tailColor, double maxColorDistance, bool colorLiveries,
16  bool airlineLiveries)
17  : m_id(id), m_combinedCode(combinedCode.trimmed().toUpper()), m_description(descriptiom),
18  m_airlineIcaoDesignator(airlineDesignator.trimmed().toUpper()), m_fuselageColor(fuselageColor),
19  m_tailColor(tailColor), m_maxColorDistance(maxColorDistance), m_colorLiveries(colorLiveries),
20  m_airlineLiveries(airlineLiveries)
21  {
22  m_valid = valid();
23  }
24 
25  CLiveryList CLiveryFilter::filter(const CLiveryList &inContainer) const
26  {
27  if (!this->isEnabled()) { return inContainer; }
28  CLiveryList outContainer;
29  bool checkLiveryType = filterByLiveryType();
30  for (const CLivery &livery : inContainer)
31  {
32  if (m_id >= 0)
33  {
34  // search only for id
35  if (livery.isLoadedFromDb() && livery.getDbKey() == m_id)
36  {
37  outContainer.push_back(livery);
38  break;
39  }
40  continue;
41  }
42  if (checkLiveryType)
43  {
44  if (!m_colorLiveries && livery.isColorLivery()) { continue; }
45  if (!m_airlineLiveries && livery.isAirlineLivery()) { continue; }
46  }
47  if (!m_combinedCode.isEmpty())
48  {
49  if (!this->stringMatchesFilterExpression(livery.getCombinedCode(), m_combinedCode)) { continue; }
50  }
51  if (!m_description.isEmpty())
52  {
53  if (!this->stringMatchesFilterExpression(livery.getDescription(), m_description)) { continue; }
54  }
55  if (!m_airlineIcaoDesignator.isEmpty())
56  {
57  if (!this->stringMatchesFilterExpression(livery.getAirlineIcaoCode().getVDesignator(),
58  m_airlineIcaoDesignator))
59  {
60  continue;
61  }
62  }
63  if (m_fuselageColor.isValid())
64  {
65  if (livery.getColorFuselage().colorDistance(m_fuselageColor) > m_maxColorDistance) { continue; }
66  }
67  if (m_tailColor.isValid())
68  {
69  if (livery.getColorTail().colorDistance(m_tailColor) > m_maxColorDistance) { continue; }
70  }
71  outContainer.push_back(livery);
72  }
73  return outContainer;
74  }
75 
76  bool CLiveryFilter::valid() const
77  {
78  if (filterByLiveryType()) { return true; }
79  if (m_fuselageColor.isValid() || m_tailColor.isValid()) { return true; }
80  return !(m_id < 0 && m_combinedCode.isEmpty() && m_description.isEmpty() && m_airlineIcaoDesignator.isEmpty());
81  }
82 
83  bool CLiveryFilter::filterByLiveryType() const
84  {
85  return (m_colorLiveries && !m_airlineLiveries) || (!m_colorLiveries && m_airlineLiveries);
86  }
87 
88 } // namespace swift::gui::models
virtual swift::misc::aviation::CLiveryList filter(const swift::misc::aviation::CLiveryList &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
bool isValid() const
Valid?
Definition: rgbcolor.cpp:140
void push_back(const T &value)
Appends an element at the end of the sequence.
Definition: sequence.h:305
Value object encapsulating information about an airpot.
Definition: livery.h:29
Value object for a list of airports.
Definition: liverylist.h:29
Models to be used with views, mainly QTableView.