swift
aircraftcombinedtypeselector.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 <QComboBox>
7 #include <QLineEdit>
8 #include <QStringBuilder>
9 #include <QtGlobal>
10 
11 #include "ui_aircraftcombinedtypeselector.h"
12 
13 #include "gui/guiutility.h"
14 #include "gui/uppercasevalidator.h"
16 
17 using namespace swift::misc::aviation;
18 
19 namespace swift::gui::components
20 {
21  CAircraftCombinedTypeSelector::CAircraftCombinedTypeSelector(QWidget *parent)
22  : QFrame(parent), ui(new Ui::CAircraftCombinedTypeSelector)
23  {
24  ui->setupUi(this);
25  connect(ui->le_CombinedType, &QLineEdit::editingFinished, this,
26  &CAircraftCombinedTypeSelector::combinedTypeEntered);
27  connect(ui->le_CombinedType, &QLineEdit::returnPressed, this,
28  &CAircraftCombinedTypeSelector::combinedTypeEntered);
29 
30  connect(ui->cb_EngineCount, &QComboBox::currentTextChanged, this,
31  &CAircraftCombinedTypeSelector::changedComboBox);
32  connect(ui->cb_EngineType, &QComboBox::currentTextChanged, this,
33  &CAircraftCombinedTypeSelector::changedComboBox);
34  connect(ui->cb_Type, &QComboBox::currentTextChanged, this, &CAircraftCombinedTypeSelector::changedComboBox);
35 
36  ui->le_CombinedType->setValidator(new CUpperCaseValidator(this));
37  }
38 
40 
41  void CAircraftCombinedTypeSelector::setCombinedType(const QString &combinedCode)
42  {
43  QString engineCount, engineType, aircraftType;
44  const QString cc(combinedCode.trimmed().toUpper().left(3));
45  if (m_cc == cc) { return; }
46  m_cc = cc;
47 
48  if (cc.length() > 0) { aircraftType = cc.at(0); }
49  if (cc.length() > 1) { engineCount = cc.mid(1, 1); }
50  if (cc.length() > 2) { engineType = cc.mid(2, 1); }
51 
52  if (this->getCombinedTypeFromComboBoxes() != cc)
53  {
54  CGuiUtility::setComboBoxValueByStartingString(ui->cb_EngineCount, engineCount, "unspecified");
55  CGuiUtility::setComboBoxValueByStartingString(ui->cb_EngineType, engineType, "unspecified");
56  CGuiUtility::setComboBoxValueByStartingString(ui->cb_Type, aircraftType, "unspecified");
57  }
58 
59  if (ui->le_CombinedType->text() != cc) { ui->le_CombinedType->setText(cc); }
60  emit this->changedCombinedType(cc);
61  }
62 
64  {
65  this->setCombinedType(icao.getCombinedType());
66  }
67 
69  {
70  this->setCombinedType("");
71  ui->le_CombinedType->clear();
72  }
73 
75  {
76  ui->le_CombinedType->setReadOnly(readOnly);
77  ui->cb_EngineCount->setEnabled(!readOnly);
78  ui->cb_EngineType->setEnabled(!readOnly);
79  ui->cb_Type->setEnabled(!readOnly);
80  }
81 
83  {
84  QString ct(ui->le_CombinedType->text().trimmed().toUpper());
85  if (ct.isEmpty() || ct == QStringView(u"---")) { return {}; }
86  if (CAircraftIcaoCode::isValidCombinedType(ct)) { return ct; }
87 
88  QString ct2(getCombinedTypeFromComboBoxes());
89  return ct2;
90  }
91 
92  void CAircraftCombinedTypeSelector::combinedTypeEntered()
93  {
94  const QString cc(ui->le_CombinedType->text().trimmed().toUpper() % u"---");
95  this->setCombinedType(cc.left(3));
96  }
97 
98  void CAircraftCombinedTypeSelector::changedComboBox(const QString &text)
99  {
100  Q_UNUSED(text);
101  const QString ct(this->getCombinedTypeFromComboBoxes());
102  if (ui->le_CombinedType->text() == ct) { return; }
103  ui->le_CombinedType->setText(ct);
104  emit this->changedCombinedType(ct);
105  }
106 
107  QString CAircraftCombinedTypeSelector::getCombinedTypeFromComboBoxes() const
108  {
109  // try to get from combox boxes instead
110  QString ec = ui->cb_EngineCount->currentText().left(1);
111  QString t = ui->cb_Type->currentText().left(1);
112  QString et = ui->cb_EngineType->currentText().left(1);
113 
114  QString ct2(QString(t + ec + et).toUpper());
115  return ct2.replace('U', '-');
116  }
117 } // namespace swift::gui::components
static bool setComboBoxValueByStartingString(QComboBox *box, const QString &candidate, const QString &unspecified=QString())
Find best match in comboBox.
Definition: guiutility.cpp:297
void setCombinedType(const QString &combinedCode)
Set comined code, e.g. L1P.
void changedCombinedType(const QString &cominedType)
Combined type has beend changed.
QString getCombinedType() const
Get the combined type, e.g. "L2P".
Value object for ICAO classification.
const QString & getCombinedType() const
Get type, e.g. "L2J".
High level reusable GUI components.
Definition: aboutdialog.cpp:13