swift
aircraftpartsform.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2017 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include "aircraftpartsform.h"
5 
6 #include <QJsonDocument>
7 #include <QJsonParseError>
8 #include <QPushButton>
9 
10 #include "ui_aircraftpartsform.h"
11 
12 #include "gui/guiutility.h"
15 #include "misc/logmessage.h"
16 #include "misc/statusmessage.h"
17 
18 using namespace swift::misc;
19 using namespace swift::misc::aviation;
20 
21 namespace swift::gui::editors
22 {
23  CAircraftPartsForm::CAircraftPartsForm(QWidget *parent) : CForm(parent), ui(new Ui::CAircraftPartsForm)
24  {
25  ui->setupUi(this);
26  connect(ui->pb_AircraftPartsLightsOn, &QPushButton::pressed, this, &CAircraftPartsForm::setAllLights);
27  connect(ui->pb_AircraftPartsLightsOff, &QPushButton::pressed, this, &CAircraftPartsForm::setAllLights);
28  connect(ui->pb_AircraftPartsEnginesOn, &QPushButton::pressed, this, &CAircraftPartsForm::setAllEngines);
29  connect(ui->pb_AircraftPartsEnginesOff, &QPushButton::pressed, this, &CAircraftPartsForm::setAllEngines);
30  connect(ui->pb_AircraftPartsUiToJson, &QPushButton::pressed, this, &CAircraftPartsForm::guiToJson);
31  connect(ui->pb_Set, &QPushButton::pressed, this,
32  &CAircraftPartsForm::changeAircraftParts); // force change signal
33  }
34 
36 
37  void CAircraftPartsForm::setReadOnly(bool readonly)
38  {
39  CGuiUtility::childrenSetEnabled<QPushButton>(this, !readonly);
40  CGuiUtility::checkBoxesReadOnly(this, readonly);
41  this->forceStyleSheetUpdate();
42  }
43 
45 
47  {
48  Q_UNUSED(nested);
49  CStatusMessageList msgs;
50  return msgs;
51  }
52 
53  CAircraftParts CAircraftPartsForm::getAircraftPartsFromGui() const { return this->guiToAircraftParts(); }
54 
56  {
57  const QString jsonParts = ui->te_AircraftPartsJson->toPlainText().trimmed();
58  CAircraftParts parts;
59  if (jsonParts.isEmpty())
60  {
61  CLogMessage(this).validationError(u"No JSON content");
62  return parts;
63  }
64  QJsonParseError jsonError;
65  QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonParts.toUtf8(), &jsonError));
66  if (jsonError.error != QJsonParseError::NoError)
67  {
68  CLogMessage(this).validationError(u"Parse error: %1") << jsonError.errorString();
69  return parts;
70  }
71 
72  try
73  {
74  parts.convertFromJson(jsonDoc.object());
75  }
76  catch (const CJsonException &ex)
77  {
78  CLogMessage(this).preformatted(CStatusMessage::fromJsonException(ex, this, "Parse error"));
79  return parts;
80  }
81  return parts;
82  }
83 
85  {
86  this->partsToGui(parts);
87  ui->te_AircraftPartsJson->setText(parts.toJsonString());
88  }
89 
90  void CAircraftPartsForm::showSetButton(bool visible) { ui->pb_Set->setVisible(visible); }
91 
92  void CAircraftPartsForm::showJson(bool visible) { ui->te_AircraftPartsJson->setVisible(visible); }
93 
94  void CAircraftPartsForm::setAllLights()
95  {
96  const bool on = (QObject::sender() == ui->pb_AircraftPartsLightsOn);
97  ui->cb_AircraftPartsLightsStrobe->setChecked(on);
98  ui->cb_AircraftPartsLightsLanding->setChecked(on);
99  ui->cb_AircraftPartsLightsTaxi->setChecked(on);
100  ui->cb_AircraftPartsLightsBeacon->setChecked(on);
101  ui->cb_AircraftPartsLightsNav->setChecked(on);
102  ui->cb_AircraftPartsLightsLogo->setChecked(on);
103  }
104 
105  void CAircraftPartsForm::setAllEngines()
106  {
107  const bool on = (QObject::sender() == ui->pb_AircraftPartsEnginesOn);
108  ui->cb_AircraftPartsEngine1->setChecked(on);
109  ui->cb_AircraftPartsEngine2->setChecked(on);
110  ui->cb_AircraftPartsEngine3->setChecked(on);
111  ui->cb_AircraftPartsEngine4->setChecked(on);
112  ui->cb_AircraftPartsEngine5->setChecked(on);
113  ui->cb_AircraftPartsEngine6->setChecked(on);
114  }
115 
116  aviation::CAircraftParts CAircraftPartsForm::guiToAircraftParts() const
117  {
118  const CAircraftLights lights(
119  ui->cb_AircraftPartsLightsStrobe->isChecked(), ui->cb_AircraftPartsLightsLanding->isChecked(),
120  ui->cb_AircraftPartsLightsTaxi->isChecked(), ui->cb_AircraftPartsLightsBeacon->isChecked(),
121  ui->cb_AircraftPartsLightsNav->isChecked(), ui->cb_AircraftPartsLightsLogo->isChecked());
122  const CAircraftEngineList engines(
123  { ui->cb_AircraftPartsEngine1->isChecked(), ui->cb_AircraftPartsEngine2->isChecked(),
124  ui->cb_AircraftPartsEngine3->isChecked(), ui->cb_AircraftPartsEngine4->isChecked(),
125  ui->cb_AircraftPartsEngine5->isChecked(), ui->cb_AircraftPartsEngine6->isChecked() });
126  const CAircraftParts parts(
127  lights, ui->cb_AircraftPartsGearDown->isChecked(), ui->sb_AircraftPartsFlapsPercentage->value(),
128  ui->cb_AircraftPartsSpoilers->isChecked(), engines, ui->cb_AircraftPartsIsOnGround->isChecked());
129  return parts;
130  }
131 
132  void CAircraftPartsForm::partsToGui(const CAircraftParts &parts)
133  {
134  ui->cb_AircraftPartsGearDown->setChecked(parts.isGearDown());
135  ui->cb_AircraftPartsIsOnGround->setChecked(parts.isOnGround());
136  ui->cb_AircraftPartsSpoilers->setChecked(parts.isSpoilersOut());
137  ui->sb_AircraftPartsFlapsPercentage->setValue(parts.getFlapsPercent());
138 
139  const CAircraftLights lights = parts.getLights();
140  ui->cb_AircraftPartsLightsBeacon->setChecked(lights.isBeaconOn());
141  ui->cb_AircraftPartsLightsLanding->setChecked(lights.isLandingOn());
142  ui->cb_AircraftPartsLightsLogo->setChecked(lights.isLogoOn());
143  ui->cb_AircraftPartsLightsNav->setChecked(lights.isNavOn());
144  ui->cb_AircraftPartsLightsStrobe->setChecked(lights.isStrobeOn());
145  ui->cb_AircraftPartsLightsTaxi->setChecked(lights.isTaxiOn());
146 
147  const CAircraftEngineList engines = parts.getEngines();
148  ui->cb_AircraftPartsEngine1->setChecked(engines.isEngineOn(1));
149  ui->cb_AircraftPartsEngine2->setChecked(engines.isEngineOn(2));
150  ui->cb_AircraftPartsEngine3->setChecked(engines.isEngineOn(3));
151  ui->cb_AircraftPartsEngine4->setChecked(engines.isEngineOn(4));
152  ui->cb_AircraftPartsEngine5->setChecked(engines.isEngineOn(5));
153  ui->cb_AircraftPartsEngine6->setChecked(engines.isEngineOn(6));
154  }
155 
156  void CAircraftPartsForm::guiToJson()
157  {
158  const QJsonDocument json(guiToAircraftParts().toJson());
159  const QString j(json.toJson(QJsonDocument::Indented));
160  ui->te_AircraftPartsJson->setText(j);
161  }
162 } // namespace swift::gui::editors
static void checkBoxesReadOnly(QWidget *parent, bool readOnly)
Pseudo readonly state for checkboxes of widget.
Definition: guiutility.cpp:476
void changeAircraftParts()
Change coordinate.
void showSetButton(bool visible)
Set button visible.
virtual void setSelectOnly()
Read only, but entity can be selected (normally used in mapping). Use setReadOnly to reset this very ...
swift::misc::aviation::CAircraftParts getAircraftPartsFromJson() const
Get the parts from JSON.
void showJson(bool visible)
Set JSON textarea visible.
void setAircraftParts(const swift::misc::aviation::CAircraftParts &parts)
Set the parts.
virtual void setReadOnly(bool readonly)
Set editable.
virtual swift::misc::CStatusMessageList validate(bool nested=false) const
Validate, empty list means OK.
swift::misc::aviation::CAircraftParts getAircraftPartsFromGui() const
Get the parts.
Form base class.
Definition: form.h:27
void forceStyleSheetUpdate()
Forces a stylesheet update.
Definition: form.cpp:47
Thrown when a convertFromJson method encounters an unrecoverable error in JSON data.
Definition: jsonexception.h:24
Class for emitting a log message.
Definition: logmessage.h:27
static void preformatted(const CStatusMessage &statusMessage)
Sends a verbatim, preformatted message to the log.
Derived & validationError(const char16_t(&format)[N])
Set the severity to error, providing a format string, and adding the validation category.
Status messages, e.g. from Core -> GUI.
Value object encapsulating a list of aircraft engines.
bool isEngineOn(int engineNumber) const
Engine number 1..x on?
Value object encapsulating information about aircraft's lights.
bool isLandingOn() const
Landing lights on?
bool isBeaconOn() const
Beacon lights on?
bool isNavOn() const
Nac lights on?
bool isLogoOn() const
Logo lights on?
bool isTaxiOn() const
Taxi lights on?
bool isStrobeOn() const
Strobes lights on?
Value object encapsulating information of aircraft's parts.
Definition: aircraftparts.h:26
bool isGearDown() const
Is gear down?
Definition: aircraftparts.h:90
CAircraftLights getLights() const
Get aircraft lights.
Definition: aircraftparts.h:72
bool isSpoilersOut() const
Are spoilers out?
bool isOnGround() const
Is aircraft on ground?
int getFlapsPercent() const
Get flaps position in percent.
CAircraftEngineList getEngines() const
Get engines.
void convertFromJson(const QJsonObject &json)
Assign from JSON object.
Definition: mixinjson.h:153
QString toJsonString(QJsonDocument::JsonFormat format=QJsonDocument::Indented) const
Convenience function JSON as string.
Definition: mixinjson.h:146
Free functions in swift::misc.