swift
aircrafticaofilterbar.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 <QCompleter>
7 #include <QLineEdit>
8 #include <QString>
9 
10 #include "ui_aircrafticaofilterbar.h"
11 
12 #include "core/webdataservices.h"
15 #include "gui/guiapplication.h"
17 #include "gui/uppercasevalidator.h"
20 
21 using namespace swift::misc::aviation;
22 using namespace swift::gui;
23 using namespace swift::gui::models;
24 using namespace swift::core;
25 
27 {
28  CAircraftIcaoFilterBar::CAircraftIcaoFilterBar(QWidget *parent)
29  : CFilterWidget(parent), ui(new Ui::CAircraftIcaoFilterBar)
30  {
31  ui->setupUi(this);
32  this->setButtonsAndCount(ui->filter_Buttons);
33  connect(ui->le_Designator, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
34  connect(ui->le_Manufacturer, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
35  connect(ui->le_Description, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
36  connect(ui->le_Id, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
37  connect(ui->le_Family, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter);
38 
39  ui->le_Designator->setValidator(new CUpperCaseValidator(ui->le_Designator));
40  ui->le_Family->setValidator(new CUpperCaseValidator(ui->le_Family));
41  ui->le_Manufacturer->setValidator(new CUpperCaseValidator(ui->le_Manufacturer));
42  ui->le_Id->setValidator(new QIntValidator(ui->le_Id));
43 
44  if (sGui && sGui->hasWebDataServices())
45  {
46  connect(sGui->getWebDataServices(), &CWebDataServices::swiftDbAircraftIcaoRead, this,
47  &CAircraftIcaoFilterBar::initCompleters);
48  this->initCompleters();
49  }
50 
51  // reset form
52  this->clearForm();
53  }
54 
56 
57  std::unique_ptr<swift::gui::models::IModelFilter<CAircraftIcaoCodeList>>
59  {
60  return std::make_unique<CAircraftIcaoFilter>(
61  convertDbId(ui->le_Id->text()), ui->le_Designator->text(), ui->le_Family->text(),
62  ui->le_Manufacturer->text(), ui->le_Description->text(), ui->combinedType_Selector->getCombinedType());
63  }
64 
66  {
67  this->clearForm();
68  bool filter = false;
69  if (icao.hasDesignator())
70  {
71  ui->le_Designator->setText(icao.getDesignator());
72  filter = true;
73  }
74  if (icao.hasManufacturer())
75  {
76  ui->le_Manufacturer->setText(icao.getManufacturer());
77  filter = true;
78  }
79  if (icao.hasModelDescription())
80  {
81  ui->le_Description->setText("*" + icao.getModelDescription() + "*");
82  filter = true;
83  }
84  if (filter) { ui->filter_Buttons->clickButton(CFilterBarButtons::Filter); }
85  else { ui->filter_Buttons->clickButton(CFilterBarButtons::RemoveFilter); }
86  }
87 
88  void CAircraftIcaoFilterBar::hideDescriptionField(bool hide) { ui->le_Description->setVisible(!hide); }
89 
90  void CAircraftIcaoFilterBar::onRowCountChanged(int count, bool withFilter)
91  {
92  ui->filter_Buttons->onRowCountChanged(count, withFilter);
93  }
94 
96  {
97  ui->le_Id->clear();
98  ui->le_Designator->clear();
99  ui->le_Manufacturer->clear();
100  ui->le_Description->clear();
101  ui->combinedType_Selector->clear();
102  }
103 
104  void CAircraftIcaoFilterBar::initCompleters()
105  {
106  if (m_hasCompleters) { return; }
107  if (!sGui || !sGui->hasWebDataServices()) { return; }
108 
109  if (sGui->getWebDataServices()->getAircraftIcaoCodesCount() < 1) { return; }
110  m_hasCompleters = true;
112  const QStringList designators = codes.allDesignators().values();
113  ui->le_Designator->setCompleter(new QCompleter(designators, ui->le_Designator));
114  const QStringList families = codes.allFamilies().values();
115  ui->le_Family->setCompleter(new QCompleter(families, ui->le_Family));
116  const QStringList manufacturers = codes.allManufacturers().values();
117  ui->le_Manufacturer->setCompleter(new QCompleter(manufacturers, ui->le_Manufacturer));
118  }
119 } // namespace swift::gui::filters
bool hasWebDataServices() const
Web data services available?
CWebDataServices * getWebDataServices() const
Get the web data services.
int getAircraftIcaoCodesCount() const
Aircraft ICAO codes count.
swift::misc::aviation::CAircraftIcaoCodeList getAircraftIcaoCodes() const
Aircraft ICAO codes.
std::unique_ptr< swift::gui::models::IModelFilter< swift::misc::aviation::CAircraftIcaoCodeList > > createModelFilter() const
Get the filter, this is the filter itself, not its widget or dialog.
void filter(const swift::misc::aviation::CAircraftIcaoCode &icao)
Filter by ICAO object as default values.
void hideDescriptionField(bool hide)
Hide the description.
virtual void onRowCountChanged(int count, bool withFilter)
Row count has been changed.
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.
Value object for ICAO classification.
bool hasModelDescription() const
Has model description?
bool hasDesignator() const
Aircraft designator?
const QString & getDesignator() const
Get ICAO designator, e.g. "B737".
const QString & getModelDescription() const
Get IACO model description, e.g. "A-330-200".
const QString & getManufacturer() const
Get manufacturer, e.g. "Airbus".
Value object encapsulating a list of ICAO codes.
QSet< QString > allFamilies() const
All families, no duplicates.
QSet< QString > allManufacturers(bool onlyKnownDesignators=true) const
All manufacturers.
QSet< QString > allDesignators(bool noUnspecified=true) const
All ICAO codes, no duplicates.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Backend services of the swift project, like dealing with the network or the simulators.
Definition: actionbind.cpp:7
Filter to search data sets.
Models to be used with views, mainly QTableView.
GUI related classes.