swift
dbairlineicaoselectorcomponent.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 <QLabel>
8 #include <QLineEdit>
9 #include <Qt>
10 
11 #include "ui_dbairlineicaoselectorcomponent.h"
12 
13 #include "core/webdataservices.h"
14 #include "gui/guiapplication.h"
15 #include "gui/uppercasevalidator.h"
18 #include "misc/stringutils.h"
19 
20 using namespace swift::core;
21 using namespace swift::gui;
22 using namespace swift::misc;
23 using namespace swift::misc::db;
24 using namespace swift::misc::network;
25 using namespace swift::misc::aviation;
26 
27 namespace swift::gui::components
28 {
29  CDbAirlineIcaoSelectorComponent::CDbAirlineIcaoSelectorComponent(QWidget *parent)
31  {
32  ui->setupUi(this);
33  this->setFocusProxy(ui->le_Airline);
34  ui->le_Airline->setValidator(new CUpperCaseValidator(this));
35  connect(ui->le_Airline, &QLineEdit::editingFinished, this, &CDbAirlineIcaoSelectorComponent::onDataChanged);
36  }
37 
39 
40  void CDbAirlineIcaoSelectorComponent::setReadOnly(bool readOnly) { ui->le_Airline->setReadOnly(readOnly); }
41 
43  {
44  const bool changed = CDbAirlineIcaoSelectorBase::setAirlineIcao(icao);
45 
46  // Always update GUI regardless of changed because of formattimg
47  const QString icaoStr(m_display == DisplayVDesignatorAndId ? this->m_currentIcao.getVDesignatorDbKey() :
48  this->m_currentIcao.getCombinedStringWithKey());
49  ui->le_Airline->setText(icaoStr);
50  ui->lbl_Description->setText(this->m_currentIcao.getName());
51  return changed;
52  }
53 
55  {
56  ui->lbl_Description->setVisible(description);
57  }
58 
60  {
61  ui->le_Airline->clear();
62  ui->lbl_Description->clear();
63  }
64 
66  {
67  return stripDesignatorFromCompleterString(ui->le_Airline->text());
68  }
69 
70  const QStringList &CDbAirlineIcaoSelectorComponent::completerStrings()
71  {
72  // done for performance reasons
73  // init only once, future instance can share thte list
74  // only to be called when data are read!
75  static const QStringList cs(
77  return cs;
78  }
79 
81  {
82  QCompleter *c = new QCompleter(completerStrings(), this);
83  c->setCaseSensitivity(Qt::CaseInsensitive);
84  c->setCompletionMode(QCompleter::PopupCompletion);
85  c->setMaxVisibleItems(10);
86  const int w5chars = c->popup()->fontMetrics().size(Qt::TextSingleLine, "FooBa").width();
87  c->popup()->setMinimumWidth(w5chars * 10);
88  ui->le_Airline->setCompleter(c);
89  return c;
90  }
91 
92  void CDbAirlineIcaoSelectorComponent::onDataChanged()
93  {
94  if (!sGui) { return; }
95  QString s(ui->le_Airline->text());
96  if (s.isEmpty()) { return; }
97  CAirlineIcaoCode icao;
98  int dbKey = CDatastoreUtility::extractIntegerKey(s);
99  if (dbKey >= 0) { icao = sGui->getWebDataServices()->getAirlineIcaoCodeForDbKey(dbKey); }
100  else
101  {
102  const QString designator = this->getRawDesignator();
104  }
105  this->setAirlineIcao(icao);
106  }
107 } // namespace swift::gui::components
CWebDataServices * getWebDataServices() const
Get the web data services.
swift::misc::aviation::CAirlineIcaoCode getAirlineIcaoCodeForDbKey(int id) const
ICAO code for id.
swift::misc::aviation::CAirlineIcaoCode smartAirlineIcaoSelector(const swift::misc::aviation::CAirlineIcaoCode &code, const swift::misc::aviation::CCallsign &callsign=swift::misc::aviation::CCallsign()) const
Smart airline selector.
swift::misc::aviation::CAirlineIcaoCodeList getAirlineIcaoCodes() const
Airline ICAO codes.
virtual bool setAirlineIcao(const swift::misc::aviation::CAirlineIcaoCode &icao)
Current airline ICAO.
swift::misc::aviation::CAirlineIcaoCode m_currentIcao
current ICAO object
virtual QCompleter * createCompleter()
Create a new completer.
void displayWithIcaoDescription(bool description)
Display ICAO description.
virtual bool setAirlineIcao(const swift::misc::aviation::CAirlineIcaoCode &icao)
Current airline ICAO.
Value object for ICAO classification.
QString getVDesignatorDbKey() const
Get VDesignator plus key.
const QString & getName() const
Get name, e.g. "Lufthansa".
QStringList toIcaoDesignatorCompleterStrings(bool combinedString=true, bool sort=true) const
String list for completion by ICAO designator.
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
High level reusable GUI components.
Definition: aboutdialog.cpp:13
GUI related classes.
Free functions in swift::misc.
SWIFT_MISC_EXPORT QString stripDesignatorFromCompleterString(const QString &candidate)
Strip a designator from a combined string.