forked from bruderstein/PythonScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMenuManager.h
More file actions
203 lines (144 loc) · 6.22 KB
/
MenuManager.h
File metadata and controls
203 lines (144 loc) · 6.22 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
#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();
~MenuManager();
typedef std::vector<std::pair<tstring, void (*)()> > ItemVectorTD;
static MenuManager* create(HWND hNotepad, HINSTANCE hInst, void(*runScript)(const char *, bool, HANDLE, bool));
static MenuManager* getInstance();
static void deleteInstance();
void stopScriptEnabled(bool enabled);
FuncItem* getFuncItemArray(int *nbF, ItemVectorTD items, void (*runScript)(int), int dynamicStartIndex, int scriptsMenuIndex, int stopScriptIndex, int runPreviousIndex);
FuncItem* getFuncItems() { return m_funcItems; }
bool populateScriptsMenu();
void menuCommand(int commandID);
void toolbarCommand(int commandID);
void reconfigure();
void refreshScriptsMenu();
void configureToolbarIcons();
int findPluginCommand(const TCHAR *pluginName, const TCHAR *menuOption, bool refreshCache);
int findMenuCommand(const TCHAR *menuName, const TCHAR *menuOption, bool refreshCache);
int findMenuCommand(HMENU parentMenu, const TCHAR *menuName, const TCHAR *menuOption);
void updatePreviousScript(const char *filename);
void updateShortcut(UINT cmdID, ShortcutKey* key);
void initPreviousScript();
void idsInitialised();
bool inDynamicRange(int commandID);
bool inToolbarRange(int commandID);
bool inFixedRange(int commandID);
BOOL processWmCommand(WPARAM wParam, LPARAM lParam);
int getOriginalCommandID(int scriptNumber);
static bool s_menuItemClicked;
static WNDPROC s_origWndProc;
private:
MenuManager(HWND hNotepad, HINSTANCE hInst, void(*runScript)(const char *, bool, HANDLE, bool));
HMENU getOurMenu();
bool findScripts(HMENU hBaseMenu, int basePathLength, std::string& path);
void subclassNotepadPlusPlus();
tstring formatMenuName(const TCHAR *name);
void(*m_runScript)(const char *, bool, HANDLE, bool);
typedef std::set<std::string> MachineScriptNamesTD;
typedef std::map<int, std::string> ScriptCommandsTD;
typedef std::map<std::string, HMENU> SubmenusTD;
typedef std::map<std::pair<tstring, tstring>, int> 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;
int m_dynamicStartIndex;
int m_dynamicCount;
int m_originalDynamicCount;
int m_scriptsMenuIndex;
int m_stopScriptIndex;
int m_runPreviousIndex;
int m_originalLastCmdIndex;
HMENU m_pythonPluginMenu;
HMENU m_hScriptsMenu;
FuncItem* m_funcItems;
int m_funcItemCount;
std::string m_machineScriptsPath;
std::string m_userScriptsPath;
tstring m_runLastScriptShortcut;
std::string 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 void (*s_runScript)(int);
// 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