swift
installfsxterrainprobecomponent.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2018 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QFileDialog>
7 #include <QPointer>
8 #include <QPushButton>
9 #include <QTimer>
10 
11 #include "ui_installfsxterrainprobecomponent.h"
12 
13 #include "gui/guiutility.h"
15 #include "misc/directoryutils.h"
16 #include "misc/fileutils.h"
19 #include "misc/swiftdirectories.h"
20 
21 using namespace swift::misc;
22 using namespace swift::misc::simulation;
23 using namespace swift::misc::simulation::fscommon;
24 
25 namespace swift::gui::components
26 {
27  CInstallFsxTerrainProbeComponent::CInstallFsxTerrainProbeComponent(QWidget *parent)
28  : QFrame(parent), ui(new Ui::CInstallFsxTerrainProbeComponent)
29  {
30  ui->setupUi(this);
31  ui->le_Source->setText(CSwiftDirectories::shareTerrainProbeDirectory());
32 
33  ui->comp_SimulatorSelector->setMode(CSimulatorSelector::RadioButtons);
34  ui->comp_SimulatorSelector->setFsxP3DOnly();
35  ui->comp_SimulatorSelector->setValue(CSimulatorInfo::fsx());
36 
37  connect(ui->pb_Copy, &QPushButton::released, this, &CInstallFsxTerrainProbeComponent::copyProbe);
38  connect(ui->pb_DirectoryBrowser, &QPushButton::released, this,
39  &CInstallFsxTerrainProbeComponent::selectSimObjectsDir);
40  connect(ui->comp_SimulatorSelector, &CSimulatorSelector::changed, this,
41  &CInstallFsxTerrainProbeComponent::onSimulatorChanged);
42 
43  QPointer<CInstallFsxTerrainProbeComponent> myself(this);
44  QTimer::singleShot(500, this, [=] {
45  if (!myself) { return; }
46  this->onSimulatorChanged(ui->comp_SimulatorSelector->getValue());
47  });
48  }
49 
51 
52  void CInstallFsxTerrainProbeComponent::copyProbe()
53  {
54  using namespace std::chrono_literals;
55  if (ui->le_Target->text().isEmpty()) { return; }
56  CStatusMessageList msgs;
57  const int copied = CFsCommonUtil::copyFsxTerrainProbeFiles(ui->le_Target->text(), msgs);
59  if (mf) { mf->showOverlayMessages(msgs, false, 5s); }
60  Q_UNUSED(copied);
61  }
62 
63  void CInstallFsxTerrainProbeComponent::onSimulatorChanged(const CSimulatorInfo &simulator)
64  {
65  // avoid invalid simulators
66  CSimulatorInfo sim = simulator;
67  if (!sim.isFsxP3DFamily()) { sim = CSimulatorInfo::p3d(); }
68 
69  // model directories
70  const QStringList modelDirs = m_simulatorSettings.getModelDirectoriesOrDefault(sim);
71  if (!modelDirs.isEmpty() && !modelDirs.front().isEmpty()) { ui->le_Target->setText(modelDirs.front()); }
72  else { ui->le_Target->clear(); }
73  }
74 
75  void CInstallFsxTerrainProbeComponent::selectSimObjectsDir()
76  {
77  const QString startDirectory = CFileUtils::fixWindowsUncPath(ui->le_Target->text());
78  const QString dir = CFileUtils::fixWindowsUncPath(
79  QFileDialog::getExistingDirectory(this, "SimObjects directory", startDirectory,
80  QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks));
81  ui->le_Target->setText(dir);
82  }
83 } // namespace swift::gui::components
static COverlayMessagesWizardPage * nextOverlayMessageWizardPage(QWidget *widget, int maxLevels=10)
Find next COverlayMessagesWizardPage.
Definition: guiutility.cpp:445
void showOverlayMessages(const swift::misc::CStatusMessageList &messages, bool appendOldMessages=false, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
Show multiple messages.
Using this class provides a QWizardPage with the overlay functionality already integrated.
void changed(const swift::misc::simulation::CSimulatorInfo &simulator)
Value has been changed.
Status messages, e.g. from Core -> GUI.
Simple hardcoded info about the corresponding simulator.
Definition: simulatorinfo.h:41
bool isFsxP3DFamily() const
FSX family, i.e. FSX or P3D?
QStringList getModelDirectoriesOrDefault(const CSimulatorInfo &simulator) const
Model directory or default model path per simulator.
High level reusable GUI components.
Definition: aboutdialog.cpp:13
Free functions in swift::misc.
auto singleShot(int msec, QObject *target, F &&task)
Starts a single-shot timer which will call a task in the thread of the given object when it times out...
Definition: threadutils.h:30