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)
|
if(options.tray)
|
||||||
{
|
{
|
||||||
Windows::setConsoleWindowVisible(false);
|
Windows::setConsoleWindowVisible(false);
|
||||||
enableConsoleLogger = false;
|
enableConsoleLogger = Windows::hasConsoleWindow();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
Laden…
x
In neuem Issue referenzieren
Einen Benutzer sperren