swift
configsimulatorcomponent.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 
5 
6 #include "ui_configsimulatorcomponent.h"
7 
8 #include "config/buildconfig.h"
9 #include "gui/guiutility.h"
10 #include "misc/logmessage.h"
12 
13 using namespace swift::misc;
14 using namespace swift::misc::simulation;
15 using namespace swift::misc::simulation::fscommon;
16 using namespace swift::config;
17 
18 namespace swift::gui::components
19 {
20  CConfigSimulatorComponent::CConfigSimulatorComponent(QWidget *parent)
21  : QFrame(parent), ui(new Ui::CConfigSimulatorComponent)
22  {
23  ui->setupUi(this);
24  this->preselectSimulators();
25  }
26 
28 
30  {
31  ui->comp_SettingsSimulator->save();
32  const QStringList sims = this->selectedSimsToPluginIds();
33  const CStatusMessage msg = m_enabledSimulators.setAndSave(sims);
34  CLogMessage::preformatted(msg);
35  }
36 
38  {
39  return ui->comp_SettingsSimulator->hasUnsavedChanges();
40  }
41 
42  void CConfigSimulatorComponent::resetUnsavedChanges() { ui->comp_SettingsSimulator->resetUnsavedChanges(); }
43 
44  void CConfigSimulatorComponent::preselectSimulators()
45  {
46  CSimulatorInfo sims = m_enabledSimulators.get();
47  if (!sims.isAnySimulator())
48  {
49  CSimulatorInfo simWithModels = m_modelSets.simulatorsWithModels();
50  sims = simWithModels;
51  }
52 
53  // no x64 check as we would allow to config 32bit with launcher x64 and vice versa
54  const bool p3d =
55  (sims.isP3D() || !CFsDirectories::p3dDir().isEmpty()) && CBuildConfig::isCompiledWithP3DSupport();
56  const bool fsx =
57  (sims.isFSX() || !CFsDirectories::fsxDir().isEmpty()) && CBuildConfig::isCompiledWithFsxSupport();
58  const bool fs9 =
59  (sims.isFS9() || !CFsDirectories::fs9Dir().isEmpty()) && CBuildConfig::isCompiledWithFs9Support();
60  const bool msfs =
61  (sims.isMSFS() || !CFsDirectories::msfsDir().isEmpty()) && CBuildConfig::isCompiledWithMSFSSupport();
62  const bool msfs2024 = (sims.isMSFS2024() || !CFsDirectories::msfs2024Dir().isEmpty()) &&
63  CBuildConfig::isCompiledWithMSFS2024Support();
64  const bool xp = sims.isXPlane() && CBuildConfig::isCompiledWithXPlaneSupport();
65  const bool fg = sims.isFG() && CBuildConfig::isCompiledWithFGSupport();
66 
67  ui->cb_P3D->setChecked(p3d);
68  ui->cb_FSX->setChecked(fsx);
69  ui->cb_FS9->setChecked(fs9);
70  ui->cb_XP->setChecked(xp);
71  ui->cb_FG->setChecked(fg);
72  ui->cb_MSFS->setChecked(msfs);
73  ui->cb_MSFS2024->setChecked(msfs2024);
74 
75  ui->cb_P3D->setEnabled(CBuildConfig::isCompiledWithP3DSupport());
76  ui->cb_FSX->setEnabled(CBuildConfig::isCompiledWithFsxSupport());
77  ui->cb_FS9->setEnabled(CBuildConfig::isCompiledWithFs9Support());
78  ui->cb_XP->setEnabled(CBuildConfig::isCompiledWithXPlaneSupport());
79  ui->cb_FG->setEnabled(CBuildConfig::isCompiledWithFGSupport());
80  ui->cb_MSFS->setEnabled(CBuildConfig::isCompiledWithMSFSSupport());
81  ui->cb_MSFS2024->setEnabled(CBuildConfig::isCompiledWithMSFS2024Support());
82 
83  CGuiUtility::checkBoxReadOnly(ui->cb_P3D, !CBuildConfig::isCompiledWithP3DSupport());
84  CGuiUtility::checkBoxReadOnly(ui->cb_FSX, !CBuildConfig::isCompiledWithFsxSupport());
85  CGuiUtility::checkBoxReadOnly(ui->cb_FS9, !CBuildConfig::isCompiledWithFs9Support());
86  CGuiUtility::checkBoxReadOnly(ui->cb_XP, !CBuildConfig::isCompiledWithXPlaneSupport());
87  CGuiUtility::checkBoxReadOnly(ui->cb_FG, !CBuildConfig::isCompiledWithFGSupport());
88  CGuiUtility::checkBoxReadOnly(ui->cb_MSFS, !CBuildConfig::isCompiledWithMSFSSupport());
89  CGuiUtility::checkBoxReadOnly(ui->cb_MSFS2024, !CBuildConfig::isCompiledWithMSFS2024Support());
90 
91  if (p3d) { ui->comp_SettingsSimulator->setSimulator(CSimulatorInfo(CSimulatorInfo::P3D)); }
92  else if (fsx) { ui->comp_SettingsSimulator->setSimulator(CSimulatorInfo(CSimulatorInfo::FSX)); }
93  else if (fs9) { ui->comp_SettingsSimulator->setSimulator(CSimulatorInfo(CSimulatorInfo::FS9)); }
94  else if (xp) { ui->comp_SettingsSimulator->setSimulator(CSimulatorInfo(CSimulatorInfo::XPLANE)); }
95  else if (fg) { ui->comp_SettingsSimulator->setSimulator(CSimulatorInfo(CSimulatorInfo::FG)); }
96  else if (msfs) { ui->comp_SettingsSimulator->setSimulator(CSimulatorInfo(CSimulatorInfo::MSFS)); }
97  else if (msfs2024) { ui->comp_SettingsSimulator->setSimulator(CSimulatorInfo(CSimulatorInfo::MSFS2024)); }
98  }
99 
100  QStringList CConfigSimulatorComponent::selectedSimsToPluginIds()
101  {
102  QStringList ids;
103 
104  // have to match full canonical ids from swift-plugin-simulators.xml
105  if (ui->cb_FS9->isChecked()) { ids << CSimulatorPluginInfo::fs9PluginIdentifier(); }
106  if (ui->cb_FSX->isChecked()) { ids << CSimulatorPluginInfo::fsxPluginIdentifier(); }
107  if (ui->cb_P3D->isChecked()) { ids << CSimulatorPluginInfo::p3dPluginIdentifier(); }
108  if (ui->cb_XP->isChecked()) { ids << CSimulatorPluginInfo::xplanePluginIdentifier(); }
109  if (ui->cb_FG->isChecked()) { ids << CSimulatorPluginInfo::fgPluginIdentifier(); }
110  if (ui->cb_MSFS->isChecked()) { ids << CSimulatorPluginInfo::msfsPluginIdentifier(); }
111  if (ui->cb_MSFS2024->isChecked()) { ids << CSimulatorPluginInfo::msfs2024PluginIdentifier(); }
112 
113  return ids;
114  }
115 
117 
119  {
120  Q_ASSERT_X(m_config, Q_FUNC_INFO, "Missing config");
121  m_config->save();
122  return true;
123  }
124 } // namespace swift::gui::components
static void checkBoxReadOnly(QCheckBox *checkBox, bool readOnly)
Pseudo readonly state for checkbox.
Definition: guiutility.cpp:450
CStatusMessage setAndSave(const T &value, qint64 timestamp=0)
Write and save in the same step. Must be called from the thread in which the owner lives.
Definition: valuecache.h:417
T get() const
Get a copy of the current value.
Definition: valuecache.h:408
Streamable status message, e.g.
Simple hardcoded info about the corresponding simulator.
Definition: simulatorinfo.h:41
bool isAnySimulator() const
Any simulator?
CSimulatorInfo simulatorsWithModels() const
Simulators which have models.
High level reusable GUI components.
Definition: aboutdialog.cpp:13
Free functions in swift::misc.