forked from chcg/PythonScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMenuManager.h
More file actions
209 lines (157 loc) · 6.64 KB
/
MenuManager.h
File metadata and controls
209 lines (157 loc) · 6.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#ifndef _MENUMANAGER_H
#define _MENUMANAGER_H
#ifndef _PYTHONSCRIPT_H
#include "PythonScript.h"
#endif
struct ShortcutKey;
// The DYNAMIC_ADD_ID is used for the CommandIDs for dynamic menu entries added between restarts
// It is added to the ID allocated to the first /real/ menu item (ie. probably "New Script")
#define DYNAMIC_ADD_ID 1700
struct FuncItem;
class IDAllocator;
class DynamicIDManager;
class MenuManager
{
public:
~MenuManager();
typedef std::vector<std::pair<tstring, void (*)()> > ItemVectorTD;
typedef void (*runScriptIDFunc)(idx_t);
typedef void(*runScriptFunc)(const TCHAR *, bool, HANDLE, bool);
static MenuManager* create(HWND hNotepad, HINSTANCE hInst, runScriptFunc runScript);
/** Destroys the static instance. Must be recreated with create() after usage.
* Designed for use in the tests
*/
static void destroyForTests()
{
delete s_menuManager;
s_menuManager = NULL;
};
static MenuManager* getInstance();
static void deleteInstance();
void stopScriptEnabled(bool enabled);
FuncItem* getFuncItemArray(int *nbF, ItemVectorTD items, runScriptIDFunc runScript, idx_t dynamicStartIndex, idx_t scriptsMenuIndex, idx_t stopScriptIndex, idx_t runPreviousIndex);
FuncItem* getFuncItems() { return m_funcItems; }
bool populateScriptsMenu();
void menuCommand(idx_t commandID);
void toolbarCommand(idx_t commandID);
void reconfigure();
void removeItem(int index);
void refreshScriptsMenu();
void configureToolbarIcons();
idx_t findPluginCommand(const TCHAR *pluginName, const TCHAR *menuOption, bool refreshCache);
idx_t findMenuCommand(const TCHAR *menuName, const TCHAR *menuOption, bool refreshCache);
idx_t findMenuCommand(HMENU parentMenu, const TCHAR *parentMenuName, const TCHAR *menuName, const TCHAR *menuOption);
void updatePreviousScript(const TCHAR *filename);
void updateShortcut(UINT cmdID, ShortcutKey* key);
void initPreviousScript();
void idsInitialised();
bool inDynamicRange(idx_t commandID);
bool inToolbarRange(idx_t commandID);
bool inFixedRange(idx_t commandID);
BOOL processWmCommand(WPARAM wParam, LPARAM lParam);
idx_t getOriginalCommandID(idx_t scriptNumber);
static bool s_menuItemClicked;
static WNDPROC s_origWndProc;
void checkShowConsole(bool checked);
static bool s_menuItemConsoleChecked;
private:
MenuManager(); // default constructor disabled
MenuManager(HWND hNotepad, HINSTANCE hInst, runScriptFunc runScript);
HMENU getOurMenu();
bool findScripts(HMENU hBaseMenu, size_t basePathLength, tstring& path);
void subclassNotepadPlusPlus();
tstring formatMenuName(const TCHAR *name);
runScriptFunc m_runScript;
typedef std::set<tstring> MachineScriptNamesTD;
typedef std::map<idx_t, tstring> ScriptCommandsTD;
typedef std::map<tstring, HMENU> SubmenusTD;
typedef std::map<std::pair<tstring, tstring>, idx_t> MenuCommandCacheTD;
MenuCommandCacheTD m_menuCommandCache;
MenuCommandCacheTD m_pluginCommandCache;
MachineScriptNamesTD m_machineScriptNames;
ScriptCommandsTD m_scriptCommands;
ScriptCommandsTD m_toolbarCommands;
ScriptCommandsTD m_menuCommands;
SubmenusTD m_submenus;
typedef std::map<int, tstring> KeyMapTD;
KeyMapTD m_keyMap;
tstring getKeyName(ShortcutKey& sk);
static MenuManager* s_menuManager;
HWND m_hNotepad;
HINSTANCE m_hInst;
idx_t m_dynamicStartIndex;
size_t m_dynamicCount;
size_t m_originalDynamicCount;
idx_t m_scriptsMenuIndex;
idx_t m_stopScriptIndex;
idx_t m_runPreviousIndex;
idx_t m_originalLastCmdIndex;
HMENU m_pythonPluginMenu;
HMENU m_hScriptsMenu;
FuncItem* m_funcItems;
size_t m_funcItemCount;
tstring m_machineScriptsPath;
tstring m_userScriptsPath;
tstring m_runLastScriptShortcut;
tstring m_previousRunFilename;
IDAllocator* m_idAllocator;
DynamicIDManager* m_dynamicMenuManager;
DynamicIDManager* m_originalDynamicMenuManager;
DynamicIDManager* m_scriptsMenuManager;
DynamicIDManager* m_toolbarMenuManager;
// Function pointer to the real run script function
static runScriptIDFunc s_runScript;
// static functions to run the scripts
static void runScript0() { s_runScript(0); }
static void runScript1() { s_runScript(1); }
static void runScript2() { s_runScript(2); }
static void runScript3() { s_runScript(3); }
static void runScript4() { s_runScript(4); }
static void runScript5() { s_runScript(5); }
static void runScript6() { s_runScript(6); }
static void runScript7() { s_runScript(7); }
static void runScript8() { s_runScript(8); }
static void runScript9() { s_runScript(9); }
static void runScript10() { s_runScript(10); }
static void runScript11() { s_runScript(11); }
static void runScript12() { s_runScript(12); }
static void runScript13() { s_runScript(13); }
static void runScript14() { s_runScript(14); }
static void runScript15() { s_runScript(15); }
static void runScript16() { s_runScript(16); }
static void runScript17() { s_runScript(17); }
static void runScript18() { s_runScript(18); }
static void runScript19() { s_runScript(19); }
static void runScript20() { s_runScript(20); }
static void runScript21() { s_runScript(21); }
static void runScript22() { s_runScript(22); }
static void runScript23() { s_runScript(23); }
static void runScript24() { s_runScript(24); }
static void runScript25() { s_runScript(25); }
static void runScript26() { s_runScript(26); }
static void runScript27() { s_runScript(27); }
static void runScript28() { s_runScript(28); }
static void runScript29() { s_runScript(29); }
static void runScript30() { s_runScript(30); }
static void runScript31() { s_runScript(31); }
static void runScript32() { s_runScript(32); }
static void runScript33() { s_runScript(33); }
static void runScript34() { s_runScript(34); }
static void runScript35() { s_runScript(35); }
static void runScript36() { s_runScript(36); }
static void runScript37() { s_runScript(37); }
static void runScript38() { s_runScript(38); }
static void runScript39() { s_runScript(39); }
static void runScript40() { s_runScript(40); }
static void runScript41() { s_runScript(41); }
static void runScript42() { s_runScript(42); }
static void runScript43() { s_runScript(43); }
static void runScript44() { s_runScript(44); }
static void runScript45() { s_runScript(45); }
static void runScript46() { s_runScript(46); }
static void runScript47() { s_runScript(47); }
static void runScript48() { s_runScript(48); }
static void runScript49() { s_runScript(49); }
void (*m_runScriptFuncs[MAX_MENU_SCRIPTS])(void);
};
#endif // _MENUMANAGER_H