swift
Loading...
Searching...
No Matches
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
8
9using namespace swift::misc::aviation;
10
11namespace 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
26 {
27 if (!this->isEnabled())
28 {
29 return inContainer;
30 }
31 CLiveryList outContainer;
32 bool checkLiveryType = filterByLiveryType();
33 for (const CLivery &livery : inContainer)
34 {
35 if (m_id >= 0)
36 {
37 // search only for id
38 if (livery.isLoadedFromDb() && livery.getDbKey() == m_id)
39 {
40 outContainer.push_back(livery);
41 break;
42 }
43 continue;
44 }
45 if (checkLiveryType)
46 {
47 if (!m_colorLiveries && livery.isColorLivery())
48 {
49 continue;
50 }
51 if (!m_airlineLiveries && livery.isAirlineLivery())
52 {
53 continue;
54 }
55 }
56 if (!m_combinedCode.isEmpty())
57 {
58 if (!this->stringMatchesFilterExpression(livery.getCombinedCode(), m_combinedCode))
59 {
60 continue;
61 }
62 }
63 if (!m_description.isEmpty())
64 {
65 if (!this->stringMatchesFilterExpression(livery.getDescription(), m_description))
66 {
67 continue;
68 }
69 }
70 if (!m_airlineIcaoDesignator.isEmpty())
71 {
72 if (!this->stringMatchesFilterExpression(livery.getAirlineIcaoCode().getVDesignator(),
73 m_airlineIcaoDesignator))
74 {
75 continue;
76 }
77 }
78 if (m_fuselageColor.isValid())
79 {
80 if (livery.getColorFuselage().colorDistance(m_fuselageColor) > m_maxColorDistance)
81 {
82 continue;
83 }
84 }
85 if (m_tailColor.isValid())
86 {
87 if (livery.getColorTail().colorDistance(m_tailColor) > m_maxColorDistance)
88 {
89 continue;
90 }
91 }
92 outContainer.push_back(livery);
93 }
94 return outContainer;
95 }
96
97 bool CLiveryFilter::valid() const
98 {
99 if (filterByLiveryType())
100 {
101 return true;
102 }
103 if (m_fuselageColor.isValid() || m_tailColor.isValid())
104 {
105 return true;
106 }
107 return !(m_id < 0 && m_combinedCode.isEmpty() && m_description.isEmpty() && m_airlineIcaoDesignator.isEmpty());
108 }
109
110 bool CLiveryFilter::filterByLiveryType() const
111 {
112 return (m_colorLiveries && !m_airlineLiveries) || (!m_colorLiveries && m_airlineLiveries);
113 }
114
115} // namespace swift::gui::models
CLiveryFilter(int id, const QString &combinedCode, const QString &descriptiom, const QString &airlineDesignator, const swift::misc::CRgbColor &fuselageColor, const swift::misc::CRgbColor &tailColor, double maxColorDistance, bool colorLiveries, bool airlineLiveries)
Constructor.
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
bool isValid() const
Valid?
Definition rgbcolor.cpp:153
void push_back(const T &value)
Appends an element at the end of the sequence.
Definition sequence.h:308
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.
bool isEmpty() const const