From ab45757c8dd119485e054c85f0bc759a8e0c7a22 Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Mon, 24 Sep 2018 19:12:42 +0200 Subject: [PATCH] [XSwiftBus] Add message window menu items - Popup window when a new message arrives - Automatically hide window message after 5s ref T359 --- src/xswiftbus/messages.h | 3 +++ src/xswiftbus/plugin.cpp | 25 ++++++++++++++++++++++--- src/xswiftbus/plugin.h | 3 +++ src/xswiftbus/service.cpp | 18 +++++++++++++++++- src/xswiftbus/service.h | 10 ++++++++++ 5 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/xswiftbus/messages.h b/src/xswiftbus/messages.h index c79fcc3c2..6a20a6e4b 100644 --- a/src/xswiftbus/messages.h +++ b/src/xswiftbus/messages.h @@ -103,6 +103,9 @@ namespace XSwiftBus //! Toggles the visibility of the message box void toggle() { if (m_visible) { hide(); } else { show(); } } + //! Is message box currently visible? + bool isVisible() const { return m_visible; } + private: void show() { m_messageBox.show(); m_visible = true; } void hide() { m_messageBox.hide(); m_visible = false; } diff --git a/src/xswiftbus/plugin.cpp b/src/xswiftbus/plugin.cpp index 7ba0bc30b..d3e1feaae 100644 --- a/src/xswiftbus/plugin.cpp +++ b/src/xswiftbus/plugin.cpp @@ -30,9 +30,24 @@ namespace XSwiftBus : m_dbusConnection(std::make_shared()), m_menu(CMenu::mainMenu().subMenu("XSwiftBus")) { m_startServerMenuItem = m_menu.item("Start XSwiftBus", [this]{ startServer(CDBusConnection::SessionBus); }); - m_toggleMessageWindowMenuItem = m_menu.item("Toggle Message Window", [this] { if(m_service) { m_service->toggleMessageBoxVisibility(); } }); - // m_startServerMenuItems.push_back(m_menu.item("Start server on system bus", [this]{ startServer(BlackMisc::CDBusServer::systemBusAddress()); })); - // m_startServerMenuItems.push_back(m_menu.item("Start server on localhost P2P", [this]{ startServer(BlackMisc::CDBusServer::p2pAddress("localhost")); })); + m_messageWindowSubMenu = m_menu.subMenu("Message Window"); + m_toggleMessageWindowMenuItem = m_messageWindowSubMenu.item("Show/Hide", [this] + { + m_service->toggleMessageBoxVisibility(); + }); + m_toggleMessageWindowMenuItem.setEnabled(false); + m_popupMessageWindowMenuItem = m_messageWindowSubMenu.checkableItem("Pop up Window on new Nessage", true, [this] (bool checked) + { + m_popupMessageWindowMenuItem.setChecked(!checked); + m_service->setPopupMessageWindow(!checked); + }); + m_popupMessageWindowMenuItem.setEnabled(false); + m_disappearMessageWindowMenuItem = m_messageWindowSubMenu.checkableItem("Hide Message Window after 5s", true, [this] (bool checked) + { + m_disappearMessageWindowMenuItem.setChecked(!checked); + m_service->setDisappearMessageWindow(!checked); + }); + m_disappearMessageWindowMenuItem.setEnabled(false); m_planeViewSubMenu = m_menu.subMenu("Follow Plane View"); planeViewOwnAircraftMenuItem = m_planeViewSubMenu.item("Own Aircraft", [this] { switchToOwnAircraftView(); }); @@ -78,6 +93,10 @@ namespace XSwiftBus m_traffic->setPlaneViewMenu(m_planeViewSubMenu); + m_toggleMessageWindowMenuItem.setEnabled(true); + m_popupMessageWindowMenuItem.setEnabled(true); + m_disappearMessageWindowMenuItem.setEnabled(true); + if (m_pluginConfig.getDBusMode() == CConfig::DBusP2P) { m_dbusP2PServer = std::make_unique(); diff --git a/src/xswiftbus/plugin.h b/src/xswiftbus/plugin.h index 5c57bdee8..49194e3e4 100644 --- a/src/xswiftbus/plugin.h +++ b/src/xswiftbus/plugin.h @@ -65,7 +65,10 @@ namespace XSwiftBus std::unique_ptr m_weather; CMenu m_menu; CMenuItem m_startServerMenuItem; + CMenu m_messageWindowSubMenu; CMenuItem m_toggleMessageWindowMenuItem; + CMenuItem m_popupMessageWindowMenuItem; + CMenuItem m_disappearMessageWindowMenuItem; CMenu m_planeViewSubMenu; CMenuItem planeViewOwnAircraftMenuItem; diff --git a/src/xswiftbus/service.cpp b/src/xswiftbus/service.cpp index 4be4c2b81..d3f4bf851 100644 --- a/src/xswiftbus/service.cpp +++ b/src/xswiftbus/service.cpp @@ -22,7 +22,7 @@ namespace XSwiftBus CService::CService() : CDBusObject() { - m_messages.addMessage({ "xswiftbus started.", 0, 255, 255 }); + addTextMessage("xswiftbus started.", 0, 255, 255); updateAirportsInRange(); } @@ -60,6 +60,13 @@ namespace XSwiftBus { m_messages.addMessage({ line, static_cast(red), static_cast(green), static_cast(blue) }); } + + if (!m_messages.isVisible() && m_popupMessageWindow) { m_messages.toggle(); } + + if (m_disappearMessageWindow) + { + m_disappearMessageWindowTime = std::chrono::system_clock::now() + std::chrono::seconds(5); + } } std::string CService::getAircraftModelPath() const @@ -628,6 +635,15 @@ namespace XSwiftBus int CService::process() { invokeQueuedDBusCalls(); + + if (m_disappearMessageWindowTime != std::chrono::system_clock::time_point() + && std::chrono::system_clock::now() > m_disappearMessageWindowTime + && m_messages.isVisible()) + { + m_messages.toggle(); + m_disappearMessageWindowTime = std::chrono::system_clock::time_point(); + } + return 1; } diff --git a/src/xswiftbus/service.h b/src/xswiftbus/service.h index 12fc1716b..6dc8a302f 100644 --- a/src/xswiftbus/service.h +++ b/src/xswiftbus/service.h @@ -22,6 +22,7 @@ #include "navdatareference.h" #include #include +#include //! \cond PRIVATE #define XSWIFTBUS_SERVICE_INTERFACENAME "org.swift_project.xswiftbus.service" @@ -226,6 +227,12 @@ namespace XSwiftBus //! \copydoc XSwiftBus::CMessageBoxControl::toggle void toggleMessageBoxVisibility() { m_messages.toggle(); } + //! Enable/disable message window popping up for new messages + void setPopupMessageWindow(bool enabled) { m_popupMessageWindow = enabled; } + + //! Enable/disable message window disappearing again after 5 seconds + void setDisappearMessageWindow(bool enabled) { m_disappearMessageWindow = enabled; } + //! Perform generic processing int process(); @@ -241,6 +248,9 @@ namespace XSwiftBus const std::vector &lats, const std::vector &lons, const std::vector &alts); CMessageBoxControl m_messages { 16, 16, 16 }; + bool m_popupMessageWindow = true; + bool m_disappearMessageWindow = true; + std::chrono::system_clock::time_point m_disappearMessageWindowTime; std::vector m_airports; void readAirportsDatabase();