swift
Loading...
Searching...
No Matches
liveryfilterbar.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 <QSlider>
9#include <QtGlobal>
10
11#include "ui_liveryfilterbar.h"
12
19
20using namespace swift::misc::aviation;
21using namespace swift::gui::models;
22using namespace swift::gui::components;
23
24namespace swift::gui::filters
25{
27 {
28 ui->setupUi(this);
29 this->setButtonsAndCount(ui->filter_Buttons);
30
31 connect(ui->le_AirlineIcaoCode, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
35 connect(ui->color_Fuselage, &CColorSelector::colorChanged, this, &CLiveryFilterBar::onColorChanged);
36 connect(ui->color_Tail, &CColorSelector::colorChanged, this, &CLiveryFilterBar::onColorChanged);
39 connect(ui->hs_ColorDistance, &QSlider::valueChanged, this, &CLiveryFilterBar::onColorDistanceChanged);
40
41 ui->le_AirlineIcaoCode->setValidator(new CUpperCaseValidator(ui->le_AirlineIcaoCode));
42 ui->le_LiveryCode->setValidator(new CUpperCaseValidator(ui->le_LiveryCode));
43 ui->le_Id->setValidator(new QIntValidator(ui->le_Id));
44
45 // reset form
46 this->clearForm();
47 }
48
50
51 std::unique_ptr<models::IModelFilter<CLiveryList>> CLiveryFilterBar::createModelFilter() const
52 {
53 const double maxColorDistance = ui->hs_ColorDistance->value() / 100.0;
54 return std::make_unique<CLiveryFilter>(
55 convertDbId(ui->le_Id->text()), ui->le_LiveryCode->text(), ui->le_Description->text(),
56 ui->le_AirlineIcaoCode->text(), ui->color_Fuselage->getColor(), ui->color_Tail->getColor(),
57 maxColorDistance, ui->cb_Colors->isChecked(), ui->cb_Airlines->isChecked());
58 }
59
61 {
62 this->clearForm();
63 bool filter = false;
64 if (livery.hasCombinedCode())
65 {
66 ui->le_LiveryCode->setText(livery.getCombinedCode());
67 filter = true;
68 }
69 if (livery.hasValidAirlineDesignator())
70 {
71 ui->le_AirlineIcaoCode->setText(livery.getAirlineIcaoCodeDesignator());
72 filter = true;
73 }
74 if (livery.isColorLivery())
75 {
76 ui->color_Fuselage->setColor(livery.getColorFuselage());
77 ui->color_Tail->setColor(livery.getColorTail());
78 filter = true;
79 }
80 if (filter)
81 {
82 ui->filter_Buttons->clickButton(CFilterBarButtons::Filter);
83 }
84 else
85 {
86 ui->filter_Buttons->clickButton(CFilterBarButtons::RemoveFilter);
87 }
88 }
89
91 {
92 if (!airlineIcao.hasValidDesignator())
93 {
94 return;
95 }
96 ui->le_AirlineIcaoCode->setText(airlineIcao.getVDesignator());
97 ui->filter_Buttons->clickButton(CFilterBarButtons::Filter);
98 }
99
100 void CLiveryFilterBar::onRowCountChanged(int count, bool withFilter)
101 {
102 ui->filter_Buttons->onRowCountChanged(count, withFilter);
103 }
104
106 {
107 ui->le_Id->clear();
108 ui->le_AirlineIcaoCode->clear();
109 ui->le_LiveryCode->clear();
110 ui->le_Description->clear();
111 ui->color_Fuselage->clear();
112 ui->color_Tail->clear();
113 ui->hs_ColorDistance->setValue(qRound(0.25 * 100.0));
114 ui->cb_Airlines->setChecked(true);
115 ui->cb_Colors->setChecked(true);
116 }
117
118 void CLiveryFilterBar::onColorChanged(const swift::misc::CRgbColor &color)
119 {
120 this->triggerFilter();
121 Q_UNUSED(color);
122 }
123
124 void CLiveryFilterBar::onColorDistanceChanged(int distance)
125 {
126 this->triggerFilter();
127 Q_UNUSED(distance);
128 }
129
130} // namespace swift::gui::filters
void colorChanged(const swift::misc::CRgbColor &color)
Color has been changed.
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.
void onRowCountChanged(int count, bool withFilter)
Row count has been changed.
std::unique_ptr< swift::gui::models::IModelFilter< swift::misc::aviation::CLiveryList > > createModelFilter() const
Get the filter, this is the filter itself, not its widget or dialog.
CLiveryFilterBar(QWidget *parent=nullptr)
Constructor.
void filter(const swift::misc::aviation::CLivery &livery)
Filter by livery values.
Value object for ICAO classification.
bool hasValidDesignator() const
Airline designator available?
QString getVDesignator() const
Get airline, e.g. "DLH", but "VMVA" for virtual airlines.
Value object encapsulating information about an airpot.
Definition livery.h:29
const QString & getCombinedCode() const
Combined code.
Definition livery.h:71
bool hasValidAirlineDesignator() const
Airline available?
Definition livery.cpp:164
const CRgbColor & getColorTail() const
Get tail color.
Definition livery.h:95
bool hasCombinedCode() const
Livery combined code available?
Definition livery.cpp:168
bool isColorLivery() const
Color livery?
Definition livery.cpp:190
const QString & getAirlineIcaoCodeDesignator() const
Corresponding airline designator, if any.
Definition livery.h:68
const CRgbColor & getColorFuselage() const
Get fuselage color.
Definition livery.h:92
High level reusable GUI components.
Filter to search data sets.
Models to be used with views, mainly QTableView.
void valueChanged(int value)
void returnPressed()
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QObject * parent() const const
QWidget(QWidget *parent, Qt::WindowFlags f)