3 * ==================================================
5 * LyX, The Document Processor
7 * Copyright 1995 Matthias Ettrich
8 * Copyright 1995-1999 The LyX Team.
10 * ==================================================
13 /* This file contains all the menu and submenu declarations.
14 The call backs are in lyx_cb.C */
18 * XFORMS can handle 10 (more with the new xforms, but not unlimited)
19 * popups at the same time
20 * so when you are finished looking at a pup free it (fl_freepup)
26 #pragma implementation
35 #include "spellchecker.h"
36 #include "support/filetools.h"
38 #include "lastfiles.h"
39 #include "bufferlist.h"
40 #include "lyx_gui_misc.h"
41 #include "minibuffer.h"
42 #include "lyxscreen.h"
49 extern FD_form_screen *fd_form_screen;
50 extern BufferList bufferlist;
52 // I would really prefere to see most or all of these 'extern's disappear.
53 // Their commands should be called through LyXFunc (IMO). (Lgb)
55 extern void MenuLayoutSave();
56 extern void ShowCredits();
57 extern void ShowCopyright();
58 extern void show_symbols_form(LyXFunc*);
59 extern void BeforeChange();
60 extern void ProhibitInput();
61 extern void AllowInput();
62 extern void OpenStuff();
63 extern void ToggleFloat();
64 extern void AllFloats(char flag, char figmar);
65 extern void LaTeXOptions();
67 Menus::Menus(LyXView *view,int air)
71 // deactivate the menu accelerators
72 fl_set_object_shortcut(menu_file, "", 1);
73 fl_set_object_shortcut(menu_file2, "", 1);
74 fl_set_object_shortcut(menu_edit, "", 1);
75 fl_set_object_shortcut(menu_layout, "", 1);
76 fl_set_object_shortcut(menu_math, "", 1);
77 fl_set_object_shortcut(menu_insert, "", 1);
78 fl_set_object_shortcut(menu_options, "", 1);
79 fl_set_object_shortcut(menu_options2, "", 1);
80 fl_set_object_shortcut(menu_buffer, "", 1);
81 fl_set_object_shortcut(menu_help, "", 1);
82 fl_set_object_shortcut(menu_help2, "", 1);
87 inline BufferView *Menus::currentView()
89 return _view->currentView();
93 void Menus::showMenus()
95 fl_hide_object(menu_grp2);
96 fl_show_object(menu_grp1);
100 void Menus::hideMenus()
102 fl_hide_object(menu_grp1);
103 fl_show_object(menu_grp2);
107 void Menus::openByName(string const &menuName)
108 /* Opens the visible menu of given name, or simply does nothing
109 when the name is not known. NOTE THE EXTREMELY STUPID
110 IMPLEMENTATION! :-) There are probably hundred ways to do
111 this better, for instance, by scanning the menu objects and
112 testing for the given name. I leave this as an exercise for an
113 experienced GG (GUI Guy/Girl). RVDK_PATCH_5. */
115 if (menu_file->visible) {
116 if (menuName == _("File")) ShowFileMenu(menu_file, 0);
117 else if (menuName == _("Edit")) ShowEditMenu(menu_edit, 0);
118 else if (menuName == _("Layout")) ShowLayoutMenu(menu_layout, 0);
119 else if (menuName == _("Insert")) ShowInsertMenu(menu_insert, 0);
120 else if (menuName == _("Math")) ShowMathMenu(menu_math, 0);
121 else if (menuName == _("Options")) ShowOptionsMenu(menu_options, 0);
122 else if (menuName == _("Documents")) ShowBufferMenu(menu_buffer, 0);
123 else if (menuName == _("Help")) ShowHelpMenu(menu_help, 0);
124 else lyxerr.print("The menu '" + menuName + "' is not available.");
126 if (menuName == _("File")) ShowFileMenu2(menu_file2, 0);
127 else if (menuName == _("Options")) ShowOptionsMenu(menu_options2, 0);
128 else if (menuName == _("Help")) ShowHelpMenu(menu_help2, 0);
129 else lyxerr.print("The menu '" + menuName + "' is not available.");
134 void Menus::create_menus(int air)
136 FL_FORM *form = _view->getForm();
138 // Here I'd really like to see code like:
142 const int MENU_LABEL_SIZE = FL_NORMAL_SIZE;
143 const int mheight = 30;
144 const int mbheight= 22;
145 // where to place the menubar?
146 const int yloc = (mheight - mbheight)/2; //air + bw;
147 const int mbadd = 20; // menu button add (to width)
151 obj = fl_add_frame(FL_UP_FRAME,0,0,form->w,mheight,"");
152 fl_set_object_resize(obj, FL_RESIZE_ALL);
153 fl_set_object_gravity(obj, NorthWestGravity, NorthEastGravity);
155 menu_grp1 = fl_bgn_group();
159 fl_add_button(FL_TOUCH_BUTTON,
161 fl_get_string_width(FL_BOLD_STYLE,
164 strlen(_("File"))) + mbadd,
166 moffset += obj->w + air;
167 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
168 fl_set_object_callback(obj,ShowFileMenu, 0);
169 obj->u_ldata = (long)this;
173 fl_add_button(FL_TOUCH_BUTTON,
175 fl_get_string_width(FL_BOLD_STYLE,
178 strlen(_("Edit"))) + mbadd,
180 moffset += obj->w + air;
181 fl_set_object_shortcut(obj, scex(_("MB|#E")),1);
182 fl_set_object_callback(obj,ShowEditMenu,0);
183 obj->u_ldata = (long) this;
185 // Layout menu button
187 fl_add_button(FL_TOUCH_BUTTON,
189 fl_get_string_width(FL_BOLD_STYLE,
192 strlen(_("Layout"))) + mbadd,
193 mbheight,_("Layout"));
194 moffset += obj->w + air;
195 fl_set_object_shortcut(obj, scex(_("MB|#L")), 1);
196 fl_set_object_callback(obj,ShowLayoutMenu,0);
197 obj->u_ldata = (long) this;
199 // Insert menu button button
201 fl_add_button(FL_TOUCH_BUTTON,
203 fl_get_string_width(FL_BOLD_STYLE,
206 strlen(_("Insert"))) + mbadd,
207 mbheight,_("Insert"));
208 moffset += obj->w + air;
209 fl_set_object_shortcut(obj, scex(_("MB|#I")), 1);
210 fl_set_object_callback(obj,ShowInsertMenu,0);
211 obj->u_ldata = (long) this;
215 fl_add_button(FL_TOUCH_BUTTON,
217 fl_get_string_width(FL_BOLD_STYLE,
220 strlen(_("Math"))) + mbadd,
222 moffset += obj->w + air;
223 fl_set_object_shortcut(obj, scex(_("MB|#M")), 1);
224 fl_set_object_callback(obj,ShowMathMenu,0);
225 obj->u_ldata = (long) this;
227 // Options menu button
229 fl_add_button(FL_TOUCH_BUTTON,
231 fl_get_string_width(FL_BOLD_STYLE,
234 strlen(_("Options"))) + mbadd,
235 mbheight,_("Options"));
236 moffset += obj->w + air;
237 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
238 fl_set_object_callback(obj,ShowOptionsMenu, 0);
239 obj->u_ldata = (long) this;
241 // Documents menu button
243 fl_add_button(FL_TOUCH_BUTTON,
245 fl_get_string_width(FL_BOLD_STYLE,
248 strlen(_("Documents"))) + mbadd,
249 mbheight,_("Documents"));
250 moffset += obj->w + air;
251 fl_set_object_shortcut(obj, scex(_("MB|#D")), 1);
252 fl_set_object_callback(obj,ShowBufferMenu,0);
253 obj->u_ldata = (long) this;
257 fl_add_button(FL_TOUCH_BUTTON,
259 fl_get_string_width(FL_BOLD_STYLE,
262 strlen(_("Help"))) + mbadd,
264 moffset += obj->w + air;
265 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
266 fl_set_object_callback(obj,ShowHelpMenu,0);
267 obj->u_ldata = (long) this;
271 // Set the menu buttons atrributes.
272 // Due to a bug in xforms we cant do this only an the group.
273 obj = menu_grp1->next;
275 fl_set_object_boxtype(obj, FL_FLAT_BOX);
276 fl_set_object_color(obj,FL_MCOL, FL_MCOL);
277 fl_set_object_lsize(obj,MENU_LABEL_SIZE);
278 fl_set_object_lstyle(obj,FL_BOLD_STYLE);
279 fl_set_object_resize(obj, FL_RESIZE_ALL);
280 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
282 } while (obj != 0 && obj->objclass != FL_END_GROUP);
286 menu_grp2 = fl_bgn_group();
290 fl_add_button(FL_TOUCH_BUTTON,
292 fl_get_string_width(FL_BOLD_STYLE,
295 strlen(_("File"))) + mbadd,
297 moffset += obj->w + air;
298 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
299 fl_set_object_callback(obj,ShowFileMenu2, 0);
300 obj->u_ldata = (long)this;
302 // Options menu button
303 menu_options2 = obj =
304 fl_add_button(FL_TOUCH_BUTTON,
306 fl_get_string_width(FL_BOLD_STYLE,
309 strlen(_("Options"))) +mbadd,
310 mbheight,_("Options"));
311 moffset += obj->w + air;
312 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
313 fl_set_object_callback(obj,ShowOptionsMenu, 0);
314 obj->u_ldata = (long) this;
318 fl_add_button(FL_TOUCH_BUTTON,
320 fl_get_string_width(FL_BOLD_STYLE,
323 strlen(_("Help"))) + mbadd,
325 moffset += obj->w + air;
326 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
327 fl_set_object_callback(obj,ShowHelpMenu,0);
328 obj->u_ldata = (long) this;
332 // Set the menu buttons atrributes.
333 // Due to a bug in xforms we cant do this only an the group.
334 obj = menu_grp2->next;
336 fl_set_object_boxtype(obj, FL_FLAT_BOX);
337 fl_set_object_color(obj,FL_MCOL, FL_MCOL);
338 fl_set_object_lsize(obj,MENU_LABEL_SIZE);
339 fl_set_object_lstyle(obj,FL_BOLD_STYLE);
340 fl_set_object_resize(obj, FL_RESIZE_ALL);
341 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
343 } while (obj != 0 && obj->objclass != FL_END_GROUP);
347 void Menus::ScreenOptions()
349 // this is not very nice....
350 fl_set_input(fd_form_screen->input_roman,
351 lyxrc->roman_font_name.c_str());
352 fl_set_input(fd_form_screen->input_sans,
353 lyxrc->sans_font_name.c_str());
354 fl_set_input(fd_form_screen->input_typewriter,
355 lyxrc->typewriter_font_name.c_str());
356 fl_set_input(fd_form_screen->input_font_norm,
357 lyxrc->font_norm.c_str());
359 sprintf(tmpstring,"%d", lyxrc->zoom);
360 fl_set_input(fd_form_screen->intinput_size, tmpstring);
361 if (fd_form_screen->form_screen->visible) {
362 fl_raise_form(fd_form_screen->form_screen);
364 fl_show_form(fd_form_screen->form_screen,
365 FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
366 _("Screen Options"));
372 // Here comes all the menu callbacks.
375 void Menus::ShowFileMenu(FL_OBJECT *ob, long)
377 Menus *men = (Menus*) ob->u_ldata;
379 // Regarding the pseudo-menu-button:
380 // ok, ok this is a hack. It would be better to use the menus of the
381 // xforms 0.8 library. but then all popups have to be defined all the
382 // time, code rewriting would be necessary and contex-depending menus
383 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
384 // course it would be more proper (and little faster). So if anybody
385 // likes to do the cleanup, just do it. Matthias
387 // set the pseudo menu-button
388 fl_set_object_boxtype(ob, FL_UP_BOX);
389 fl_set_button(ob, 0);
390 fl_redraw_object(ob);
392 Buffer *tmpbuffer = men->_view->currentBuffer();
393 LyXFunc *tmpfunc = men->_view->getLyXFunc();
395 bool LinuxDoc = tmpbuffer->isLinuxDoc();
396 bool DocBook = tmpbuffer->isDocBook();
397 bool Literate = tmpbuffer->isLiterate();
401 int SubFileImport =fl_defpup(FL_ObjWin(ob),
404 "|Ascii Text as Lines...%x31"
405 "|Ascii Text as Paragraphs%x32"
407 fl_setpup_shortcut(SubFileImport, 30, scex(_("FIM|Ll#l#L")));
408 fl_setpup_shortcut(SubFileImport, 31, scex(_("FIM|Aa#a#A")));
409 fl_setpup_shortcut(SubFileImport, 32, scex(_("FIM|Pp#p#P")));
410 fl_setpup_shortcut(SubFileImport, 33, scex(_("FIM|Nn#n#N")));
414 // remember to make this handle linuxdoc too.
415 // and now docbook also.
416 int SubFileExport = 0;
417 if (!LinuxDoc && !DocBook)
418 SubFileExport=fl_defpup(FL_ObjWin(ob),
422 "|as PostScript...%x42"
423 "|as Ascii Text...%x43"
426 SubFileExport=fl_defpup(FL_ObjWin(ob),
428 "|as LinuxDoc...%x40"
430 "|as PostScript...%x42"
431 "|as Ascii Text...%x43"));
433 SubFileExport=fl_defpup(FL_ObjWin(ob),
437 "|as PostScript...%x42"
438 "|as Ascii Text...%x43"));
440 fl_setpup_shortcut(SubFileExport, 40, scex(_("FEX|Ll#l#L")));
441 fl_setpup_shortcut(SubFileExport, 41, scex(_("FEX|Dd#d#D")));
442 fl_setpup_shortcut(SubFileExport, 42, scex(_("FEX|Pp#p#P")));
443 fl_setpup_shortcut(SubFileExport, 43, scex(_("FEX|Tt#t#T")));
444 fl_setpup_shortcut(SubFileExport, 44, scex(_("FEX|mM#m#M")));
446 int FileMenu = fl_defpup(FL_ObjWin(ob),
448 "|New from template..."
462 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
463 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
464 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
465 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Cc#c#C")));
466 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|Ss#s#S")));
467 fl_setpup_shortcut(FileMenu, 6, scex(_("FM|Aa#a#A")));
468 fl_setpup_shortcut(FileMenu, 7, scex(_("FM|Rr#r#R")));
469 fl_setpup_shortcut(FileMenu, 8, scex(_("FM|dD#d#D")));
470 fl_setpup_shortcut(FileMenu, 9, scex(_("FM|wW#w#W")));
471 fl_setpup_shortcut(FileMenu,10, scex(_("FM|vV#v#V")));
472 fl_setpup_shortcut(FileMenu,11, scex(_("FM|Uu#u#U")));
473 fl_setpup_shortcut(FileMenu,12, scex(_("FM|Bb#b#B")));
474 fl_setpup_shortcut(FileMenu,13, scex(_("FM|Pp#p#P")));
475 fl_setpup_shortcut(FileMenu,14, scex(_("FM|Ff#f#F")));
477 // These commands are disabled when the corresponding programs
478 // are not installed. I simply grey them out, since I do not
479 // want to change their number (JMarc)
480 bool hasLaTeX = lyxrc->latex_command != "none";
482 if (!hasLaTeX || lyxrc->view_dvi_command == "none")
483 fl_setpup_mode(FileMenu, 8, FL_PUP_GREY);
485 if (!hasLaTeX || lyxrc->view_ps_command == "none")
486 fl_setpup_mode(FileMenu, 9, FL_PUP_GREY);
489 fl_setpup_mode(FileMenu, 10, FL_PUP_GREY);
490 fl_setpup_mode(FileMenu, 11, FL_PUP_GREY);
493 if (lyxrc->literate_command == "none" || ! Literate)
494 fl_setpup_mode(FileMenu, 12, FL_PUP_GREY);
496 if (!hasLaTeX || lyxrc->print_command == "none")
497 fl_setpup_mode(FileMenu, 13, FL_PUP_GREY);
499 if (!hasLaTeX || lyxrc->fax_command == "none")
500 fl_setpup_mode(FileMenu, 14, FL_PUP_GREY);
502 bool hasReLyX = lyxrc->relyx_command != "none";
504 // Disable import LaTeX and Noweb
505 fl_setpup_mode(SubFileImport, 30, FL_PUP_GREY);
506 fl_setpup_mode(SubFileImport, 33, FL_PUP_GREY);
510 // Disable export dvi and export postscript
511 fl_setpup_mode(SubFileExport, 41, FL_PUP_GREY);
512 fl_setpup_mode(SubFileExport, 42, FL_PUP_GREY);
514 // xgettext:no-c-format
515 fl_addtopup(FileMenu,_("|Import%m"), SubFileImport);
516 // xgettext:no-c-format
517 fl_addtopup(FileMenu,_("|Export%m%l"), SubFileExport);
518 // xgettext:no-c-format
519 fl_addtopup(FileMenu,_("|Exit%l"));
520 fl_setpup_shortcut(FileMenu, 15, scex(_("FM|Ii#i#I")));
521 fl_setpup_shortcut(FileMenu, 16, scex(_("FM|Ee#e#E")));
522 fl_setpup_shortcut(FileMenu, 17, scex(_("FM|xX#x#X")));
524 // make the lastfiles menu
525 LastFiles_Iter liter(*lastfiles); // :-)
528 while( ii < 10 && !(filname = liter()).empty() ) {
531 string relbuf = MakeDisplayPath(filname,30);
534 tmp += ". " + relbuf;
535 tmp2 += string("#") + tostr(ii);
536 fl_addtopup(FileMenu, tmp.c_str());
537 fl_setpup_shortcut(FileMenu, 18 - 1 + ii, tmp2.c_str());
543 men->_view->getForm()->x + ob->x,
544 men->_view->getForm()->y + ob->y + ob->h + 10);
545 int choice = fl_dopup(FileMenu);
548 // set the pseudo menu-button back
549 fl_set_object_boxtype(ob, FL_FLAT_BOX);
550 fl_redraw_object(ob);
553 case -1: case 0: // we won't do anything
555 case 1: tmpfunc->Dispatch(LFUN_MENUNEW); break;
556 case 2: tmpfunc->Dispatch(LFUN_MENUNEWTMPLT); break;
557 case 3: tmpfunc->Dispatch(LFUN_MENUOPEN); break;
558 case 4: tmpfunc->Dispatch(LFUN_CLOSEBUFFER); break;
559 case 5: tmpfunc->Dispatch(LFUN_MENUWRITE); break;
560 case 6: tmpfunc->Dispatch(LFUN_MENUWRITEAS); break;
561 case 7: tmpfunc->Dispatch(LFUN_MENURELOAD); break;
562 case 8: tmpfunc->Dispatch(LFUN_PREVIEW); break;
563 case 9: tmpfunc->Dispatch(LFUN_PREVIEWPS); break;
564 case 10: tmpfunc->Dispatch(LFUN_RUNLATEX); break;
565 case 11: tmpfunc->Dispatch(LFUN_RUNDVIPS); break;
566 case 12: tmpfunc->Dispatch(LFUN_BUILDPROG); break;
567 case 13: tmpfunc->Dispatch(LFUN_MENUPRINT); break;
568 case 14: tmpfunc->Dispatch(LFUN_FAX); break;
569 case 15: // import menu
570 case 30: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
572 case 31: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
574 case 32: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
576 case 33: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
578 case 16: // export menu
580 if (!LinuxDoc && !DocBook)
581 tmpfunc->Dispatch(LFUN_EXPORT, "latex");
583 tmpfunc->Dispatch(LFUN_EXPORT, "linuxdoc");
585 tmpfunc->Dispatch(LFUN_EXPORT, "docbook");
587 case 41: tmpfunc->Dispatch(LFUN_EXPORT, "dvi");
589 case 42: tmpfunc->Dispatch(LFUN_EXPORT, "postscript");
591 case 43: tmpfunc->Dispatch(LFUN_EXPORT, "ascii");
593 case 44: tmpfunc->Dispatch(LFUN_EXPORT, "custom");
595 case 17: tmpfunc->Dispatch(LFUN_QUIT); break;
597 case 18: // The first item with lastfiles.
599 men->currentView()->setBuffer(bufferlist.loadLyXFile(liter[choice-18])); // ok one more
602 fl_freepup(SubFileImport);
603 fl_freepup(SubFileExport);
604 fl_freepup(FileMenu);
610 void Menus::ShowFileMenu2(FL_OBJECT *ob, long)
612 Menus *men = (Menus*) ob->u_ldata;
614 // Regarding the pseudo-menu-button:
615 // ok, ok this is a hack. It would be better to use the menus of the
616 // xforms 0.8 library. but then all popups have to be defined all the
617 // time, code rewriting would be necessary and contex-depending menus
618 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
619 // course it would be more proper (and little faster). So if anybody
620 // likes to do the cleanup, just do it. Matthias
622 // set the pseudo menu-button
623 fl_set_object_boxtype(ob, FL_UP_BOX);
624 fl_set_button(ob, 0);
625 fl_redraw_object(ob);
627 LyXFunc *tmpfunc = men->_view->getLyXFunc();
631 int SubFileImport = fl_defpup(FL_ObjWin(ob),
634 "|Ascii Text as Lines...%x16"
635 "|Ascii Text as Paragraphs...%x17"
637 fl_setpup_shortcut(SubFileImport, 15, scex(_("FIM|Ll#l#L")));
638 fl_setpup_shortcut(SubFileImport, 16, scex(_("FIM|Aa#a#A")));
639 fl_setpup_shortcut(SubFileImport, 17, scex(_("FIM|Pp#p#P")));
640 fl_setpup_shortcut(SubFileImport, 18, scex(_("FIM|Nn#n#N")));
642 bool hasReLyX = lyxrc->relyx_command != "none";
644 // Disable import LaTeX and Noweb
645 fl_setpup_mode(SubFileImport, 15, FL_PUP_GREY);
646 fl_setpup_mode(SubFileImport, 18, FL_PUP_GREY);
649 // This can be done cleaner later.
650 int FileMenu = fl_defpup(FL_ObjWin(ob),
652 "|New from template..."
655 "|Exit%l"), SubFileImport);
656 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
657 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
658 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
659 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Ii#i#I")));
660 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|xX#x#X")));
662 // make the lastfiles menu
663 LastFiles_Iter liter(*lastfiles); // :-)
666 while( ii < 10 && !(filname = liter()).empty() ) {
669 string relbuf = MakeDisplayPath(filname,30);
672 tmp += ". " + relbuf;
673 tmp2 += string("#") + tostr(ii);
674 fl_addtopup(FileMenu, tmp.c_str());
675 fl_setpup_shortcut(FileMenu, 6 - 1 + ii, tmp2.c_str());
681 men->_view->getForm()->x + ob->x,
682 men->_view->getForm()->y + ob->y + ob->h + 10);
683 int choice = fl_dopup(FileMenu);
686 // set the pseudo menu-button back
687 fl_set_object_boxtype(ob, FL_FLAT_BOX);
688 fl_redraw_object(ob);
691 case -1: case 0: // we won't do anything
694 tmpfunc->Dispatch(LFUN_MENUNEW);
697 tmpfunc->Dispatch(LFUN_MENUNEWTMPLT);
700 tmpfunc->Dispatch(LFUN_MENUOPEN);
702 case 4: // import menu
703 case 15: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
705 case 16: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
707 case 17: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
709 case 18: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
712 tmpfunc->Dispatch(LFUN_QUIT);
716 men->currentView()->setBuffer(bufferlist.loadLyXFile(liter[choice-6]));
720 fl_freepup(SubFileImport);
721 fl_freepup(FileMenu);
727 void Menus::ShowEditMenu(FL_OBJECT *ob, long)
729 Menus *men = (Menus*) ob->u_ldata;
731 // set the pseudo menu-button
732 fl_set_object_boxtype(ob, FL_UP_BOX);
733 fl_set_button(ob, 0);
734 fl_redraw_object(ob);
736 Buffer *tmpbuffer = men->_view->currentBuffer();
737 LyXFunc *tmpfunc = men->_view->getLyXFunc();
739 // Floats & Insets submenu
740 int SubEditFloats=fl_defpup(FL_ObjWin(ob),
741 _("Floats & Insets%t"
744 "|Open All Footnotes/Margin Notes%x23"
745 "|Close All Footnotes/Margin Notes%x24"
746 "|Open All Figures/Tables%x25"
747 "|Close All Figures/Tables%x26%l"
748 "|Remove all Error Boxes%x27")
750 fl_setpup_shortcut(SubEditFloats, 21, scex(_("EMF|Oo#o#O")));
751 fl_setpup_shortcut(SubEditFloats, 22, scex(_("EMF|Mm#m#M")));
752 fl_setpup_shortcut(SubEditFloats, 23, scex(_("EMF|Aa#a#A")));
753 fl_setpup_shortcut(SubEditFloats, 24, scex(_("EMF|Cc#c#C")));
754 fl_setpup_shortcut(SubEditFloats, 25, scex(_("EMF|Ff#f#F")));
755 fl_setpup_shortcut(SubEditFloats, 26, scex(_("EMF|Tt#t#T")));
756 fl_setpup_shortcut(SubEditFloats, 27, scex(_("EMF|Rr#r#R")));
759 int SubEditTable = fl_newpup(FL_ObjWin(ob));
760 if (men->currentView()->available() &&
761 tmpbuffer->text->cursor.par->table &&
762 !tmpbuffer->isReadonly()){
764 fl_addtopup(SubEditTable, _("Table%t"));
766 if (tmpbuffer->text->cursor.par->table->
767 IsMultiColumn(tmpbuffer->text->
768 NumberOfCell(tmpbuffer->
772 fl_addtopup(SubEditTable, _("|Multicolumn%B%x44%l"));
774 fl_addtopup(SubEditTable, _("|Multicolumn%b%x44%l"));
775 fl_setpup_shortcut(SubEditTable, 44, scex(_("EMT|Mm#m#M")));
777 if (tmpbuffer->text->cursor.par->table->
778 TopLine(tmpbuffer->text->
779 NumberOfCell(tmpbuffer->
783 fl_addtopup(SubEditTable, _("|Line Top%B%x36"));
785 fl_addtopup(SubEditTable, _("|Line Top%b%x36"));
786 fl_setpup_shortcut(SubEditTable, 36, scex(_("EMT|Tt#t#T")));
788 if (tmpbuffer->text->cursor.par->table->
789 BottomLine(tmpbuffer->text->
790 NumberOfCell(tmpbuffer->
794 fl_addtopup(SubEditTable, _("|Line Bottom%B%x37"));
796 fl_addtopup(SubEditTable, _("|Line Bottom%b%x37"));
797 fl_setpup_shortcut(SubEditTable, 37, scex(_("EMT|Bb#b#B")));
799 if (tmpbuffer->text->cursor.par->table->
800 LeftLine(tmpbuffer->text->
801 NumberOfCell(tmpbuffer->
805 fl_addtopup(SubEditTable, _("|Line Left%B%x38"));
807 fl_addtopup(SubEditTable, _("|Line Left%b%x38"));
808 fl_setpup_shortcut(SubEditTable, 38, scex(_("EMT|Ll#l#L")));
810 if (tmpbuffer->text->cursor.par->table->
811 RightLine(tmpbuffer->text->
812 NumberOfCell(tmpbuffer->
816 fl_addtopup(SubEditTable, _("|Line Right%B%x39%l"));
818 fl_addtopup(SubEditTable, _("|Line Right%b%x39%l"));
819 fl_setpup_shortcut(SubEditTable, 39, scex(_("EMT|Rr#r#R")));
821 int align = tmpbuffer->text->cursor.par->
822 table->GetAlignment(tmpbuffer->text->
823 NumberOfCell(tmpbuffer->
827 if (align == LYX_ALIGN_LEFT)
828 fl_addtopup(SubEditTable, _("|Align Left%R%x40"));
830 fl_addtopup(SubEditTable, _("|Align Left%r%x40"));
831 fl_setpup_shortcut(SubEditTable, 40, scex(_("EMT|eE#e#E")));
833 if (align == LYX_ALIGN_RIGHT)
834 fl_addtopup(SubEditTable, _("|Align Right%R%x41"));
836 fl_addtopup(SubEditTable, _("|Align Right%r%x41"));
837 fl_setpup_shortcut(SubEditTable, 41, scex(_("EMT|iI#i#I")));
839 if (align == LYX_ALIGN_CENTER)
840 fl_addtopup(SubEditTable, _("|Align Center%R%x42%l"));
842 fl_addtopup(SubEditTable, _("|Align Center%r%x42%l"));
843 fl_setpup_shortcut(SubEditTable, 42, scex(_("EMT|Cc#c#C")));
845 // xgettext:no-c-format
846 fl_addtopup(SubEditTable, _("|Append Row%x32"));
847 fl_setpup_shortcut(SubEditTable, 32, scex(_("EMT|oO#o#O")));
848 // xgettext:no-c-format
849 fl_addtopup(SubEditTable, _("|Append Column%x33%l"));
850 fl_setpup_shortcut(SubEditTable, 33, scex(_("EMT|uU#u#U")));
851 // xgettext:no-c-format
852 fl_addtopup(SubEditTable, _("|Delete Row%x34"));
853 fl_setpup_shortcut(SubEditTable, 34, scex(_("EMT|wW#w#W")));
854 // xgettext:no-c-format
855 fl_addtopup(SubEditTable, _("|Delete Column%x35%l"));
856 fl_setpup_shortcut(SubEditTable, 35, scex(_("EMT|nN#n#N")));
857 // xgettext:no-c-format
858 fl_addtopup(SubEditTable, _("|Delete Table%x43"));
859 fl_setpup_shortcut(SubEditTable, 43, scex(_("EMT|Dd#d#D")));
862 fl_addtopup(SubEditTable, _("Table%t"));
863 // xgettext:no-c-format
864 fl_addtopup(SubEditTable, _("|Insert table%x31"));
865 fl_setpup_shortcut(SubEditTable, 31, scex(_("EMT|Ii#i#I")));
868 int SubVersionControl = fl_newpup(FL_ObjWin(ob));
869 fl_addtopup(SubVersionControl, _("Version Control%t"));
870 if (tmpbuffer->lyxvc.inUse()) {
871 // xgettext:no-c-format
872 fl_addtopup(SubVersionControl, _("|Register%d%x51"));
873 if (tmpbuffer->isReadonly()) {
874 // signifies that the file is not checked out
875 // xgettext:no-c-format
876 fl_addtopup(SubVersionControl, _("|Check In Changes%d%x52"));
877 // xgettext:no-c-format
878 fl_addtopup(SubVersionControl, _("|Check Out for Edit%x53"));
880 // signifies that the file is checked out
881 // xgettext:no-c-format
882 fl_addtopup(SubVersionControl, _("|Check In Changes%x52"));
883 // xgettext:no-c-format
884 fl_addtopup(SubVersionControl, _("|Check Out for Edit%d%x53"));
886 // xgettext:no-c-format
887 fl_addtopup(SubVersionControl, _("|Revert to last version%x54"));
888 // xgettext:no-c-format
889 fl_addtopup(SubVersionControl, _("|Undo last check in%x55"));
890 // xgettext:no-c-format
891 fl_addtopup(SubVersionControl, _("|Show History%x56"));
893 // xgettext:no-c-format
894 fl_addtopup(SubVersionControl, _("|Register%x51"));
896 // the shortcuts are not good.
897 fl_setpup_shortcut(SubVersionControl, 51, scex(_("EMV|Rr#r#R")));
898 fl_setpup_shortcut(SubVersionControl, 52, scex(_("EMV|Ii#i#I")));
899 fl_setpup_shortcut(SubVersionControl, 53, scex(_("EMV|Oo#o#O")));
900 fl_setpup_shortcut(SubVersionControl, 54, scex(_("EMV|lL#l#l")));
901 fl_setpup_shortcut(SubVersionControl, 55, scex(_("EMV|Uu#u#U")));
902 fl_setpup_shortcut(SubVersionControl, 56, scex(_("EMV|Hh#h#H")));
904 int EditMenu=fl_defpup(FL_ObjWin(ob),
917 "|Table of Contents...%l"
918 "|Version Control%m%l"
919 "|View LaTeX log file%l"
920 "|Paste Primary Selection as Lines"
921 "|Paste Primary Selection as Paragraphs"),
922 SubEditFloats, SubEditTable, SubVersionControl);
924 fl_setpup_shortcut(EditMenu, 1, scex(_("EM|Uu#u#U")));
925 fl_setpup_shortcut(EditMenu, 2, scex(_("EM|Rr#r#R")));
926 fl_setpup_shortcut(EditMenu, 3, scex(_("EM|Cc#c#C")));
927 fl_setpup_shortcut(EditMenu, 4, scex(_("EM|oO#o#O")));
928 fl_setpup_shortcut(EditMenu, 5, scex(_("EM|Pp#p#P")));
929 fl_setpup_shortcut(EditMenu, 6, scex(_("EM|Ff#f#F")));
930 fl_setpup_shortcut(EditMenu, 7, scex(_("EM|Ee#e#E")));
931 fl_setpup_shortcut(EditMenu, 8, scex(_("EM|Nn#n#N")));
932 fl_setpup_shortcut(EditMenu, 9, scex(_("EM|Ii#i#I")));
933 fl_setpup_shortcut(EditMenu, 10, scex(_("EM|Tt#t#T")));
934 fl_setpup_shortcut(EditMenu, 11, scex(_("EM|Ss#s#S")));
935 fl_setpup_shortcut(EditMenu, 12, scex(_("EM|hH#h#H")));
936 fl_setpup_shortcut(EditMenu, 13, scex(_("EM|aA#a#A")));
937 fl_setpup_shortcut(EditMenu, 14, scex(_("EM|Vv#v#V")));
938 fl_setpup_shortcut(EditMenu, 15, scex(_("EM|wW#w#W")));
939 fl_setpup_shortcut(EditMenu, 16, scex(_("EM|Ll#l#L")));
940 fl_setpup_shortcut(EditMenu, 17, scex(_("EM|gG#g#G")));
942 // disable unavailable entries.
943 if(tmpbuffer->undostack.Top() == 0)
944 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
945 if(tmpbuffer->redostack.Top() == 0)
946 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
947 if(lyxrc->isp_command == "none")
948 fl_setpup_mode(EditMenu, 11, FL_PUP_GREY);
949 if(lyxrc->chktex_command == "none")
950 fl_setpup_mode(EditMenu, 12, FL_PUP_GREY);
952 if (tmpbuffer->isReadonly()) {
953 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
954 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
955 fl_setpup_mode(EditMenu, 3, FL_PUP_GREY);
956 fl_setpup_mode(EditMenu, 5, FL_PUP_GREY);
957 fl_setpup_mode(EditMenu, 16, FL_PUP_GREY);
958 fl_setpup_mode(EditMenu, 17, FL_PUP_GREY);
961 fl_setpup_position(men->_view->getForm()->x + ob->x,
962 men->_view->getForm()->y + ob->y +
964 int choice = fl_dopup(EditMenu);
967 // set the pseudo menu-button back
968 fl_set_object_boxtype(ob, FL_FLAT_BOX);
969 fl_redraw_object(ob);
972 case 1: tmpfunc->Dispatch(LFUN_UNDO); break;
973 case 2: tmpfunc->Dispatch(LFUN_REDO); break;
974 case 3: tmpfunc->Dispatch(LFUN_CUT); break;
975 case 4: tmpfunc->Dispatch(LFUN_COPY); break;
976 case 5: tmpfunc->Dispatch(LFUN_PASTE); break;
977 case 6: tmpfunc->Dispatch(LFUN_MENUSEARCH); break;
978 case 7: tmpfunc->Dispatch(LFUN_GOTOERROR); break;
979 case 8: tmpfunc->Dispatch(LFUN_GOTONOTE); break;
980 case 9: // floats & insets
984 case 11: tmpfunc->Dispatch(LFUN_SPELLCHECK); break;
985 case 12: tmpfunc->Dispatch(LFUN_RUNCHKTEX); break;
986 case 13: tmpfunc->Dispatch(LFUN_TOCVIEW); break;
987 case 14: // version control
989 case 15: tmpfunc->Dispatch(LFUN_LATEX_LOG); break;
990 case 16: tmpfunc->Dispatch(LFUN_PASTESELECTION, "line"); break;
991 case 17: tmpfunc->Dispatch(LFUN_PASTESELECTION, "paragraph"); break;
993 // floats & insets sub-menu
994 case 21: ToggleFloat(); break;
995 case 22: tmpfunc->Dispatch(LFUN_MELT); break;
996 case 23: AllFloats(1, 0); break;
997 case 24: AllFloats(0, 0); break;
998 case 25: AllFloats(1, 1); break;
999 case 26: AllFloats(0, 1); break;
1000 case 27: tmpfunc->Dispatch(LFUN_REMOVEERRORS); break;
1002 case 31: tmpfunc->Dispatch(LFUN_TABLE); break;
1003 // this is really temporary. We need new function in keybind.C
1004 // These should set the minibuffer, too.
1005 case 32: case 33: case 34:
1006 case 35: case 36: case 37:
1007 case 38: case 39: case 40:
1008 case 41: case 42: case 43:
1010 if (men->currentView()->available()){
1011 men->currentView()->getScreen()->HideCursor();
1012 if (!tmpbuffer->text->selection){
1014 tmpbuffer->update(-2);
1017 TableFeatures(choice - 32);
1018 tmpbuffer->update(1);
1021 // version control sub-menu
1022 case 51: // register
1023 tmpfunc->Dispatch(LFUN_VC_REGISTER);
1025 case 52: // check in
1026 tmpfunc->Dispatch(LFUN_VC_CHECKIN);
1028 case 53: // check out
1029 tmpfunc->Dispatch(LFUN_VC_CHECKOUT);
1031 case 54: // revert to last
1032 tmpfunc->Dispatch(LFUN_VC_REVERT);
1034 case 55: // undo last
1035 tmpfunc->Dispatch(LFUN_VC_UNDO);
1037 case 56: // show history
1038 tmpfunc->Dispatch(LFUN_VC_HISTORY);
1042 fl_freepup(EditMenu);
1043 fl_freepup(SubEditFloats);
1044 fl_freepup(SubEditTable);
1045 fl_freepup(SubVersionControl);
1049 void Menus::ShowLayoutMenu(FL_OBJECT *ob, long)
1051 Menus *men = (Menus*) ob->u_ldata;
1053 if (!men->currentView()->available())
1056 // set the pseudo menu-button
1057 fl_set_object_boxtype(ob, FL_UP_BOX);
1058 fl_set_button(ob, 0);
1059 fl_redraw_object(ob);
1061 Buffer *tmpbuffer = men->_view->currentBuffer();
1062 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1064 int LayoutMenu = fl_newpup(FL_ObjWin(ob));
1065 fl_addtopup(LayoutMenu, _("Character..."
1071 "|Emphasize Style%b"
1075 "|Change Environment Depth"
1076 "|LaTeX Preamble...%l"
1077 "|Save layout as default"));
1078 fl_setpup_shortcut(LayoutMenu, 1, scex(_("LM|Cc#c#C")));
1079 fl_setpup_shortcut(LayoutMenu, 2, scex(_("LM|Pp#p#P")));
1080 fl_setpup_shortcut(LayoutMenu, 3, scex(_("LM|Dd#d#D")));
1081 fl_setpup_shortcut(LayoutMenu, 4, scex(_("LM|aA#a#A")));
1082 fl_setpup_shortcut(LayoutMenu, 5, scex(_("LM|eE#e#E")));
1083 fl_setpup_shortcut(LayoutMenu, 6, scex(_("LM|Qq#q#Q")));
1084 fl_setpup_shortcut(LayoutMenu, 7, scex(_("LM|mM#m#M")));
1085 fl_setpup_shortcut(LayoutMenu, 8, scex(_("LM|Nn#n#N")));
1086 fl_setpup_shortcut(LayoutMenu, 9, scex(_("LM|Bb#b#B")));
1087 fl_setpup_shortcut(LayoutMenu, 10, scex(_("LM|Tt#t#T")));
1088 fl_setpup_shortcut(LayoutMenu, 11, scex(_("LM|vV#v#V")));
1089 fl_setpup_shortcut(LayoutMenu, 12, scex(_("LM|Ll#l#L")));
1090 fl_setpup_shortcut(LayoutMenu, 13, scex(_("LM|Ss#s#S")));
1092 // Set values of checkboxes according to font
1093 LyXFont font = tmpbuffer->text->real_current_font;
1094 if (font.emph() == LyXFont::ON)
1095 fl_setpup_mode(LayoutMenu, 7, FL_PUP_CHECK);
1096 if (font.noun() == LyXFont::ON)
1097 fl_setpup_mode(LayoutMenu, 8, FL_PUP_CHECK);
1098 if (font.series() == LyXFont::BOLD_SERIES)
1099 fl_setpup_mode(LayoutMenu, 9, FL_PUP_CHECK);
1100 if (font.latex() == LyXFont::ON)
1101 fl_setpup_mode(LayoutMenu, 10, FL_PUP_CHECK);
1103 // Grey out unavailable entries
1104 if (!tmpbuffer->text->cursor.par->table)
1105 fl_setpup_mode(LayoutMenu, 5, FL_PUP_GREY);
1107 if (tmpbuffer->isReadonly()) {
1108 fl_setpup_mode(LayoutMenu, 1, FL_PUP_GREY);
1109 fl_setpup_mode(LayoutMenu, 6, FL_PUP_GREY);
1110 fl_setpup_mode(LayoutMenu, 11, FL_PUP_GREY);
1114 men->_view->getForm()->x + ob->x,
1115 men->_view->getForm()->y + ob->y + ob->h + 10);
1116 int choice = fl_dopup(LayoutMenu);
1119 // set the pseudo menu-button back
1120 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1121 fl_redraw_object(ob);
1124 case 1: tmpfunc->Dispatch(LFUN_LAYOUT_CHARACTER); break;
1125 case 2: tmpfunc->Dispatch(LFUN_LAYOUT_PARAGRAPH); break;
1126 case 3: tmpfunc->Dispatch(LFUN_LAYOUT_DOCUMENT); break;
1127 case 4: tmpfunc->Dispatch(LFUN_LAYOUT_PAPER); break;
1128 case 5: tmpfunc->Dispatch(LFUN_LAYOUT_TABLE, "true"); break;
1129 case 6: tmpfunc->Dispatch(LFUN_LAYOUT_QUOTES); break;
1130 case 7: tmpfunc->Dispatch(LFUN_EMPH); break;
1131 case 8: tmpfunc->Dispatch(LFUN_NOUN); break;
1132 case 9: tmpfunc->Dispatch(LFUN_BOLD); break;
1133 case 10: tmpfunc->Dispatch(LFUN_TEX); break;
1134 case 11: tmpfunc->Dispatch(LFUN_DEPTH_PLUS); break;
1135 case 12: tmpfunc->Dispatch(LFUN_LAYOUT_PREAMBLE); break;
1136 case 13: tmpfunc->Dispatch(LFUN_LAYOUT_SAVE_DEFAULT); break;//MenuLayoutSave(); break;
1138 fl_freepup(LayoutMenu);
1142 void Menus::ShowInsertMenu(FL_OBJECT *ob, long /*data*/)
1144 Menus *men = (Menus*) ob->u_ldata;
1146 // set the pseudo menu-button
1147 fl_set_object_boxtype(ob, FL_UP_BOX);
1148 fl_set_button(ob, 0);
1149 fl_redraw_object(ob);
1151 Buffer *tmpbuffer = men->_view->currentBuffer();
1152 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1155 // Is textclass LinuxDoc?
1156 bool LinuxDoc = tmpbuffer->isLinuxDoc();
1159 int SubInsertAscii = fl_defpup(FL_ObjWin(ob),
1160 _("Import ASCII file%t"
1162 "|As Paragraphs%x42"));
1163 fl_setpup_shortcut(SubInsertAscii, 41, scex(_("IMA|Ll#l#L")));
1164 fl_setpup_shortcut(SubInsertAscii, 42, scex(_("IMA|Pp#p#P")));
1166 int SubInsertTableList=fl_defpup(FL_ObjWin(ob),
1168 "|Table of Contents%x21"
1169 "|List of Figures%x22"
1170 "|List of Tables%x23"
1171 "|List of Algorithms%x24"
1173 "|BibTeX Reference%x26"));
1174 fl_setpup_shortcut(SubInsertTableList, 21, scex(_("IMT|Cc#c#C")));
1175 fl_setpup_shortcut(SubInsertTableList, 22, scex(_("IMT|Ff#f#F")));
1176 fl_setpup_shortcut(SubInsertTableList, 23, scex(_("IMT|Tt#t#T")));
1177 fl_setpup_shortcut(SubInsertTableList, 24, scex(_("IMT|Aa#a#A")));
1178 fl_setpup_shortcut(SubInsertTableList, 25, scex(_("IMT|Ii#i#I")));
1179 fl_setpup_shortcut(SubInsertTableList, 26, scex(_("IMT|Bb#b#B")));
1181 int SubInsertFloatList;
1182 //if (men->_view->currentBuffer()->params.columns == 1) {
1183 // SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
1185 // "|Figure Float%x71"
1186 // "|Table Float%l%x72"
1187 // "|Algorithm Float%x73"));
1190 SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
1194 "|Wide Figure Float%x73"
1195 "|Wide Table Float%l%x74"
1196 "|Algorithm Float%x75"));
1198 fl_setpup_shortcut(SubInsertFloatList, 71, scex(_("IMF|gG#g#G")));
1199 fl_setpup_shortcut(SubInsertFloatList, 72, scex(_("IMF|Tt#t#T")));
1200 fl_setpup_shortcut(SubInsertFloatList, 73, scex(_("IMF|Ww#w#W")));
1201 fl_setpup_shortcut(SubInsertFloatList, 74, scex(_("IMF|iI#i#I")));
1202 fl_setpup_shortcut(SubInsertFloatList, 75, scex(_("IMF|Aa#a#A")));
1204 int SubInsertSpecial=fl_defpup(FL_ObjWin(ob),
1205 _("Special Character%t"
1207 "|Hyphenation Point%x32"
1208 "|Protected Blank%x33"
1210 "|Ellipsis (...)%x35"
1211 "|End of sentence period%x36"
1212 "|Ordinary Quote (\")%x37"
1213 "|Menu Separator %x38"));
1215 fl_setpup_shortcut(SubInsertSpecial, 31, scex(_("IMS|Hh#h#H")));
1216 fl_setpup_shortcut(SubInsertSpecial, 32, scex(_("IMS|Pp#p#P")));
1217 fl_setpup_shortcut(SubInsertSpecial, 33, scex(_("IMS|Bb#b#B")));
1218 fl_setpup_shortcut(SubInsertSpecial, 34, scex(_("IMS|Ll#l#L")));
1219 fl_setpup_shortcut(SubInsertSpecial, 35, scex(_("IMS|iI#i#I")));
1220 fl_setpup_shortcut(SubInsertSpecial, 36, scex(_("IMS|Ee#e#E")));
1221 fl_setpup_shortcut(SubInsertSpecial, 37, scex(_("IMS|Qq#q#Q")));
1222 fl_setpup_shortcut(SubInsertSpecial, 38, scex(_("IMS|Mm#m#M")));
1224 int InsertMenu = fl_defpup(FL_ObjWin(ob),
1228 "|Import ASCII File%m"
1229 "|Insert LyX File...%l"
1234 "|Special Character%m%l"
1237 "|Cross-Reference..."
1238 "|Citation Reference..."
1240 "|Index entry of last word"),
1246 fl_setpup_shortcut(InsertMenu, 1, scex(_("IM|gG#g#G")));
1247 fl_setpup_shortcut(InsertMenu, 2, scex(_("IM|bB#b#B")));
1248 fl_setpup_shortcut(InsertMenu, 3, scex(_("IM|cC#c#C")));
1249 fl_setpup_shortcut(InsertMenu, 4, scex(_("IM|Aa#a#A")));
1250 fl_setpup_shortcut(InsertMenu, 5, scex(_("IM|Xx#x#X")));
1251 fl_setpup_shortcut(InsertMenu, 6, scex(_("IM|Ff#f#F")));
1252 fl_setpup_shortcut(InsertMenu, 7, scex(_("IM|Mm#m#M")));
1253 fl_setpup_shortcut(InsertMenu, 8, scex(_("IM|oO#o#O")));
1254 fl_setpup_shortcut(InsertMenu, 9, scex(_("IM|Tt#t#T")));
1255 fl_setpup_shortcut(InsertMenu, 10, scex(_("IM|Ss#s#S")));
1256 fl_setpup_shortcut(InsertMenu, 11, scex(_("IM|Nn#n#N")));
1257 fl_setpup_shortcut(InsertMenu, 12, scex(_("IM|Ll#l#L")));
1258 fl_setpup_shortcut(InsertMenu, 13, scex(_("IM|rR#r#R")));
1259 fl_setpup_shortcut(InsertMenu, 14, scex(_("IM|iI#i#I")));
1260 fl_setpup_shortcut(InsertMenu, 15, scex(_("IM|dD#d#D")));
1261 fl_setpup_shortcut(InsertMenu, 16, scex(_("IM|wW#w#W")));
1265 /* for linuxdoc sgml */
1267 fl_addtopup(InsertMenu, _("|URL..."));
1268 fl_setpup_shortcut(InsertMenu, 17, scex(_("IM|Uu#u#U")));
1272 if (tmpbuffer->isReadonly()) {
1273 for (int ii = 1; ii <= 16; ii++)
1274 fl_setpup_mode(InsertMenu, ii, FL_PUP_GREY);
1278 fl_setpup_mode(InsertMenu, 17, FL_PUP_GREY);
1285 men->_view->getForm()->x + ob->x,
1286 men->_view->getForm()->y + ob->y + ob->h + 10);
1288 int choice = fl_dopup(InsertMenu);
1291 // set the pseudo menu-button back
1292 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1293 fl_redraw_object(ob);
1295 if (men->currentView()->available()){
1296 men->currentView()->getScreen()->HideCursor();
1298 case 1: tmpfunc->Dispatch(LFUN_FIGURE); break;
1299 case 2: tmpfunc->Dispatch(LFUN_TABLE); break;
1300 case 3: tmpfunc->Dispatch(LFUN_CHILDINSERT); break;
1301 case 4: // Insert ASCII file submenu
1303 case 5: tmpfunc->Dispatch(LFUN_FILE_INSERT); break;
1304 case 41: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "line"); break;
1305 case 42: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "paragraph"); break;
1309 case 6: tmpfunc->Dispatch(LFUN_FOOTMELT); break
1311 case 7: tmpfunc->Dispatch(LFUN_MARGINMELT); break;
1313 case 8: // Float sub-menu
1315 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "figure");
1318 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "table");
1321 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-fig");
1324 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-tab");
1327 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "algorithm");
1330 case 9: // Table/List submenu
1332 case 21: tmpfunc->Dispatch(LFUN_TOC_INSERT); break;
1333 case 22: tmpfunc->Dispatch(LFUN_LOF_INSERT); break;
1334 case 23: tmpfunc->Dispatch(LFUN_LOT_INSERT); break;
1335 case 24: tmpfunc->Dispatch(LFUN_LOA_INSERT); break;
1336 case 25: tmpfunc->Dispatch(LFUN_INDEX_PRINT); break;
1337 case 26: tmpfunc->Dispatch(LFUN_INSERT_BIBTEX); break;
1339 case 10: // Special Character submenu
1341 case 31: tmpfunc->Dispatch(LFUN_HFILL); break;
1342 case 32: tmpfunc->Dispatch(LFUN_HYPHENATION); break;
1343 case 33: tmpfunc->Dispatch(LFUN_PROTECTEDSPACE); break;
1344 case 34: tmpfunc->Dispatch(LFUN_BREAKLINE); break;
1345 case 35: tmpfunc->Dispatch(LFUN_LDOTS); break;
1346 case 36: tmpfunc->Dispatch(LFUN_END_OF_SENTENCE); break;
1347 case 37: tmpfunc->Dispatch(LFUN_QUOTE); break;
1348 case 38: tmpfunc->Dispatch(LFUN_MENU_SEPARATOR); break;
1350 case 11: tmpfunc->Dispatch(LFUN_INSERT_NOTE); break;
1351 case 12: tmpfunc->Dispatch(LFUN_INSERT_LABEL); break;
1352 case 13: tmpfunc->Dispatch(LFUN_INSERT_REF); break;
1353 case 14: tmpfunc->Dispatch(LFUN_INSERT_CITATION); break;
1354 case 15: tmpfunc->Dispatch(LFUN_INDEX_INSERT); break;
1355 case 16: tmpfunc->Dispatch(LFUN_INDEX_INSERT_LAST); break;
1356 case 17: tmpfunc->Dispatch(LFUN_URL); break;
1359 fl_freepup(InsertMenu);
1360 fl_freepup(SubInsertAscii);
1361 fl_freepup(SubInsertTableList);
1362 fl_freepup(SubInsertFloatList);
1363 fl_freepup(SubInsertSpecial);
1367 void Menus::ShowMathMenu(FL_OBJECT *ob, long)
1369 extern void math_insert_symbol(char const* s);
1371 Menus *men = (Menus*) ob->u_ldata;
1373 // set the pseudo menu-button
1374 fl_set_object_boxtype(ob, FL_UP_BOX);
1375 fl_set_button(ob, 0);
1376 fl_redraw_object(ob);
1378 Buffer *tmpbuffer = men->_view->currentBuffer();
1379 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1381 int MathMenu = fl_defpup(FL_ObjWin(ob),
1392 fl_setpup_shortcut(MathMenu, 1, scex(_("MM|Ff#f#F")));
1393 fl_setpup_shortcut(MathMenu, 2, scex(_("MM|Ss#s#S")));
1394 fl_setpup_shortcut(MathMenu, 3, scex(_("MM|Ee#e#E")));
1395 fl_setpup_shortcut(MathMenu, 4, scex(_("MM|xX#x#X")));
1396 fl_setpup_shortcut(MathMenu, 5, scex(_("MM|uU#u#U")));
1397 fl_setpup_shortcut(MathMenu, 6, scex(_("MM|Ii#i#I")));
1398 fl_setpup_shortcut(MathMenu, 7, scex(_("MM|Mm#m#M")));
1399 fl_setpup_shortcut(MathMenu, 8, scex(_("MM|Dd#d#D")));
1400 fl_setpup_shortcut(MathMenu, 9, scex(_("MM|Pp#p#P")));
1402 if (tmpbuffer->isReadonly())
1403 for (int ii = 1; ii <= 9; ii++)
1404 fl_setpup_mode(MathMenu, ii, FL_PUP_GREY);
1408 men->_view->getForm()->x + ob->x,
1409 men->_view->getForm()->y + ob->y + ob->h + 10);
1410 int choice = fl_dopup(MathMenu);
1413 // set the pseudo menu-button back
1414 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1415 fl_redraw_object(ob);
1417 if (men->currentView()->available()) {
1420 tmpfunc->Dispatch(LFUN_INSERT_MATH, "frac");
1423 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sqrt");
1425 case 3: /* Exponent */
1426 tmpfunc->Dispatch(LFUN_INSERT_MATH, "^");
1429 tmpfunc->Dispatch(LFUN_INSERT_MATH, "_");
1432 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sum");
1435 tmpfunc->Dispatch(LFUN_INSERT_MATH, "int");
1438 tmpfunc->Dispatch(LFUN_MATH_MODE);
1441 tmpfunc->Dispatch(LFUN_MATH_DISPLAY);
1444 show_symbols_form(tmpfunc);
1447 tmpbuffer->update(0);
1449 fl_freepup(MathMenu);
1453 void Menus::ShowOptionsMenu(FL_OBJECT *ob, long)
1455 Menus *men = (Menus*) ob->u_ldata;
1457 // set the pseudo menu-button
1458 fl_set_object_boxtype(ob, FL_UP_BOX);
1459 fl_set_button(ob, 0);
1460 fl_redraw_object(ob);
1462 //Buffer *tmpbuffer = men->_view->currentBuffer();
1463 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1465 int OptionsMenu = fl_defpup(FL_ObjWin(ob),
1467 "|Spellchecker Options..."
1472 fl_setpup_shortcut(OptionsMenu, 1, scex(_("OM|Ff#f#F")));
1473 fl_setpup_shortcut(OptionsMenu, 2, scex(_("OM|Ss#s#S")));
1474 fl_setpup_shortcut(OptionsMenu, 3, scex(_("OM|Kk#k#K")));
1475 fl_setpup_shortcut(OptionsMenu, 4, scex(_("OM|Ll#l#L")));
1476 fl_setpup_shortcut(OptionsMenu, 5, scex(_("OM|Rr#r#R")));
1478 if(lyxrc->isp_command == "none")
1479 fl_setpup_mode(OptionsMenu, 2, FL_PUP_GREY);
1482 men->_view->getForm()->x + ob->x,
1483 men->_view->getForm()->y + ob->y + ob->h + 10);
1484 int choice = fl_dopup(OptionsMenu);
1487 // set the pseudo menu-button back
1488 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1489 fl_redraw_object(ob);
1491 case 1: men->ScreenOptions(); break;
1492 case 2: SpellCheckerOptions(); break;
1493 case 3: men->_view->getIntl()->MenuKeymap(); break;
1494 case 4: LaTeXOptions(); break;
1495 case 5: tmpfunc->Dispatch(LFUN_RECONFIGURE); break;
1498 fl_freepup(OptionsMenu);
1502 void Menus::ShowBufferMenu(FL_OBJECT *ob, long)
1504 Menus *men = (Menus*) ob->u_ldata;
1506 // set the pseudo menu-button
1507 fl_set_object_boxtype(ob, FL_UP_BOX);
1508 fl_set_button(ob, 0);
1509 fl_redraw_object(ob);
1511 int BufferMenu = fl_newpup(FL_ObjWin(ob));
1512 bufferlist.makePup(BufferMenu);
1515 men->_view->getForm()->x + ob->x,
1516 men->_view->getForm()->y + ob->y + ob->h + 10);
1517 int choice = fl_dopup(BufferMenu);
1520 // set the pseudo menu-button back
1521 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1522 fl_redraw_object(ob);
1523 if (choice > 0) men->handleBufferMenu(choice);
1525 fl_freepup(BufferMenu);
1530 char const *doc_files [] = {"Intro", "Tutorial",
1531 "UserGuide", "Extended",
1532 "Customization", "Reference",
1533 "BUGS", "LaTeXConfig"};
1535 void Menus::ShowHelpMenu(FL_OBJECT *ob, long)
1537 Menus *men = (Menus*) ob->u_ldata;
1539 // set the pseudo menu-button
1540 fl_set_object_boxtype(ob, FL_UP_BOX);
1541 fl_set_button(ob, 0);
1542 fl_redraw_object(ob);
1544 int HelpMenu = fl_defpup(FL_ObjWin(ob),
1548 "|Extended Features"
1552 "|LaTeX Configuration%l"
1553 "|Copyright and Warranty..."
1557 fl_setpup_shortcut(HelpMenu, 1, scex(_("HM|Ii#I#i")));
1558 fl_setpup_shortcut(HelpMenu, 2, scex(_("HM|Tt#T#t")));
1559 fl_setpup_shortcut(HelpMenu, 3, scex(_("HM|Uu#U#u")));
1560 fl_setpup_shortcut(HelpMenu, 4, scex(_("HM|xX#x#X")));
1561 fl_setpup_shortcut(HelpMenu, 5, scex(_("HM|Cc#C#c")));
1562 fl_setpup_shortcut(HelpMenu, 6, scex(_("HM|Rr#R#r")));
1563 fl_setpup_shortcut(HelpMenu, 7, scex(_("HM|Kk#K#k")));
1564 fl_setpup_shortcut(HelpMenu, 8, scex(_("HM|Ll#L#l")));
1565 fl_setpup_shortcut(HelpMenu, 9, scex(_("HM|oO#o#O")));
1566 fl_setpup_shortcut(HelpMenu, 10, scex(_("HM|eE#e#E")));
1567 fl_setpup_shortcut(HelpMenu, 11, scex(_("HM|Vv#v#V")));
1570 men->_view->getForm()->x + ob->x,
1571 men->_view->getForm()->y + ob->y + ob->h + 10);
1572 int choice = fl_dopup(HelpMenu);
1575 // set the pseudo menu-button back
1576 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1577 fl_redraw_object(ob);
1580 case 1: case 2: case 3: case 4: case 5:
1581 case 6: case 7: case 8:
1583 men->MenuDocu(doc_files[choice - 1]);
1586 case 9: ShowCopyright(); break;
1587 case 10: ShowCredits(); break;
1590 fl_show_message((string(_("LyX Version ")) + LYX_VERSION
1591 + _(" of ") + LYX_RELEASE).c_str(),
1592 (_("Library directory: ")
1593 + MakeDisplayPath(system_lyxdir)).c_str(),
1594 (_("User directory: ")
1595 + MakeDisplayPath(user_lyxdir)).c_str());
1599 fl_freepup(HelpMenu);
1603 void Menus::MenuDocu(string const &docname)
1605 string fname = i18nLibFileSearch("doc", docname, "lyx");
1606 _view->getMiniBuffer()->Set(_("Opening help file"),
1607 MakeDisplayPath(fname),"...");
1608 currentView()->setBuffer(bufferlist.loadLyXFile(fname,false));
1610 if (docname == "Reference")
1611 _view->getLyXFunc()->Dispatch(LFUN_TOCVIEW);
1615 void Menus::handleBufferMenu(int choice)
1617 currentView()->setBuffer(bufferlist.getBuffer(choice));