Plasma Engine  2.0
Loading...
Searching...
No Matches
ActionManager.h
1#pragma once
2
3#include <Foundation/Basics.h>
4#include <GuiFoundation/Action/Action.h>
5
7#define PL_REGISTER_ACTION_0(ActionName, Scope, CategoryName, ShortCut, ActionClass) \
8 plActionManager::RegisterAction(plActionDescriptor(plActionType::Action, Scope, ActionName, CategoryName, ShortCut, \
9 [](const plActionContext& context) -> plAction* { return PL_DEFAULT_NEW(ActionClass, context, ActionName); }));
10
12#define PL_REGISTER_ACTION_1(ActionName, Scope, CategoryName, ShortCut, ActionClass, Param1) \
13 plActionManager::RegisterAction(plActionDescriptor(plActionType::Action, Scope, ActionName, CategoryName, ShortCut, \
14 [](const plActionContext& context) -> plAction* { return PL_DEFAULT_NEW(ActionClass, context, ActionName, Param1); }));
15
17#define PL_REGISTER_ACTION_2(ActionName, Scope, CategoryName, ShortCut, ActionClass, Param1, Param2) \
18 plActionManager::RegisterAction(plActionDescriptor(plActionType::Action, Scope, ActionName, CategoryName, ShortCut, \
19 [](const plActionContext& context) -> plAction* { return PL_DEFAULT_NEW(ActionClass, context, ActionName, Param1, Param2); }));
20
22#define PL_REGISTER_DYNAMIC_MENU(ActionName, ActionClass, IconPath) \
23 plActionManager::RegisterAction(plActionDescriptor(plActionType::Menu, plActionScope::Default, ActionName, "", "", \
24 [](const plActionContext& context) -> plAction* { return PL_DEFAULT_NEW(ActionClass, context, ActionName, IconPath); }));
25
27#define PL_REGISTER_ACTION_AND_DYNAMIC_MENU_1(ActionName, Scope, CategoryName, ShortCut, ActionClass, Param1) \
28 plActionManager::RegisterAction(plActionDescriptor(plActionType::ActionAndMenu, Scope, ActionName, CategoryName, ShortCut, \
29 [](const plActionContext& context) -> plAction* { return PL_DEFAULT_NEW(ActionClass, context, ActionName, Param1); }));
30
32#define PL_REGISTER_MENU(ActionName) \
33 plActionManager::RegisterAction(plActionDescriptor(plActionType::Menu, plActionScope::Default, ActionName, "", "", \
34 [](const plActionContext& context) -> plAction* { return PL_DEFAULT_NEW(plMenuAction, context, ActionName, ""); }));
35
37#define PL_REGISTER_MENU_WITH_ICON(ActionName, IconPath) \
38 plActionManager::RegisterAction(plActionDescriptor(plActionType::Menu, plActionScope::Default, ActionName, "", "", \
39 [](const plActionContext& context) -> plAction* { return PL_DEFAULT_NEW(plMenuAction, context, ActionName, IconPath); }));
40
42#define PL_REGISTER_CATEGORY(CategoryName) \
43 plActionManager::RegisterAction(plActionDescriptor(plActionType::Category, plActionScope::Default, CategoryName, "", "", \
44 [](const plActionContext& context) -> plAction* { return PL_DEFAULT_NEW(plCategoryAction, context); }));
45
59class PL_GUIFOUNDATION_DLL plActionManager
60{
61public:
62 static plActionDescriptorHandle RegisterAction(const plActionDescriptor& desc);
63 static bool UnregisterAction(plActionDescriptorHandle& ref_hAction);
64 static const plActionDescriptor* GetActionDescriptor(plActionDescriptorHandle hAction);
65 static plActionDescriptorHandle GetActionHandle(const char* szCategory, const char* szActionName);
66
69 static plString FindActionCategory(const char* szActionName);
70
85 static plResult ExecuteAction(const char* szCategory, const char* szActionName, const plActionContext& context, const plVariant& value = plVariant());
86
87 static void SaveShortcutAssignment();
88 static void LoadShortcutAssignment();
89
90 static const plIdTable<plActionId, plActionDescriptor*>::ConstIterator GetActionIterator();
91
92 struct Event
93 {
94 enum class Type
95 {
96 ActionAdded,
97 ActionRemoved
98 };
99
100 Type m_Type;
101 const plActionDescriptor* m_pDesc;
103 };
104
105 static plEvent<const Event&> s_Events;
106
107private:
108 PL_MAKE_SUBSYSTEM_STARTUP_FRIEND(GuiFoundation, ActionManager);
109
110 static void Startup();
111 static void Shutdown();
112 static plActionDescriptor* CreateActionDesc(const plActionDescriptor& desc);
113 static void DeleteActionDesc(plActionDescriptor* pDesc);
114
115 struct CategoryData
116 {
119 };
120
121private:
123 static plMap<plString, CategoryData> s_CategoryPathToActions;
124 static plMap<plString, plString> s_ShortcutOverride;
125};
Handle for a plAction.
Definition Action.h:27
Stores 'actions' (things that can be triggered from UI).
Definition ActionManager.h:60
Definition Event.h:177
Definition HashTable.h:333
Const iterator.
Definition IdTable.h:25
Definition IdTable.h:171
Definition Map.h:408
Definition Set.h:238
plVariant is a class that can store different types of variables, which is useful in situations where...
Definition Variant.h:44
Definition Action.h:67
Definition Action.h:79
Definition ActionManager.h:93
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54