mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-27 19:25:49 +08:00
feat: Add ICAOEQ capability to FSD client
This commit is contained in:
@@ -35,6 +35,7 @@
|
||||
#include <QCheckBox>
|
||||
#include <QComboBox>
|
||||
#include <QDateTime>
|
||||
#include <QDesktopServices>
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QPlainTextEdit>
|
||||
@@ -48,6 +49,7 @@
|
||||
#include <QFile>
|
||||
#include <QMessageBox>
|
||||
#include <Qt>
|
||||
#include <QWidgetAction>
|
||||
|
||||
using namespace BlackMisc;
|
||||
using namespace BlackMisc::Aviation;
|
||||
@@ -70,6 +72,12 @@ namespace BlackGui::Components
|
||||
ui->setupUi(this);
|
||||
this->setCurrentIndex(0);
|
||||
|
||||
// Initialize wake turbulence category selection
|
||||
for (const WakeTurbulenceEntry &item : std::as_const(m_wakeTurbulenceCategories))
|
||||
{
|
||||
ui->cb_Wtc->addItem(item.m_name);
|
||||
}
|
||||
|
||||
// fix style
|
||||
this->tabBar()->setExpanding(false);
|
||||
this->tabBar()->setUsesScrollButtons(true);
|
||||
@@ -80,6 +88,9 @@ namespace BlackGui::Components
|
||||
this->setForceSmall(true);
|
||||
this->showKillButton(false);
|
||||
|
||||
setupNavComContextMenu();
|
||||
setupSsrContextMenu();
|
||||
|
||||
// rules
|
||||
ui->cb_FlightRule->clear();
|
||||
ui->cb_FlightRule->addItems(CFlightPlan::flightRules());
|
||||
@@ -93,15 +104,8 @@ namespace BlackGui::Components
|
||||
ui->le_AirlineOperator->setValidator(new CUpperCaseValidator(ui->le_AirlineOperator));
|
||||
ui->le_AircraftRegistration->setValidator(new CUpperCaseValidator(ui->le_AircraftRegistration));
|
||||
|
||||
CUpperCaseValidator *ucv = new CUpperCaseValidator(true, 0, 1, ui->le_EquipmentSuffix);
|
||||
ucv->setRestrictions(CFlightPlan::equipmentCodes());
|
||||
ui->le_EquipmentSuffix->setValidator(ucv);
|
||||
ui->le_EquipmentSuffix->setToolTip(ui->tbr_EquipmentCodes->toHtml());
|
||||
QCompleter *completer = new QCompleter(CFlightPlan::equipmentCodesInfo(), ui->le_EquipmentSuffix);
|
||||
completer->setMaxVisibleItems(10);
|
||||
completer->popup()->setMinimumWidth(225);
|
||||
completer->setCompletionMode(QCompleter::PopupCompletion);
|
||||
ui->le_EquipmentSuffix->setCompleter(completer);
|
||||
ui->le_NavComEquipment->setReadOnly(true);
|
||||
ui->le_SsrEquipment->setReadOnly(true);
|
||||
|
||||
CUpperCaseEventFilter *ef = new CUpperCaseEventFilter(ui->pte_Route);
|
||||
ef->setOnlyAscii();
|
||||
@@ -151,13 +155,19 @@ namespace BlackGui::Components
|
||||
connect(ui->pb_GetFromGenerator, &QPushButton::pressed, this, &CFlightPlanComponent::copyRemarksConfirmed, Qt::QueuedConnection);
|
||||
connect(ui->pb_RemarksGenerator, &QPushButton::clicked, this, &CFlightPlanComponent::currentTabGenerator, Qt::QueuedConnection);
|
||||
|
||||
connect(ui->tb_HelpEquipment, &QToolButton::clicked, this, &CFlightPlanComponent::showEquipmentCodesTab, Qt::QueuedConnection);
|
||||
connect(
|
||||
ui->tb_EditNavComEquipment, &QToolButton::clicked, this, [this]() { m_navComEquipmentMenu->popup(QCursor::pos()); }, Qt::QueuedConnection);
|
||||
connect(
|
||||
ui->tb_NavComHelp, &QToolButton::clicked, this, []() { QDesktopServices::openUrl(sGui->getGlobalSetup().getComNavEquipmentHelpUrl()); }, Qt::QueuedConnection);
|
||||
|
||||
connect(
|
||||
ui->tb_EditSsrEquipment, &QToolButton::clicked, this, [this]() { m_ssrEquipmentMenu->popup(QCursor::pos()); }, Qt::QueuedConnection);
|
||||
connect(
|
||||
ui->tb_SsrHelp, &QToolButton::clicked, this, []() { QDesktopServices::openUrl(sGui->getGlobalSetup().getSsrEquipmentHelpUrl()); }, Qt::QueuedConnection);
|
||||
|
||||
connect(ui->tb_AltitudeDialog, &QToolButton::clicked, this, &CFlightPlanComponent::altitudeDialog, Qt::QueuedConnection);
|
||||
|
||||
connect(ui->le_AircraftType, &QLineEdit::editingFinished, this, &CFlightPlanComponent::aircraftTypeChanged, Qt::QueuedConnection);
|
||||
connect(ui->le_EquipmentSuffix, &QLineEdit::editingFinished, this, &CFlightPlanComponent::buildPrefixIcaoSuffix, Qt::QueuedConnection);
|
||||
connect(ui->cb_Heavy, &QCheckBox::released, this, &CFlightPlanComponent::prefixCheckBoxChanged, Qt::QueuedConnection);
|
||||
connect(ui->cb_Tcas, &QCheckBox::released, this, &CFlightPlanComponent::prefixCheckBoxChanged, Qt::QueuedConnection);
|
||||
|
||||
connect(ui->pb_Remarks, &QPushButton::pressed, this, &CFlightPlanComponent::remarksHistory, Qt::QueuedConnection);
|
||||
connect(ui->pb_AddRemarks, &QPushButton::pressed, this, &CFlightPlanComponent::remarksHistory, Qt::QueuedConnection);
|
||||
@@ -225,13 +235,10 @@ namespace BlackGui::Components
|
||||
|
||||
if (aircraft.getAircraftIcaoCode().isLoadedFromDb() && aircraft.getAircraftIcaoCode().hasValidWtc())
|
||||
{
|
||||
const QString wtc = toSingleLetterCode(aircraft.getAircraftIcaoCode().getWtc());
|
||||
const bool heavyFlag = (wtc.startsWith("H", Qt::CaseInsensitive) || wtc.startsWith("S", Qt::CaseInsensitive));
|
||||
ui->cb_Heavy->setChecked(heavyFlag);
|
||||
updateWakeTurbulenceCategorySelector(aircraft.getAircraftIcaoCode().getWtc());
|
||||
}
|
||||
|
||||
this->prefillWithUserData(aircraft.getPilot());
|
||||
this->buildPrefixIcaoSuffix();
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::prefillWithUserData(const CUser &user)
|
||||
@@ -276,7 +283,7 @@ namespace BlackGui::Components
|
||||
else if (flightPlan.getFlightRules() == CFlightPlan::UNKNOWN)
|
||||
{
|
||||
ui->cb_FlightRule->setCurrentText(CFlightPlan::flightRulesToString(CFlightPlan::IFR));
|
||||
const CStatusMessage m = CStatusMessage(this).validationWarning(u"Unknown fligh rule, setting to default");
|
||||
const CStatusMessage m = CStatusMessage(this).validationWarning(u"Unknown flight rule, setting to default");
|
||||
this->showOverlayMessage(m);
|
||||
}
|
||||
|
||||
@@ -285,6 +292,14 @@ namespace BlackGui::Components
|
||||
const QString rem = flightPlan.getRemarks();
|
||||
this->setRemarksUIValues(rem);
|
||||
}
|
||||
|
||||
updateWakeTurbulenceCategorySelector(flightPlan.getAircraftInfo().getWtc());
|
||||
|
||||
m_navComEquipment = flightPlan.getAircraftInfo().getComNavEquipment();
|
||||
updateNavComEquipmentUi();
|
||||
|
||||
m_ssrEquipment = flightPlan.getAircraftInfo().getSsrEquipment();
|
||||
updateSsrEquipmentUi();
|
||||
}
|
||||
|
||||
const QStringList &CFlightPlanComponent::getLogCategories()
|
||||
@@ -331,22 +346,9 @@ namespace BlackGui::Components
|
||||
{
|
||||
messages.push_back(CStatusMessage(this).validationWarning(u"Are you sure '%1' is a valid type?") << v);
|
||||
}
|
||||
flightPlan.setAircraftIcao(this->getAircraftIcaoCode());
|
||||
|
||||
// prefix / equipment code
|
||||
v = this->getPrefix();
|
||||
if (!v.isEmpty() && !CFlightPlan::prefixCodes().contains(v))
|
||||
{
|
||||
messages.push_back(CStatusMessage(this).validation(severity, u"Invalid prefix"));
|
||||
}
|
||||
flightPlan.setPrefix(v);
|
||||
|
||||
v = this->getEquipmentSuffix();
|
||||
if (!v.isEmpty() && !CFlightPlan::equipmentCodes().contains(v))
|
||||
{
|
||||
messages.push_back(CStatusMessage(this).validation(severity, u"Invalid equipment code"));
|
||||
}
|
||||
flightPlan.setEquipmentSuffix(v);
|
||||
CFlightPlanAircraftInfo info(this->getAircraftIcaoCode(), m_navComEquipment, m_ssrEquipment, getSelectedWakeTurbulenceCategory());
|
||||
flightPlan.setAircraftInfo(info);
|
||||
|
||||
// route
|
||||
v = ui->pte_Route->toPlainText().trimmed();
|
||||
@@ -781,43 +783,6 @@ namespace BlackGui::Components
|
||||
this->initCompleters();
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::buildPrefixIcaoSuffix()
|
||||
{
|
||||
ui->le_PrefixIcaoSuffix->setText(this->getCombinedPrefixIcaoSuffix());
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::prefixCheckBoxChanged()
|
||||
{
|
||||
QObject *sender = QObject::sender();
|
||||
if (sender == ui->cb_Heavy)
|
||||
{
|
||||
if (ui->cb_Heavy->isChecked())
|
||||
{
|
||||
const QPointer<CFlightPlanComponent> myself(this);
|
||||
QTimer::singleShot(10, this, [=] {
|
||||
if (!myself) { return; }
|
||||
ui->cb_Tcas->setChecked(false);
|
||||
this->buildPrefixIcaoSuffix();
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (sender == ui->cb_Tcas)
|
||||
{
|
||||
if (ui->cb_Tcas->isChecked())
|
||||
{
|
||||
const QPointer<CFlightPlanComponent> myself(this);
|
||||
QTimer::singleShot(10, this, [=] {
|
||||
if (!myself) { return; }
|
||||
ui->cb_Heavy->setChecked(false);
|
||||
this->buildPrefixIcaoSuffix();
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
this->buildPrefixIcaoSuffix();
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::aircraftTypeChanged()
|
||||
{
|
||||
const CAircraftIcaoCode icao = this->getAircraftIcaoCode();
|
||||
@@ -825,10 +790,7 @@ namespace BlackGui::Components
|
||||
QPointer<CFlightPlanComponent> myself(this);
|
||||
QTimer::singleShot(25, this, [=] {
|
||||
if (!myself || !sGui || sGui->isShuttingDown()) { return; }
|
||||
const bool heavy = icao.getWtc() == BlackMisc::Aviation::WakeTurbulenceCategory::HEAVY;
|
||||
ui->cb_Heavy->setChecked(heavy);
|
||||
if (heavy) { ui->cb_Tcas->setChecked(false); }
|
||||
this->buildPrefixIcaoSuffix();
|
||||
updateWakeTurbulenceCategorySelector(icao.getWtc());
|
||||
});
|
||||
}
|
||||
|
||||
@@ -842,13 +804,6 @@ namespace BlackGui::Components
|
||||
this->prefillWithAircraftData(aircraft, true);
|
||||
}
|
||||
|
||||
QString CFlightPlanComponent::getPrefix() const
|
||||
{
|
||||
if (ui->cb_Heavy->isChecked()) { return QStringLiteral("H"); }
|
||||
else if (ui->cb_Tcas->isChecked()) { return QStringLiteral("T"); }
|
||||
return {};
|
||||
}
|
||||
|
||||
CAircraftIcaoCode CFlightPlanComponent::getAircraftIcaoCode() const
|
||||
{
|
||||
const QString designator(ui->le_AircraftType->text());
|
||||
@@ -861,21 +816,6 @@ namespace BlackGui::Components
|
||||
return designator;
|
||||
}
|
||||
|
||||
QString CFlightPlanComponent::getEquipmentSuffix() const
|
||||
{
|
||||
return ui->le_EquipmentSuffix->text().trimmed().toUpper();
|
||||
}
|
||||
|
||||
QString CFlightPlanComponent::getCombinedPrefixIcaoSuffix() const
|
||||
{
|
||||
return CFlightPlan::concatPrefixIcaoSuffix(this->getPrefix(), this->getAircraftIcaoCode().getDesignator(), this->getEquipmentSuffix());
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::showEquipmentCodesTab()
|
||||
{
|
||||
this->setCurrentWidget(ui->tb_EquipmentCodes);
|
||||
}
|
||||
|
||||
bool CFlightPlanComponent::isVfr() const
|
||||
{
|
||||
const bool vfr = CFlightPlan::isVFRRules(ui->cb_FlightRule->currentText());
|
||||
@@ -1093,6 +1033,118 @@ namespace BlackGui::Components
|
||||
}
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::setupNavComContextMenu()
|
||||
{
|
||||
m_navComEquipmentMenu = new QMenu(ui->tb_EditNavComEquipment);
|
||||
auto list = new QListWidget(m_navComEquipmentMenu);
|
||||
list->setSelectionMode(QAbstractItemView::MultiSelection);
|
||||
list->addItems(BlackMisc::Aviation::CComNavEquipment::allEquipmentLetters());
|
||||
|
||||
connect(list, &QListWidget::itemSelectionChanged, this, &CFlightPlanComponent::updateNavComEquipmentFromSelection);
|
||||
|
||||
auto action = new QWidgetAction(ui->tb_EditNavComEquipment);
|
||||
action->setDefaultWidget(list);
|
||||
m_navComEquipmentMenu->addAction(action);
|
||||
|
||||
updateNavComEquipmentUi();
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::setupSsrContextMenu()
|
||||
{
|
||||
m_ssrEquipmentMenu = new QMenu(ui->tb_EditSsrEquipment);
|
||||
auto list = new QListWidget(m_ssrEquipmentMenu);
|
||||
list->setSelectionMode(QAbstractItemView::MultiSelection);
|
||||
list->addItems(BlackMisc::Aviation::CSsrEquipment::allEquipmentLetters());
|
||||
|
||||
connect(list, &QListWidget::itemSelectionChanged, this, &CFlightPlanComponent::updateSsrEquipmentFromSelection);
|
||||
|
||||
auto action = new QWidgetAction(ui->tb_EditSsrEquipment);
|
||||
action->setDefaultWidget(list);
|
||||
m_ssrEquipmentMenu->addAction(action);
|
||||
|
||||
updateSsrEquipmentUi();
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::updateNavComEquipmentFromSelection()
|
||||
{
|
||||
const QListWidget *list = getMenuEquipmentList(m_navComEquipmentMenu);
|
||||
|
||||
QString equipmentString;
|
||||
|
||||
for (auto equipment : list->selectedItems())
|
||||
{
|
||||
equipmentString.append(equipment->text());
|
||||
}
|
||||
|
||||
m_navComEquipment = CComNavEquipment(equipmentString);
|
||||
updateNavComEquipmentUi();
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::updateSsrEquipmentFromSelection()
|
||||
{
|
||||
const QListWidget *list = getMenuEquipmentList(m_ssrEquipmentMenu);
|
||||
|
||||
QString ssrEquipmentString;
|
||||
|
||||
for (auto equipment : list->selectedItems())
|
||||
{
|
||||
ssrEquipmentString.append(equipment->text());
|
||||
}
|
||||
|
||||
m_ssrEquipment = CSsrEquipment(ssrEquipmentString);
|
||||
updateSsrEquipmentUi();
|
||||
}
|
||||
|
||||
QListWidget *CFlightPlanComponent::getMenuEquipmentList(QMenu *menu)
|
||||
{
|
||||
Q_ASSERT_X(menu->actions().size() == 1, Q_FUNC_INFO, "should only contain a single action");
|
||||
const QWidgetAction *action = qobject_cast<QWidgetAction *>(menu->actions().at(0));
|
||||
Q_ASSERT_X(action, Q_FUNC_INFO, "equipment menu contains invalid action item");
|
||||
auto list = qobject_cast<QListWidget *>(action->defaultWidget());
|
||||
Q_ASSERT_X(list, Q_FUNC_INFO, "Action widget contains invalid widget");
|
||||
return list;
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::updateSsrEquipmentUi()
|
||||
{
|
||||
ui->le_SsrEquipment->setText(m_ssrEquipment.toQString());
|
||||
updateListSelection(m_ssrEquipmentMenu, m_ssrEquipment.enabledOptions());
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::updateNavComEquipmentUi()
|
||||
{
|
||||
ui->le_NavComEquipment->setText(m_navComEquipment.toQString());
|
||||
updateListSelection(m_navComEquipmentMenu, m_navComEquipment.enabledOptions());
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::updateListSelection(QMenu *menu, const QStringList &enabledOptions)
|
||||
{
|
||||
QListWidget *list = getMenuEquipmentList(menu);
|
||||
list->blockSignals(true);
|
||||
list->clearSelection();
|
||||
for (const auto &enabledOption : enabledOptions)
|
||||
{
|
||||
auto item = list->findItems(enabledOption, Qt::MatchExactly);
|
||||
Q_ASSERT_X(item.size() == 1, Q_FUNC_INFO, "Expected exactly one item per option");
|
||||
list->setItemSelected(item[0], true);
|
||||
}
|
||||
list->blockSignals(false);
|
||||
}
|
||||
|
||||
void CFlightPlanComponent::updateWakeTurbulenceCategorySelector(const BlackMisc::Aviation::CWakeTurbulenceCategory &wtc)
|
||||
{
|
||||
if (wtc.isUnknown()) return; // Unknown should not be shown to the user
|
||||
const auto it = std::find_if(m_wakeTurbulenceCategories.cbegin(), m_wakeTurbulenceCategories.cend(), [&wtc](const WakeTurbulenceEntry &item) { return item.m_wtc == wtc; });
|
||||
Q_ASSERT_X(it != m_wakeTurbulenceCategories.cend(), Q_FUNC_INFO, "Invalid wake turbulence category selected");
|
||||
const int newIndex = static_cast<int>(std::distance(m_wakeTurbulenceCategories.cbegin(), it));
|
||||
ui->cb_Wtc->setCurrentIndex(newIndex);
|
||||
}
|
||||
|
||||
CWakeTurbulenceCategory CFlightPlanComponent::getSelectedWakeTurbulenceCategory() const
|
||||
{
|
||||
return m_wakeTurbulenceCategories.at(ui->cb_Wtc->currentIndex()).m_wtc;
|
||||
}
|
||||
|
||||
bool CFlightPlanComponent::consolidateRemarks(QStringList &remarks, const QString &newRemarks)
|
||||
{
|
||||
if (newRemarks.isEmpty()) { return false; }
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
#include "blackmisc/simulation/data/lastmodel.h"
|
||||
#include "blackmisc/simulation/simulatedaircraft.h"
|
||||
#include "blackmisc/aviation/flightplan.h"
|
||||
#include "blackmisc/aviation/comnavequipment.h"
|
||||
#include "blackmisc/aviation/ssrequipment.h"
|
||||
#include "blackmisc/network/data/lastserver.h"
|
||||
#include "blackmisc/network/user.h"
|
||||
#include "blackmisc/directories.h"
|
||||
@@ -27,6 +29,7 @@
|
||||
#include <QtGlobal>
|
||||
#include <QFileDialog>
|
||||
#include <QNetworkReply>
|
||||
#include <QListWidget>
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
@@ -99,8 +102,12 @@ namespace BlackGui::Components
|
||||
CAltitudeDialog *m_altitudeDialog = nullptr;
|
||||
CStringListDialog *m_fpRemarksDialog = nullptr;
|
||||
CSimBriefDownloadDialog *m_simBriefDialog = nullptr;
|
||||
QMenu *m_navComEquipmentMenu = nullptr;
|
||||
QMenu *m_ssrEquipmentMenu = nullptr;
|
||||
BlackMisc::Aviation::CFlightPlan m_sentFlightPlan; //!< my flight plan
|
||||
BlackMisc::Simulation::CAircraftModel m_model; //!< currently used model
|
||||
BlackMisc::Aviation::CComNavEquipment m_navComEquipment; //!< current NAV/COM equipment
|
||||
BlackMisc::Aviation::CSsrEquipment m_ssrEquipment; //!< current SSR equipment
|
||||
BlackMisc::CIdentifier m_identifier { "FlightPlanComponent", this }; //!< Flightplan identifier
|
||||
BlackMisc::CSetting<BlackMisc::Settings::TDirectorySettings> m_directories { this }; //!< the swift directories
|
||||
BlackMisc::CSetting<FlightPlanSettings::TRemarksHistory> m_remarksHistory { this }; //!< remarks history
|
||||
@@ -108,6 +115,19 @@ namespace BlackGui::Components
|
||||
BlackMisc::CDataReadOnly<BlackMisc::Simulation::Data::TLastModel> m_lastAircraftModel { this }; //!< recently used aircraft model
|
||||
BlackMisc::CDataReadOnly<BlackMisc::Network::Data::TLastServer> m_lastServer { this }; //!< recently used server (VATSIM, other)
|
||||
|
||||
struct WakeTurbulenceEntry
|
||||
{
|
||||
QString m_name; //!< Name displayed to the user
|
||||
BlackMisc::Aviation::CWakeTurbulenceCategory m_wtc; //!< Wake turbulence category
|
||||
};
|
||||
|
||||
const QList<WakeTurbulenceEntry> m_wakeTurbulenceCategories = {
|
||||
{ "Light", BlackMisc::Aviation::CWakeTurbulenceCategory::LIGHT },
|
||||
{ "Medium", BlackMisc::Aviation::CWakeTurbulenceCategory::MEDIUM },
|
||||
{ "Heavy", BlackMisc::Aviation::CWakeTurbulenceCategory::HEAVY },
|
||||
{ "Super", BlackMisc::Aviation::CWakeTurbulenceCategory::SUPER }
|
||||
}; //!< Mapping CWakeTurbulenceCategory <=> UI name that is shown to the user
|
||||
|
||||
//! Validate, generates status messages
|
||||
BlackMisc::CStatusMessageList validateAndInitializeFlightPlan(BlackMisc::Aviation::CFlightPlan &fligtPlan);
|
||||
|
||||
@@ -204,30 +224,15 @@ namespace BlackGui::Components
|
||||
//! GUI init complete
|
||||
void swiftWebDataRead();
|
||||
|
||||
//! Build "H/B737/F"
|
||||
void buildPrefixIcaoSuffix();
|
||||
|
||||
//! Prefix check box changed
|
||||
void prefixCheckBoxChanged();
|
||||
|
||||
//! Aircraft type changed
|
||||
void aircraftTypeChanged();
|
||||
|
||||
//! Sync.with simulator
|
||||
void syncWithSimulator();
|
||||
|
||||
//! Get prefix
|
||||
QString getPrefix() const;
|
||||
|
||||
//! Aircraft type as ICAO code
|
||||
BlackMisc::Aviation::CAircraftIcaoCode getAircraftIcaoCode() const;
|
||||
|
||||
//! Get equipment code (1 char)
|
||||
QString getEquipmentSuffix() const;
|
||||
|
||||
//! Something like "H/B737/F"
|
||||
QString getCombinedPrefixIcaoSuffix() const;
|
||||
|
||||
//! Show tab of equipment codes
|
||||
void showEquipmentCodesTab();
|
||||
|
||||
@@ -264,6 +269,36 @@ namespace BlackGui::Components
|
||||
//! Response from SimBrief
|
||||
void handleSimBriefResponse(QNetworkReply *nwReplyPtr);
|
||||
|
||||
//! Setup NAV/COM context menu
|
||||
void setupNavComContextMenu();
|
||||
|
||||
//! Setup SSR context menu
|
||||
void setupSsrContextMenu();
|
||||
|
||||
//! Update the current NAV/COM equipment from the menu selection
|
||||
void updateNavComEquipmentFromSelection();
|
||||
|
||||
//! Update the current SSR equipment from the menu selection
|
||||
void updateSsrEquipmentFromSelection();
|
||||
|
||||
//! Update the selection and label according to current NAV/COM equipment
|
||||
void updateNavComEquipmentUi();
|
||||
|
||||
//! Update the selection and label according to current SSR equipment
|
||||
void updateSsrEquipmentUi();
|
||||
|
||||
//! Update the wake turbulence category selector
|
||||
void updateWakeTurbulenceCategorySelector(const BlackMisc::Aviation::CWakeTurbulenceCategory &wtc);
|
||||
|
||||
//! Get the selected wake turbulence category
|
||||
BlackMisc::Aviation::CWakeTurbulenceCategory getSelectedWakeTurbulenceCategory() const;
|
||||
|
||||
//! Helper to get the QListWidget from a given NAV/COM or SSR menu
|
||||
static QListWidget *getMenuEquipmentList(QMenu *menu);
|
||||
|
||||
//! Helper to mark all options in \p enabledOptions as "selected" in the QListWidget, contained in the NAV/COM or SSR \p menu
|
||||
static void updateListSelection(QMenu *menu, const QStringList &enabledOptions);
|
||||
|
||||
//! Consolidate the new remarks list, latest on front
|
||||
static bool consolidateRemarks(QStringList &remarks, const QString &newRemarks);
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -34,7 +34,7 @@ namespace BlackGui::Editors
|
||||
ui->cb_AircraftPartsSend->isChecked(), ui->cb_AircraftPartsReceive->isChecked(),
|
||||
ui->cb_GndFlagSend->isChecked(), ui->cb_GndFlagReceive->isChecked(),
|
||||
ui->cb_FastPositionSend->isChecked(), ui->cb_FastPositionReceive->isChecked(),
|
||||
ui->cb_VisualPositionSend->isChecked(), ui->cb_EuroscopeSimData->isChecked());
|
||||
ui->cb_VisualPositionSend->isChecked(), ui->cb_EuroscopeSimData->isChecked(), ui->cb_IcaoEquipment->isChecked());
|
||||
s.setForce3LetterAirlineCodes(ui->cb_3LetterAirlineICAO->isChecked());
|
||||
return s;
|
||||
}
|
||||
@@ -56,6 +56,7 @@ namespace BlackGui::Editors
|
||||
ui->cb_FastPositionSend->setChecked(d & CFsdSetup::SendInterimPositions);
|
||||
ui->cb_3LetterAirlineICAO->setChecked(setup.force3LetterAirlineCodes());
|
||||
ui->cb_EuroscopeSimData->setChecked(d & CFsdSetup::ReceiveEuroscopeSimData);
|
||||
ui->cb_IcaoEquipment->setChecked(d & CFsdSetup::SendFplWithIcaoEquipment);
|
||||
}
|
||||
|
||||
void CFsdSetupForm::setAlwaysAllowOverride(bool allow)
|
||||
|
||||
@@ -29,6 +29,34 @@
|
||||
<property name="spacing">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="lbl_FsdSetup">
|
||||
<property name="text">
|
||||
<string>FSD setup:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QCheckBox" name="cb_AircraftPartsSend">
|
||||
<property name="text">
|
||||
<string>send</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QCheckBox" name="cb_AircraftPartsReceive">
|
||||
<property name="text">
|
||||
<string>receive</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QCheckBox" name="cb_Override">
|
||||
<property name="text">
|
||||
<string>override</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLabel" name="lbl_AircraftParts">
|
||||
<property name="toolTip">
|
||||
@@ -39,20 +67,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="3">
|
||||
<widget class="QCheckBox" name="cb_FastPositionSend">
|
||||
<property name="text">
|
||||
<string>send</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QCheckBox" name="cb_GndFlagSend">
|
||||
<property name="text">
|
||||
<string>send</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QLabel" name="lbl_GndFlag">
|
||||
<property name="text">
|
||||
@@ -60,13 +74,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QCheckBox" name="cb_AircraftPartsReceive">
|
||||
<property name="text">
|
||||
<string>receive</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="3">
|
||||
<widget class="QCheckBox" name="cb_FastPositionReceive">
|
||||
<property name="text">
|
||||
@@ -81,34 +88,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="2">
|
||||
<widget class="QCheckBox" name="cb_GndFlagReceive">
|
||||
<property name="text">
|
||||
<string>receive</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QCheckBox" name="cb_AircraftPartsSend">
|
||||
<item row="5" column="2">
|
||||
<widget class="QCheckBox" name="cb_GndFlagSend">
|
||||
<property name="text">
|
||||
<string>send</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="5">
|
||||
<widget class="QLabel" name="lbl_TextCodec">
|
||||
<property name="text">
|
||||
<string>Text codec</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="5">
|
||||
<widget class="QLineEdit" name="le_TextCodec">
|
||||
<property name="placeholderText">
|
||||
<string>e.g. "latin1"</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<widget class="QPushButton" name="pb_SetDefaults">
|
||||
<property name="text">
|
||||
@@ -116,20 +102,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QCheckBox" name="cb_Override">
|
||||
<property name="text">
|
||||
<string>override</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="lbl_FsdSetup">
|
||||
<property name="text">
|
||||
<string>FSD setup:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="5">
|
||||
<widget class="QCheckBox" name="cb_3LetterAirlineICAO">
|
||||
<property name="toolTip">
|
||||
@@ -140,10 +112,24 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="4">
|
||||
<widget class="QCheckBox" name="cb_VisualPositionSend">
|
||||
<item row="5" column="3">
|
||||
<widget class="QCheckBox" name="cb_FastPositionSend">
|
||||
<property name="text">
|
||||
<string>Send visual pos.</string>
|
||||
<string>send</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="5">
|
||||
<widget class="QLabel" name="lbl_TextCodec">
|
||||
<property name="text">
|
||||
<string>Text codec</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="2">
|
||||
<widget class="QCheckBox" name="cb_GndFlagReceive">
|
||||
<property name="text">
|
||||
<string>receive</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -157,21 +143,43 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="5">
|
||||
<widget class="QLineEdit" name="le_TextCodec">
|
||||
<property name="placeholderText">
|
||||
<string>e.g. "latin1"</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="4">
|
||||
<widget class="QCheckBox" name="cb_VisualPositionSend">
|
||||
<property name="text">
|
||||
<string>Send visual pos.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="6">
|
||||
<widget class="QCheckBox" name="cb_IcaoEquipment">
|
||||
<property name="text">
|
||||
<string>ICAO Equipment</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>cb_Override</tabstop>
|
||||
<tabstop>pb_SetDefaults</tabstop>
|
||||
<tabstop>cb_AircraftPartsSend</tabstop>
|
||||
<tabstop>cb_AircraftPartsReceive</tabstop>
|
||||
<tabstop>cb_GndFlagSend</tabstop>
|
||||
<tabstop>cb_GndFlagReceive</tabstop>
|
||||
<tabstop>cb_FastPositionSend</tabstop>
|
||||
<tabstop>cb_FastPositionReceive</tabstop>
|
||||
<tabstop>cb_VisualPositionSend</tabstop>
|
||||
<tabstop>cb_EuroscopeSimData</tabstop>
|
||||
<tabstop>le_TextCodec</tabstop>
|
||||
<tabstop>cb_IcaoEquipment</tabstop>
|
||||
<tabstop>cb_AircraftPartsReceive</tabstop>
|
||||
<tabstop>cb_GndFlagReceive</tabstop>
|
||||
<tabstop>cb_FastPositionReceive</tabstop>
|
||||
<tabstop>cb_EuroscopeSimData</tabstop>
|
||||
<tabstop>cb_3LetterAirlineICAO</tabstop>
|
||||
<tabstop>pb_SetDefaults</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
||||
Reference in New Issue
Block a user