[XSwiftBus] Add message window menu items

- Popup window when a new message arrives
- Automatically hide window message after 5s

ref T359
This commit is contained in:
Roland Winklmeier
2018-09-24 19:12:42 +02:00
committed by Klaus Basan
parent cfc9c3166e
commit ab45757c8d
5 changed files with 55 additions and 4 deletions

View File

@@ -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; }

View File

@@ -30,9 +30,24 @@ namespace XSwiftBus
: m_dbusConnection(std::make_shared<CDBusConnection>()), 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<CDBusServer>();

View File

@@ -65,7 +65,10 @@ namespace XSwiftBus
std::unique_ptr<CWeather> 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;

View File

@@ -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<float>(red), static_cast<float>(green), static_cast<float>(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;
}

View File

@@ -22,6 +22,7 @@
#include "navdatareference.h"
#include <XPLM/XPLMNavigation.h>
#include <string>
#include <chrono>
//! \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<double> &lats, const std::vector<double> &lons, const std::vector<double> &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<CNavDataReference> m_airports;
void readAirportsDatabase();