1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: stemenum.cpp
3 // Purpose: wxSTEditorMenuManager
4 // Author: John Labenski, parts taken from wxGuide by Otto Wyss
5 // Modified by:
6 // Created: 11/05/2002
7 // RCS-ID:
8 // Copyright: (c) John Labenski, Otto Wyss
9 // Licence: wxWidgets licence
10 ///////////////////////////////////////////////////////////////////////////////
11
12 #include "precomp.h"
13
14 #include <wx/srchctrl.h>
15
16 #include "wx/stedit/stemenum.h"
17 #include "wx/stedit/stedit.h"
18 #include "wx/stedit/steart.h"
19 #include "wxext.h"
20
21 //-----------------------------------------------------------------------------
22 // wxSTEditorMenuManager - a holding place for menu generating code
23 //-----------------------------------------------------------------------------
24
~wxSTEditorMenuManager()25 wxSTEditorMenuManager::~wxSTEditorMenuManager()
26 {
27 delete m_accelEntryArray;
28 }
29
Init()30 void wxSTEditorMenuManager::Init()
31 {
32 m_enabledEditorItems = true;
33 m_menuOptionTypes = 0;
34 m_menuItemTypes.Add(0, STE_MENU_HELP_MENU+1);
35 m_toolBarToolTypes = 0;
36
37 m_accels_dirty = true;
38 m_accelEntryArray = new wxArrayAcceleratorEntry();
39 }
40
InitAcceleratorArray() const41 void wxSTEditorMenuManager::InitAcceleratorArray() const
42 {
43 // No need to recreate if nothing has changed.
44 if (!m_accels_dirty) return;
45
46 // After running this function, they're all created.
47 m_accels_dirty = false;
48
49 if (m_accelEntryArray->GetCount() > 0)
50 m_accelEntryArray->Clear();
51
52 // File menu items --------------------------------------------------------
53 if (GetMenuItemTypes(STE_MENU_FILE_MENU))
54 {
55 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_NEW));
56 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_OPEN));
57 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_SAVE));
58 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_SAVEAS));
59 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_PRINT));
60 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_PREVIEW));
61 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_EXIT));
62 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_ALT, WXK_RETURN, ID_STE_PROPERTIES));
63 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, 'W', ID_STN_CLOSE_PAGE));
64 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL | wxACCEL_SHIFT, 'W', ID_STN_CLOSE_ALL));
65 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL | wxACCEL_SHIFT, 'A', ID_STN_SAVE_ALL));
66 }
67
68 // Edit menu items --------------------------------------------------------
69 if (GetMenuItemTypes(STE_MENU_EDIT_MENU))
70 {
71 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_UNDO));
72 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_REDO));
73 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_CUT));
74 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_COPY));
75 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_PASTE));
76 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_SELECTALL));
77 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL | wxACCEL_SHIFT, 'V', ID_STE_PASTE_NEW));
78 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL | wxACCEL_ALT, 'V', ID_STE_PASTE_RECT));
79 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, 'L', ID_STE_LINE_CUT));
80 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL | wxACCEL_SHIFT, 'T', ID_STE_LINE_COPY));
81 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL | wxACCEL_SHIFT, 'C', ID_STE_COPYPATH));
82 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL | wxACCEL_SHIFT, 'L', ID_STE_LINE_DELETE));
83 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, ' ', ID_STE_COMPLETEWORD));
84 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, 'T', ID_STE_LINE_TRANSPOSE));
85 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, 'D', ID_STE_LINE_DUPLICATE));
86 //m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, 'R', ID_STE_PREF_SELECTION_MODE));
87 #ifdef __UNIX__
88 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL | wxACCEL_SHIFT, 'C', ID_STE_COPY_PRIMARY));
89 #endif // __UNIX__
90 }
91
92 // View menu items -------------------------------------------------------
93 if (GetMenuItemTypes(STE_MENU_VIEW_MENU))
94 {
95 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_FULLSCREEN, ID_STE_SHOW_FULLSCREEN));
96 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, WXK_F10, ID_STE_VIEW_NONPRINT));
97 }
98
99 // Search menu items -------------------------------------------------------
100 if (GetMenuItemTypes(STE_MENU_SEARCH_MENU))
101 {
102 m_accelEntryArray->Add(wxAcceleratorHelper::GetStockAccelerator(wxID_FIND));
103 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, 'H', wxID_REPLACE));
104 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F3, ID_STE_FIND_NEXT));
105 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_SHIFT , WXK_F3, ID_STE_FIND_PREV));
106 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F2, ID_STE_FIND_DOWN));
107 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, 'G', ID_STE_GOTO_LINE));
108 }
109
110 // Insert menu items -------------------------------------------------------
111 if (GetMenuItemTypes(STE_MENU_INSERT_MENU))
112 {
113 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, 'I', ID_STE_INSERT_TEXT));
114 }
115
116 // Tools menu items -------------------------------------------------------
117 if (GetMenuItemTypes(STE_MENU_TOOLS_MENU))
118 {
119 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL | wxACCEL_SHIFT, 'U', ID_STE_UPPERCASE));
120 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, 'U', ID_STE_LOWERCASE));
121 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, 'J', ID_STE_LINES_JOIN));
122 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, 'K', ID_STE_LINES_SPLIT));
123 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL | wxACCEL_ALT, 'E', ID_STE_TRAILING_WHITESPACE));
124 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, 'E', ID_STE_REMOVE_CHARSAROUND));
125 }
126
127 // Bookmark menu items ---------------------------------------------------
128 if (GetMenuItemTypes(STE_MENU_BOOKMARK_MENU))
129 {
130 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F4, ID_STE_BOOKMARK_TOGGLE));
131 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_SHIFT, WXK_F5, ID_STE_BOOKMARK_FIRST));
132 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F5, ID_STE_BOOKMARK_PREVIOUS));
133 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F6, ID_STE_BOOKMARK_NEXT));
134 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_SHIFT, WXK_F6, ID_STE_BOOKMARK_LAST));
135 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_SHIFT, WXK_F4, ID_STE_BOOKMARK_CLEAR));
136 }
137
138 // Preference menu items -------------------------------------------------------
139 if (GetMenuItemTypes(STE_MENU_PREFS_MENU))
140 {
141 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL, WXK_F9, ID_STE_PREFERENCES));
142 }
143
144 // Window menu items -----------------------------------------------------
145 if (GetMenuItemTypes(STE_MENU_WINDOW_MENU))
146 {
147 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL | wxACCEL_SHIFT, 'L', ID_STS_SPLIT_HORIZ));
148 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_CTRL | wxACCEL_SHIFT, 'T', ID_STS_SPLIT_VERT));
149 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_SHIFT, WXK_F8, ID_STN_WIN_PREVIOUS));
150 m_accelEntryArray->Add(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F8, ID_STN_WIN_NEXT));
151 }
152
153 // Help menu items -----------------------------------------------------
154 if (GetMenuItemTypes(STE_MENU_HELP_MENU))
155 {
156 }
157 }
158
CreateForSinglePage()159 void wxSTEditorMenuManager::CreateForSinglePage()
160 {
161 m_menuOptionTypes = 0;
162 m_menuItemTypes[STE_MENU_FILE_MENU] = STE_MENU_FILE_DEFAULT;
163 m_menuItemTypes[STE_MENU_EDIT_MENU] = STE_MENU_EDIT_DEFAULT;
164 m_menuItemTypes[STE_MENU_SEARCH_MENU] = STE_MENU_SEARCH_DEFAULT;
165 m_menuItemTypes[STE_MENU_TOOLS_MENU] = STE_MENU_TOOLS_DEFAULT;
166 m_menuItemTypes[STE_MENU_VIEW_MENU] = STE_MENU_VIEW_DEFAULT;
167 m_menuItemTypes[STE_MENU_BOOKMARK_MENU] = STE_MENU_BOOKMARK_DEFAULT;
168 m_menuItemTypes[STE_MENU_PREFS_MENU] = STE_MENU_PREFS_DEFAULT;
169 m_menuItemTypes[STE_MENU_WINDOW_MENU] = STE_MENU_WINDOW_DEFAULT;
170 m_menuItemTypes[STE_MENU_HELP_MENU] = STE_MENU_HELP_DEFAULT;
171 m_toolBarToolTypes = STE_TOOLBAR_TOOLS;
172 }
173
CreateForNotebook()174 void wxSTEditorMenuManager::CreateForNotebook()
175 {
176 m_menuOptionTypes = STE_MENU_NOTEBOOK;
177 m_menuItemTypes[STE_MENU_FILE_MENU] = STE_MENU_FILE_DEFAULT;
178 m_menuItemTypes[STE_MENU_EDIT_MENU] = STE_MENU_EDIT_DEFAULT;
179 m_menuItemTypes[STE_MENU_SEARCH_MENU] = STE_MENU_SEARCH_DEFAULT;
180 m_menuItemTypes[STE_MENU_TOOLS_MENU] = STE_MENU_TOOLS_DEFAULT;
181 m_menuItemTypes[STE_MENU_VIEW_MENU] = STE_MENU_VIEW_DEFAULT;
182 m_menuItemTypes[STE_MENU_BOOKMARK_MENU] = STE_MENU_BOOKMARK_DEFAULT;
183 m_menuItemTypes[STE_MENU_PREFS_MENU] = STE_MENU_PREFS_DEFAULT;
184 m_menuItemTypes[STE_MENU_WINDOW_MENU] = STE_MENU_WINDOW_DEFAULT|STE_MENU_WINDOW_FILECHOOSER|STE_MENU_WINDOW_PREVNEXT|STE_MENU_WINDOW_WINDOWS;
185 m_menuItemTypes[STE_MENU_HELP_MENU] = STE_MENU_HELP_DEFAULT;
186 m_toolBarToolTypes = STE_TOOLBAR_TOOLS;
187 }
188
CreateEditorPopupMenu(wxMenu * menu_) const189 wxMenu *wxSTEditorMenuManager::CreateEditorPopupMenu(wxMenu *menu_) const
190 {
191 wxMenu *menu = menu_;
192 if (!menu) menu = new wxMenu;
193
194 bool add_sep = false;
195
196 wxMenu *fileMenu = GetMenuItemTypes(STE_MENU_FILE_MENU) != 0 ? CreateFileMenu() : NULL;
197 wxMenu *editMenu = GetMenuItemTypes(STE_MENU_EDIT_MENU) != 0 ? CreateEditMenu() : NULL;
198 wxMenu *searchMenu = GetMenuItemTypes(STE_MENU_SEARCH_MENU) != 0 ? CreateSearchMenu() : NULL;
199 wxMenu *toolsMenu = GetMenuItemTypes(STE_MENU_TOOLS_MENU) != 0 ? CreateToolsMenu() : NULL;
200 wxMenu *insertMenu = GetMenuItemTypes(STE_MENU_INSERT_MENU) != 0 ? CreateInsertMenu() : NULL;
201 wxMenu *viewMenu = GetMenuItemTypes(STE_MENU_VIEW_MENU) != 0 ? CreateViewMenu() : NULL;
202 wxMenu *bookmarkMenu = GetMenuItemTypes(STE_MENU_BOOKMARK_MENU) != 0 ? CreateBookmarkMenu() : NULL;
203 wxMenu *prefMenu = GetMenuItemTypes(STE_MENU_PREFS_MENU) != 0 ? CreatePreferenceMenu() : NULL;
204 wxMenu *windowMenu = GetMenuItemTypes(STE_MENU_WINDOW_MENU) != 0 ? CreateWindowMenu() : NULL;
205 wxMenu *helpMenu = GetMenuItemTypes(STE_MENU_HELP_MENU) != 0 ? CreateHelpMenu() : NULL;
206
207 if (fileMenu)
208 {
209 menu->Append(ID_STE_MENU_FILE, wxGetStockLabel(wxID_FILE), fileMenu);
210 add_sep = true;
211 }
212
213 if (editMenu)
214 {
215 if (add_sep) menu->AppendSeparator();
216 menu->Append(ID_STE_MENU_EDIT, wxGetStockLabel(wxID_EDIT), editMenu);
217 add_sep = true;
218 }
219
220 if (viewMenu)
221 {
222 if (add_sep) menu->AppendSeparator();
223 menu->Append(ID_STE_MENU_VIEW, _("&View"), viewMenu);
224 add_sep = true;
225 }
226
227 if (searchMenu)
228 {
229 if (add_sep) menu->AppendSeparator();
230 menu->Append(ID_STE_MENU_SEARCH, _("&Search"), searchMenu);
231 add_sep = true;
232 }
233
234 if (toolsMenu)
235 {
236 if (add_sep) menu->AppendSeparator();
237 menu->Append(ID_STE_MENU_TOOLS, _("&Tools"), toolsMenu);
238 add_sep = true;
239 }
240
241 if (insertMenu)
242 {
243 if (add_sep) menu->AppendSeparator();
244 menu->Append(ID_STE_MENU_INSERT, _("&Insert"), insertMenu);
245 add_sep = true;
246 }
247
248 if (bookmarkMenu)
249 {
250 if (add_sep) menu->AppendSeparator();
251 menu->Append(ID_STE_MENU_BOOKMARK, _("&Bookmarks"), bookmarkMenu);
252 add_sep = true;
253 }
254
255 if (prefMenu)
256 {
257 if (add_sep) menu->AppendSeparator();
258 menu->Append(ID_STE_MENU_PREF, wxGetStockLabel(wxID_PREFERENCES), prefMenu);
259 add_sep = true;
260 }
261
262 if (windowMenu)
263 {
264 if (add_sep) menu->AppendSeparator();
265 menu->Append(ID_STE_MENU_PREF, _("&Window"), windowMenu);
266 }
267
268 if (helpMenu)
269 {
270 if (add_sep) menu->AppendSeparator();
271 menu->Append(ID_STE_MENU_HELP, wxGetStockLabel(wxID_HELP), helpMenu);
272 }
273
274 if (!menu_ && menu && (menu->GetMenuItemCount() == 0))
275 {
276 wxDELETE(menu);
277 }
278
279 return menu;
280 }
281
CreateSplitterPopupMenu(wxMenu * menu_) const282 wxMenu* wxSTEditorMenuManager::CreateSplitterPopupMenu(wxMenu *menu_) const
283 {
284 wxMenu *menu = menu_;
285 if (!menu) menu = new wxMenu;
286
287 menu->AppendRadioItem(ID_STS_UNSPLIT, _("&Unsplit editor"), _("Unsplit the editor"));
288 menu->AppendRadioItem(ID_STS_SPLIT_HORIZ, _("Split editor &horizontally"), _("Split editor horizontally"));
289 menu->AppendRadioItem(ID_STS_SPLIT_VERT, _("Split editor &vertically"), _("Split editor vertically"));
290
291 return menu;
292 }
CreateNotebookPopupMenu(wxMenu * menu_) const293 wxMenu* wxSTEditorMenuManager::CreateNotebookPopupMenu(wxMenu *menu_) const
294 {
295 wxMenu *menu = menu_;
296 if (!menu) menu = new wxMenu;
297
298 menu->Append(wxID_NEW, _("&Add empty page"));
299 menu->Append(wxID_OPEN, _("&Open file(s)..."));
300 menu->Append(ID_STN_SAVE_ALL, _("&Save all files"));
301
302 menu->AppendSeparator();
303 // These are empty and are filled by wxSTEditorNotebook::UpdateMenuItems()
304 wxMenu *gotoMenu = new wxMenu;
305 wxMenu *closeMenu = new wxMenu;
306
307 menu->Append(ID_STN_WIN_PREVIOUS, _("Previous page"));
308 menu->Append(ID_STN_WIN_NEXT, _("Next page"));
309
310 menu->Append(ID_STN_MENU_GOTO, _("Goto page"), gotoMenu);
311 menu->AppendSeparator();
312 menu->Append(ID_STN_CLOSE_PAGE, _("Close current page"));
313 menu->Append(ID_STN_CLOSE_ALL, _("Close all pages..."));
314 menu->Append(ID_STN_CLOSE_ALL_OTHERS, _("Close all other pages"));
315 menu->Append(ID_STN_MENU_CLOSE, _("Close page"), closeMenu);
316 menu->AppendSeparator();
317 menu->Append(ID_STN_WINDOWS, _("&Windows..."), _("Manage opened windows"));
318
319 return menu;
320 }
321
CreateMenuBar(wxMenuBar * menuBar,bool for_frame) const322 bool wxSTEditorMenuManager::CreateMenuBar(wxMenuBar *menuBar, bool for_frame) const
323 {
324 wxCHECK_MSG(menuBar, false, wxT("Invalid wxMenuBar"));
325 size_t menu_count = menuBar->GetMenuCount();
326
327 // Note! here's where we specify that we want menu items for the frame
328 int was_set_frame = HasMenuOptionType(STE_MENU_FRAME);
329 if (!was_set_frame && for_frame)
330 ((wxSTEditorMenuManager*)this)->SetMenuOptionType(STE_MENU_FRAME, true);
331
332 wxMenu *fileMenu = GetMenuItemTypes(STE_MENU_FILE_MENU) != 0 ? CreateFileMenu() : NULL;
333 wxMenu *editMenu = GetMenuItemTypes(STE_MENU_EDIT_MENU) != 0 ? CreateEditMenu() : NULL;
334 wxMenu *searchMenu = GetMenuItemTypes(STE_MENU_SEARCH_MENU) != 0 ? CreateSearchMenu() : NULL;
335 wxMenu *toolsMenu = GetMenuItemTypes(STE_MENU_TOOLS_MENU) != 0 ? CreateToolsMenu() : NULL;
336 wxMenu *insertMenu = GetMenuItemTypes(STE_MENU_INSERT_MENU) != 0 ? CreateInsertMenu() : NULL;
337 wxMenu *viewMenu = GetMenuItemTypes(STE_MENU_VIEW_MENU) != 0 ? CreateViewMenu() : NULL;
338 wxMenu *bookmarkMenu = GetMenuItemTypes(STE_MENU_BOOKMARK_MENU) != 0 ? CreateBookmarkMenu() : NULL;
339 wxMenu *prefMenu = GetMenuItemTypes(STE_MENU_PREFS_MENU) != 0 ? CreatePreferenceMenu() : NULL;
340 wxMenu *windowMenu = GetMenuItemTypes(STE_MENU_WINDOW_MENU) != 0 ? CreateWindowMenu() : NULL;
341 wxMenu *helpMenu = GetMenuItemTypes(STE_MENU_HELP_MENU) != 0 ? CreateHelpMenu() : NULL;
342
343
344 if (fileMenu) menuBar->Append(fileMenu, wxGetStockLabel(wxID_FILE));
345 if (editMenu) menuBar->Append(editMenu, wxGetStockLabel(wxID_EDIT));
346 if (viewMenu) menuBar->Append(viewMenu, _("&View"));
347 if (searchMenu) menuBar->Append(searchMenu, _("&Search"));
348 if (toolsMenu) menuBar->Append(toolsMenu, _("&Tools"));
349 if (insertMenu) menuBar->Append(insertMenu, _("&Insert"));
350 if (bookmarkMenu) menuBar->Append(bookmarkMenu, _("&Bookmarks"));
351 if (prefMenu) menuBar->Append(prefMenu, wxGetStockLabel(wxID_PREFERENCES));
352 if (windowMenu) menuBar->Append(windowMenu, _("&Window"));
353 if (helpMenu) menuBar->Append(helpMenu, wxGetStockLabel(wxID_HELP));
354
355 // reset the frame bit if it wasn't set
356 if (!was_set_frame)
357 ((wxSTEditorMenuManager*)this)->SetMenuOptionType(STE_MENU_FRAME, false);
358
359 return menuBar->GetMenuCount() > menu_count;
360 }
361
wxToolBarTool_MakeShortHelp(const wxArrayAcceleratorEntry & accel,int id)362 static wxString wxToolBarTool_MakeShortHelp(const wxArrayAcceleratorEntry& accel, int id)
363 {
364 return wxToolBarTool_MakeShortHelp(wxGetStockLabelEx(id, wxSTOCK_PLAINTEXT), accel, id);
365 }
366
CreateToolBar(wxToolBar * tb) const367 bool wxSTEditorMenuManager::CreateToolBar(wxToolBar *tb) const
368 {
369 wxCHECK_MSG(tb, false, wxT("Invalid toolbar"));
370
371 InitAcceleratorArray(); // ALWAYS call this before accessing m_accelEntryArray
372
373 size_t tools_count = tb->GetToolsCount();
374
375 if (HasToolbarToolType(STE_TOOLBAR_FILE_NEW))
376 {
377 tb->AddTool(wxID_NEW, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_NEW), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_NEW), _("Clear editor for new file"));
378 }
379 if (HasToolbarToolType(STE_TOOLBAR_FILE_OPEN))
380 {
381 tb->AddTool(wxID_OPEN, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_OPEN), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_OPEN), _("Open a file to edit"));
382 }
383 if (HasToolbarToolType(STE_TOOLBAR_FILE_SAVE))
384 {
385 tb->AddTool(wxID_SAVE, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_SAVE ), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_SAVE ), _("Save current file"));
386 tb->AddTool(wxID_SAVEAS, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_SAVEAS), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_SAVEAS), _("Save to a specific filename"));
387 tb->EnableTool(wxID_SAVE, false);
388
389 if (HasMenuOptionType(STE_MENU_NOTEBOOK))
390 {
391 tb->AddTool(ID_STN_SAVE_ALL, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_SAVEALL), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(_("Save all files"), *m_accelEntryArray, ID_STN_SAVE_ALL), _("Save all open files"));
392 tb->EnableTool(ID_STN_SAVE_ALL, false);
393 }
394 }
395 if (HasToolbarToolType(STE_TOOLBAR_PRINT))
396 {
397 if (tb->GetToolsCount()) tb->AddSeparator();
398 tb->AddTool(wxID_PRINT , wxEmptyString, STE_ARTTOOL(wxART_STEDIT_PRINT) , wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_PRINT), wxGetStockHelpString(wxID_PRINT));
399 tb->AddTool(wxID_PREVIEW, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_PRINTPREVIEW), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_PREVIEW), wxGetStockHelpString(wxID_PREVIEW));
400 }
401 if (HasToolbarToolType(STE_TOOLBAR_EDIT_CUTCOPYPASTE))
402 {
403 if (tb->GetToolsCount()) tb->AddSeparator();
404 tb->AddTool(wxID_CUT, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_CUT ), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_CUT ), _("Cut selected text"));
405 tb->AddTool(wxID_COPY, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_COPY ), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_COPY ), _("Copy selected text"));
406 tb->AddTool(wxID_PASTE, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_PASTE), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_PASTE), _("Paste text at cursor"));
407 }
408 if (HasToolbarToolType(STE_TOOLBAR_EDIT_UNDOREDO))
409 {
410 if (tb->GetToolsCount()) tb->AddSeparator();
411 tb->AddTool(wxID_UNDO, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_UNDO), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_UNDO), _("Undo last editing"));
412 tb->AddTool(wxID_REDO, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_REDO), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_REDO), _("Redo last undo"));
413 }
414 if (HasToolbarToolType(STE_TOOLBAR_EDIT_FINDREPLACE))
415 {
416 if (tb->GetToolsCount()) tb->AddSeparator();
417 //tb->AddTool(ID_STE_FIND_DOWN, _("Search direction"), STE_ARTTOOL(wxART_STEDIT_FINDDOWN), wxNullBitmap, wxITEM_CHECK, _("Search direction"), _("Search direction for next occurance in document"));
418 tb->AddTool(wxID_FIND , wxEmptyString, STE_ARTTOOL(wxART_STEDIT_FIND ), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_FIND), _("Find text in document..."));
419 tb->AddTool(ID_STE_FIND_NEXT, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_FINDDOWN), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(_("Find next"), *m_accelEntryArray, ID_STE_FIND_NEXT), _("Find next occurance in document"));
420 tb->AddTool(ID_STE_FIND_PREV, wxEmptyString, STE_ARTTOOL(wxART_STEDIT_FINDUP ), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(_("Find previous"), *m_accelEntryArray, ID_STE_FIND_PREV), _("Find previous occurance in document"));
421 tb->AddTool(wxID_REPLACE , wxEmptyString, STE_ARTTOOL(wxART_STEDIT_REPLACE ), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(*m_accelEntryArray, wxID_REPLACE), _("Replace text in document"));
422 }
423 if (HasToolbarToolType(STE_TOOLBAR_EDIT_SEARCH_CTRL))
424 {
425 if (tb->GetToolsCount()) tb->AddSeparator();
426 wxSearchCtrl *searchCtrl = new wxSearchCtrl(tb, ID_STE_TOOLBAR_SEARCHCTRL, wxT(""), wxDefaultPosition, wxSize(200, -1), wxTE_PROCESS_ENTER);
427 //searchCtrl->SetMenu(new wxMenu);
428 tb->AddControl(searchCtrl);
429 }
430 if (HasToolbarToolType(STE_TOOLBAR_BOOKMARK))
431 {
432 if (tb->GetToolsCount()) tb->AddSeparator();
433 tb->AddTool(ID_STE_BOOKMARK_TOGGLE, wxEmptyString, STE_ARTTOOL(wxART_ADD_BOOKMARK), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(_("Toggle bookmark"), *m_accelEntryArray, ID_STE_BOOKMARK_TOGGLE), _("Toggle a bookmark on cursor line"));
434 tb->AddTool(ID_STE_BOOKMARK_FIRST, wxEmptyString, STE_ARTTOOL(wxART_GO_UP), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(_("First bookmark"), *m_accelEntryArray, ID_STE_BOOKMARK_FIRST), _("Goto first bookmark"));
435 tb->AddTool(ID_STE_BOOKMARK_PREVIOUS, wxEmptyString, STE_ARTTOOL(wxART_GO_BACK), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(_("Previous bookmark"), *m_accelEntryArray, ID_STE_BOOKMARK_PREVIOUS), _("Goto previous bookmark"));
436 tb->AddTool(ID_STE_BOOKMARK_NEXT, wxEmptyString, STE_ARTTOOL(wxART_GO_FORWARD), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(_("Next bookmark"), *m_accelEntryArray, ID_STE_BOOKMARK_NEXT), _("Goto next bookmark"));
437 tb->AddTool(ID_STE_BOOKMARK_LAST, wxEmptyString, STE_ARTTOOL(wxART_GO_DOWN), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(_("Last bookmark"), *m_accelEntryArray, ID_STE_BOOKMARK_LAST), _("Goto last bookmark"));
438 tb->AddTool(ID_STE_BOOKMARK_CLEAR, wxEmptyString, STE_ARTTOOL(wxART_DEL_BOOKMARK), wxNullBitmap, wxITEM_NORMAL, ::wxToolBarTool_MakeShortHelp(_("Clear bookmarks"), *m_accelEntryArray, ID_STE_BOOKMARK_CLEAR), _("Clear all bookmarks"));
439 }
440 tb->Realize();
441
442 return tb->GetToolsCount() > tools_count;
443 }
444
CreateFileMenu(wxMenu * menu_) const445 wxMenu *wxSTEditorMenuManager::CreateFileMenu(wxMenu *menu_) const
446 {
447 wxMenu *menu = menu_ ? menu_ : new wxMenu();
448 bool add_sep = false;
449
450 if (HasMenuItemType(STE_MENU_FILE_MENU, STE_MENU_FILE_NEW))
451 {
452 menu->Append(MenuItem(menu, wxID_NEW, wxGetStockLabel(wxID_NEW), _("Clear contents and start a new file"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_NEW)));
453 add_sep = true;
454 }
455 if (HasMenuItemType(STE_MENU_FILE_MENU, STE_MENU_FILE_OPEN))
456 {
457 menu->Append(MenuItem(menu, wxID_OPEN, wxGetStockLabelEx(wxID_OPEN), _("Open file"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_OPEN)));
458 add_sep = true;
459 }
460 if (HasMenuItemType(STE_MENU_FILE_MENU, STE_MENU_FILE_CLOSE) && HasMenuOptionType(STE_MENU_FRAME))
461 {
462 if (add_sep) menu->AppendSeparator();
463
464 menu->Append(ID_STN_CLOSE_PAGE, _("&Close current page"), _("Close current page"));
465 if (HasMenuOptionType(STE_MENU_NOTEBOOK))
466 {
467 menu->Append(ID_STN_CLOSE_ALL, _("Close all pages..."), _("Close all pages"));
468 menu->Append(ID_STN_CLOSE_ALL_OTHERS, _("Close all other pages"), _("Close all other pages"));
469 }
470
471 add_sep = true;
472 }
473 if (HasMenuItemType(STE_MENU_FILE_MENU, STE_MENU_FILE_SAVE))
474 {
475 if (add_sep) menu->AppendSeparator();
476
477 menu->Append(MenuItem(menu, wxID_SAVE, wxGetStockLabel(wxID_SAVE), _("Save current file"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_SAVE)));
478 menu->Enable(wxID_SAVE, false);
479 menu->Append(MenuItem(menu, wxID_SAVEAS, wxGetStockLabelEx(wxID_SAVEAS), _("Save as file"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_SAVEAS)));
480 if (HasMenuOptionType(STE_MENU_NOTEBOOK))
481 {
482 menu->Append(MenuItem(menu, ID_STN_SAVE_ALL, _("Save A&ll"), _("Save all files"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_SAVEALL)));
483 menu->Enable(ID_STN_SAVE_ALL, false);
484 }
485 menu->Append(MenuItem(menu, wxID_REVERT, wxGetStockLabelEx(wxID_REVERT), _("Revert to saved version of the file"), wxITEM_NORMAL));
486 add_sep = true;
487 }
488 if (HasMenuItemType(STE_MENU_FILE_MENU, STE_MENU_FILE_EXPORT))
489 {
490 if (add_sep) menu->AppendSeparator();
491
492 menu->Append(MenuItem(menu, ID_STE_EXPORT, _("E&xport..."), _("Export to file"), wxITEM_NORMAL));
493 add_sep = true;
494 }
495 if (HasMenuItemType(STE_MENU_FILE_MENU, STE_MENU_FILE_PROPERTY))
496 {
497 if (add_sep) menu->AppendSeparator();
498
499 menu->Append(ID_STE_PROPERTIES, wxGetStockLabelEx(wxID_PROPERTIES), _("Show document properties dialog"));
500 add_sep = true;
501 }
502 if (HasMenuItemType(STE_MENU_FILE_MENU, STE_MENU_FILE_PRINT))
503 {
504 if (add_sep) menu->AppendSeparator();
505
506 menu->Append(MenuItem(menu, wxID_PRINT, wxGetStockLabelEx(wxID_PRINT ), _("Print current document"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_PRINT)));
507 menu->Append(MenuItem(menu, wxID_PREVIEW, wxGetStockLabelEx(wxID_PREVIEW), _("Print preview of the current document"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_PRINTPREVIEW)));
508 #ifdef __WXMSW__
509 // The wxID_PRINT_SETUP dialog is the same as the wxID_PRINT one, at least on Windows; confusing to the user
510 #else
511 menu->Append(MenuItem(menu, wxID_PRINT_SETUP, _("Printer set&up..."), _("Setup the printer"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_PRINTSETUP)));
512 #endif
513 menu->Append(MenuItem(menu, ID_STE_PRINT_PAGE_SETUP, _("Printer pa&ge setup..."), _("Setup the printout page"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_PRINTPAGESETUP)));
514 menu->Append(MenuItem(menu, ID_STE_PRINT_OPTIONS, _("Printer options..."), _("Set other printout options"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_PRINTPREVIEW)));
515 }
516
517 if (HasMenuOptionType(STE_MENU_FRAME))
518 {
519 if (add_sep) menu->AppendSeparator();
520 menu->Append(MenuItem(menu, wxID_EXIT, wxGetStockLabelEx(wxID_EXIT), _("Exit editor"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_QUIT)));
521 }
522
523 if (!menu_ && menu && (menu->GetMenuItemCount() == 0))
524 {
525 wxDELETE(menu);
526 }
527
528 return menu;
529 }
530
CreateEditMenu(wxMenu * menu_) const531 wxMenu *wxSTEditorMenuManager::CreateEditMenu(wxMenu *menu_) const
532 {
533 wxMenu *menu = menu_ ? menu_ : new wxMenu();
534 bool add_sep = false;
535
536 if (HasMenuItemType(STE_MENU_EDIT_MENU, STE_MENU_EDIT_UNDOREDO) && !HasMenuOptionType(STE_MENU_READONLY))
537 {
538 if (add_sep) menu->AppendSeparator();
539
540 menu->Append(MenuItem(menu, wxID_UNDO, wxGetStockLabel(wxID_UNDO), _("Undo last operation"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_UNDO)));
541 menu->Append(MenuItem(menu, wxID_REDO, wxGetStockLabel(wxID_REDO), _("Redo last undo"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_REDO)));
542 add_sep = true;
543 }
544 if (HasMenuItemType(STE_MENU_EDIT_MENU, STE_MENU_EDIT_CUTCOPYPASTE))
545 {
546 if (add_sep) menu->AppendSeparator();
547
548 if (!HasMenuOptionType(STE_MENU_READONLY))
549 menu->Append(MenuItem(menu, wxID_CUT, wxGetStockLabel(wxID_CUT), _("Cut selected text to clipboard"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_CUT)));
550 menu->Append(MenuItem(menu, wxID_COPY, wxGetStockLabel(wxID_COPY), _("Copy selected text to clipboard"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_COPY)));
551 menu->Append(ID_STE_COPY_HTML, _("Copy as &HTML"), _("Copy selected text to clipboard with text markup"));
552 #ifdef __UNIX__
553 menu->Append(ID_STE_COPY_PRIMARY, _("Copy primary"), _("Copy selected text to primary clipboard"));
554 #endif // __UNIX__
555 if (!HasMenuOptionType(STE_MENU_READONLY))
556 {
557 menu->Append(MenuItem(menu, wxID_PASTE, wxGetStockLabel(wxID_PASTE), _("Paste text from clipboard"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_PASTE)));
558 menu->Append(ID_STE_PASTE_RECT, _("Paste &Rectangle"), _("Paste rectangular text from clipboard (select with Shift+Alt)"));
559 }
560
561 if (HasMenuOptionType(STE_MENU_NOTEBOOK))
562 {
563 // FIXME - this is probably not needed, it's pretty easy to simply do new then paste
564 //menu->Append(ID_STE_PASTE_NEW, _("Paste as &New"), _("Paste text from clipboard into new notebook tab"));
565 }
566
567 // FIXME - ID_STE_PREF_SELECTION_MODE remmed out since I can't make it work in GTK
568 //menu->AppendCheckItem(ID_STE_PREF_SELECTION_MODE, _("Rectan&gular Selection"), _("Rectangular selections for cut/copy/paste"));
569
570 // WXK_DELETE - no accelerator to allow scintilla to handle it appropriately
571 menu->Append(MenuItem(menu, wxID_CLEAR, wxGetStockLabel(wxID_DELETE), _("Delete selection"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_CLEAR)));
572
573 add_sep = true;
574 }
575 if (add_sep) menu->AppendSeparator();
576 menu->Append(wxID_SELECTALL, wxGetStockLabelEx(wxID_SELECTALL), _("Selects entire document"));
577 add_sep = true;
578 if (HasMenuItemType(STE_MENU_EDIT_MENU, STE_MENU_EDIT_LINE))
579 {
580 if (add_sep) menu->AppendSeparator();
581
582 wxMenu *m = new wxMenu();
583
584 // FIXME - these aren't Ctrl-L since the stc handles the keys already (works everywhere?)
585 if (!HasMenuOptionType(STE_MENU_READONLY))
586 m->Append(ID_STE_LINE_CUT, _("Line Cu&t"), _("Cut current line to clipboard"));
587
588 m->Append(ID_STE_LINE_COPY, _("Line &Copy"), _("Copy current line to clipboard"));
589
590 if (!HasMenuOptionType(STE_MENU_READONLY))
591 {
592 m->Append(ID_STE_LINE_DELETE, _("Line &Delete"), _("Delete current line"));
593 m->Append(ID_STE_LINE_TRANSPOSE, _("Line &Transpose"), _("Transpose current line upwards"));
594 m->Append(ID_STE_LINE_DUPLICATE, _("Line D&uplicate"), _("Duplicate current line"));
595 }
596
597 menu->Append(ID_STE_MENU_LINE, _("L&ine Editing"), m);
598 add_sep = true;
599 }
600 if (HasMenuItemType(STE_MENU_EDIT_MENU, STE_MENU_EDIT_READONLY) && !HasMenuOptionType(STE_MENU_READONLY))
601 {
602 if (add_sep) menu->AppendSeparator();
603
604 menu->AppendCheckItem(ID_STE_READONLY, _("Read only"), _("Make document read only"));
605 add_sep = true;
606 }
607 if (HasMenuItemType(STE_MENU_EDIT_MENU, STE_MENU_EDIT_COMPLETEWORD) && !HasMenuOptionType(STE_MENU_READONLY))
608 {
609 if (add_sep) menu->AppendSeparator();
610
611 menu->Append(ID_STE_COMPLETEWORD, _("Complete w&ord"), _("Complete word at cursor"));
612 add_sep = true;
613 }
614
615 if (HasMenuItemType(STE_MENU_EDIT_MENU, STE_MENU_EDIT_COPYPATH))
616 {
617 if (add_sep) menu->AppendSeparator();
618
619 menu->Append(ID_STE_COPYPATH, _("Copy &path"), _("Copy full path to clipboard"));
620 add_sep = true;
621 }
622
623 if ( (menu_ == NULL) && menu && (menu->GetMenuItemCount() == 0))
624 {
625 wxDELETE(menu);
626 }
627
628 return menu;
629 }
630
CreateSearchMenu(wxMenu * menu_) const631 wxMenu *wxSTEditorMenuManager::CreateSearchMenu(wxMenu *menu_) const
632 {
633 wxMenu *menu = menu_ ? menu_ : new wxMenu();
634 bool add_sep = false;
635
636 if (HasMenuItemType(STE_MENU_SEARCH_MENU, STE_MENU_SEARCH_FINDREPLACE))
637 {
638 if (add_sep) menu->AppendSeparator();
639
640 menu->Append(MenuItem(menu, wxID_FIND, wxGetStockLabelEx(wxID_FIND), _("Find text"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_FIND)));
641 menu->Append(MenuItem(menu, ID_STE_FIND_NEXT, _("Find &Next"), _("Find next occurance"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_FINDNEXT)));
642 menu->Append(MenuItem(menu, ID_STE_FIND_PREV, _("Find &Previous"), _("Find previous occurance"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_FINDUP)));
643 menu->AppendCheckItem(ID_STE_FIND_DOWN, _("Search For&ward"), _("Search forward/reverse in document"));
644 if (!HasMenuOptionType(STE_MENU_READONLY))
645 menu->Append(MenuItem(menu, wxID_REPLACE, wxGetStockLabelEx(wxID_REPLACE), _("Replace text"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_REPLACE)));
646 add_sep = true;
647 }
648 if (HasMenuItemType(STE_MENU_SEARCH_MENU, STE_MENU_SEARCH_GOTOLINE))
649 {
650 if (add_sep) menu->AppendSeparator();
651
652 menu->Append(ID_STE_GOTO_LINE, _("&Go to Line..."), _("Goto line number"));
653 add_sep = true;
654 }
655
656 if ((menu_ == NULL) && menu && (menu->GetMenuItemCount() == 0))
657 {
658 wxDELETE(menu);
659 }
660
661 return menu;
662 }
663
CreateToolsMenu(wxMenu * menu_) const664 wxMenu *wxSTEditorMenuManager::CreateToolsMenu(wxMenu *menu_) const
665 {
666 // all of these modify the document
667 if (HasMenuOptionType(STE_MENU_READONLY))
668 return menu_;
669
670 wxMenu *menu = menu_ ? menu_ : new wxMenu();
671 bool add_sep = false;
672
673 if (HasMenuItemType(STE_MENU_TOOLS_MENU, STE_MENU_TOOLS_CASE))
674 {
675 if (add_sep) menu->AppendSeparator();
676
677 menu->Append(ID_STE_UPPERCASE, _("Selection &uppercase"), _("Convert the selected text to uppercase"));
678 menu->Append(ID_STE_LOWERCASE, _("Selection &lowercase"), _("Convert the selected text to lowercase"));
679 add_sep = true;
680 }
681 if (HasMenuItemType(STE_MENU_TOOLS_MENU, STE_MENU_TOOLS_INDENT))
682 {
683 if (add_sep) menu->AppendSeparator();
684
685 menu->Append(ID_STE_INCREASE_INDENT, _("&Increase indent"), _("Increase indent of selected text or current line"));
686 menu->Append(ID_STE_DECREASE_INDENT, _("&Decrease indent"), _("Decrease indent of selected text or current line"));
687 add_sep = true;
688 }
689 if (HasMenuItemType(STE_MENU_TOOLS_MENU, STE_MENU_TOOLS_JOINSPLIT))
690 {
691 if (add_sep) menu->AppendSeparator();
692
693 menu->Append(ID_STE_LINES_JOIN, _("&Join selected lines"), _("Join selected lines together"));
694 menu->Append(ID_STE_LINES_SPLIT, _("&Split selected lines"), _("Split selected lines to edge marker column"));
695 add_sep = true;
696 }
697 if (HasMenuItemType(STE_MENU_TOOLS_MENU, STE_MENU_TOOLS_TABS_SP))
698 {
699 if (add_sep) menu->AppendSeparator();
700
701 menu->Append(ID_STE_TABS_TO_SPACES, _("Convert &tabs to spaces"), _("Convert tabs to spaces in selection or current line"));
702 menu->Append(ID_STE_SPACES_TO_TABS, _("Convert s&paces to tabs"), _("Convert spaces to tabs in selection or current line"));
703 add_sep = true;
704 }
705 if (HasMenuItemType(STE_MENU_TOOLS_MENU, STE_MENU_TOOLS_EOL))
706 {
707 if (add_sep) menu->AppendSeparator();
708
709 menu->Append(ID_STE_CONVERT_EOL, _("Convert &EOL characters..."), _("Convert all end of line characters in doc"));
710 add_sep = true;
711 }
712 if (HasMenuItemType(STE_MENU_TOOLS_MENU, STE_MENU_TOOLS_WHITE))
713 {
714 if (add_sep) menu->AppendSeparator();
715
716 menu->Append(ID_STE_TRAILING_WHITESPACE, _("Remove trailing &whitespace"), _("Remove whitespace at the ends of lines"));
717 menu->Append(ID_STE_REMOVE_CHARSAROUND, _("Remove w&hitespace at cursor"), _("Remove whitespace before and after cursor"));
718 add_sep = true;
719 }
720 if (HasMenuItemType(STE_MENU_TOOLS_MENU, STE_MENU_TOOLS_COLUMNIZE))
721 {
722 if (add_sep) menu->AppendSeparator();
723
724 menu->Append(ID_STE_COLUMNIZE, _("&Columnize..."), _("Reformat selected lines in columns..."));
725 add_sep = true;
726 }
727
728 if (!menu_ && menu && (menu->GetMenuItemCount() == 0))
729 {
730 wxDELETE(menu);
731 }
732
733 return menu;
734 }
735
CreateInsertMenu(wxMenu * menu_) const736 wxMenu *wxSTEditorMenuManager::CreateInsertMenu(wxMenu *menu_) const
737 {
738 // all of these modify the document
739 if (HasMenuOptionType(STE_MENU_READONLY))
740 return menu_;
741
742 wxMenu *menu = menu_ ? menu_ : new wxMenu();
743
744 if (HasMenuItemType(STE_MENU_INSERT_MENU, STE_MENU_INSERT_TEXT))
745 {
746 menu->Append(ID_STE_INSERT_TEXT, _("I&nsert text..."), _("Prepend, Append, or insert text at column..."));
747 }
748
749 if (HasMenuItemType(STE_MENU_INSERT_MENU, STE_MENU_INSERT_DATETIME))
750 {
751 menu->Append(ID_STE_INSERT_DATETIME, _("Insert &date and time"), _("Insert date and time"));
752 }
753
754 if (!menu_ && menu && (menu->GetMenuItemCount() == 0))
755 {
756 wxDELETE(menu);
757 }
758
759 return menu;
760 }
761
CreateViewMenu(wxMenu * menu_) const762 wxMenu *wxSTEditorMenuManager::CreateViewMenu(wxMenu *menu_) const
763 {
764 wxMenu *menu = menu_ ? menu_ : new wxMenu();
765 bool add_sep = false;
766 wxMenu* submenu;
767
768 if (HasMenuItemType(STE_MENU_VIEW_MENU, STE_MENU_VIEW_WRAP))
769 {
770 menu->AppendCheckItem(ID_STE_PREF_WRAP_MODE, _("&Wrap text to window"), _("Wrap the text to fit inside window"));
771 add_sep = true;
772 }
773 if (HasMenuItemType(STE_MENU_VIEW_MENU, STE_MENU_VIEW_GUI))
774 {
775 if (add_sep) menu->AppendSeparator();
776
777 menu->AppendCheckItem(ID_STE_VIEW_NONPRINT, _("&Nonprinting Characters"), _("Show end of line symbols and whitespace"));
778 menu->AppendCheckItem(ID_STE_PREF_VIEW_EOL, _("&EOL"), _("Show end of line symbols"));
779 menu->AppendCheckItem(ID_STE_PREF_VIEW_WHITESPACE, _("Whi&tespace"), _("Show whitespace using symbols"));
780
781 menu->AppendSeparator();
782
783 submenu = new wxMenu();
784 submenu->AppendCheckItem(ID_STE_PREF_INDENT_GUIDES, _("Show indent &guides"), _("Show indentation column guides"));
785 submenu->AppendCheckItem(ID_STE_PREF_EDGE_MODE, _("Show l&ong line guide"), _("Show column guide for long lines"));
786 submenu->Append(ID_STE_PREF_EDGE_COLUMN, _("Set long l&ine guide column..."), _("Set column long line guide..."));
787 menu->Append(ID_STE_MENU_GUIDES, _("&Guides"), submenu);
788
789 menu->AppendSeparator();
790
791 submenu = new wxMenu();
792 submenu->AppendCheckItem(ID_STE_PREF_VIEW_LINEMARGIN, _("Show &line number margin"), _("Show line number margin"));
793 submenu->AppendCheckItem(ID_STE_PREF_VIEW_MARKERMARGIN, _("Show &marker margin"), _("Show a margin for markers"));
794 submenu->AppendCheckItem(ID_STE_PREF_VIEW_FOLDMARGIN, _("Show &folding margin"), _("Show code folding margin"));
795 menu->Append(ID_STE_MENU_MARGINS, _("&Margins"), submenu);
796 add_sep = true;
797 }
798 if (HasMenuItemType(STE_MENU_VIEW_MENU, STE_MENU_VIEW_FOLD))
799 {
800 if (add_sep) menu->AppendSeparator();
801
802 submenu = new wxMenu();
803 submenu->Append(ID_STE_FOLDS_TOGGLE_CURRENT, _("To&ggle current fold"), _("Toggle the current fold level"));
804 submenu->Append(ID_STE_FOLDS_COLLAPSE_LEVEL, _("&Collapse folds below level..."), _("Collapse all folds below the level in document"));
805 submenu->Append(ID_STE_FOLDS_EXPAND_LEVEL, _("E&xpand folds above level..."), _("Expand all folds above the level in document"));
806 submenu->Append(ID_STE_FOLDS_COLLAPSE_ALL, _("&Collapse all folds"), _("Collapse all folds in document"));
807 submenu->Append(ID_STE_FOLDS_EXPAND_ALL, _("E&xpand all folds"), _("Expand all folds in document"));
808 menu->Append(ID_STE_MENU_FOLDING, _("&Folding"), submenu);
809 add_sep = true;
810 }
811 if (HasMenuItemType(STE_MENU_VIEW_MENU, STE_MENU_VIEW_HILIGHT))
812 {
813 if (add_sep) menu->AppendSeparator();
814
815 menu->AppendCheckItem(ID_STE_PREF_HIGHLIGHT_SYNTAX, _("S&yntax coloring"), _("Hilight document based on the syntax"));
816 add_sep = true;
817 }
818 if (HasMenuItemType(STE_MENU_VIEW_MENU, STE_MENU_VIEW_ZOOM))
819 {
820 if (add_sep) menu->AppendSeparator();
821
822 menu->Append(ID_STE_PREF_ZOOM, _("&Scale font size..."), _("Increase or decrease the size of the text"));
823 add_sep = true;
824 }
825 if (HasMenuItemType(STE_MENU_VIEW_MENU, STE_MENU_VIEW_FULLSCREEN) && HasMenuOptionType(STE_MENU_FRAME))
826 {
827 if (add_sep) menu->AppendSeparator();
828
829 menu->AppendCheckItem(ID_STE_SHOW_FULLSCREEN, _("Show f&ullscreen"), _("Show the editor fullscreen"));
830 add_sep = true;
831 }
832
833 if (!menu_ && menu && (menu->GetMenuItemCount() == 0))
834 {
835 wxDELETE(menu);
836 }
837
838 return menu;
839 }
840
CreateBookmarkMenu(wxMenu * menu_) const841 wxMenu *wxSTEditorMenuManager::CreateBookmarkMenu(wxMenu *menu_) const
842 {
843 wxMenu *menu = menu_;
844
845 if (HasMenuItemType(STE_MENU_BOOKMARK_MENU, STE_MENU_BOOKMARK_DEFAULT))
846 {
847 if (menu == NULL) menu = new wxMenu;
848 menu->Append(MenuItem(menu, ID_STE_BOOKMARKS, _("&Bookmarks..."), _("View all bookmarks"), wxITEM_NORMAL, STE_ARTMENU(wxART_HELP_BOOK)));
849 menu->AppendSeparator();
850 menu->Append(MenuItem(menu, ID_STE_BOOKMARK_TOGGLE, _("&Toggle bookmark"), _("Toggle a bookmark on cursor line"), wxITEM_NORMAL, STE_ARTMENU(wxART_ADD_BOOKMARK)));
851 menu->AppendSeparator();
852 menu->Append(MenuItem(menu, ID_STE_BOOKMARK_FIRST, _("&First bookmark"), _("Goto first bookmark"), wxITEM_NORMAL, STE_ARTMENU(wxART_GO_UP)));
853 menu->Append(MenuItem(menu, ID_STE_BOOKMARK_PREVIOUS, _("&Previous bookmark"), _("Goto previous bookmark"), wxITEM_NORMAL, STE_ARTMENU(wxART_GO_BACK)));
854 menu->Append(MenuItem(menu, ID_STE_BOOKMARK_NEXT, _("&Next bookmark"), _("Goto next bookmark"), wxITEM_NORMAL, STE_ARTMENU(wxART_GO_FORWARD)));
855 menu->Append(MenuItem(menu, ID_STE_BOOKMARK_LAST, _("&Last bookmark"), _("Goto last bookmark"), wxITEM_NORMAL, STE_ARTMENU(wxART_GO_DOWN)));
856 menu->AppendSeparator();
857 menu->Append(MenuItem(menu, ID_STE_BOOKMARK_CLEAR, _("&Clear all bookmarks"), _("Clear all bookmarks"), wxITEM_NORMAL, STE_ARTMENU(wxART_DEL_BOOKMARK)));
858 }
859
860 return menu;
861 }
862
CreatePreferenceMenu(wxMenu * menu_) const863 wxMenu *wxSTEditorMenuManager::CreatePreferenceMenu(wxMenu *menu_) const
864 {
865 wxMenu *menu = menu_ ? menu_ : new wxMenu();
866 bool add_sep = false;
867
868 if (HasMenuItemType(STE_MENU_PREFS_MENU, STE_MENU_PREFS_DLG))
869 {
870 menu->Append(ID_STE_PREFERENCES, _("Show &preference dialog..."), _("Show preference dialog..."));
871 add_sep = true;
872 }
873 if (HasMenuItemType(STE_MENU_PREFS_MENU, STE_MENU_PREFS_INDENT))
874 {
875 if (add_sep) menu->AppendSeparator();
876
877 menu->AppendCheckItem(ID_STE_PREF_USE_TABS, _("Use &tabs"), _("Tab key inserts a tab character"));
878 menu->AppendCheckItem(ID_STE_PREF_TAB_INDENTS, _("Tab &indents"), _("Tab key indents"));
879 menu->AppendCheckItem(ID_STE_PREF_BACKSPACE_UNINDENTS, _("&Backspace unindents"), _("Backspace key unindents"));
880 menu->AppendCheckItem(ID_STE_PREF_AUTOINDENT, _("&Auto indent"), _("Indent new lines to previous indentation"));
881
882 menu->Append(ID_STE_PREF_TAB_WIDTH, _("Set tab &width..."), _("Set the number of spaces to show for tab character"));
883 menu->Append(ID_STE_PREF_INDENT_WIDTH, _("Set indent wi&dth..."), _("Set the number of spaces to use for indentation"));
884 add_sep = true;
885 }
886 if (HasMenuItemType(STE_MENU_PREFS_MENU, STE_MENU_PREFS_EOL))
887 {
888 if (add_sep) menu->AppendSeparator();
889
890 menu->Append(ID_STE_PREF_EOL_MODE, _("&EOL Mode..."), _("Set the end of line mode"));
891 add_sep = true;
892 }
893 if (HasMenuItemType(STE_MENU_PREFS_MENU, STE_MENU_PREFS_SAVE))
894 {
895 if (add_sep) menu->AppendSeparator();
896
897 menu->Append(MenuItem(menu, ID_STE_SAVE_PREFERENCES, _("Save preferences"), _("Save current preferences"), wxITEM_NORMAL, STE_ARTMENU(wxART_STEDIT_SAVE)));
898 add_sep = true;
899 }
900
901 if (!menu_ && menu && (menu->GetMenuItemCount() == 0))
902 {
903 wxDELETE(menu);
904 }
905
906 return menu;
907 }
908
CreateWindowMenu(wxMenu * menu_) const909 wxMenu *wxSTEditorMenuManager::CreateWindowMenu(wxMenu *menu_) const
910 {
911 wxMenu *menu = menu_ ? menu_ : new wxMenu();
912 bool add_sep = false;
913
914 if (HasMenuItemType(STE_MENU_WINDOW_MENU, STE_MENU_WINDOW_SPLIT))
915 {
916 menu = CreateSplitterPopupMenu(menu);
917 add_sep = true;
918 }
919
920 if (HasMenuItemType(STE_MENU_WINDOW_MENU, STE_MENU_WINDOW_FILECHOOSER))
921 {
922 if (add_sep) menu->AppendSeparator();
923 menu->AppendCheckItem(ID_STF_SHOW_SIDEBAR, _("&Show sidebar"), _("Show the sidebar panel"));
924 }
925
926 if (HasMenuItemType(STE_MENU_WINDOW_MENU, STE_MENU_WINDOW_PREVNEXT))
927 {
928 if (add_sep) menu->AppendSeparator();
929
930 menu->Append(ID_STN_WIN_PREVIOUS, _("Pr&evious page"), _("Goto previous page"));
931 menu->Append(ID_STN_WIN_NEXT, _("Ne&xt page"), _("Goto next page"));
932 add_sep = true;
933 }
934
935 if (HasMenuItemType(STE_MENU_WINDOW_MENU, STE_MENU_WINDOW_WINDOWS))
936 {
937 if (add_sep) menu->AppendSeparator();
938
939 menu->Append(ID_STN_WINDOWS, _("&Windows..."), _("Manage opened windows"));
940 add_sep = true;
941 }
942
943 if (!menu_ && menu && (menu->GetMenuItemCount() == 0))
944 {
945 wxDELETE(menu);
946 }
947
948 return menu;
949 }
950
CreateHelpMenu(wxMenu * menu_) const951 wxMenu *wxSTEditorMenuManager::CreateHelpMenu(wxMenu *menu_) const
952 {
953 wxMenu *menu = menu_ ? menu_ : new wxMenu();
954
955 if (HasMenuOptionType(STE_MENU_FRAME) && HasMenuItemType(STE_MENU_HELP_MENU, STE_MENU_HELP_ABOUT))
956 {
957 wxMenuItem* item = new wxMenuItem(menu, wxID_ABOUT, wxGetStockLabelEx(wxID_ABOUT), _("About this program"));
958 item->SetBitmap(STE_ARTMENU(wxART_STEDIT_APP));
959 menu->Append(item);
960 }
961
962 if (!menu_ && menu && (menu->GetMenuItemCount() == 0))
963 {
964 wxDELETE(menu);
965 }
966
967 return menu;
968 }
969
970 // static
CreateInsertCharsMenu(wxMenu * menu_,int types)971 wxMenu* wxSTEditorMenuManager::CreateInsertCharsMenu(wxMenu *menu_, int types)
972 {
973 wxMenu *menu = menu_ ? menu_ : new wxMenu();
974
975 if (STE_HASBIT(types, STE_MENU_INSERTCHARS_CHARS))
976 {
977 menu->Append(ID_STEDLG_INSERTMENU_TAB, _("Tab character"));
978 menu->Append(ID_STEDLG_INSERTMENU_CR, _("Carriage return"));
979 menu->Append(ID_STEDLG_INSERTMENU_LF, _("Line feed"));
980 }
981 if (STE_HASBIT(types, STE_MENU_INSERTCHARS_REGEXP))
982 {
983 wxMenu* reMenu = new wxMenu;
984 reMenu->Append(ID_STEDLG_INSERTMENURE_ANYCHAR, _("Any character"));
985 reMenu->Append(ID_STEDLG_INSERTMENURE_RANGE, _("Character in range"));
986 reMenu->Append(ID_STEDLG_INSERTMENURE_NOTRANGE, _("Character not in range"));
987 reMenu->Append(ID_STEDLG_INSERTMENURE_BEGINLINE, _("Beginning of line"));
988 reMenu->Append(ID_STEDLG_INSERTMENURE_ENDLINE, _("End of line"));
989 reMenu->Append(ID_STEDLG_INSERTMENURE_TAGEXPR, _("Tagged expression"));
990 reMenu->Append(ID_STEDLG_INSERTMENURE_0MATCHES, _("0 or more matches"));
991 reMenu->Append(ID_STEDLG_INSERTMENURE_1MATCHES, _("1 or more matches"));
992 reMenu->Append(ID_STEDLG_INSERTMENURE_01MATCHES, _("0 or 1 matches"));
993 reMenu->AppendSeparator();
994 reMenu->Append(ID_STEDLG_INSERTMENURE_ALPHANUM, _("Alphanumeric characters"));
995 reMenu->Append(ID_STEDLG_INSERTMENURE_ALPHA, _("Alphabetical characters"));
996 reMenu->Append(ID_STEDLG_INSERTMENURE_NUMERIC, _("Numeric characters"));
997 reMenu->Append(ID_STEDLG_INSERTMENURE_TAB, _("Tab characters"));
998
999 menu->Append(ID_STEDLG_MENU_INSERTMENURE, _("Regexp"), reMenu);
1000 }
1001
1002 if (!menu_ && menu && (menu->GetMenuItemCount() == 0))
1003 {
1004 wxDELETE(menu);
1005 }
1006
1007 return menu;
1008 }
1009
AddAccelFromMenuItem(const wxMenu * menu,wxArrayPtrVoid & entries)1010 static bool AddAccelFromMenuItem(const wxMenu* menu, wxArrayPtrVoid& entries)
1011 {
1012 if (!menu)
1013 return false;
1014
1015 bool ret = false;
1016 const wxMenuItemList& itemList = menu->GetMenuItems();
1017
1018 for ( wxMenuItemList::const_iterator it = itemList.begin();
1019 it != itemList.end();
1020 it++)
1021 {
1022 wxMenuItem *menuItem = *it;
1023 if (!menuItem)
1024 continue;
1025
1026 if (menuItem->IsSubMenu())
1027 ret |= AddAccelFromMenuItem(menuItem->GetSubMenu(), entries);
1028 else
1029 {
1030 wxAcceleratorEntry *entry = menuItem->GetAccel();
1031 if (entry)
1032 {
1033 ret = true;
1034 // make sure the id is set correctly (for GTK at least)
1035 entry->Set(entry->GetFlags(), entry->GetKeyCode(), menuItem->GetId());
1036 bool exists = false;
1037 size_t n, count = entries.GetCount();
1038 for (n = 0; n < count; n++)
1039 {
1040 if (*entry == *((wxAcceleratorEntry*)entries[n]))
1041 {
1042 exists = true;
1043 break;
1044 }
1045 }
1046
1047 if (exists)
1048 delete entry;
1049 else
1050 entries.Add(entry);
1051 }
1052 }
1053 }
1054
1055 return ret;
1056 }
1057
1058 // static
GetAcceleratorEntries(const wxMenu * menu,const wxMenuBar * menuBar,wxArrayPtrVoid & entries)1059 bool wxSTEditorMenuManager::GetAcceleratorEntries(const wxMenu* menu,
1060 const wxMenuBar* menuBar,
1061 wxArrayPtrVoid& entries)
1062 {
1063 bool ret = false;
1064 if (menu)
1065 ret = AddAccelFromMenuItem(menu, entries);
1066 if (menuBar)
1067 {
1068 size_t n, count = menuBar->GetMenuCount();
1069 for (n = 0; n < count; n++)
1070 ret |= AddAccelFromMenuItem(menuBar->GetMenu(n), entries);
1071 }
1072
1073 return ret;
1074 }
1075
1076 // static
CreateAcceleratorTable(wxArrayPtrVoid & entries)1077 wxAcceleratorTable wxSTEditorMenuManager::CreateAcceleratorTable(wxArrayPtrVoid& entries)
1078 {
1079 if (entries.GetCount() == 0)
1080 return wxAcceleratorTable();
1081
1082 return wxAcceleratorTable((int)entries.GetCount(),
1083 (wxAcceleratorEntry*)&entries.Item(0));
1084 }
1085
1086 // static
CreateAcceleratorTable(const wxMenu * menu,const wxMenuBar * menuBar)1087 wxAcceleratorTable wxSTEditorMenuManager::CreateAcceleratorTable(const wxMenu* menu,
1088 const wxMenuBar* menuBar)
1089 {
1090 wxArrayPtrVoid entries;
1091 GetAcceleratorEntries(menu, menuBar, entries);
1092 wxAcceleratorTable table(CreateAcceleratorTable(entries));
1093 while ( entries.GetCount() > 0 )
1094 {
1095 wxAcceleratorEntry *item = (wxAcceleratorEntry*)entries[0];
1096 //wxPrintf(wxT("Accel %d, '%c' %d %d\n"), item->GetFlags(), (wxChar)item->GetKeyCode(), item->GetKeyCode(), item->GetCommand()); fflush(stdout);
1097 delete item;
1098 entries.RemoveAt(0);
1099 }
1100 return table;
1101 }
1102
EnableEditorItems(bool enable,wxMenu * menu,wxMenuBar * menuBar,wxToolBar * toolBar)1103 void wxSTEditorMenuManager::EnableEditorItems(bool enable, wxMenu *menu,
1104 wxMenuBar *menuBar, wxToolBar *toolBar)
1105 {
1106 m_enabledEditorItems = enable;
1107
1108 int n, count;
1109 for (n = ID_STE_PREF__FIRST; n <= ID_STE_PREF__LAST; n++)
1110 DoEnableItem(menu, menuBar, toolBar, n, enable);
1111
1112 count = (int)m_enableItemsArray.GetCount();
1113 for (n = 0; n < count; n++)
1114 DoEnableItem(menu, menuBar, toolBar, m_enableItemsArray[n], enable);
1115
1116 const int menuIds[] = {
1117 wxID_SAVE,
1118 wxID_SAVEAS,
1119 ID_STN_SAVE_ALL,
1120 ID_STN_CLOSE_PAGE,
1121 ID_STN_CLOSE_ALL,
1122 ID_STN_CLOSE_ALL_OTHERS,
1123 ID_STE_PROPERTIES,
1124 wxID_PRINT,
1125 wxID_PREVIEW,
1126 wxID_PRINT_SETUP,
1127 ID_STE_PRINT_PAGE_SETUP,
1128 ID_STE_PRINT_OPTIONS,
1129
1130 wxID_CUT,
1131 wxID_COPY,
1132 ID_STE_COPY_PRIMARY,
1133 wxID_PASTE,
1134 ID_STE_PASTE_RECT,
1135 wxID_SELECTALL,
1136 wxID_FIND,
1137 ID_STE_FIND_NEXT,
1138 ID_STE_FIND_DOWN,
1139 wxID_REPLACE,
1140 ID_STE_GOTO_LINE,
1141 wxID_UNDO,
1142 wxID_REDO,
1143
1144 ID_STE_UPPERCASE,
1145 ID_STE_INCREASE_INDENT,
1146 ID_STE_DECREASE_INDENT,
1147 ID_STE_LINES_JOIN,
1148 ID_STE_LINES_SPLIT,
1149 ID_STE_TABS_TO_SPACES,
1150 ID_STE_SPACES_TO_TABS,
1151 ID_STE_CONVERT_EOL,
1152 ID_STE_TRAILING_WHITESPACE,
1153 ID_STE_REMOVE_CHARSAROUND,
1154
1155 ID_STE_FOLDS_TOGGLE_CURRENT,
1156 ID_STE_FOLDS_COLLAPSE_LEVEL,
1157 ID_STE_FOLDS_EXPAND_LEVEL,
1158 ID_STE_FOLDS_COLLAPSE_ALL,
1159 ID_STE_FOLDS_EXPAND_ALL,
1160
1161 ID_STE_BOOKMARK_TOGGLE,
1162 ID_STE_BOOKMARK_FIRST,
1163 ID_STE_BOOKMARK_PREVIOUS,
1164 ID_STE_BOOKMARK_NEXT,
1165 ID_STE_BOOKMARK_LAST,
1166 ID_STE_BOOKMARK_CLEAR,
1167
1168 ID_STE_PREFERENCES,
1169 ID_STE_SAVE_PREFERENCES,
1170
1171 ID_STS_UNSPLIT,
1172 ID_STS_SPLIT_HORIZ,
1173 ID_STS_SPLIT_VERT
1174 };
1175
1176 count = WXSIZEOF(menuIds);
1177 for (n = 0; n < count; n++)
1178 DoEnableItem(menu, menuBar, toolBar, menuIds[n], enable);
1179 }
1180
1181 // static
MenuItem(wxMenu * menu,wxWindowID win_id,const wxString & text,const wxString & help,wxItemKind kind,const wxBitmap & bitmap)1182 wxMenuItem *wxSTEditorMenuManager::MenuItem(wxMenu *menu, wxWindowID win_id,
1183 const wxString &text, const wxString &help,
1184 wxItemKind kind, const wxBitmap &bitmap)
1185 {
1186 wxMenuItem *item = new wxMenuItem(menu, win_id, text, help, kind);
1187 if (bitmap.IsOk())
1188 item->SetBitmap(bitmap);
1189 return item;
1190 }
1191
1192 // static
DestroyMenuItem(wxMenu * menu,int menu_id,bool clean_sep)1193 void wxSTEditorMenuManager::DestroyMenuItem(wxMenu *menu, int menu_id, bool clean_sep)
1194 {
1195 wxCHECK_RET(menu, wxT("Invalid menu"));
1196 wxMenuItem *lastItem = menu->FindItem(menu_id);
1197 if (lastItem)
1198 menu->Destroy(lastItem);
1199
1200 if (!clean_sep) return;
1201
1202 // find any separators that are next to each other and delete them
1203 wxMenuItemList &menuItems = menu->GetMenuItems();
1204 wxMenuItemList::compatibility_iterator node = menuItems.GetFirst();
1205
1206 // delete leading separator
1207 if (node && wxStaticCast(node->GetData(), wxMenuItem)->IsSeparator())
1208 {
1209 menu->Destroy(wxStaticCast(node->GetData(), wxMenuItem));
1210 node = node->GetNext();
1211 }
1212
1213 // delete duplicate separators
1214 for (;
1215 node;
1216 node = node->GetNext())
1217 {
1218 wxMenuItem* item = wxStaticCast(node->GetData(), wxMenuItem);
1219 if (lastItem && lastItem->IsSeparator() && item->IsSeparator())
1220 menu->Destroy(lastItem);
1221
1222 lastItem = item;
1223 }
1224
1225 // delete trailing separator too
1226 node = menuItems.GetLast();
1227 if (node && wxStaticCast(node->GetData(), wxMenuItem)->IsSeparator())
1228 {
1229 menu->Destroy(wxStaticCast(node->GetData(), wxMenuItem));
1230 }
1231 }
1232
DoEnableItem(wxMenu * menu,wxMenuBar * menuBar,wxToolBar * toolBar,wxWindowID menu_id,bool val)1233 bool wxSTEditorMenuManager::DoEnableItem(wxMenu *menu, wxMenuBar *menuBar,
1234 wxToolBar *toolBar, wxWindowID menu_id, bool val)
1235 {
1236 //wxPrintf(wxT("DoEnableItem %d - val %d\n"), menu_id, int(val));
1237 bool ret = false;
1238
1239 if (menu)
1240 {
1241 wxMenuItem *menuItem = menu->FindItem(menu_id);
1242 if (menuItem)
1243 {
1244 menuItem->Enable(val);
1245 ret = true;
1246 }
1247 }
1248 if (menuBar)
1249 {
1250 wxMenuItem *menuItem = menuBar->FindItem(menu_id);
1251 if (menuItem)
1252 {
1253 menuItem->Enable(val);
1254 ret = true;
1255 }
1256 }
1257 if (toolBar)
1258 {
1259 toolBar->EnableTool(menu_id, val);
1260 ret = true; // don't know if it exists, pretend that it did...
1261 }
1262
1263 return ret;
1264 }
DoCheckItem(wxMenu * menu,wxMenuBar * menuBar,wxToolBar * toolBar,wxWindowID menu_id,bool val)1265 bool wxSTEditorMenuManager::DoCheckItem(wxMenu *menu, wxMenuBar *menuBar,
1266 wxToolBar *toolBar, wxWindowID menu_id, bool val)
1267 {
1268 //wxPrintf(wxT("DoCheckItem %d - val %d\n"), menu_id, int(val));
1269 bool ret = false;
1270
1271 if (menu)
1272 {
1273 wxMenuItem *menuItem = menu->FindItem(menu_id);
1274 if (menuItem)
1275 {
1276 menuItem->Check(val);
1277 ret = true;
1278 }
1279 }
1280 if (menuBar)
1281 {
1282 wxMenuItem *menuItem = menuBar->FindItem(menu_id);
1283 if (menuItem)
1284 {
1285 menuItem->Check(val);
1286 ret = true;
1287 }
1288 }
1289 if (toolBar)
1290 {
1291 toolBar->ToggleTool(menu_id, val);
1292 ret = true; // don't know if it exists, pretend that it did...
1293 }
1294
1295 return ret;
1296 }
DoSetTextItem(wxMenu * menu,wxMenuBar * menuBar,wxWindowID menu_id,const wxString & val)1297 bool wxSTEditorMenuManager::DoSetTextItem(wxMenu *menu, wxMenuBar *menuBar,
1298 wxWindowID menu_id, const wxString &val)
1299 {
1300 bool ret = false;
1301
1302 if (menu)
1303 {
1304 wxMenuItem *menuItem = menu->FindItem(menu_id);
1305 if (menuItem)
1306 {
1307 menuItem->SetItemLabel(val);
1308 ret = true;
1309 }
1310 }
1311 if (menuBar)
1312 {
1313 wxMenuItem *menuItem = menuBar->FindItem(menu_id);
1314 if (menuItem)
1315 {
1316 menuItem->SetItemLabel(val);
1317 ret = true;
1318 }
1319 }
1320
1321 return ret;
1322 }
1323