home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 6 File / 06-File.zip / mc454src.zip / mc-4.5.4.src / mc-4.5.4 / gtkedit / editmenu.c < prev    next >
C/C++ Source or Header  |  1999-01-04  |  16KB  |  462 lines

  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_markcol_cmd (void)        { menu_cmd (CK_Column_Mark); }
  89. void menu_ins_cmd (void)        { menu_cmd (CK_Toggle_Insert); }
  90. void menu_copy_cmd (void)        { menu_cmd (CK_Copy); }
  91. void menu_move_cmd (void)        { menu_cmd (CK_Move); }
  92. void menu_delete_cmd (void)        { menu_cmd (CK_Remove); }
  93. void menu_cut_cmd (void)        { menu_cmd (CK_Save_Block); }
  94. void menu_search_cmd (void)        { menu_cmd (CK_Find); }
  95. void menu_search_again_cmd (void)    { menu_cmd (CK_Find_Again); }
  96. void menu_replace_cmd (void)        { menu_cmd (CK_Replace); }
  97. void menu_begin_record_cmd (void)    { menu_cmd (CK_Begin_Record_Macro); }
  98. void menu_end_record_cmd (void)        { menu_cmd (CK_End_Record_Macro); }
  99. void menu_wrap_cmd (void)        { edit_wrap_cmd (); }
  100. void menu_exec_macro_cmd (void)        { menu_key (XCTRL ('a')); }
  101. void menu_exec_macro_delete_cmd (void)    { menu_cmd (CK_Delete_Macro); }
  102. void menu_c_form_cmd (void)        { menu_key (KEY_F (19)); }
  103. void menu_ispell_cmd (void)        { menu_cmd (CK_Pipe_Block (1)); }
  104. void menu_sort_cmd (void)        { menu_cmd (CK_Sort); }
  105. void menu_date_cmd (void)        { menu_cmd (CK_Date); }
  106. void menu_undo_cmd (void)        { menu_cmd (CK_Undo); }
  107. void menu_beginning_cmd (void)        { menu_cmd (CK_Beginning_Of_Text); }
  108. void menu_end_cmd (void)        { menu_cmd (CK_End_Of_Text); }
  109. void menu_refresh_cmd (void)        { menu_cmd (CK_Refresh); }
  110. void menu_goto_line (void)        { menu_cmd (CK_Goto); }
  111. void menu_lit_cmd (void)        { menu_key (XCTRL ('q')); }
  112. void menu_format_paragraph (void)    { menu_cmd (CK_Paragraph_Format); }
  113. void edit_options_dialog (void);
  114. void menu_options (void)        { edit_options_dialog (); }
  115.  
  116. static menu_entry FileMenu[] =
  117. {
  118.     {' ', N_("&Open/load...     C-o"), 'O', menu_load_cmd},
  119.     {' ', N_("&New              C-n"), 'N', menu_new_cmd},
  120.     {' ', "", ' ', 0},
  121.     {' ', N_("&Save              F2"), 'S', menu_save_cmd},
  122.     {' ', N_("save &As...       F12"), 'A', menu_save_as_cmd},
  123.     {' ', "", ' ', 0},
  124.     {' ', N_("&Insert file...   F15"), 'I', menu_insert_file_cmd},
  125.     {' ', N_("copy to &File...  C-f"), 'F', menu_cut_cmd},
  126.     {' ', "", ' ', 0},
  127.     {' ', N_("a&Bout...            "), 'B', edit_about_cmd},
  128.     {' ', "", ' ', 0},
  129.     {' ', N_("&Quit             F10"), 'Q', menu_quit_cmd}
  130.  };
  131.  
  132. static menu_entry FileMenuEmacs[] =
  133. {
  134.     {' ', N_("&Open/load...     C-o"), 'O', menu_load_cmd},
  135.     {' ', N_("&New            C-x k"), 'N', menu_new_cmd},
  136.     {' ', "", ' ', 0},
  137.     {' ', N_("&Save              F2"), 'S', menu_save_cmd},
  138.     {' ', N_("save &As...       F12"), 'A', menu_save_as_cmd},
  139.     {' ', "", ' ', 0},
  140.     {' ', N_("&Insert file...   F15"), 'I', menu_insert_file_cmd},
  141.     {' ', N_("copy to &File...     "), 'F', menu_cut_cmd},
  142.     {' ', "", ' ', 0},
  143.     {' ', N_("a&Bout...            "), 'B', edit_about_cmd},
  144.     {' ', "", ' ', 0},
  145.     {' ', N_("&Quit             F10"), 'Q', menu_quit_cmd}
  146. };
  147.  
  148. static menu_entry EditMenu[] =
  149. {
  150.     {' ', N_("&Toggle Mark       F3"), 'T', menu_mark_cmd},
  151.     {' ', N_("&Mark Columns    S-F3"), 'T', menu_markcol_cmd},
  152.     {' ', "", ' ', 0},
  153.     {' ', N_("toggle &Ins/overw Ins"), 'I', menu_ins_cmd},
  154.     {' ', "", ' ', 0},
  155.     {' ', N_("&Copy              F5"), 'C', menu_copy_cmd},
  156.     {' ', N_("&Move              F6"), 'M', menu_move_cmd},
  157.     {' ', N_("&Delete            F8"), 'D', menu_delete_cmd},
  158.     {' ', "", ' ', 0},
  159.     {' ', N_("&Undo             C-u"), 'U', menu_undo_cmd},
  160.     {' ', "", ' ', 0},
  161.     {' ', N_("&Beginning     C-PgUp"), 'B', menu_beginning_cmd},
  162.     {' ', N_("&End           C-PgDn"), 'E', menu_end_cmd}
  163. };
  164.  
  165. static menu_entry EditMenuEmacs[] =
  166. {
  167.     {' ', N_("&Toggle Mark       F3"), 'T', menu_mark_cmd},
  168.     {' ', N_("&Mark Columns    S-F3"), 'T', menu_markcol_cmd},
  169.     {' ', "", ' ', 0},
  170.     {' ', N_("toggle &Ins/overw Ins"), 'I', menu_ins_cmd},
  171.     {' ', "", ' ', 0},
  172.     {' ', N_("&Copy              F5"), 'C', menu_copy_cmd},
  173.     {' ', N_("&Move              F6"), 'M', menu_move_cmd},
  174.     {' ', N_("&Delete            F8"), 'D', menu_delete_cmd},
  175.     {' ', "", ' ', 0},
  176.     {' ', N_("&Undo             C-u"), 'U', menu_undo_cmd},
  177.     {' ', "", ' ', 0},
  178.     {' ', N_("&Beginning     C-PgUp"), 'B', menu_beginning_cmd},
  179.     {' ', N_("&End           C-PgDn"), 'E', menu_end_cmd}
  180. };
  181.  
  182. static menu_entry SearReplMenu[] =
  183. {
  184.     {' ', N_("&Search...         F7"), 'S', menu_search_cmd},
  185.     {' ', N_("search &Again     F17"), 'A', menu_search_again_cmd},
  186.     {' ', N_("&Replace...        F4"), 'R', menu_replace_cmd}
  187. };
  188.  
  189. static menu_entry SearReplMenuEmacs[] =
  190. {
  191.     {' ', N_("&Search...         F7"), 'S', menu_search_cmd},
  192.     {' ', N_("search &Again     F17"), 'A', menu_search_again_cmd},
  193.     {' ', N_("&Replace...        F4"), 'R', menu_replace_cmd}
  194. };
  195.  
  196. static menu_entry CmdMenu[] =
  197. {
  198.     {' ', N_("&Goto line...            M-l"), 'G', menu_goto_line},
  199.     {' ', "", ' ', 0},
  200.     {' ', N_("insert &Literal...       C-q"), 'L', menu_lit_cmd},
  201.     {' ', "", ' ', 0},
  202.     {' ', N_("&Refresh screen          C-l"), 'R', menu_refresh_cmd},
  203.     {' ', "", ' ', 0},
  204.     {' ', N_("&Start record macro      C-r"), 'S', menu_begin_record_cmd},
  205.     {' ', N_("&Finish record macro...  C-r"), 'F', menu_end_record_cmd},
  206.     {' ', N_("&Execute macro...   C-a, KEY"), 'E', menu_exec_macro_cmd},
  207.     {' ', N_("delete macr&O...            "), 'O', menu_exec_macro_delete_cmd},
  208.     {' ', "", ' ', 0},
  209.     {' ', N_("insert &Date/time           "), 'D', menu_date_cmd},
  210.     {' ', "", ' ', 0},
  211.     {' ', N_("format p&Aragraph        M-p"), 'A', menu_format_paragraph},
  212.     {' ', N_("'ispell' s&Pell check    C-p"), 'P', menu_ispell_cmd},
  213.     {' ', N_("sor&T...                 M-t"), 'T', menu_sort_cmd},
  214.     {' ', N_("'indent' &C Formatter    F19"), 'C', menu_c_form_cmd},
  215.     {' ', N_("&Mail...                    "), 'M', menu_mail_cmd}
  216. };
  217.  
  218. static menu_entry CmdMenuEmacs[] =
  219. {
  220.     {' ', N_("&Goto line...            M-l"), 'G', menu_goto_line},
  221.     {' ', "", ' ', 0},
  222.     {' ', N_("insert &Literal...       C-q"), 'L', menu_lit_cmd},
  223.     {' ', "", ' ', 0},
  224.     {' ', N_("&Refresh screen          C-l"), 'R', menu_refresh_cmd},
  225.     {' ', "", ' ', 0},
  226.     {' ', N_("&Start record macro      C-r"), 'S', menu_begin_record_cmd},
  227.     {' ', N_("&Finish record macro...  C-r"), 'F', menu_end_record_cmd},
  228.     {' ', N_("&Execute macro... C-x e, KEY"), 'E', menu_exec_macro_cmd},
  229.     {' ', N_("delete macr&O...            "), 'o', menu_exec_macro_delete_cmd},
  230.     {' ', "", ' ', 0},
  231.     {' ', N_("insert &Date/time           "), 'D', menu_date_cmd},
  232.     {' ', "", ' ', 0},
  233.     {' ', N_("format p&Aragraph        M-p"), 'a', menu_format_paragraph},
  234.     {' ', N_("'ispell' s&Pell check    M-$"), 'P', menu_ispell_cmd},
  235.     {' ', N_("sor&T...                 M-t"), 'T', menu_sort_cmd},
  236.     {' ', N_("'indent' &C Formatter    F19"), 'C', menu_c_form_cmd}
  237. };
  238.  
  239. extern void menu_save_mode_cmd (void);
  240.  
  241. static menu_entry OptMenu[] =
  242. {
  243.     {' ', N_("&General...  "), 'G', menu_options},
  244.     {' ', N_("&Save mode..."), 'S', menu_save_mode_cmd}
  245. #if 0
  246.     {' ', N_("&Layout..."),    'L', menu_layout_cmd}
  247. #endif
  248. };
  249.  
  250. static menu_entry OptMenuEmacs[] =
  251. {
  252.     {' ', N_("&General...  "), 'G', menu_options},
  253.     {' ', N_("&Save mode..."), 'S', menu_save_mode_cmd}
  254. #if 0
  255.     {' ', N_("&Layout..."),    'L', menu_layout_cmd}
  256. #endif
  257. };
  258.  
  259. #define menu_entries(x) sizeof(x)/sizeof(menu_entry)
  260.  
  261. Menu EditMenuBar[N_menus];
  262.  
  263. void edit_init_menu_normal (void)
  264. {
  265.     EditMenuBar[0] = create_menu (_(" File "), FileMenu, menu_entries (FileMenu));
  266.     EditMenuBar[1] = create_menu (_(" Edit "), EditMenu, menu_entries (EditMenu));
  267.     EditMenuBar[2] = create_menu (_(" Sear/Repl "), SearReplMenu, menu_entries (SearReplMenu));
  268.     EditMenuBar[3] = create_menu (_(" Command "), CmdMenu, menu_entries (CmdMenu));
  269.     EditMenuBar[4] = create_menu (_(" Options "), OptMenu, menu_entries (OptMenu));
  270. }
  271.  
  272. void edit_init_menu_emacs (void)
  273. {
  274.     EditMenuBar[0] = create_menu (_(" File "), FileMenuEmacs, menu_entries (FileMenuEmacs));
  275.     EditMenuBar[1] = create_menu (_(" Edit "), EditMenuEmacs, menu_entries (EditMenuEmacs));
  276.     EditMenuBar[2] = create_menu (_(" Sear/Repl "), SearReplMenuEmacs, menu_entries (SearReplMenuEmacs));
  277.     EditMenuBar[3] = create_menu (_(" Command "), CmdMenuEmacs, menu_entries (CmdMenuEmacs));
  278.     EditMenuBar[4] = create_menu (_(" Options "), OptMenuEmacs, menu_entries (OptMenuEmacs));
  279. }
  280.  
  281. void edit_done_menu (void)
  282. {
  283.     int i;
  284.     for (i = 0; i < N_menus; i++)
  285.     destroy_menu (EditMenuBar[i]);
  286. }
  287.  
  288.  
  289. void edit_drop_menu_cmd (WEdit * e, int which)
  290. {
  291.     if (edit_menubar->active)
  292.     return;
  293.     edit_menubar->active = 1;
  294.     edit_menubar->dropped = drop_menus;
  295.     edit_menubar->previous_selection = which >= 0 ? which : dlg_item_number (edit_dlg);
  296.     if (which >= 0)
  297.     edit_menubar->selected = which;
  298.     dlg_select_widget (edit_dlg, edit_menubar);
  299. }
  300.  
  301.  
  302. void edit_menu_cmd (WEdit * e)
  303. {
  304.     edit_drop_menu_cmd (e, -1);
  305. }
  306.  
  307.  
  308. int edit_drop_hotkey_menu (WEdit * e, int key)
  309. {
  310.     int m = 0;
  311.     switch (key) {
  312.     case ALT ('f'):
  313.     if (edit_key_emulation == EDIT_KEY_EMULATION_EMACS)
  314.         return 0;
  315.     m = 0;
  316.     break;
  317.     case ALT ('e'):
  318.     m = 1;
  319.     break;
  320.     case ALT ('s'):
  321.     m = 2;
  322.     break;
  323.     case ALT ('c'):
  324.     m = 3;
  325.     break;
  326.     case ALT ('o'):
  327.     m = 4;
  328.     break;
  329.     default:
  330.     return 0;
  331.     }
  332.  
  333.     edit_drop_menu_cmd (e, m);
  334.     return 1;
  335. }
  336.  
  337.  
  338. #else                /* !MIDNIGHT */
  339.  
  340.  
  341. extern CWidget *wedit;
  342.  
  343. void CSetEditMenu (const char *ident)
  344. {
  345.     wedit = CIdent (ident);
  346. }
  347.  
  348. CWidget *CGetEditMenu (void)
  349. {
  350.     return wedit;
  351. }
  352.  
  353. static void menu_cmd (unsigned long i)
  354. {
  355.     XEvent e;
  356.     if (wedit) {
  357.     memset (&e, 0, sizeof (XEvent));
  358.     e.type = EditorCommand;
  359.     e.xkey.keycode = i;
  360.     e.xkey.window = wedit->winid;
  361.     CFocus (wedit);
  362.     CSendEvent (&e);
  363.     }
  364. }
  365.  
  366. void CEditMenuCommand (int i)
  367. {
  368.     menu_cmd ((unsigned long) i);
  369. }
  370.  
  371. static void menu_key (KeySym i, int state)
  372. {
  373.     int cmd, ch;
  374.     if (edit_translate_key (0, i, state, &cmd, &ch)) {
  375.     if (cmd > 0)
  376.         menu_cmd (cmd);
  377.     }
  378. }
  379.  
  380. static void menu_ctrl_key (unsigned long i)
  381. {
  382.     menu_key ((KeySym) i, ControlMask);
  383. }
  384.  
  385. void CDrawEditMenuButtons (const char *ident, Window parent, Window focus_return, int x, int y)
  386. {
  387.     int d;
  388.  
  389.     CDrawMenuButton (catstrs (ident, ".filemenu", 0), parent, focus_return, x, y, AUTO_WIDTH, AUTO_HEIGHT, 8,
  390. /* The following are menu options. Do not change the key bindings (eg. C-o) and preserve '\t' */
  391.              _(" File "),
  392.              _("Open...\tC-o"), '~', menu_cmd, CK_Load,
  393.              _("New\tC-n"), '~', menu_cmd, CK_New,
  394.              "", ' ', 0, 0,
  395.              _("Save\tF2"), '~', menu_cmd, CK_Save,
  396.              _("Save as...\tF12"), '~', menu_cmd, CK_Save_As,
  397.              "", ' ', 0, 0,
  398.              _("Insert file...\tF15"), '~', menu_cmd, CK_Insert_File,
  399.              _("Copy to file...\tC-f"), '~', menu_cmd, CK_Save_Block
  400.     );
  401. /* Tool hint */
  402.     CSetToolHint (catstrs (ident, ".filemenu", 0), _("Disk operations"));
  403.  
  404.     CGetHintPos (&x, &d);
  405.  
  406.     CDrawMenuButton (catstrs (ident, ".editmenu", 0), parent, focus_return, x, y, AUTO_WIDTH, AUTO_HEIGHT, 15,
  407.              _(" Edit "),
  408.              _("Toggle mark\tF3"), '~', menu_cmd, CK_Mark,
  409.              _("Toggle mark columns\tC-b"), '~', menu_cmd, CK_Column_Mark,
  410.              "", ' ', 0, 0,
  411.              _("Toggle insert/overwrite\tIns"), '~', menu_cmd, CK_Toggle_Insert,
  412.              "", ' ', 0, 0,
  413.              _("Copy block to cursor\tF5"), '~', menu_cmd, CK_Copy,
  414.              _("Move block to cursor\tF6"), '~', menu_cmd, CK_Move,
  415.              _("Delete block\tF8/C-Del"), '~', menu_cmd, CK_Remove,
  416.              "", ' ', 0, 0,
  417.              _("Copy block to clipbrd\tC-Ins"), '~', menu_cmd, CK_XStore,
  418.              _("Cut block to clipbrd\tS-Del"), '~', menu_cmd, CK_XCut,
  419.              _("Paste block from clipbrd\tS-Ins"), '~', menu_cmd, CK_XPaste,
  420.              _("Selection history\tM-Ins"), '~', menu_cmd, CK_Selection_History,
  421.              "", ' ', 0, 0,
  422.              _("Undo\tC-BackSpace"), '~', menu_cmd, CK_Undo
  423.     );
  424. /* Tool hint */
  425.     CSetToolHint (catstrs (ident, ".editmenu", 0), _("Manipulating blocks of text"));
  426.  
  427.     CGetHintPos (&x, &d);
  428.  
  429.     CDrawMenuButton (catstrs (ident, ".searchmenu", 0), parent, focus_return, x, y, AUTO_WIDTH, AUTO_HEIGHT, 4,
  430.              _(" Srch/Replce "),
  431.              _("Search...\tF7"), '~', menu_cmd, CK_Find,
  432.              _("Search again\tF17"), '~', menu_cmd, CK_Find_Again,
  433.              _("Replace...\tF4"), '~', menu_cmd, CK_Replace,
  434.              _("Replace again\tF14"), '~', menu_cmd, CK_Replace_Again
  435.     );
  436. /* Tool hint */
  437.     CSetToolHint (catstrs (ident, ".searchmenu", 0), _("Search for and replace text"));
  438.  
  439.     CGetHintPos (&x, &d);
  440.  
  441.     CDrawMenuButton (catstrs (ident, ".commandmenu", 0), parent, focus_return, x, y, AUTO_WIDTH, AUTO_HEIGHT, 11,
  442.              _(" Command "),
  443.              _("Goto line...\tM-l"), '~', menu_cmd, CK_Goto,
  444.              "", ' ', 0, 0,
  445.              _("Start record macro\tC-r"), '~', menu_cmd, CK_Begin_Record_Macro,
  446.              _("Finish record macro...\tC-r"), '~', menu_cmd, CK_End_Record_Macro,
  447.              _("Execute macro...\tC-a, KEY"), '~', menu_ctrl_key, XK_a,
  448.              _("Delete macro...\t"), '~', menu_cmd, CK_Delete_Macro,
  449.              "", ' ', 0, 0,
  450.              _("Insert date/time\tC-d"), '~', menu_cmd, CK_Date,
  451.              _("Format paragraph\tM-p"), '~', menu_cmd, CK_Paragraph_Format,
  452.              "", ' ', 0, 0,
  453.              _("Refresh display\tC-l"), '~', menu_cmd, CK_Refresh
  454.     );
  455. /* Tool hint */
  456.     CSetToolHint (catstrs (ident, ".commandmenu", 0), _("Macros and internal commands"));
  457. }
  458.  
  459.  
  460. #endif                /* !MIDNIGHT */
  461.  
  462.