Fix umpnpmgr build
[reactos.git] / rosapps / mc / edit / editmenu.c
1 /* editor menu definitions and initialisation
2
3 Copyright (C) 1996 the Free Software Foundation
4
5 Authors: 1996, 1997 Paul Sheer
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21
22 #include <config.h>
23 #include "edit.h"
24
25 #include "editcmddef.h"
26
27 #ifdef MIDNIGHT
28
29 #include "../src/mad.h"
30
31 extern int edit_key_emulation;
32 extern WEdit *wedit;
33 extern WButtonBar *edit_bar;
34 extern Dlg_head *edit_dlg;
35 extern WMenu *edit_menubar;
36
37 #undef edit_message_dialog
38 #define edit_message_dialog(w,x,y,h,s) query_dialog (h, s, 0, 1, "&Ok")
39 #define CFocus(x)
40
41 static void menu_cmd (int i)
42 {
43 send_message (wedit->widget.parent, (Widget *) wedit, WIDGET_COMMAND, i);
44 }
45
46 static void menu_key (int i)
47 {
48 send_message (wedit->widget.parent, (Widget *) wedit, WIDGET_KEY, i);
49 }
50
51 void edit_wrap_cmd ()
52 {
53 char *f;
54 char s[12];
55 sprintf (s, "%d", option_word_wrap_line_length);
56 f = input_dialog (_(" Word wrap "),
57 /* Not essential to translate */
58 _(" Enter line length, 0 for off: "), s);
59 if (f) {
60 if (*f) {
61 option_word_wrap_line_length = atoi (f);
62 free (f);
63 }
64 }
65 }
66
67 void edit_about_cmd ()
68 {
69 edit_message_dialog (wedit->mainid, 20, 20, " About ",
70 "\n"
71 " Cooledit v2.1\n"
72 "\n"
73 " Copyright (C) 1996 the Free Software Foundation\n"
74 "\n"
75 " A user friendly text editor written\n"
76 " for the Midnight Commander.\n"
77 );
78 }
79
80 void menu_mail_cmd (void) { menu_cmd (CK_Mail); }
81 void menu_load_cmd (void) { menu_cmd (CK_Load); }
82 void menu_new_cmd (void) { menu_cmd (CK_New); }
83 void menu_save_cmd (void) { menu_cmd (CK_Save); }
84 void menu_save_as_cmd (void) { menu_cmd (CK_Save_As); }
85 void menu_insert_file_cmd (void) { menu_cmd (CK_Insert_File); }
86 void menu_quit_cmd (void) { menu_cmd (CK_Exit); }
87 void menu_mark_cmd (void) { menu_cmd (CK_Mark); }
88 void menu_ins_cmd (void) { menu_cmd (CK_Toggle_Insert); }
89 void menu_copy_cmd (void) { menu_cmd (CK_Copy); }
90 void menu_move_cmd (void) { menu_cmd (CK_Move); }
91 void menu_delete_cmd (void) { menu_cmd (CK_Remove); }
92 void menu_cut_cmd (void) { menu_cmd (CK_Save_Block); }
93 void menu_search_cmd (void) { menu_cmd (CK_Find); }
94 void menu_search_again_cmd (void) { menu_cmd (CK_Find_Again); }
95 void menu_replace_cmd (void) { menu_cmd (CK_Replace); }
96 void menu_begin_record_cmd (void) { menu_cmd (CK_Begin_Record_Macro); }
97 void menu_end_record_cmd (void) { menu_cmd (CK_End_Record_Macro); }
98 void menu_wrap_cmd (void) { edit_wrap_cmd (); }
99 void menu_exec_macro_cmd (void) { menu_key (XCTRL ('a')); }
100 void menu_exec_macro_delete_cmd (void) { menu_cmd (CK_Delete_Macro); }
101 void menu_c_form_cmd (void) { menu_key (KEY_F (19)); }
102 void menu_ispell_cmd (void) { menu_cmd (CK_Pipe_Block (1)); }
103 void menu_sort_cmd (void) { menu_cmd (CK_Sort); }
104 void menu_date_cmd (void) { menu_cmd (CK_Date); }
105 void menu_undo_cmd (void) { menu_cmd (CK_Undo); }
106 void menu_beginning_cmd (void) { menu_cmd (CK_Beginning_Of_Text); }
107 void menu_end_cmd (void) { menu_cmd (CK_End_Of_Text); }
108 void menu_refresh_cmd (void) { menu_cmd (CK_Refresh); }
109 void menu_goto_line (void) { menu_cmd (CK_Goto); }
110 void menu_lit_cmd (void) { menu_key (XCTRL ('q')); }
111 void menu_format_paragraph (void) { menu_cmd (CK_Paragraph_Format); }
112 void edit_options_dialog (void);
113 void menu_options (void) { edit_options_dialog (); }
114
115 static menu_entry FileMenu[] =
116 {
117 {' ', N_("&Open/load... C-o"), 'O', menu_load_cmd},
118 {' ', N_("&New C-n"), 'N', menu_new_cmd},
119 {' ', "", ' ', 0},
120 {' ', N_("&Save F2"), 'S', menu_save_cmd},
121 {' ', N_("save &As... F12"), 'A', menu_save_as_cmd},
122 {' ', "", ' ', 0},
123 {' ', N_("&Insert file... F15"), 'I', menu_insert_file_cmd},
124 {' ', N_("copy to &File... C-f"), 'F', menu_cut_cmd},
125 {' ', "", ' ', 0},
126 {' ', N_("a&Bout... "), 'B', edit_about_cmd},
127 {' ', "", ' ', 0},
128 {' ', N_("&Quit F10"), 'Q', menu_quit_cmd}
129 };
130
131 static menu_entry FileMenuEmacs[] =
132 {
133 {' ', N_("&Open/load... C-o"), 'O', menu_load_cmd},
134 {' ', N_("&New C-x k"), 'N', menu_new_cmd},
135 {' ', "", ' ', 0},
136 {' ', N_("&Save F2"), 'S', menu_save_cmd},
137 {' ', N_("save &As... F12"), 'A', menu_save_as_cmd},
138 {' ', "", ' ', 0},
139 {' ', N_("&Insert file... F15"), 'I', menu_insert_file_cmd},
140 {' ', N_("copy to &File... "), 'F', menu_cut_cmd},
141 {' ', "", ' ', 0},
142 {' ', N_("a&Bout... "), 'B', edit_about_cmd},
143 {' ', "", ' ', 0},
144 {' ', N_("&Quit F10"), 'Q', menu_quit_cmd}
145 };
146
147 static menu_entry EditMenu[] =
148 {
149 {' ', N_("&Toggle Mark F3"), 'T', menu_mark_cmd},
150 {' ', "", ' ', 0},
151 {' ', N_("toggle &Ins/overw Ins"), 'I', menu_ins_cmd},
152 {' ', "", ' ', 0},
153 {' ', N_("&Copy F5"), 'C', menu_copy_cmd},
154 {' ', N_("&Move F6"), 'M', menu_move_cmd},
155 {' ', N_("&Delete F8"), 'D', menu_delete_cmd},
156 {' ', "", ' ', 0},
157 {' ', N_("&Undo C-u"), 'U', menu_undo_cmd},
158 {' ', "", ' ', 0},
159 {' ', N_("&Beginning C-PgUp"), 'B', menu_beginning_cmd},
160 {' ', N_("&End C-PgDn"), 'E', menu_end_cmd}
161 };
162
163 static menu_entry EditMenuEmacs[] =
164 {
165 {' ', N_("&Toggle Mark F3"), 'T', menu_mark_cmd},
166 {' ', "", ' ', 0},
167 {' ', N_("toggle &Ins/overw Ins"), 'I', menu_ins_cmd},
168 {' ', "", ' ', 0},
169 {' ', N_("&Copy F5"), 'C', menu_copy_cmd},
170 {' ', N_("&Move F6"), 'M', menu_move_cmd},
171 {' ', N_("&Delete F8"), 'D', menu_delete_cmd},
172 {' ', "", ' ', 0},
173 {' ', N_("&Undo C-u"), 'U', menu_undo_cmd},
174 {' ', "", ' ', 0},
175 {' ', N_("&Beginning C-PgUp"), 'B', menu_beginning_cmd},
176 {' ', N_("&End C-PgDn"), 'E', menu_end_cmd}
177 };
178
179 static menu_entry SearReplMenu[] =
180 {
181 {' ', N_("&Search... F7"), 'S', menu_search_cmd},
182 {' ', N_("search &Again F17"), 'A', menu_search_again_cmd},
183 {' ', N_("&Replace... F4"), 'R', menu_replace_cmd}
184 };
185
186 static menu_entry SearReplMenuEmacs[] =
187 {
188 {' ', N_("&Search... F7"), 'S', menu_search_cmd},
189 {' ', N_("search &Again F17"), 'A', menu_search_again_cmd},
190 {' ', N_("&Replace... F4"), 'R', menu_replace_cmd}
191 };
192
193 static menu_entry CmdMenu[] =
194 {
195 {' ', N_("&Goto line... M-l"), 'G', menu_goto_line},
196 {' ', "", ' ', 0},
197 {' ', N_("insert &Literal... C-q"), 'L', menu_lit_cmd},
198 {' ', "", ' ', 0},
199 {' ', N_("&Refresh screen C-l"), 'R', menu_refresh_cmd},
200 {' ', "", ' ', 0},
201 {' ', N_("&Start record macro C-r"), 'S', menu_begin_record_cmd},
202 {' ', N_("&Finish record macro... C-r"), 'F', menu_end_record_cmd},
203 {' ', N_("&Execute macro... C-a, KEY"), 'E', menu_exec_macro_cmd},
204 {' ', N_("delete macr&O... "), 'O', menu_exec_macro_delete_cmd},
205 {' ', "", ' ', 0},
206 {' ', N_("insert &Date/time "), 'D', menu_date_cmd},
207 {' ', "", ' ', 0},
208 {' ', N_("format p&Aragraph M-p"), 'A', menu_format_paragraph},
209 {' ', N_("'ispell' s&Pell check C-p"), 'P', menu_ispell_cmd},
210 {' ', N_("sor&T... M-t"), 'T', menu_sort_cmd},
211 {' ', N_("'indent' &C Formatter F19"), 'C', menu_c_form_cmd},
212 {' ', N_("&Mail... "), 'M', menu_mail_cmd}
213 };
214
215 static menu_entry CmdMenuEmacs[] =
216 {
217 {' ', N_("&Goto line... M-l"), 'G', menu_goto_line},
218 {' ', "", ' ', 0},
219 {' ', N_("insert &Literal... C-q"), 'L', menu_lit_cmd},
220 {' ', "", ' ', 0},
221 {' ', N_("&Refresh screen C-l"), 'R', menu_refresh_cmd},
222 {' ', "", ' ', 0},
223 {' ', N_("&Start record macro C-r"), 'S', menu_begin_record_cmd},
224 {' ', N_("&Finish record macro... C-r"), 'F', menu_end_record_cmd},
225 {' ', N_("&Execute macro... C-x e, KEY"), 'E', menu_exec_macro_cmd},
226 {' ', N_("delete macr&O... "), 'o', menu_exec_macro_delete_cmd},
227 {' ', "", ' ', 0},
228 {' ', N_("insert &Date/time "), 'D', menu_date_cmd},
229 {' ', "", ' ', 0},
230 {' ', N_("format p&Aragraph M-p"), 'a', menu_format_paragraph},
231 {' ', N_("'ispell' s&Pell check M-$"), 'P', menu_ispell_cmd},
232 {' ', N_("sor&T... M-t"), 'T', menu_sort_cmd},
233 {' ', N_("'indent' &C Formatter F19"), 'C', menu_c_form_cmd}
234 };
235
236 extern void menu_save_mode_cmd (void);
237
238 static menu_entry OptMenu[] =
239 {
240 {' ', N_("&General... "), 'G', menu_options},
241 {' ', N_("&Save mode..."), 'S', menu_save_mode_cmd}
242 #if 0
243 {' ', N_("&Layout..."), 'L', menu_layout_cmd}
244 #endif
245 };
246
247 static menu_entry OptMenuEmacs[] =
248 {
249 {' ', N_("&General... "), 'G', menu_options},
250 {' ', N_("&Save mode..."), 'S', menu_save_mode_cmd}
251 #if 0
252 {' ', N_("&Layout..."), 'L', menu_layout_cmd}
253 #endif
254 };
255
256 #define menu_entries(x) sizeof(x)/sizeof(menu_entry)
257
258 Menu EditMenuBar[N_menus];
259
260 void edit_init_menu_normal (void)
261 {
262 EditMenuBar[0] = create_menu (_(" File "), FileMenu, menu_entries (FileMenu));
263 EditMenuBar[1] = create_menu (_(" Edit "), EditMenu, menu_entries (EditMenu));
264 EditMenuBar[2] = create_menu (_(" Sear/Repl "), SearReplMenu, menu_entries (SearReplMenu));
265 EditMenuBar[3] = create_menu (_(" Command "), CmdMenu, menu_entries (CmdMenu));
266 EditMenuBar[4] = create_menu (_(" Options "), OptMenu, menu_entries (OptMenu));
267 }
268
269 void edit_init_menu_emacs (void)
270 {
271 EditMenuBar[0] = create_menu (_(" File "), FileMenuEmacs, menu_entries (FileMenuEmacs));
272 EditMenuBar[1] = create_menu (_(" Edit "), EditMenuEmacs, menu_entries (EditMenuEmacs));
273 EditMenuBar[2] = create_menu (_(" Sear/Repl "), SearReplMenuEmacs, menu_entries (SearReplMenuEmacs));
274 EditMenuBar[3] = create_menu (_(" Command "), CmdMenuEmacs, menu_entries (CmdMenuEmacs));
275 EditMenuBar[4] = create_menu (_(" Options "), OptMenuEmacs, menu_entries (OptMenuEmacs));
276 }
277
278 void edit_done_menu (void)
279 {
280 int i;
281 for (i = 0; i < N_menus; i++)
282 destroy_menu (EditMenuBar[i]);
283 }
284
285
286 void edit_drop_menu_cmd (WEdit * e, int which)
287 {
288 if (edit_menubar->active)
289 return;
290 edit_menubar->active = 1;
291 edit_menubar->dropped = drop_menus;
292 edit_menubar->previous_selection = which >= 0 ? which : dlg_item_number (edit_dlg);
293 if (which >= 0)
294 edit_menubar->selected = which;
295 dlg_select_widget (edit_dlg, edit_menubar);
296 }
297
298
299 void edit_menu_cmd (WEdit * e)
300 {
301 edit_drop_menu_cmd (e, -1);
302 }
303
304
305 int edit_drop_hotkey_menu (WEdit * e, int key)
306 {
307 int m = 0;
308 switch (key) {
309 case ALT ('f'):
310 if (edit_key_emulation == EDIT_KEY_EMULATION_EMACS)
311 return 0;
312 m = 0;
313 break;
314 case ALT ('e'):
315 m = 1;
316 break;
317 case ALT ('s'):
318 m = 2;
319 break;
320 case ALT ('c'):
321 m = 3;
322 break;
323 case ALT ('o'):
324 m = 4;
325 break;
326 default:
327 return 0;
328 }
329
330 edit_drop_menu_cmd (e, m);
331 return 1;
332 }
333
334
335 #else /* !MIDNIGHT */
336
337
338 extern CWidget *wedit;
339
340 void CSetEditMenu (const char *ident)
341 {
342 wedit = CIdent (ident);
343 }
344
345 CWidget *CGetEditMenu (void)
346 {
347 return wedit;
348 }
349
350 static void menu_cmd (unsigned long i)
351 {
352 XEvent e;
353 if (wedit) {
354 memset (&e, 0, sizeof (XEvent));
355 e.type = EditorCommand;
356 e.xkey.keycode = i;
357 e.xkey.window = wedit->winid;
358 CFocus (wedit);
359 CSendEvent (&e);
360 }
361 }
362
363 void CEditMenuCommand (int i)
364 {
365 menu_cmd ((unsigned long) i);
366 }
367
368 static void menu_key (KeySym i, int state)
369 {
370 int cmd, ch;
371 if (edit_translate_key (0, i, state, &cmd, &ch)) {
372 if (cmd > 0)
373 menu_cmd (cmd);
374 }
375 }
376
377 static void menu_ctrl_key (unsigned long i)
378 {
379 menu_key ((KeySym) i, ControlMask);
380 }
381
382 void CDrawEditMenuButtons (const char *ident, Window parent, Window focus_return, int x, int y)
383 {
384 int d;
385
386 CDrawMenuButton (catstrs (ident, ".filemenu", 0), parent, focus_return, x, y, AUTO_WIDTH, AUTO_HEIGHT, 8,
387 /* The following are menu options. Do not change the key bindings (eg. C-o) and preserve '\t' */
388 _(" File "),
389 _("Open...\tC-o"), '~', menu_cmd, CK_Load,
390 _("New\tC-n"), '~', menu_cmd, CK_New,
391 "", ' ', 0, 0,
392 _("Save\tF2"), '~', menu_cmd, CK_Save,
393 _("Save as...\tF12"), '~', menu_cmd, CK_Save_As,
394 "", ' ', 0, 0,
395 _("Insert file...\tF15"), '~', menu_cmd, CK_Insert_File,
396 _("Copy to file...\tC-f"), '~', menu_cmd, CK_Save_Block
397 );
398 /* Tool hint */
399 CSetToolHint (catstrs (ident, ".filemenu", 0), _("Disk operations"));
400
401 CGetHintPos (&x, &d);
402
403 CDrawMenuButton (catstrs (ident, ".editmenu", 0), parent, focus_return, x, y, AUTO_WIDTH, AUTO_HEIGHT, 14,
404 _(" Edit "),
405 _("Toggle mark\tF3"), '~', menu_cmd, CK_Mark,
406 "", ' ', 0, 0,
407 _("Toggle insert/overwrite\tIns"), '~', menu_cmd, CK_Toggle_Insert,
408 "", ' ', 0, 0,
409 _("Copy block to cursor\tF5"), '~', menu_cmd, CK_Copy,
410 _("Move block to cursor\tF6"), '~', menu_cmd, CK_Move,
411 _("Delete block\tF8/C-Del"), '~', menu_cmd, CK_Remove,
412 "", ' ', 0, 0,
413 _("Copy block to clipbrd\tC-Ins"), '~', menu_cmd, CK_XStore,
414 _("Cut block to clipbrd\tS-Del"), '~', menu_cmd, CK_XCut,
415 _("Paste block from clipbrd\tS-Ins"), '~', menu_cmd, CK_XPaste,
416 _("Selection history\tM-Ins"), '~', menu_cmd, CK_Selection_History,
417 "", ' ', 0, 0,
418 _("Undo\tC-BackSpace"), '~', menu_cmd, CK_Undo
419 );
420 /* Tool hint */
421 CSetToolHint (catstrs (ident, ".editmenu", 0), _("Manipulating blocks of text"));
422
423 CGetHintPos (&x, &d);
424
425 CDrawMenuButton (catstrs (ident, ".searchmenu", 0), parent, focus_return, x, y, AUTO_WIDTH, AUTO_HEIGHT, 4,
426 _(" Srch/Replce "),
427 _("Search...\tF7"), '~', menu_cmd, CK_Find,
428 _("Search again\tF17"), '~', menu_cmd, CK_Find_Again,
429 _("Replace...\tF4"), '~', menu_cmd, CK_Replace,
430 _("Replace again\tF14"), '~', menu_cmd, CK_Replace_Again
431 );
432 /* Tool hint */
433 CSetToolHint (catstrs (ident, ".searchmenu", 0), _("Search for and replace text"));
434
435 CGetHintPos (&x, &d);
436
437 CDrawMenuButton (catstrs (ident, ".commandmenu", 0), parent, focus_return, x, y, AUTO_WIDTH, AUTO_HEIGHT, 9,
438 _(" Command "),
439 _("Goto line...\tM-l"), '~', menu_cmd, CK_Goto,
440 "", ' ', 0, 0,
441 _("Start record macro\tC-r"), '~', menu_cmd, CK_Begin_Record_Macro,
442 _("Finish record macro...\tC-r"), '~', menu_cmd, CK_End_Record_Macro,
443 _("Execute macro...\tC-a, KEY"), '~', menu_ctrl_key, XK_a,
444 _("Delete macro...\t"), '~', menu_cmd, CK_Delete_Macro,
445 "", ' ', 0, 0,
446 _("Insert date/time\tC-d"), '~', menu_cmd, CK_Date,
447 _("Format paragraph\tM-p"), '~', menu_cmd, CK_Paragraph_Format
448 );
449 /* Tool hint */
450 CSetToolHint (catstrs (ident, ".commandmenu", 0), _("Macros and internal commands"));
451 }
452
453
454 #endif /* !MIDNIGHT */
455