mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-01 22:55:41 +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
|
//! Toggles the visibility of the message box
|
||||||
void toggle() { if (m_visible) { hide(); } else { show(); } }
|
void toggle() { if (m_visible) { hide(); } else { show(); } }
|
||||||
|
|
||||||
|
//! Is message box currently visible?
|
||||||
|
bool isVisible() const { return m_visible; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void show() { m_messageBox.show(); m_visible = true; }
|
void show() { m_messageBox.show(); m_visible = true; }
|
||||||
void hide() { m_messageBox.hide(); m_visible = false; }
|
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_dbusConnection(std::make_shared<CDBusConnection>()), m_menu(CMenu::mainMenu().subMenu("XSwiftBus"))
|
||||||
{
|
{
|
||||||
m_startServerMenuItem = m_menu.item("Start XSwiftBus", [this]{ startServer(CDBusConnection::SessionBus); });
|
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_messageWindowSubMenu = m_menu.subMenu("Message Window");
|
||||||
// m_startServerMenuItems.push_back(m_menu.item("Start server on system bus", [this]{ startServer(BlackMisc::CDBusServer::systemBusAddress()); }));
|
m_toggleMessageWindowMenuItem = m_messageWindowSubMenu.item("Show/Hide", [this]
|
||||||
// m_startServerMenuItems.push_back(m_menu.item("Start server on localhost P2P", [this]{ startServer(BlackMisc::CDBusServer::p2pAddress("localhost")); }));
|
{
|
||||||
|
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");
|
m_planeViewSubMenu = m_menu.subMenu("Follow Plane View");
|
||||||
planeViewOwnAircraftMenuItem = m_planeViewSubMenu.item("Own Aircraft", [this] { switchToOwnAircraftView(); });
|
planeViewOwnAircraftMenuItem = m_planeViewSubMenu.item("Own Aircraft", [this] { switchToOwnAircraftView(); });
|
||||||
|
|
||||||
@@ -78,6 +93,10 @@ namespace XSwiftBus
|
|||||||
|
|
||||||
m_traffic->setPlaneViewMenu(m_planeViewSubMenu);
|
m_traffic->setPlaneViewMenu(m_planeViewSubMenu);
|
||||||
|
|
||||||
|
m_toggleMessageWindowMenuItem.setEnabled(true);
|
||||||
|
m_popupMessageWindowMenuItem.setEnabled(true);
|
||||||
|
m_disappearMessageWindowMenuItem.setEnabled(true);
|
||||||
|
|
||||||
if (m_pluginConfig.getDBusMode() == CConfig::DBusP2P)
|
if (m_pluginConfig.getDBusMode() == CConfig::DBusP2P)
|
||||||
{
|
{
|
||||||
m_dbusP2PServer = std::make_unique<CDBusServer>();
|
m_dbusP2PServer = std::make_unique<CDBusServer>();
|
||||||
|
|||||||
@@ -65,7 +65,10 @@ namespace XSwiftBus
|
|||||||
std::unique_ptr<CWeather> m_weather;
|
std::unique_ptr<CWeather> m_weather;
|
||||||
CMenu m_menu;
|
CMenu m_menu;
|
||||||
CMenuItem m_startServerMenuItem;
|
CMenuItem m_startServerMenuItem;
|
||||||
|
CMenu m_messageWindowSubMenu;
|
||||||
CMenuItem m_toggleMessageWindowMenuItem;
|
CMenuItem m_toggleMessageWindowMenuItem;
|
||||||
|
CMenuItem m_popupMessageWindowMenuItem;
|
||||||
|
CMenuItem m_disappearMessageWindowMenuItem;
|
||||||
CMenu m_planeViewSubMenu;
|
CMenu m_planeViewSubMenu;
|
||||||
CMenuItem planeViewOwnAircraftMenuItem;
|
CMenuItem planeViewOwnAircraftMenuItem;
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ namespace XSwiftBus
|
|||||||
|
|
||||||
CService::CService() : CDBusObject()
|
CService::CService() : CDBusObject()
|
||||||
{
|
{
|
||||||
m_messages.addMessage({ "xswiftbus started.", 0, 255, 255 });
|
addTextMessage("xswiftbus started.", 0, 255, 255);
|
||||||
updateAirportsInRange();
|
updateAirportsInRange();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,6 +60,13 @@ namespace XSwiftBus
|
|||||||
{
|
{
|
||||||
m_messages.addMessage({ line, static_cast<float>(red), static_cast<float>(green), static_cast<float>(blue) });
|
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
|
std::string CService::getAircraftModelPath() const
|
||||||
@@ -628,6 +635,15 @@ namespace XSwiftBus
|
|||||||
int CService::process()
|
int CService::process()
|
||||||
{
|
{
|
||||||
invokeQueuedDBusCalls();
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include "navdatareference.h"
|
#include "navdatareference.h"
|
||||||
#include <XPLM/XPLMNavigation.h>
|
#include <XPLM/XPLMNavigation.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
//! \cond PRIVATE
|
//! \cond PRIVATE
|
||||||
#define XSWIFTBUS_SERVICE_INTERFACENAME "org.swift_project.xswiftbus.service"
|
#define XSWIFTBUS_SERVICE_INTERFACENAME "org.swift_project.xswiftbus.service"
|
||||||
@@ -226,6 +227,12 @@ namespace XSwiftBus
|
|||||||
//! \copydoc XSwiftBus::CMessageBoxControl::toggle
|
//! \copydoc XSwiftBus::CMessageBoxControl::toggle
|
||||||
void toggleMessageBoxVisibility() { m_messages.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
|
//! Perform generic processing
|
||||||
int process();
|
int process();
|
||||||
|
|
||||||
@@ -241,6 +248,9 @@ namespace XSwiftBus
|
|||||||
const std::vector<double> &lats, const std::vector<double> &lons, const std::vector<double> &alts);
|
const std::vector<double> &lats, const std::vector<double> &lons, const std::vector<double> &alts);
|
||||||
|
|
||||||
CMessageBoxControl m_messages { 16, 16, 16 };
|
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;
|
std::vector<CNavDataReference> m_airports;
|
||||||
void readAirportsDatabase();
|
void readAirportsDatabase();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user