trayicon: added restart and show/hide console option to popupmenu
Dieser Commit ist enthalten in:
Ursprung
c7b1c35f21
Commit
7469c41541
@ -146,7 +146,7 @@ int main(int argc, char* argv[])
|
||||
if(options.tray)
|
||||
{
|
||||
Windows::setConsoleWindowVisible(false);
|
||||
enableConsoleLogger = false;
|
||||
enableConsoleLogger = Windows::hasConsoleWindow();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
#include <cassert>
|
||||
#include <version.hpp>
|
||||
#include <traintastic/codename.hpp>
|
||||
#include "consolewindow.hpp"
|
||||
#include "../../core/eventloop.hpp"
|
||||
#include "../../traintastic/traintastic.hpp"
|
||||
|
||||
@ -70,7 +71,10 @@ void TrayIcon::run()
|
||||
|
||||
// create menu:
|
||||
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:
|
||||
static NOTIFYICONDATA notifyIconData;
|
||||
@ -143,20 +147,32 @@ LRESULT CALLBACK TrayIcon::windowProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARA
|
||||
case WM_COMMAND:
|
||||
switch(static_cast<MenuItem>(wParam))
|
||||
{
|
||||
case MenuItem::Quit:
|
||||
case MenuItem::Shutdown:
|
||||
EventLoop::call(
|
||||
[]()
|
||||
{
|
||||
Traintastic::instance->exit();
|
||||
});
|
||||
return 0;
|
||||
|
||||
case MenuItem::Restart:
|
||||
EventLoop::call(
|
||||
[]()
|
||||
{
|
||||
Traintastic::instance->restart();
|
||||
});
|
||||
return 0;
|
||||
|
||||
case MenuItem::ShowHideConsole:
|
||||
setConsoleWindowVisible(!isConsoleWindowVisible());
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
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);
|
||||
MENUITEMINFO item;
|
||||
@ -164,10 +180,21 @@ void TrayIcon::menuAddItem(MenuItem id, const std::string& text)
|
||||
item.cbSize = sizeof(item);
|
||||
item.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
|
||||
item.fType = 0;
|
||||
item.fState = 0;
|
||||
item.fState = enabled ? MFS_ENABLED : MFS_DISABLED;
|
||||
item.wID = static_cast<UINT>(id);
|
||||
item.dwTypeData = const_cast<LPSTR>(text.c_str());
|
||||
InsertMenuItem(s_menu, 0, TRUE, &item);
|
||||
item.dwTypeData = const_cast<LPSTR>(text);
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
*
|
||||
* 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
|
||||
* modify it under the terms of the GNU General Public License
|
||||
@ -29,7 +29,6 @@
|
||||
#define _WINSOCKAPI_ // prevent windows.h including winsock.h
|
||||
#include <windows.h>
|
||||
#undef _WINSOCKAPI_
|
||||
//#include <shellapi.h>
|
||||
|
||||
namespace Windows {
|
||||
|
||||
@ -41,7 +40,9 @@ class TrayIcon
|
||||
protected:
|
||||
enum class MenuItem : UINT
|
||||
{
|
||||
Quit = 1,
|
||||
Shutdown = 1,
|
||||
Restart = 2,
|
||||
ShowHideConsole = 3,
|
||||
};
|
||||
|
||||
static constexpr UINT WM_NOTIFYICON_CALLBACK = WM_USER + 1;
|
||||
@ -53,7 +54,8 @@ class TrayIcon
|
||||
static void run();
|
||||
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:
|
||||
static void add();
|
||||
|
||||
Laden…
x
In neuem Issue referenzieren
Einen Benutzer sperren