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 msfs =
57  (sims.isMSFS() || !CFsDirectories::msfsDir().isEmpty()) && CBuildConfig::isCompiledWithMSFSSupport();
58  const bool msfs2024 = (sims.isMSFS2024() || !CFsDirectories::msfs2024Dir().isEmpty()) &&
59  CBuildConfig::isCompiledWithMSFS2024Support();
60  const bool xp = sims.isXPlane() && CBuildConfig::isCompiledWithXPlaneSupport();
61  const bool fg = sims.isFG() && CBuildConfig::isCompiledWithFGSupport();
62 
63  ui->cb_P3D->setChecked(p3d);
64  ui->cb_XP->setChecked(xp);
65  ui->cb_FG->setChecked(fg);
66  ui->cb_MSFS->setChecked(msfs);
67  ui->cb_MSFS2024->setChecked(msfs2024);
68 
69  ui->cb_P3D->setEnabled(CBuildConfig::isCompiledWithP3DSupport());
70  ui->cb_XP->setEnabled(CBuildConfig::isCompiledWithXPlaneSupport());
71  ui->cb_FG->setEnabled(CBuildConfig::isCompiledWithFGSupport());
72  ui->cb_MSFS->setEnabled(CBuildConfig::isCompiledWithMSFSSupport());
73  ui->cb_MSFS2024->setEnabled(CBuildConfig::isCompiledWithMSFS2024Support());
74 
75  CGuiUtility::checkBoxReadOnly(ui->cb_P3D, !CBuildConfig::isCompiledWithP3DSupport());
76  CGuiUtility::checkBoxReadOnly(ui->cb_XP, !CBuildConfig::isCompiledWithXPlaneSupport());
77  CGuiUtility::checkBoxReadOnly(ui->cb_FG, !CBuildConfig::isCompiledWithFGSupport());
78  CGuiUtility::checkBoxReadOnly(ui->cb_MSFS, !CBuildConfig::isCompiledWithMSFSSupport());
79  CGuiUtility::checkBoxReadOnly(ui->cb_MSFS2024, !CBuildConfig::isCompiledWithMSFS2024Support());
80 
81  if (p3d) { ui->comp_SettingsSimulator->setSimulator(CSimulatorInfo(CSimulatorInfo::P3D)); }
82  else if (xp) { ui->comp_SettingsSimulator->setSimulator(CSimulatorInfo(CSimulatorInfo::XPLANE)); }
83  else if (fg) { ui->comp_SettingsSimulator->setSimulator(CSimulatorInfo(CSimulatorInfo::FG)); }
84  else if (msfs) { ui->comp_SettingsSimulator->setSimulator(CSimulatorInfo(CSimulatorInfo::MSFS)); }
85  else if (msfs2024) { ui->comp_SettingsSimulator->setSimulator(CSimulatorInfo(CSimulatorInfo::MSFS2024)); }
86  }
87 
88  QStringList CConfigSimulatorComponent::selectedSimsToPluginIds()
89  {
90  QStringList ids;
91 
92  // have to match full canonical ids from swift-plugin-simulators.xml
93  if (ui->cb_P3D->isChecked()) { ids << CSimulatorPluginInfo::p3dPluginIdentifier(); }
94  if (ui->cb_XP->isChecked()) { ids << CSimulatorPluginInfo::xplanePluginIdentifier(); }
95  if (ui->cb_FG->isChecked()) { ids << CSimulatorPluginInfo::fgPluginIdentifier(); }
96  if (ui->cb_MSFS->isChecked()) { ids << CSimulatorPluginInfo::msfsPluginIdentifier(); }
97  if (ui->cb_MSFS2024->isChecked()) { ids << CSimulatorPluginInfo::msfs2024PluginIdentifier(); }
98 
99  return ids;
100  }
101 
103 
105  {
106  Q_ASSERT_X(m_config, Q_FUNC_INFO, "Missing config");
107  m_config->save();
108  return true;
109  }
110 } // 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:14
Free functions in swift::misc.