swift
fsdsetupform.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2016 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include "fsdsetupform.h"
5 
6 #include <QCompleter>
7 
8 #include "ui_fsdsetupform.h"
9 
10 #include "gui/guiutility.h"
11 #include "misc/stringutils.h"
12 
13 using namespace swift::misc;
14 using namespace swift::misc::network;
15 
16 namespace swift::gui::editors
17 {
18  CFsdSetupForm::CFsdSetupForm(QWidget *parent) : CForm(parent), ui(new Ui::CFsdSetupForm)
19  {
20  ui->setupUi(this);
21  this->resetToDefaultValues();
22  ui->cb_Override->setChecked(true);
23  ui->le_TextCodec->setCompleter(new QCompleter(textCodecNames(true, true), this));
24  connect(ui->cb_Override, &QCheckBox::toggled, this, &CFsdSetupForm::enabledToggled, Qt::QueuedConnection);
25  connect(ui->pb_SetDefaults, &QPushButton::clicked, this, &CFsdSetupForm::resetToDefaultValues);
26  }
27 
29 
31  {
32  if (!this->isEnabled()) { return this->getDisabledValue(); }
33  CFsdSetup s(ui->le_TextCodec->text().trimmed());
34  s.setSendReceiveDetails(ui->cb_AircraftPartsSend->isChecked(), ui->cb_AircraftPartsReceive->isChecked(),
35  ui->cb_GndFlagSend->isChecked(), ui->cb_GndFlagReceive->isChecked(),
36  ui->cb_FastPositionSend->isChecked(), ui->cb_FastPositionReceive->isChecked(),
37  ui->cb_VisualPositionSend->isChecked(), ui->cb_EuroscopeSimData->isChecked(),
38  ui->cb_IcaoEquipment->isChecked());
39  s.setForce3LetterAirlineCodes(ui->cb_3LetterAirlineICAO->isChecked());
40  return s;
41  }
42 
44  {
45  static const CFsdSetup fsd;
46  return fsd;
47  }
48 
50  {
51  ui->le_TextCodec->setText(setup.getTextCodec());
52  const CFsdSetup::SendReceiveDetails d = setup.getSendReceiveDetails();
53 
54  ui->cb_AircraftPartsReceive->setChecked(d & CFsdSetup::ReceiveAircraftParts);
55  ui->cb_AircraftPartsSend->setChecked(d & CFsdSetup::SendAircraftParts);
56  ui->cb_FastPositionReceive->setChecked(d & CFsdSetup::ReceiveInterimPositions);
57  ui->cb_FastPositionSend->setChecked(d & CFsdSetup::SendInterimPositions);
58  ui->cb_3LetterAirlineICAO->setChecked(setup.force3LetterAirlineCodes());
59  ui->cb_EuroscopeSimData->setChecked(d & CFsdSetup::ReceiveEuroscopeSimData);
60  ui->cb_IcaoEquipment->setChecked(d & CFsdSetup::SendFplWithIcaoEquipment);
61  }
62 
64  {
65  m_alwaysAllowOverride = allow;
66  if (allow)
67  {
68  ui->cb_Override->setEnabled(true);
69  CGuiUtility::checkBoxReadOnly(ui->cb_Override, false);
70  }
71  }
72 
73  bool CFsdSetupForm::isFsdSetupEnabled() const { return ui->cb_Override->isChecked(); }
74 
75  void CFsdSetupForm::setFsdSetupEnabled(bool enabled) { ui->cb_Override->setChecked(enabled); }
76 
77  void CFsdSetupForm::showEnableInfo(bool visible)
78  {
79  m_visibleEnableInfo = visible;
80  this->visibleEnableInfo(visible);
81  }
82 
83  void CFsdSetupForm::setReadOnly(bool readonly)
84  {
85  ui->le_TextCodec->setReadOnly(readonly);
86  ui->pb_SetDefaults->setEnabled(!readonly);
87  CGuiUtility::checkBoxesReadOnly(this, readonly);
88  if (m_alwaysAllowOverride)
89  {
90  ui->cb_Override->setEnabled(true);
91  CGuiUtility::checkBoxReadOnly(ui->cb_Override, false);
92  }
93 
102  this->forceStyleSheetUpdate();
103  }
104 
106  {
107  Q_UNUSED(nested);
108  const CFsdSetup val(getValue());
109  CStatusMessageList msgs(val.validate());
110  if (this->isReadOnly())
111  {
112  // in readonly I cannot change the data anyway, so skip warnings
113  msgs.removeWarningsAndBelow();
114  }
115  return msgs;
116  }
117 
118  void CFsdSetupForm::enabledToggled(bool enabled)
119  {
120  Q_UNUSED(enabled);
121  this->setReadOnly(!enabled);
122  }
123 
124  void CFsdSetupForm::visibleEnableInfo(bool visible)
125  {
126  ui->cb_Override->setVisible(visible);
127  ui->lbl_FsdSetup->setVisible(visible);
128  ui->pb_SetDefaults->setVisible(visible);
129  }
130 
132  {
133  CFsdSetup s;
134  this->setValue(s);
135  }
136 } // namespace swift::gui::editors
static void checkBoxReadOnly(QCheckBox *checkBox, bool readOnly)
Pseudo readonly state for checkbox.
Definition: guiutility.cpp:450
static void checkBoxesReadOnly(QWidget *parent, bool readOnly)
Pseudo readonly state for checkboxes of widget.
Definition: guiutility.cpp:476
Form base class.
Definition: form.h:27
void forceStyleSheetUpdate()
Forces a stylesheet update.
Definition: form.cpp:47
bool isReadOnly() const
Is read only?
Definition: form.h:54
virtual swift::misc::CStatusMessageList validate(bool nested=false) const
Validate, empty list means OK.
void resetToDefaultValues()
Set default values.
void setAlwaysAllowOverride(bool allow)
Allow override even in read only mode.
void showEnableInfo(bool visible)
Show the enable info.
bool isFsdSetupEnabled() const
Enabled?
virtual ~CFsdSetupForm()
Constructor.
void setFsdSetupEnabled(bool enabled)
Set enabled / disabled.
virtual void setReadOnly(bool readonly)
Set editable.
swift::misc::network::CFsdSetup getValue() const
FSD setup from GUI.
const swift::misc::network::CFsdSetup & getDisabledValue() const
FSD setup when disabled.
void setValue(const swift::misc::network::CFsdSetup &setup)
Set to GUI.
Status messages, e.g. from Core -> GUI.
void removeWarningsAndBelow()
Remove warnings and below.
Value object for a FSD setup.
Definition: fsdsetup.h:24
void setSendReceiveDetails(SendReceiveDetails sendReceive)
Set send / receive details.
Definition: fsdsetup.h:86
const QString & getTextCodec() const
Get codec.
Definition: fsdsetup.h:77
SendReceiveDetails getSendReceiveDetails() const
Get send / receive details.
Definition: fsdsetup.cpp:27
bool force3LetterAirlineCodes() const
Airline codes.
Definition: fsdsetup.h:118
void setForce3LetterAirlineCodes(bool force)
Airline codes.
Definition: fsdsetup.cpp:69
CStatusMessageList validate() const
Validate, provide details about issues.
Definition: fsdsetup.cpp:82
Free functions in swift::misc.
SWIFT_MISC_EXPORT QStringList textCodecNames(bool simpleNames, bool mibNames)
Strip a designator from a combined string.