From b2e53d64f1ca325e324b404ce674d8b2f38faec6 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 22 Dec 2016 02:49:11 +0100 Subject: [PATCH] refs #841, settings which text messages will be displayed in GUI (not to be confused which messages will be relayed to simulator) --- src/blackgui/registermetadata.cpp | 2 + src/blackgui/settings/textmessagesettings.cpp | 119 ++++++++++++++++ src/blackgui/settings/textmessagesettings.h | 133 ++++++++++++++++++ src/blackmisc/propertyindex.h | 1 + 4 files changed, 255 insertions(+) create mode 100644 src/blackgui/settings/textmessagesettings.cpp create mode 100644 src/blackgui/settings/textmessagesettings.h diff --git a/src/blackgui/registermetadata.cpp b/src/blackgui/registermetadata.cpp index a0c992ea5..4a054a3cb 100644 --- a/src/blackgui/registermetadata.cpp +++ b/src/blackgui/registermetadata.cpp @@ -12,6 +12,7 @@ #include "blackgui/settings/navigatorsettings.h" #include "blackgui/settings/viewupdatesettings.h" #include "blackgui/settings/guisettings.h" +#include "blackgui/settings/textmessagesettings.h" #include "blackgui/components/registermetadatacomponents.h" namespace BlackGui @@ -22,6 +23,7 @@ namespace BlackGui BlackGui::Settings::CNavigatorSettings::registerMetadata(); BlackGui::Settings::CViewUpdateSettings::registerMetadata(); BlackGui::Settings::CGeneralGuiSettings::registerMetadata(); + BlackGui::Settings::CTextMessageSettings::registerMetadata(); BlackGui::Components::registerMetadata(); } } diff --git a/src/blackgui/settings/textmessagesettings.cpp b/src/blackgui/settings/textmessagesettings.cpp new file mode 100644 index 000000000..0957c7d07 --- /dev/null +++ b/src/blackgui/settings/textmessagesettings.cpp @@ -0,0 +1,119 @@ +/* Copyright (C) 2016 + * 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 "textmessagesettings.h" +#include "blackmisc/network/textmessage.h" +#include "blackmisc/simulation/simulatedaircraft.h" + +using namespace BlackMisc; +using namespace BlackMisc::Network; +using namespace BlackMisc::Simulation; + +namespace BlackGui +{ + namespace Settings + { + CTextMessageSettings::CTextMessageSettings() + { } + + bool CTextMessageSettings::popupPrivateMessages() const + { + return this->getPopupAllMessages() || m_popupPrivateMessages; + } + + bool CTextMessageSettings::popupSupervisorMessages() const + { + return this->getPopupAllMessages() || m_popupSupervisorMessages; + } + + bool CTextMessageSettings::popupFrequencyMessages() const + { + return this->getPopupAllMessages() || m_popupFrequencyMessages; + } + + bool CTextMessageSettings::popupSelcalMessages() const + { + return this->getPopupAllMessages() || m_popupSelcalMessages; + } + + bool CTextMessageSettings::popup(const CTextMessage &textMessage) const + { + if (this->getPopupAllMessages()) { return true; } + if (textMessage.isPrivateMessage() && this->popupPrivateMessages()) { return true; } + if (textMessage.isSupervisorMessage() && this->popupSupervisorMessages()) { return true; } + if (textMessage.isSelcalMessage() && this->popupSelcalMessages()) { return true; } + return false; + } + + bool CTextMessageSettings::popup(const CTextMessage &textMessage, const CSimulatedAircraft &ownAircraft) const + { + if (this->popup(textMessage)) { return true; } + if (textMessage.isRadioMessage()) + { + if (!this->popupFrequencyMessages()) { return false; } + if (ownAircraft.isActiveFrequencyWithin25kHzChannel(textMessage.getFrequency())) { return true; } + } + return false; + } + + QString CTextMessageSettings::convertToQString(bool i18n) const + { + Q_UNUSED(i18n); + static const QString s("Private: %1 supervisor: %2 frequency: %3 all: %4"); + return s.arg( + boolToOnOff(this->getPopupPrivateMessages()), + boolToOnOff(this->getPopupSupervisorMessages()), + boolToOnOff(this->getPopupFrequencyMessages()), + boolToOnOff(this->getPopupAllMessages()) + ); + } + + CVariant CTextMessageSettings::propertyByIndex(const CPropertyIndex &index) const + { + if (index.isMyself()) { return CVariant::from(*this); } + const ColumnIndex i = index.frontCasted(); + switch (i) + { + case IndexPopupAllMessages: return CVariant::fromValue(this->getPopupAllMessages()); + case IndexPopupFrequencyMessages: return CVariant::fromValue(this->popupFrequencyMessages()); + case IndexPopupPrivateMessages: return CVariant::fromValue(this->popupPrivateMessages()); + case IndexPopupSupervisorMessages: return CVariant::fromValue(this->popupSupervisorMessages()); + case IndexPopupSelcalMessages: return CVariant::fromValue(this->popupSelcalMessages()); + default: return CValueObject::propertyByIndex(index); + } + } + + void CTextMessageSettings::setPropertyByIndex(const CPropertyIndex &index, const BlackMisc::CVariant &variant) + { + if (index.isMyself()) { (*this) = variant.to(); return; } + const ColumnIndex i = index.frontCasted(); + switch (i) + { + case IndexPopupAllMessages: + this->setPopupAllMessages(variant.toBool()); + break; + case IndexPopupFrequencyMessages: + this->setPopupFrequencyMessages(variant.toBool()); + break; + case IndexPopupSupervisorMessages: + this->setSupervisorMessages(variant.toBool()); + break; + case IndexPopupPrivateMessages: + this->setPopupPrivateMessages(variant.toBool()); + break; + case IndexPopupSelcalMessages: + this->setPopupSelcalMessages(variant.toBool()); + break; + default: + CValueObject::setPropertyByIndex(index, variant); + break; + } + } + } // ns +} // ns diff --git a/src/blackgui/settings/textmessagesettings.h b/src/blackgui/settings/textmessagesettings.h new file mode 100644 index 000000000..a209f27f8 --- /dev/null +++ b/src/blackgui/settings/textmessagesettings.h @@ -0,0 +1,133 @@ +/* Copyright (C) 2016 + * 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_SETTINGS_TEXTMESSAGESETTINGS_H +#define BLACKGUI_SETTINGS_TEXTMESSAGESETTINGS_H + +#include "blackgui/blackguiexport.h" +#include "blackmisc/settingscache.h" +#include + +namespace BlackMisc +{ + namespace Simulation { class CSimulatedAircraft; } + namespace Network { class CTextMessage; } +} +namespace BlackGui +{ + namespace Settings + { + //! Text message settings + class BLACKGUI_EXPORT CTextMessageSettings : + public BlackMisc::CValueObject + { + public: + //! Properties by index + enum ColumnIndex + { + IndexPopupPrivateMessages = BlackMisc::CPropertyIndex::GlobalIndexCTextMessageSettings, + IndexPopupSupervisorMessages, + IndexPopupFrequencyMessages, + IndexPopupAllMessages, + IndexPopupSelcalMessages + }; + + //! Default constructor + CTextMessageSettings(); + + //! Private messages? All considered. + bool popupPrivateMessages() const; + + //! Private messages + bool getPopupPrivateMessages() const { return m_popupPrivateMessages; } + + //! Private messages? + void setPopupPrivateMessages(bool popup) { m_popupPrivateMessages = popup; } + + //! Supervisor messages? All considered. + bool popupSupervisorMessages() const; + + //! Supervisor messages? + bool getPopupSupervisorMessages() const { return m_popupSupervisorMessages; } + + //! Supervisor messages? + void setSupervisorMessages(bool popup) { m_popupSupervisorMessages = popup; } + + //! Frequency messages tuned in? + bool popupFrequencyMessages() const; + + //! Frequency messages tuned in? + bool getPopupFrequencyMessages() const { return m_popupFrequencyMessages; } + + //! Frequency messages? + void setPopupFrequencyMessages(bool popup) { m_popupFrequencyMessages = popup; } + + //! Popup all messages? + bool getPopupAllMessages() const { return m_popupAllMessages; } + + //! All messages? + void setPopupAllMessages(bool popup) { m_popupAllMessages = popup; } + + //! Popup SELCAL messages? + bool getPopupSelcalMessages() const { return m_popupSelcalMessages; } + + //! Popup SELCAL messages? All considered. + bool popupSelcalMessages() const; + + //! SELCAL messages? + void setPopupSelcalMessages(bool popup) { m_popupSelcalMessages = popup; } + + //! Popup the given message? Quick check without frequency checks. + bool popup(const BlackMisc::Network::CTextMessage &textMessage) const; + + //! Popup the given message? Complete check including frequencies. + bool popup(const BlackMisc::Network::CTextMessage &textMessage, const BlackMisc::Simulation::CSimulatedAircraft &ownAircraft) const; + + //! \copydoc BlackMisc::Mixin::String::toQString + QString convertToQString(bool i18n = false) const; + + //! \copydoc BlackMisc::Mixin::Index::propertyByIndex + BlackMisc::CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; + + //! \copydoc BlackMisc::Mixin::Index::setPropertyByIndex + void setPropertyByIndex(const BlackMisc::CPropertyIndex &index, const BlackMisc::CVariant &variant); + + private: + bool m_popupPrivateMessages = true; + bool m_popupSupervisorMessages = true; + bool m_popupFrequencyMessages = false; //!< show if tuned in + bool m_popupAllMessages = false; + bool m_popupSelcalMessages = true; + + BLACK_METACLASS( + CTextMessageSettings, + BLACK_METAMEMBER(popupPrivateMessages), + BLACK_METAMEMBER(popupSupervisorMessages), + BLACK_METAMEMBER(popupFrequencyMessages), + BLACK_METAMEMBER(popupAllMessages), + BLACK_METAMEMBER(popupSelcalMessages) + ); + }; + + //! Text message settings + struct TextMessageSettings : public BlackMisc::TSettingTrait + { + //! \copydoc BlackCore::TSettingTrait::key + static const char *key() { return "textmessages"; } + }; + } // ns +} // ns + +Q_DECLARE_METATYPE(BlackGui::Settings::CTextMessageSettings) +Q_DECLARE_METATYPE(BlackMisc::CCollection) +Q_DECLARE_METATYPE(BlackMisc::CSequence) + +#endif // guard diff --git a/src/blackmisc/propertyindex.h b/src/blackmisc/propertyindex.h index c5a1659e1..2a861b0be 100644 --- a/src/blackmisc/propertyindex.h +++ b/src/blackmisc/propertyindex.h @@ -143,6 +143,7 @@ namespace BlackMisc GlobalIndexCSettingsReaders = 14400, GlobalIndexCViewUpdateSettings = 14500, GlobalIndexCGeneralGuiSettings = 14600, + GlobalIndexCTextMessageSettings = 14700, GlobalIndexCInterpolatioRenderingSetup = 15000, GlobalIndexCInterpolationHints = 15100, GlobalIndexLineNumber = 20000, //!< pseudo index for line numbers