mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 11:55:35 +08:00
[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:
committed by
Klaus Basan
parent
cfc9c3166e
commit
ab45757c8d
@@ -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; }
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user