swift
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 
16 #include "gui/uppercasevalidator.h"
17 #include "misc/aviation/livery.h"
19 
20 using namespace swift::misc::aviation;
21 using namespace swift::gui::models;
22 using namespace swift::gui::components;
23 
24 namespace swift::gui::filters
25 {
26  CLiveryFilterBar::CLiveryFilterBar(QWidget *parent) : CFilterWidget(parent), ui(new Ui::CLiveryFilterBar)
27  {
28  ui->setupUi(this);
29  this->setButtonsAndCount(ui->filter_Buttons);
30 
31  connect(ui->le_AirlineIcaoCode, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
32  connect(ui->le_Description, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
33  connect(ui->le_LiveryCode, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
34  connect(ui->le_Id, &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);
37  connect(ui->cb_Airlines, &QCheckBox::released, this, &CFilterWidget::triggerFilter);
38  connect(ui->cb_Colors, &QCheckBox::released, this, &CFilterWidget::triggerFilter);
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 
60  void CLiveryFilterBar::filter(const CLivery &livery)
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) { ui->filter_Buttons->clickButton(CFilterBarButtons::Filter); }
81  else { ui->filter_Buttons->clickButton(CFilterBarButtons::RemoveFilter); }
82  }
83 
84  void CLiveryFilterBar::filter(const CAirlineIcaoCode &airlineIcao)
85  {
86  if (!airlineIcao.hasValidDesignator()) { return; }
87  ui->le_AirlineIcaoCode->setText(airlineIcao.getVDesignator());
88  ui->filter_Buttons->clickButton(CFilterBarButtons::Filter);
89  }
90 
91  void CLiveryFilterBar::onRowCountChanged(int count, bool withFilter)
92  {
93  ui->filter_Buttons->onRowCountChanged(count, withFilter);
94  }
95 
97  {
98  ui->le_Id->clear();
99  ui->le_AirlineIcaoCode->clear();
100  ui->le_LiveryCode->clear();
101  ui->le_Description->clear();
102  ui->color_Fuselage->clear();
103  ui->color_Tail->clear();
104  ui->hs_ColorDistance->setValue(qRound(0.25 * 100.0));
105  ui->cb_Airlines->setChecked(true);
106  ui->cb_Colors->setChecked(true);
107  }
108 
109  void CLiveryFilterBar::onColorChanged(const swift::misc::CRgbColor &color)
110  {
111  this->triggerFilter();
112  Q_UNUSED(color);
113  }
114 
115  void CLiveryFilterBar::onColorDistanceChanged(int distance)
116  {
117  this->triggerFilter();
118  Q_UNUSED(distance);
119  }
120 
121 } // namespace swift::gui::filters
Base for filter dialog.
Definition: filterwidget.h:21
virtual void triggerFilter()
Trigger filtering.
void setButtonsAndCount(CFilterBarButtons *buttons)
Set and connect filter bar buttons.
static int convertDbId(const QString &candidate)
Convert DB id.
virtual void onRowCountChanged(int count, bool withFilter)
Row count has been changed.
virtual 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.
virtual void clearForm()
Clear form.
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 CRgbColor & getColorTail() const
Get tail color.
Definition: livery.h:95
const QString & getAirlineIcaoCodeDesignator() const
Corresponding airline designator, if any.
Definition: livery.h:68
bool hasValidAirlineDesignator() const
Airline available?
Definition: livery.cpp:157
const QString & getCombinedCode() const
Combined code.
Definition: livery.h:71
bool hasCombinedCode() const
Livery combined code available?
Definition: livery.cpp:161
bool isColorLivery() const
Color livery?
Definition: livery.cpp:180
const CRgbColor & getColorFuselage() const
Get fuselage color.
Definition: livery.h:92
High level reusable GUI components.
Definition: aboutdialog.cpp:13
Filter to search data sets.
Models to be used with views, mainly QTableView.