/* Copyright (C) 2015 * swift project Community / Contributors * * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level * directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated, * or distributed except according to the terms contained in the LICENSE file. */ #include "swiftcore.h" #include "blackgui/components/commandinput.h" #include "blackgui/components/coreinfoareacomponent.h" #include "blackgui/components/coresettingsdialog.h" #include "blackgui/components/logcomponent.h" #include "blackgui/components/rawfsdmessagesdialog.h" #include "blackgui/guiapplication.h" #include "blackgui/stylesheetutility.h" #include "blackcore/context/contextaudio.h" #include "blackcore/context/contextnetwork.h" #include "blackcore/corefacade.h" #include "blackmisc/dbusserver.h" #include "blackmisc/icons.h" #include "blackmisc/loghandler.h" #include "blackmisc/logpattern.h" #include "ui_swiftcore.h" #include #include #include #include #include #include #include #include #include #include using namespace BlackMisc; using namespace BlackCore; using namespace BlackGui; using namespace BlackGui::Components; CSwiftCore::CSwiftCore(QWidget *parent) : CSystemTrayWindow(CIcons::swiftCore24(), parent), CIdentifiable(this), ui(new Ui::CSwiftCore) { Q_ASSERT(sGui); ui->setupUi(this); sGui->initMainApplicationWidget(this); const QString name(sGui->getApplicationNameAndVersion()); setSystemTrayMode(MinimizeToTray | QuitOnClose); setSystemTrayToolTip(name); m_mwaLogComponent = ui->comp_InfoArea->getLogComponent(); m_mwaOverlayFrame = nullptr; m_mwaStatusBar = nullptr; connect(ui->pb_Restart, &QPushButton::clicked, this, &CSwiftCore::restart); connect(ui->pb_DisconnectNetwork, &QPushButton::clicked, this, &CSwiftCore::disconnectFromNetwork); connect(sGui, &CGuiApplication::styleSheetsChanged, this, &CSwiftCore::onStyleSheetsChanged, Qt::QueuedConnection); this->initLogDisplay(); this->initStyleSheet(); this->initMenus(); this->initAudio(); // log CStatusMessage m = CStatusMessage(this).info(u"Cmd: %1") << CGuiApplication::arguments().join(" "); this->appendLogMessage(m); // command line ui->lep_CommandLineInput->setIdentifier(this->identifier()); connect(ui->lep_CommandLineInput, &CCommandInput::commandEntered, sGui->getCoreFacade(), &CCoreFacade::parseCommandLine); } CSwiftCore::~CSwiftCore() { } void CSwiftCore::initStyleSheet() { if (!sGui || sGui->isShuttingDown()) { return; } const QString s = sGui->getStyleSheetUtility().styles( { CStyleSheetUtility::fileNameFonts(), CStyleSheetUtility::fileNameStandardWidget(), CStyleSheetUtility::fileNameSwiftCore() }); this->setStyleSheet(""); // avoid crash, need to reset before this->setStyleSheet(s); } void CSwiftCore::appendLogMessage(const CStatusMessage &message) { ui->comp_InfoArea->getLogComponent()->appendStatusMessageToList(message); } void CSwiftCore::showSettingsDialog() { if (!m_settingsDialog) { m_settingsDialog.reset(new CCoreSettingsDialog(this)); } m_settingsDialog->show(); } void CSwiftCore::showRawFsdMessageDialog() { if (!m_rawFsdMessageDialog) { m_rawFsdMessageDialog.reset(new CRawFsdMessagesDialog(this)); } m_rawFsdMessageDialog->show(); } void CSwiftCore::onStyleSheetsChanged() { this->initStyleSheet(); } void CSwiftCore::initLogDisplay() { m_mwaLogComponent->showDetails(false); CLogHandler::instance()->install(true); CLogHandler::instance()->enableConsoleOutput(false); // default disable auto logHandler = CLogHandler::instance()->handlerForPattern( CLogPattern().withSeverityAtOrAbove(CStatusMessage::SeverityInfo) ); logHandler->subscribe(this, &CSwiftCore::appendLogMessage); ui->comp_InfoArea->getLogComponent()->showFilterDialog(); // add a filter dialog } void CSwiftCore::initMenus() { sGui->addMenuFile(*ui->menu_File); sGui->addMenuWindow(*ui->menu_Window); sGui->addMenuHelp(*ui->menu_Help); connect(ui->menu_SettingsDialog, &QAction::triggered, this, &CSwiftCore::showSettingsDialog); connect(ui->menu_RawFsdMessageDialog, &QAction::triggered, this, &CSwiftCore::showRawFsdMessageDialog); } void CSwiftCore::initAudio() { if (!sGui->getIContextAudio()) { return; } ui->lbl_AudioRunsWhere->setText(sGui->getIContextAudio()->audioRunsWhereInfo()); if (sGui->getIContextAudio()->isUsingImplementingObject()) { ui->rb_AudioOnCore->setChecked(true); } else { ui->rb_AudioOnGui->setChecked(true); } } void CSwiftCore::restart() { if (!sGui || sGui->isShuttingDown()) { return; } ui->pb_Restart->setEnabled(false); const QStringList args = this->getRestartCmdArgs(); sGui->restartApplication(args, { "--coreaudio" }); } void CSwiftCore::disconnectFromNetwork() { if (!sGui || sGui->isShuttingDown()) { return; } if (!sGui->getIContextNetwork()) { return; } if (!sGui->getIContextNetwork()->isConnected()) { return; } const QMessageBox::StandardButton reply = QMessageBox::question(this, "Disconnect", "Disconnect from network?", QMessageBox::Yes | QMessageBox::No); if (reply != QMessageBox::Yes) { return; } sGui->getIContextNetwork()->disconnectFromNetwork(); } QString CSwiftCore::getAudioCmdFromRadioButtons() const { if (ui->rb_AudioOnCore->isChecked()) { return QStringLiteral("--coreaudio"); } return {}; } QStringList CSwiftCore::getRestartCmdArgs() const { const QString coreAudio = this->getAudioCmdFromRadioButtons(); QStringList cmds = ui->comp_DBusSelector->getDBusCmdLineArgs(); if (!coreAudio.isEmpty()) { cmds.append(coreAudio); } return cmds; }