trayicon: added restart and show/hide console option to popupmenu

Dieser Commit ist enthalten in:
Reinder Feenstra 2022-05-11 00:00:46 +02:00
Ursprung c7b1c35f21
Commit 7469c41541
3 geänderte Dateien mit 40 neuen und 11 gelöschten Zeilen

Datei anzeigen

@ -146,7 +146,7 @@ int main(int argc, char* argv[])
if(options.tray) if(options.tray)
{ {
Windows::setConsoleWindowVisible(false); Windows::setConsoleWindowVisible(false);
enableConsoleLogger = false; enableConsoleLogger = Windows::hasConsoleWindow();
} }
#endif #endif

Datei anzeigen

@ -24,6 +24,7 @@
#include <cassert> #include <cassert>
#include <version.hpp> #include <version.hpp>
#include <traintastic/codename.hpp> #include <traintastic/codename.hpp>
#include "consolewindow.hpp"
#include "../../core/eventloop.hpp" #include "../../core/eventloop.hpp"
#include "../../traintastic/traintastic.hpp" #include "../../traintastic/traintastic.hpp"
@ -70,7 +71,10 @@ void TrayIcon::run()
// create menu: // create menu:
s_menu = CreatePopupMenu(); s_menu = CreatePopupMenu();
menuAddItem(MenuItem::Quit, "Quit"); menuAddItem(MenuItem::ShowHideConsole, "Show/hide console", hasConsoleWindow());
menuAddSeperator();
menuAddItem(MenuItem::Restart, "Restart");
menuAddItem(MenuItem::Shutdown, "Shutdown");
// setup tray icon: // setup tray icon:
static NOTIFYICONDATA notifyIconData; static NOTIFYICONDATA notifyIconData;
@ -143,20 +147,32 @@ LRESULT CALLBACK TrayIcon::windowProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARA
case WM_COMMAND: case WM_COMMAND:
switch(static_cast<MenuItem>(wParam)) switch(static_cast<MenuItem>(wParam))
{ {
case MenuItem::Quit: case MenuItem::Shutdown:
EventLoop::call( EventLoop::call(
[]() []()
{ {
Traintastic::instance->exit(); Traintastic::instance->exit();
}); });
return 0; return 0;
case MenuItem::Restart:
EventLoop::call(
[]()
{
Traintastic::instance->restart();
});
return 0;
case MenuItem::ShowHideConsole:
setConsoleWindowVisible(!isConsoleWindowVisible());
return 0;
} }
break; break;
} }
return DefWindowProc(hWnd, uMsg, wParam, lParam); return DefWindowProc(hWnd, uMsg, wParam, lParam);
} }
void TrayIcon::menuAddItem(MenuItem id, const std::string& text) void TrayIcon::menuAddItem(MenuItem id, const LPSTR text, bool enabled)
{ {
assert(s_menu); assert(s_menu);
MENUITEMINFO item; MENUITEMINFO item;
@ -164,10 +180,21 @@ void TrayIcon::menuAddItem(MenuItem id, const std::string& text)
item.cbSize = sizeof(item); item.cbSize = sizeof(item);
item.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE; item.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
item.fType = 0; item.fType = 0;
item.fState = 0; item.fState = enabled ? MFS_ENABLED : MFS_DISABLED;
item.wID = static_cast<UINT>(id); item.wID = static_cast<UINT>(id);
item.dwTypeData = const_cast<LPSTR>(text.c_str()); item.dwTypeData = const_cast<LPSTR>(text);
InsertMenuItem(s_menu, 0, TRUE, &item); InsertMenuItem(s_menu, GetMenuItemCount(s_menu), TRUE, &item);
}
void TrayIcon::menuAddSeperator()
{
assert(s_menu);
MENUITEMINFO item;
memset(&item, 0, sizeof(item));
item.cbSize = sizeof(item);
item.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
item.fType = MFT_SEPARATOR;
InsertMenuItem(s_menu, GetMenuItemCount(s_menu), TRUE, &item);
} }
} }

Datei anzeigen

@ -3,7 +3,7 @@
* *
* This file is part of the traintastic source code. * This file is part of the traintastic source code.
* *
* Copyright (C) 2021 Reinder Feenstra * Copyright (C) 2021-2022 Reinder Feenstra
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -29,7 +29,6 @@
#define _WINSOCKAPI_ // prevent windows.h including winsock.h #define _WINSOCKAPI_ // prevent windows.h including winsock.h
#include <windows.h> #include <windows.h>
#undef _WINSOCKAPI_ #undef _WINSOCKAPI_
//#include <shellapi.h>
namespace Windows { namespace Windows {
@ -41,7 +40,9 @@ class TrayIcon
protected: protected:
enum class MenuItem : UINT enum class MenuItem : UINT
{ {
Quit = 1, Shutdown = 1,
Restart = 2,
ShowHideConsole = 3,
}; };
static constexpr UINT WM_NOTIFYICON_CALLBACK = WM_USER + 1; static constexpr UINT WM_NOTIFYICON_CALLBACK = WM_USER + 1;
@ -53,7 +54,8 @@ class TrayIcon
static void run(); static void run();
static LRESULT CALLBACK windowProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam); static LRESULT CALLBACK windowProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam);
static void menuAddItem(MenuItem id, const std::string& text); static void menuAddItem(MenuItem id, const LPSTR text, bool enabled = true);
static void menuAddSeperator();
public: public:
static void add(); static void add();