swift
swiftguistdmenus.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include <QAction>
5 #include <QDesktopServices>
6 #include <QMenu>
7 #include <QMessageBox>
8 #include <QObject>
9 #include <QScopedPointer>
10 #include <QStackedWidget>
11 #include <QtGlobal>
12 
13 #include "swiftguistd.h"
14 #include "ui_swiftguistd.h"
15 
16 #include "config/buildconfig.h"
20 #include "gui/guiactionbind.h"
21 #include "gui/guiapplication.h"
22 #include "misc/aviation/altitude.h"
23 #include "misc/logmessage.h"
24 #include "misc/pq/units.h"
25 
26 using namespace swift::config;
27 using namespace swift::gui;
28 using namespace swift::gui::components;
29 using namespace swift::core;
30 using namespace swift::misc;
31 using namespace swift::misc::physical_quantities;
32 using namespace swift::misc::aviation;
33 using namespace swift::misc::network;
34 using namespace swift::misc::simulation;
35 
36 void SwiftGuiStd::onMenuClicked()
37 {
38  using namespace std::chrono_literals;
39  QObject *sender = QObject::sender();
40  if (sender == ui->menu_TestLocationsEDRY)
41  {
42  this->setTestPosition("N 049° 18' 17", "E 008° 27' 05",
43  CAltitude(312, CAltitude::MeanSeaLevel, CLengthUnit::ft()),
44  CAltitude(312, CAltitude::MeanSeaLevel, CAltitude::PressureAltitude, CLengthUnit::ft()));
45  }
46  else if (sender == ui->menu_TestLocationsEDNX)
47  {
48  this->setTestPosition("N 048° 14′ 22", "E 011° 33′ 41",
49  CAltitude(486, CAltitude::MeanSeaLevel, CLengthUnit::m()),
50  CAltitude(486, CAltitude::MeanSeaLevel, CAltitude::PressureAltitude, CLengthUnit::m()));
51  }
52  else if (sender == ui->menu_TestLocationsEDDM)
53  {
54  this->setTestPosition("N 048° 21′ 14", "E 011° 47′ 10",
55  CAltitude(448, CAltitude::MeanSeaLevel, CLengthUnit::m()),
56  CAltitude(448, CAltitude::MeanSeaLevel, CAltitude::PressureAltitude, CLengthUnit::m()));
57  }
58  else if (sender == ui->menu_TestLocationsEDDF)
59  {
60  this->setTestPosition("N 50° 2′ 0", "E 8° 34′ 14", CAltitude(100, CAltitude::MeanSeaLevel, CLengthUnit::m()),
61  CAltitude(100, CAltitude::MeanSeaLevel, CAltitude::PressureAltitude, CLengthUnit::m()));
62  }
63  else if (sender == ui->menu_TestLocationsLOWW)
64  {
65  this->setTestPosition("N 48° 7′ 6.3588", "E 16° 33′ 39.924",
66  CAltitude(100, CAltitude::MeanSeaLevel, CLengthUnit::m()),
67  CAltitude(100, CAltitude::MeanSeaLevel, CAltitude::PressureAltitude, CLengthUnit::m()));
68  }
69  else if (sender == ui->menu_WindowFont)
70  {
71  this->setMainPageToInfoArea();
72  ui->comp_MainInfoArea->selectSettingsTab(swift::gui::components::CSettingsComponent::SettingTabGui);
73  }
74  else if (sender == ui->menu_InternalsPage) { ui->sw_MainMiddle->setCurrentIndex(MainPageInternals); }
75  else if (sender == ui->menu_AutoPublish) { this->autoPublishDialog(); }
76  else if (sender == ui->menu_ToggleIncognito)
77  {
78  if (sGui)
79  {
81  this->displayInOverlayWindow(QStringLiteral("Incognito mode is %1").arg(boolToOnOff(sGui->isIncognito())),
82  5s);
83  }
84  }
85 }
86 
87 void SwiftGuiStd::initMenus()
88 {
89  Q_ASSERT_X(ui->menu_InfoAreas, Q_FUNC_INFO, "No menu");
90  Q_ASSERT_X(ui->menu_Window, Q_FUNC_INFO, "No menu");
91  Q_ASSERT_X(ui->comp_MainInfoArea, Q_FUNC_INFO, "no main area");
92  sGui->addMenuFile(*ui->menu_File);
93  sGui->addMenuInternals(*ui->menu_Internals);
94  sGui->addMenuWindow(*ui->menu_Window);
95 
96  sGui->addMenuHelp(*ui->menu_Help);
97  ui->menu_InfoAreas->addActions(ui->comp_MainInfoArea->getInfoAreaSelectActions(true, ui->menu_InfoAreas));
98 
99  // for hotkeys
100  const QString swift(CGuiActionBindHandler::pathSwiftPilotClient());
101  static const CActionBind swiftRoot(swift, CIcons::Swift16); // inserts action for root folder
102  Q_UNUSED(swiftRoot)
103  m_menuHotkeyHandlers.append(CGuiActionBindHandler::bindMenu(ui->menu_InfoAreas, swift + "Info areas"));
104  m_menuHotkeyHandlers.append(CGuiActionBindHandler::bindMenu(ui->menu_File, swift + "File"));
105  m_menuHotkeyHandlers.append(CGuiActionBindHandler::bindMenu(ui->menu_Window, swift + "Window"));
106 }
107 
108 int SwiftGuiStd::autoPublishDialog()
109 {
110  if (!m_autoPublishDialog) { m_autoPublishDialog.reset(new CAutoPublishDialog(this)); }
111  m_lastAutoPublish.set(QDateTime::currentMSecsSinceEpoch());
112  return m_autoPublishDialog->readAndShow();
113 }
CActionBind binds a member function to an action.
Definition: actionbind.h:18
bool isIncognito() const
Is incognito mode?
void toggleIncognito()
Toggle incognito mode.
void addMenuHelp(QMenu &menu)
Help operations.
void addMenuFile(QMenu &menu)
File menu.
void addMenuInternals(QMenu &menu)
Internals menu.
void addMenuWindow(QMenu &menu)
Window operations.
CAutoPublishComponent as dialog.
Altitude as used in aviation, can be AGL or MSL altitude.
Definition: altitude.h:52
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Backend services of the swift project, like dealing with the network or the simulators.
Definition: actionbind.cpp:7
High level reusable GUI components.
Definition: aboutdialog.cpp:13
GUI related classes.
Free functions in swift::misc.
SWIFT_MISC_EXPORT const QString & boolToOnOff(bool v)
Bool to on/off.