swift
swiftcore.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2015 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include "swiftcore.h"
5 
6 #include <QDialog>
7 #include <QFlags>
8 #include <QGroupBox>
9 #include <QIcon>
10 #include <QLineEdit>
11 #include <QMessageBox>
12 #include <QPushButton>
13 #include <QRadioButton>
14 #include <QVBoxLayout>
15 #include <QtGlobal>
16 
17 #include "ui_swiftcore.h"
18 
21 #include "core/corefacade.h"
29 #include "gui/guiapplication.h"
30 #include "gui/stylesheetutility.h"
31 #include "misc/dbusserver.h"
32 #include "misc/icons.h"
33 #include "misc/loghandler.h"
34 #include "misc/logpattern.h"
35 
36 using namespace swift::misc;
37 using namespace swift::core;
38 using namespace swift::gui;
39 using namespace swift::gui::components;
40 
41 CSwiftCore::CSwiftCore(QWidget *parent)
42  : CSystemTrayWindow(CIcons::swiftCore24(), parent), CIdentifiable(this), ui(new Ui::CSwiftCore)
43 {
44  Q_ASSERT(sGui);
45  ui->setupUi(this);
47  const QString name(sGui->getApplicationNameAndVersion());
48  setSystemTrayMode(MinimizeToTray | QuitOnClose);
50 
51  m_mwaLogComponent = ui->comp_InfoArea->getLogComponent();
52  m_mwaOverlayFrame = nullptr;
53  m_mwaStatusBar = nullptr;
54 
55  connect(ui->pb_Restart, &QPushButton::clicked, this, &CSwiftCore::restart);
56  connect(ui->pb_Audio, &QPushButton::clicked, this, &CSwiftCore::audioDialog, Qt::QueuedConnection);
57  connect(ui->pb_AudioAdvanced, &QPushButton::clicked, this, &CSwiftCore::audioAdvancedDialog, Qt::QueuedConnection);
58  connect(ui->pb_DisconnectNetwork, &QPushButton::clicked, this, &CSwiftCore::disconnectFromNetwork,
59  Qt::QueuedConnection);
60  connect(sGui, &CGuiApplication::styleSheetsChanged, this, &CSwiftCore::onStyleSheetsChanged, Qt::QueuedConnection);
61 
62  this->initLogDisplay();
63  this->initStyleSheet();
64  this->initMenus();
65 
66  // log
67  CLogMessage(this).info(u"Cmd: %1") << CGuiApplication::arguments().join(" ");
68 
69  // command line
70  ui->lep_CommandLineInput->setIdentifier(this->identifier());
71  connect(ui->lep_CommandLineInput, &CCommandInput::commandEntered, sGui->getCoreFacade(),
72  &CCoreFacade::parseCommandLine);
73 }
74 
76 
77 void CSwiftCore::initStyleSheet()
78 {
79  if (!sGui || sGui->isShuttingDown()) { return; }
80  const QString s = sGui->getStyleSheetUtility().styles({ CStyleSheetUtility::fileNameFonts(),
81  CStyleSheetUtility::fileNameStandardWidget(),
82  CStyleSheetUtility::fileNameSwiftCore() });
83  this->setStyleSheet(""); // avoid crash, need to reset before
84  this->setStyleSheet(s);
85 }
86 
87 void CSwiftCore::showSettingsDialog()
88 {
89  if (!m_settingsDialog) { m_settingsDialog.reset(new CCoreSettingsDialog(this)); }
90  m_settingsDialog->show();
91 }
92 
93 void CSwiftCore::showRawFsdMessageDialog()
94 {
95  if (!m_rawFsdMessageDialog) { m_rawFsdMessageDialog.reset(new CRawFsdMessagesDialog(this)); }
96  m_rawFsdMessageDialog->show();
97 }
98 
99 void CSwiftCore::onStyleSheetsChanged() { this->initStyleSheet(); }
100 
101 void CSwiftCore::initLogDisplay()
102 {
104  CLogHandler::instance()->install(true);
105  CLogHandler::instance()->enableConsoleOutput(false); // default disable
106  ui->comp_InfoArea->getLogComponent()->showFilterDialog(); // add a filter dialog
107 }
108 
109 void CSwiftCore::initMenus()
110 {
111  sGui->addMenuFile(*ui->menu_File);
112  sGui->addMenuWindow(*ui->menu_Window);
113  sGui->addMenuHelp(*ui->menu_Help);
114  connect(ui->menu_SettingsDialog, &QAction::triggered, this, &CSwiftCore::showSettingsDialog);
115  connect(ui->menu_RawFsdMessageDialog, &QAction::triggered, this, &CSwiftCore::showRawFsdMessageDialog);
116 }
117 
118 void CSwiftCore::restart()
119 {
120  if (!sGui || sGui->isShuttingDown()) { return; }
121  ui->pb_Restart->setEnabled(false);
122  const QStringList args = this->getRestartCmdArgs();
123  sGui->restartApplication(args);
124 }
125 
126 void CSwiftCore::disconnectFromNetwork()
127 {
128  if (!sGui || sGui->isShuttingDown()) { return; }
129  if (!sGui->getIContextNetwork()) { return; }
130  if (!sGui->getIContextNetwork()->isConnected()) { return; }
131 
132  const QMessageBox::StandardButton reply =
133  QMessageBox::question(this, "Disconnect", "Disconnect from network?", QMessageBox::Yes | QMessageBox::No);
134  if (reply != QMessageBox::Yes) { return; }
136 }
137 
138 void CSwiftCore::audioDialog()
139 {
140  if (!m_audioDialog) { m_audioDialog.reset(new CCockpitComAudioDialog(this)); }
141  m_audioDialog->setModal(false);
142  m_audioDialog->show();
143 }
144 
145 void CSwiftCore::audioAdvancedDialog()
146 {
147  if (!m_audioAdvDialog) { m_audioAdvDialog.reset(new CAudioAdvancedDistributedDialog(this)); }
148  m_audioAdvDialog->setModal(false);
149  m_audioAdvDialog->show();
150 }
151 
152 QStringList CSwiftCore::getRestartCmdArgs() const
153 {
154  const QStringList cmds = ui->comp_DBusSelector->getDBusCmdLineArgs();
155  return cmds;
156 }
swift core control GUI
Definition: swiftcore.h:39
virtual void onStyleSheetsChanged()
Style sheet has changed.
Definition: swiftcore.cpp:99
virtual ~CSwiftCore()
Destructor.
Definition: swiftcore.cpp:75
CSwiftCore(QWidget *parent=nullptr)
Constructor.
Definition: swiftcore.cpp:41
void restartApplication(const QStringList &newArguments={}, const QStringList &removeArguments={})
Stop and restart application.
CCoreFacade * getCoreFacade()
Get the facade.
Definition: application.h:346
const context::IContextNetwork * getIContextNetwork() const
Direct access to contexts if a CCoreFacade has been initialized.
bool isShuttingDown() const
Is application shutting down?
const QString & getApplicationNameAndVersion() const
Application name and version.
virtual swift::misc::CStatusMessage disconnectFromNetwork()=0
Disconnect from network.
virtual bool isConnected() const =0
Network connected?
void addMenuHelp(QMenu &menu)
Help operations.
void addMenuFile(QMenu &menu)
File menu.
const CStyleSheetUtility & getStyleSheetUtility() const
Style sheet handling.
void addMenuWindow(QMenu &menu)
Window operations.
void initMainApplicationWidget(QWidget *mainWidget)
Init the main application window based on information in this application.
QString styles(const QStringList &fileNames) const
Multiple styles concatenated.
QDialog which can minimize to system tray.
void setSystemTrayMode(SystemTrayMode mode)
System tray mode.
void setSystemTrayToolTip(const QString &tooltip)
Set tool tip.
CManagedStatusBar * m_mwaStatusBar
status bar if any
components::CLogComponent * m_mwaLogComponent
the log component if any
COverlayMessagesFrame * m_mwaOverlayFrame
overlay messages if any
Core / swift pilot client settings as Dialog.
void showDetails(bool details)
Show log details.
Standard icons.
Definition: icons.h:25
Base class with a member CIdentifier to be inherited by a class which has an identity in the environm...
Definition: identifiable.h:24
const CIdentifier & identifier() const
Get identifier.
Definition: identifiable.h:27
Class for emitting a log message.
Definition: logmessage.h:27
Derived & info(const char16_t(&format)[N])
Set the severity to info, providing a format string.
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.