diff --git a/src/blackgui/components/internalscomponent.cpp b/src/blackgui/components/internalscomponent.cpp index ae4894407..9cdfb7f07 100644 --- a/src/blackgui/components/internalscomponent.cpp +++ b/src/blackgui/components/internalscomponent.cpp @@ -34,6 +34,7 @@ #include #include #include +#include using namespace BlackMisc; using namespace BlackMisc::Aviation; diff --git a/src/blackgui/components/internalscomponent.ui b/src/blackgui/components/internalscomponent.ui index 3ee8a9ea0..546ca60a6 100644 --- a/src/blackgui/components/internalscomponent.ui +++ b/src/blackgui/components/internalscomponent.ui @@ -6,17 +6,14 @@ 0 0 - 314 + 360 590 Form - - - 2 - + 2 @@ -29,10 +26,10 @@ 2 - + - 0 + 3 @@ -579,6 +576,35 @@ + + + FSD Messages + + + + 0 + + + 4 + + + 0 + + + 0 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + @@ -596,6 +622,12 @@
blackgui/components/remoteaircraftselector.h
1 + + BlackGui::Components::CRawFsdMessagesComponent + QFrame +
blackgui/components/rawfsdmessagescomponent.h
+ 1 +
diff --git a/src/blackgui/components/rawfsdmessagescomponent.cpp b/src/blackgui/components/rawfsdmessagescomponent.cpp new file mode 100644 index 000000000..0783efadf --- /dev/null +++ b/src/blackgui/components/rawfsdmessagescomponent.cpp @@ -0,0 +1,111 @@ +/* Copyright (C) 2018 + * 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 and at http://www.swift-project.org/license.html. 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 "ui_rawfsdmessagescomponent.h" +#include "blackgui/components/rawfsdmessagescomponent.h" +#include "blackgui/guiapplication.h" +#include "blackcore/context/contextnetwork.h" +#include "blackmisc/directoryutils.h" + +#include +#include +#include + +using namespace BlackMisc; +using namespace BlackMisc::Network; +using namespace BlackCore; +using namespace BlackCore::Vatsim; + +namespace BlackGui +{ + namespace Components + { + CRawFsdMessagesComponent::CRawFsdMessagesComponent(QWidget *parent) : + QFrame(parent), ui(new Ui::CRawFsdMessagesComponent) + { + ui->setupUi(this); + ui->cb_FileWritingMode->addItem(QApplication::translate("CRawFsdMessagesComponent", "Truncate", nullptr), QVariant::fromValue(CRawFsdMessageSettings::Truncate)); + ui->cb_FileWritingMode->addItem(QApplication::translate("CRawFsdMessagesComponent", "Append", nullptr), QVariant::fromValue(CRawFsdMessageSettings::Append)); + ui->cb_FileWritingMode->addItem(QApplication::translate("CRawFsdMessagesComponent", "Timestamped", nullptr), QVariant::fromValue(CRawFsdMessageSettings::Timestamped)); + + QMetaObject::Connection c = sGui->getIContextNetwork()->connectRawFsdMessageSignal(this, std::bind(&CRawFsdMessagesComponent::addFsdMessage, this, std::placeholders::_1)); + if (!c) + { + ui->cb_EnableFileWriting->setEnabled(false); + ui->lw_RawFsdMessages->addItem(QStringLiteral("Could not connect to raw FSD message.")); + ui->lw_RawFsdMessages->addItem(QStringLiteral("This is most likely because core is not running in this process.")); + ui->lw_RawFsdMessages->addItem(QStringLiteral("Open this component again from the process running core.")); + } + else + { + m_signalConnections.append(c); + readSettings(); + connect(ui->cb_EnableFileWriting, &QCheckBox::toggled, this, &CRawFsdMessagesComponent::changeWritingToFile); + connect(ui->pb_SelectFileDir, &QPushButton::clicked, this, &CRawFsdMessagesComponent::selectFileDir); + connect(ui->cb_FileWritingMode, QOverload::of(&QComboBox::currentIndexChanged), this, &CRawFsdMessagesComponent::changeFileWritingMode); + } + } + + CRawFsdMessagesComponent::~CRawFsdMessagesComponent() + { } + + void CRawFsdMessagesComponent::changeWritingToFile(bool enable) + { + ui->le_FileDir->setEnabled(enable); + ui->pb_SelectFileDir->setEnabled(enable); + ui->cb_FileWritingMode->setEnabled(enable); + m_setting.setProperty(Vatsim::CRawFsdMessageSettings::IndexWriteEnabled, CVariant::fromValue(enable)); + } + + void CRawFsdMessagesComponent::selectFileDir() + { + QString fileDir = ui->le_FileDir->text(); + fileDir = QFileDialog::getExistingDirectory(this, tr("Select File Directory"), fileDir); + if (fileDir.isEmpty()) { return; } + ui->le_FileDir->setText(fileDir); + m_setting.setProperty(Vatsim::CRawFsdMessageSettings::IndexFileDir, CVariant::fromValue(fileDir)); + } + + void CRawFsdMessagesComponent::changeFileWritingMode() + { + CRawFsdMessageSettings::FileWriteMode mode = ui->cb_FileWritingMode->currentData().value(); + m_setting.setProperty(Vatsim::CRawFsdMessageSettings::IndexFileWriteMode, CVariant::fromValue(mode)); + } + + void CRawFsdMessagesComponent::setFileWritingModeFromSettings(CRawFsdMessageSettings::FileWriteMode mode) + { + ui->cb_FileWritingMode->setCurrentIndex(static_cast(mode)); + } + + void CRawFsdMessagesComponent::addFsdMessage(const CRawFsdMessage &rawFsdMessage) + { + ui->lw_RawFsdMessages->addItem(rawFsdMessage.toQString()); + ui->lw_RawFsdMessages->scrollToBottom(); + + while (ui->lw_RawFsdMessages->count() > 100) + { + QListWidgetItem *item = ui->lw_RawFsdMessages->takeItem(0); + delete item; + } + } + + void CRawFsdMessagesComponent::readSettings() + { + const Vatsim::CRawFsdMessageSettings setting = m_setting.get(); + ui->le_FileDir->setText(setting.getFileDir()); + const bool enable = setting.isFileWritingEnabled(); + ui->cb_EnableFileWriting->setChecked(enable); + ui->le_FileDir->setEnabled(enable); + ui->pb_SelectFileDir->setEnabled(enable); + ui->cb_FileWritingMode->setEnabled(enable); + const CRawFsdMessageSettings::FileWriteMode mode = setting.getFileWriteMode(); + ui->cb_FileWritingMode->setCurrentIndex(static_cast(mode)); + } + } +} // namespace diff --git a/src/blackgui/components/rawfsdmessagescomponent.h b/src/blackgui/components/rawfsdmessagescomponent.h new file mode 100644 index 000000000..9d3de8bd7 --- /dev/null +++ b/src/blackgui/components/rawfsdmessagescomponent.h @@ -0,0 +1,58 @@ +/* Copyright (C) 2018 + * 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 and at http://www.swift-project.org/license.html. 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. + */ + +//! \file + +#ifndef BLACKGUI_RAWFSDMESSAGESCOMPONENT_H +#define BLACKGUI_RAWFSDMESSAGESCOMPONENT_H + +#include "blackgui/blackguiexport.h" +#include "blackcore/vatsim/vatsimsettings.h" +#include "blackmisc/network/rawfsdmessage.h" +#include "blackmisc/connectionguard.h" + +#include + +class QAction; +class QPoint; +class QWidget; + +namespace Ui { class CRawFsdMessagesComponent; } +namespace BlackGui +{ + namespace Components + { + //! GUI displaying raw FSD messages + class BLACKGUI_EXPORT CRawFsdMessagesComponent : public QFrame + { + Q_OBJECT + + public: + //! Constructor + explicit CRawFsdMessagesComponent(QWidget *parent = nullptr); + + //! Destructor + virtual ~CRawFsdMessagesComponent(); + + private: + void changeWritingToFile(bool enable); + void selectFileDir(); + void changeFileWritingMode(); + void setFileWritingModeFromSettings(BlackCore::Vatsim::CRawFsdMessageSettings::FileWriteMode mode); + void addFsdMessage(const BlackMisc::Network::CRawFsdMessage &rawFsdMessage); + void readSettings(); + + BlackMisc::CSetting m_setting { this }; + + QScopedPointer ui; + BlackMisc::CConnectionGuard m_signalConnections; //!< connected signal/slots + }; + } // ns +} // ns +#endif // guard diff --git a/src/blackgui/components/rawfsdmessagescomponent.ui b/src/blackgui/components/rawfsdmessagescomponent.ui new file mode 100644 index 000000000..d74f16740 --- /dev/null +++ b/src/blackgui/components/rawfsdmessagescomponent.ui @@ -0,0 +1,112 @@ + + + CRawFsdMessagesComponent + + + + 0 + 0 + 427 + 516 + + + + Log component + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QAbstractItemView::NoSelection + + + + + + + Write to File + + + + + + Directory: + + + + + + + false + + + + + + + Write Mode + + + + + + + Enable + + + + + + + false + + + + + + false + + + + + + + false + + + Set + + + true + + + + + + + + + + + diff --git a/src/blackgui/components/rawfsdmessagesdialog.cpp b/src/blackgui/components/rawfsdmessagesdialog.cpp new file mode 100644 index 000000000..b0069606c --- /dev/null +++ b/src/blackgui/components/rawfsdmessagesdialog.cpp @@ -0,0 +1,27 @@ +/* Copyright (C) 2017 + * 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 and at http://www.swift-project.org/license.html. 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 "rawfsdmessagesdialog.h" +#include "ui_rawfsdmessagesdialog.h" + +namespace BlackGui +{ + namespace Components + { + CRawFsdMessagesDialog::CRawFsdMessagesDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::CRawFsdMessagesDialog) + { + ui->setupUi(this); + } + + CRawFsdMessagesDialog::~CRawFsdMessagesDialog() + { } + } // ns +} // ns diff --git a/src/blackgui/components/rawfsdmessagesdialog.h b/src/blackgui/components/rawfsdmessagesdialog.h new file mode 100644 index 000000000..e99f5d21e --- /dev/null +++ b/src/blackgui/components/rawfsdmessagesdialog.h @@ -0,0 +1,44 @@ +/* Copyright (C) 2018 + * 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 and at http://www.swift-project.org/license.html. 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. + */ + +//! \file + +#ifndef BLACKGUI_COMPONENTS_RAWFSDMESSAGESDIALOG_H +#define BLACKGUI_COMPONENTS_RAWFSDMESSAGESDIALOG_H + +#include "blackgui/blackguiexport.h" +#include "blackgui/components/rawfsdmessagescomponent.h" + +#include +#include + +namespace Ui { class CRawFsdMessagesDialog; } +namespace BlackGui +{ + namespace Components + { + //! CRawFsdMessageComponent as dialog + class BLACKGUI_EXPORT CRawFsdMessagesDialog : public QDialog + { + Q_OBJECT + + public: + //! Constructor + explicit CRawFsdMessagesDialog(QWidget *parent = nullptr); + + //! Destructor + virtual ~CRawFsdMessagesDialog(); + + private: + QScopedPointer ui; + }; + } // ns +} // ns + +#endif // guard diff --git a/src/blackgui/components/rawfsdmessagesdialog.ui b/src/blackgui/components/rawfsdmessagesdialog.ui new file mode 100644 index 000000000..8d95b01d3 --- /dev/null +++ b/src/blackgui/components/rawfsdmessagesdialog.ui @@ -0,0 +1,57 @@ + + + CRawFsdMessagesDialog + + + + 0 + 0 + 425 + 463 + + + + + 425 + 0 + + + + FSD Messages + + + + 6 + + + 6 + + + 6 + + + 6 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + BlackGui::Components::CRawFsdMessagesComponent + QFrame +
blackgui/components/rawfsdmessagescomponent.h
+ 1 +
+
+ + +
diff --git a/src/blackgui/share/qss/stdwidget.qss b/src/blackgui/share/qss/stdwidget.qss index a28246c49..117410bc7 100644 --- a/src/blackgui/share/qss/stdwidget.qss +++ b/src/blackgui/share/qss/stdwidget.qss @@ -173,6 +173,12 @@ BlackGui--Components--CDownloadDialog { background-image: url(:/textures/icons/textures/texture-inner.jpg); } +BlackGui--Components--CRawFsdMessagesComponent, +BlackGui--Components--CRawFsdMessagesDialog { + background: black; /* background is background color here */ + background-image: url(:/textures/icons/textures/texture-inner.jpg); +} + /* default for buttons */ QToolButton { background-color: transparent; /* transparent tool buttons */ diff --git a/src/swiftcore/swiftcore.cpp b/src/swiftcore/swiftcore.cpp index b05893d7d..c376bc20c 100644 --- a/src/swiftcore/swiftcore.cpp +++ b/src/swiftcore/swiftcore.cpp @@ -12,6 +12,7 @@ #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" @@ -22,6 +23,7 @@ #include "blackmisc/logpattern.h" #include "ui_swiftcore.h" +#include #include #include #include @@ -29,6 +31,7 @@ #include #include #include +#include class QWidget; @@ -99,6 +102,15 @@ void CSwiftCore::showSettingsDialog() m_settingsDialog->show(); } +void CSwiftCore::showRawFsdMessageDialog() +{ + if(!m_rawFsdMessageDialog) + { + m_rawFsdMessageDialog.reset(new CRawFsdMessagesDialog(this)); + } + m_rawFsdMessageDialog->show(); +} + void CSwiftCore::onStyleSheetsChanged() { this->initStyleSheet(); @@ -122,6 +134,7 @@ void CSwiftCore::initMenus() 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() diff --git a/src/swiftcore/swiftcore.h b/src/swiftcore/swiftcore.h index 384cca903..9c4b52331 100644 --- a/src/swiftcore/swiftcore.h +++ b/src/swiftcore/swiftcore.h @@ -24,7 +24,14 @@ #include class QWidget; -namespace BlackGui { namespace Components { class CCoreSettingsDialog; }} +namespace BlackGui +{ + namespace Components + { + class CCoreSettingsDialog; + class CRawFsdMessagesDialog; + } +} namespace Ui { class CSwiftCore; } /*! @@ -63,6 +70,9 @@ private: //! Show the settings dialog void showSettingsDialog(); + //! Show the raw FSD messages dialog + void showRawFsdMessageDialog(); + //! Style sheet has changed virtual void onStyleSheetsChanged(); @@ -76,7 +86,9 @@ private: QStringList getRestartCmdArgs() const; QScopedPointer m_settingsDialog; + QScopedPointer m_rawFsdMessageDialog; QScopedPointer ui; + }; #endif // guard diff --git a/src/swiftcore/swiftcore.ui b/src/swiftcore/swiftcore.ui index d4af13cca..3c1066a07 100644 --- a/src/swiftcore/swiftcore.ui +++ b/src/swiftcore/swiftcore.ui @@ -192,7 +192,7 @@ QTextEdit { 0 0 450 - 21 + 26 @@ -216,10 +216,17 @@ QTextEdit { + + + Internals + + + + @@ -230,9 +237,23 @@ QTextEdit { Modify settings + + + FSD Messages + + + Raw FSD Messages + + + + BlackGui::Components::CInfoBarStatusComponent + QWidget +
blackgui/components/infobarstatuscomponent.h
+ 1 +
BlackGui::Components::CDBusServerAddressSelector QFrame @@ -245,12 +266,6 @@ QTextEdit {
blackgui/systemtraywindow.h
1
- - BlackGui::Components::CInfoBarStatusComponent - QWidget -
blackgui/components/infobarstatuscomponent.h
- 1 -
BlackGui::Components::CCommandInput QLineEdit