/* Copyright (C) 2017 * swift project Community / Contributors * * This file is part of swift Project. It is subject to the license terms in the LICENSE file found in the top-level * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, * including this file, may be copied, modified, propagated, or distributed except according to the terms * contained in the LICENSE file. */ #include "aircraftpartsform.h" #include "ui_aircraftpartsform.h" #include "blackgui/guiutility.h" #include "blackmisc/aviation/aircraftenginelist.h" #include "blackmisc/aviation/aircraftlights.h" #include "blackmisc/logmessage.h" #include "blackmisc/statusmessage.h" #include #include #include using namespace BlackGui; using namespace BlackMisc; using namespace BlackMisc::Aviation; namespace BlackGui { namespace Editors { CAircraftPartsForm::CAircraftPartsForm(QWidget *parent) : CForm(parent), ui(new Ui::CAircraftPartsForm) { ui->setupUi(this); connect(ui->pb_AircraftPartsLightsOn, &QPushButton::pressed, this, &CAircraftPartsForm::setAllLights); connect(ui->pb_AircraftPartsLightsOff, &QPushButton::pressed, this, &CAircraftPartsForm::setAllLights); connect(ui->pb_AircraftPartsEnginesOn, &QPushButton::pressed, this, &CAircraftPartsForm::setAllEngines); connect(ui->pb_AircraftPartsEnginesOff, &QPushButton::pressed, this, &CAircraftPartsForm::setAllEngines); connect(ui->pb_AircraftPartsUiToJson, &QPushButton::pressed, this, &CAircraftPartsForm::guiToJson); } CAircraftPartsForm::~CAircraftPartsForm() { } void CAircraftPartsForm::setReadOnly(bool readonly) { CGuiUtility::childrenSetEnabled(this, !readonly); CGuiUtility::checkBoxesReadOnly(this, readonly); } void CAircraftPartsForm::setSelectOnly() { this->setReadOnly(true); } CStatusMessageList CAircraftPartsForm::validate(bool nested) const { Q_UNUSED(nested); CStatusMessageList msgs; return msgs; } CAircraftParts CAircraftPartsForm::getAircraftPartsFromGui() const { return this->guiToAircraftParts(); } CAircraftParts CAircraftPartsForm::getAircraftPartsFromJson() const { const QString jsonParts = ui->te_AircraftPartsJson->toPlainText().trimmed(); CAircraftParts parts; if (jsonParts.isEmpty()) { CLogMessage(this).validationError("No JSON content"); return parts; } QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonParts.toUtf8(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { CLogMessage(this).validationError("Parse error: %1") << jsonError.errorString(); return parts; } try { parts.convertFromJson(jsonDoc.object()); } catch (const CJsonException &ex) { ex.toLogMessage(this, "Parse error"); return parts; } return parts; } void CAircraftPartsForm::setAircraftParts(const CAircraftParts &parts) { this->partsToGui(parts); ui->te_AircraftPartsJson->setText(parts.toJsonString()); } void CAircraftPartsForm::showSetButton(bool visible) { ui->pb_Set->setVisible(visible); } void CAircraftPartsForm::showJson(bool visible) { ui->te_AircraftPartsJson->setVisible(visible); } void CAircraftPartsForm::setAllLights() { const bool on = (QObject::sender() == ui->pb_AircraftPartsLightsOn); ui->cb_AircraftPartsLightsStrobe->setChecked(on); ui->cb_AircraftPartsLightsLanding->setChecked(on); ui->cb_AircraftPartsLightsTaxi->setChecked(on); ui->cb_AircraftPartsLightsBeacon->setChecked(on); ui->cb_AircraftPartsLightsNav->setChecked(on); ui->cb_AircraftPartsLightsLogo->setChecked(on); } void CAircraftPartsForm::setAllEngines() { const bool on = (QObject::sender() == ui->pb_AircraftPartsEnginesOn); ui->cb_AircraftPartsEngine1->setChecked(on); ui->cb_AircraftPartsEngine2->setChecked(on); ui->cb_AircraftPartsEngine3->setChecked(on); ui->cb_AircraftPartsEngine4->setChecked(on); ui->cb_AircraftPartsEngine5->setChecked(on); ui->cb_AircraftPartsEngine6->setChecked(on); } Aviation::CAircraftParts CAircraftPartsForm::guiToAircraftParts() const { const CAircraftLights lights( ui->cb_AircraftPartsLightsStrobe->isChecked(), ui->cb_AircraftPartsLightsLanding->isChecked(), ui->cb_AircraftPartsLightsTaxi->isChecked(), ui->cb_AircraftPartsLightsBeacon->isChecked(), ui->cb_AircraftPartsLightsNav->isChecked(), ui->cb_AircraftPartsLightsLogo->isChecked() ); const CAircraftEngineList engines( { ui->cb_AircraftPartsEngine1->isChecked(), ui->cb_AircraftPartsEngine2->isChecked(), ui->cb_AircraftPartsEngine3->isChecked(), ui->cb_AircraftPartsEngine4->isChecked(), ui->cb_AircraftPartsEngine5->isChecked(), ui->cb_AircraftPartsEngine6->isChecked() } ); const CAircraftParts parts(lights, ui->cb_AircraftPartsGearDown->isChecked(), ui->sb_AircraftPartsFlapsPercentage->value(), ui->cb_AircraftPartsSpoilers->isChecked(), engines, ui->cb_AircraftPartsIsOnGround->isChecked() ); return parts; } void CAircraftPartsForm::partsToGui(const Aviation::CAircraftParts &parts) { ui->cb_AircraftPartsGearDown->setChecked(parts.isGearDown()); ui->cb_AircraftPartsIsOnGround->setChecked(parts.isOnGround()); ui->cb_AircraftPartsSpoilers->setChecked(parts.isSpoilersOut()); ui->sb_AircraftPartsFlapsPercentage->setValue(parts.getFlapsPercent()); const CAircraftLights lights = parts.getLights(); ui->cb_AircraftPartsLightsBeacon->setChecked(lights.isBeaconOn()); ui->cb_AircraftPartsLightsLanding->setChecked(lights.isLandingOn()); ui->cb_AircraftPartsLightsLogo->setChecked(lights.isLogoOn()); ui->cb_AircraftPartsLightsNav->setChecked(lights.isNavOn()); ui->cb_AircraftPartsLightsStrobe->setChecked(lights.isStrobeOn()); ui->cb_AircraftPartsLightsTaxi->setChecked(lights.isTaxiOn()); const CAircraftEngineList engines = parts.getEngines(); ui->cb_AircraftPartsEngine1->setChecked(engines.isEngineOn(1)); ui->cb_AircraftPartsEngine2->setChecked(engines.isEngineOn(2)); ui->cb_AircraftPartsEngine3->setChecked(engines.isEngineOn(3)); ui->cb_AircraftPartsEngine4->setChecked(engines.isEngineOn(4)); ui->cb_AircraftPartsEngine5->setChecked(engines.isEngineOn(5)); ui->cb_AircraftPartsEngine6->setChecked(engines.isEngineOn(6)); } void CAircraftPartsForm::guiToJson() { const QJsonDocument json(guiToAircraftParts().toJson()); const QString j(json.toJson(QJsonDocument::Indented)); ui->te_AircraftPartsJson->setText(j); } } // ns } // ns