3 * ==================================================
5 * LyX, The Document Processor
7 * Copyright (C) 1995 Matthias Ettrich
8 * Copyright (C) 1995-1998 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 "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 // $Id: menus.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $
51 #if !defined(lint) && !defined(WITH_WARNINGS)
52 static char vcid[] = "$Id: menus.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
55 extern FD_form_screen *fd_form_screen;
56 extern BufferList bufferlist;
58 // I would really prefere to see most or all of these 'extern's disappear.
59 // Their commands should be called through LyXFunc (IMO). (Lgb)
61 extern void MenuLayoutSave();
62 extern void ShowCredits();
63 extern void ShowCopyright();
64 extern void show_symbols_form(LyXFunc*);
65 extern void BeforeChange();
66 extern void ProhibitInput();
67 extern void AllowInput();
68 extern void OpenStuff();
69 extern void ToggleFloat();
70 extern void AllFloats(char flag, char figmar);
71 extern void LaTeXOptions();
73 Menus::Menus(LyXView *view,int air)
77 // deactivate the menu accelerators
78 fl_set_object_shortcut(menu_file, "", 1);
79 fl_set_object_shortcut(menu_file2, "", 1);
80 fl_set_object_shortcut(menu_edit, "", 1);
81 fl_set_object_shortcut(menu_layout, "", 1);
82 fl_set_object_shortcut(menu_math, "", 1);
83 fl_set_object_shortcut(menu_insert, "", 1);
84 fl_set_object_shortcut(menu_options, "", 1);
85 fl_set_object_shortcut(menu_options2, "", 1);
86 fl_set_object_shortcut(menu_buffer, "", 1);
87 fl_set_object_shortcut(menu_help, "", 1);
88 fl_set_object_shortcut(menu_help2, "", 1);
93 inline BufferView *Menus::currentView()
95 return _view->currentView();
99 void Menus::showMenus()
101 fl_hide_object(menu_grp2);
102 fl_show_object(menu_grp1);
106 void Menus::hideMenus()
108 fl_hide_object(menu_grp1);
109 fl_show_object(menu_grp2);
113 void Menus::openByName(LString const &menuName)
114 /* Opens the visible menu of given name, or simply does nothing
115 when the name is not known. NOTE THE EXTREMELY STUPID
116 IMPLEMENTATION! :-) There are probably hundred ways to do
117 this better, for instance, by scanning the menu objects and
118 testing for the given name. I leave this as an exercise for an
119 experienced GG (GUI Guy/Girl). RVDK_PATCH_5. */
121 if (menu_file->visible) {
122 if (menuName == _("File")) ShowFileMenu(menu_file, 0);
123 else if (menuName == _("Edit")) ShowEditMenu(menu_edit, 0);
124 else if (menuName == _("Layout")) ShowLayoutMenu(menu_layout, 0);
125 else if (menuName == _("Insert")) ShowInsertMenu(menu_insert, 0);
126 else if (menuName == _("Math")) ShowMathMenu(menu_math, 0);
127 else if (menuName == _("Options")) ShowOptionsMenu(menu_options, 0);
128 else if (menuName == _("Documents")) ShowBufferMenu(menu_buffer, 0);
129 else if (menuName == _("Help")) ShowHelpMenu(menu_help, 0);
130 else lyxerr.print("The menu '" + menuName + "' is not available.");
132 if (menuName == _("File")) ShowFileMenu2(menu_file2, 0);
133 else if (menuName == _("Options")) ShowOptionsMenu(menu_options2, 0);
134 else if (menuName == _("Help")) ShowHelpMenu(menu_help2, 0);
135 else lyxerr.print("The menu '" + menuName + "' is not available.");
140 void Menus::create_menus(int air)
142 FL_FORM *form = _view->getForm();
144 // Here I'd really like to see code like:
148 const int MENU_LABEL_SIZE = FL_NORMAL_SIZE;
149 const int mheight = 30;
150 const int mbheight= 22;
151 // where to place the menubar?
152 const int yloc = (mheight - mbheight)/2; //air + bw;
153 const int mbadd = 20; // menu button add (to width)
157 obj = fl_add_frame(FL_UP_FRAME,0,0,form->w,mheight,"");
158 fl_set_object_resize(obj, FL_RESIZE_ALL);
159 fl_set_object_gravity(obj, NorthWestGravity, NorthEastGravity);
161 menu_grp1 = fl_bgn_group();
165 fl_add_button(FL_TOUCH_BUTTON,
167 fl_get_string_width(FL_BOLD_STYLE,
170 strlen(_("File"))) + mbadd,
172 moffset += obj->w + air;
173 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
174 fl_set_object_callback(obj,ShowFileMenu, 0);
175 obj->u_ldata = (long)this;
179 fl_add_button(FL_TOUCH_BUTTON,
181 fl_get_string_width(FL_BOLD_STYLE,
184 strlen(_("Edit"))) + mbadd,
186 moffset += obj->w + air;
187 fl_set_object_shortcut(obj, scex(_("MB|#E")),1);
188 fl_set_object_callback(obj,ShowEditMenu,0);
189 obj->u_ldata = (long) this;
191 // Layout menu button
193 fl_add_button(FL_TOUCH_BUTTON,
195 fl_get_string_width(FL_BOLD_STYLE,
198 strlen(_("Layout"))) + mbadd,
199 mbheight,_("Layout"));
200 moffset += obj->w + air;
201 fl_set_object_shortcut(obj, scex(_("MB|#L")), 1);
202 fl_set_object_callback(obj,ShowLayoutMenu,0);
203 obj->u_ldata = (long) this;
205 // Insert menu button button
207 fl_add_button(FL_TOUCH_BUTTON,
209 fl_get_string_width(FL_BOLD_STYLE,
212 strlen(_("Insert"))) + mbadd,
213 mbheight,_("Insert"));
214 moffset += obj->w + air;
215 fl_set_object_shortcut(obj, scex(_("MB|#I")), 1);
216 fl_set_object_callback(obj,ShowInsertMenu,0);
217 obj->u_ldata = (long) this;
221 fl_add_button(FL_TOUCH_BUTTON,
223 fl_get_string_width(FL_BOLD_STYLE,
226 strlen(_("Math"))) + mbadd,
228 moffset += obj->w + air;
229 fl_set_object_shortcut(obj, scex(_("MB|#M")), 1);
230 fl_set_object_callback(obj,ShowMathMenu,0);
231 obj->u_ldata = (long) this;
233 // Options menu button
235 fl_add_button(FL_TOUCH_BUTTON,
237 fl_get_string_width(FL_BOLD_STYLE,
240 strlen(_("Options"))) + mbadd,
241 mbheight,_("Options"));
242 moffset += obj->w + air;
243 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
244 fl_set_object_callback(obj,ShowOptionsMenu, 0);
245 obj->u_ldata = (long) this;
247 // Documents menu button
249 fl_add_button(FL_TOUCH_BUTTON,
251 fl_get_string_width(FL_BOLD_STYLE,
254 strlen(_("Documents"))) + mbadd,
255 mbheight,_("Documents"));
256 moffset += obj->w + air;
257 fl_set_object_shortcut(obj, scex(_("MB|#D")), 1);
258 fl_set_object_callback(obj,ShowBufferMenu,0);
259 obj->u_ldata = (long) this;
263 fl_add_button(FL_TOUCH_BUTTON,
265 fl_get_string_width(FL_BOLD_STYLE,
268 strlen(_("Help"))) + mbadd,
270 moffset += obj->w + air;
271 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
272 fl_set_object_callback(obj,ShowHelpMenu,0);
273 obj->u_ldata = (long) this;
277 // Set the menu buttons atrributes.
278 // Due to a bug in xforms we cant do this only an the group.
279 obj = menu_grp1->next;
281 fl_set_object_boxtype(obj, FL_FLAT_BOX);
282 fl_set_object_color(obj,FL_MCOL, FL_MCOL);
283 fl_set_object_lsize(obj,MENU_LABEL_SIZE);
284 fl_set_object_lstyle(obj,FL_BOLD_STYLE);
285 fl_set_object_resize(obj, FL_RESIZE_ALL);
286 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
288 } while (obj != 0 && obj->objclass != FL_END_GROUP);
292 menu_grp2 = fl_bgn_group();
296 fl_add_button(FL_TOUCH_BUTTON,
298 fl_get_string_width(FL_BOLD_STYLE,
301 strlen(_("File"))) + mbadd,
303 moffset += obj->w + air;
304 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
305 fl_set_object_callback(obj,ShowFileMenu2, 0);
306 obj->u_ldata = (long)this;
308 // Options menu button
309 menu_options2 = obj =
310 fl_add_button(FL_TOUCH_BUTTON,
312 fl_get_string_width(FL_BOLD_STYLE,
315 strlen(_("Options"))) +mbadd,
316 mbheight,_("Options"));
317 moffset += obj->w + air;
318 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
319 fl_set_object_callback(obj,ShowOptionsMenu, 0);
320 obj->u_ldata = (long) this;
324 fl_add_button(FL_TOUCH_BUTTON,
326 fl_get_string_width(FL_BOLD_STYLE,
329 strlen(_("Help"))) + mbadd,
331 moffset += obj->w + air;
332 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
333 fl_set_object_callback(obj,ShowHelpMenu,0);
334 obj->u_ldata = (long) this;
338 // Set the menu buttons atrributes.
339 // Due to a bug in xforms we cant do this only an the group.
340 obj = menu_grp2->next;
342 fl_set_object_boxtype(obj, FL_FLAT_BOX);
343 fl_set_object_color(obj,FL_MCOL, FL_MCOL);
344 fl_set_object_lsize(obj,MENU_LABEL_SIZE);
345 fl_set_object_lstyle(obj,FL_BOLD_STYLE);
346 fl_set_object_resize(obj, FL_RESIZE_ALL);
347 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
349 } while (obj != 0 && obj->objclass != FL_END_GROUP);
353 void Menus::ScreenOptions()
355 // this is not very nice....
356 fl_set_input(fd_form_screen->input_roman,
357 lyxrc->roman_font_name.c_str());
358 fl_set_input(fd_form_screen->input_sans,
359 lyxrc->sans_font_name.c_str());
360 fl_set_input(fd_form_screen->input_typewriter,
361 lyxrc->typewriter_font_name.c_str());
362 fl_set_input(fd_form_screen->input_font_norm,
363 lyxrc->font_norm.c_str());
365 sprintf(tmpstring,"%d", lyxrc->zoom);
366 fl_set_input(fd_form_screen->intinput_size, tmpstring);
367 if (fd_form_screen->form_screen->visible) {
368 fl_raise_form(fd_form_screen->form_screen);
370 fl_show_form(fd_form_screen->form_screen,
371 FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
372 _("Screen Options"));
378 // Here comes all the menu callbacks.
381 void Menus::ShowFileMenu(FL_OBJECT *ob, long)
383 Menus *men = (Menus*) ob->u_ldata;
385 // Regarding the pseudo-menu-button:
386 // ok, ok this is a hack. It would be better to use the menus of the
387 // xforms 0.8 library. but then all popups have to be defined all the
388 // time, code rewriting would be necessary and contex-depending menus
389 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
390 // course it would be more proper (and little faster). So if anybody
391 // likes to do the cleanup, just do it. Matthias
393 // set the pseudo menu-button
394 fl_set_object_boxtype(ob, FL_UP_BOX);
395 fl_set_button(ob, 0);
396 fl_redraw_object(ob);
398 Buffer *tmpbuffer = men->_view->currentBuffer();
399 LyXFunc *tmpfunc = men->_view->getLyXFunc();
401 bool LinuxDoc = tmpbuffer->isLinuxDoc();
402 bool DocBook = tmpbuffer->isDocBook();
403 bool Literate = tmpbuffer->isLiterate();
407 int SubFileImport =fl_defpup(FL_ObjWin(ob),
410 "|Ascii Text as Lines...%x31"
411 "|Ascii Text as Paragraphs%x32"
413 fl_setpup_shortcut(SubFileImport, 30, scex(_("FIM|Ll#l#L")));
414 fl_setpup_shortcut(SubFileImport, 31, scex(_("FIM|Aa#a#A")));
415 fl_setpup_shortcut(SubFileImport, 32, scex(_("FIM|Pp#p#P")));
416 fl_setpup_shortcut(SubFileImport, 33, scex(_("FIM|Nn#n#N")));
420 // remember to make this handle linuxdoc too.
421 // and now docbook also.
423 if (!LinuxDoc && !DocBook)
424 SubFileExport=fl_defpup(FL_ObjWin(ob),
428 "|as PostScript...%x42"
429 "|as Ascii Text...%x43"
432 SubFileExport=fl_defpup(FL_ObjWin(ob),
434 "|as LinuxDoc...%x40"
436 "|as PostScript...%x42"
437 "|as Ascii Text...%x43"));
439 SubFileExport=fl_defpup(FL_ObjWin(ob),
443 "|as PostScript...%x42"
444 "|as Ascii Text...%x43"));
446 fl_setpup_shortcut(SubFileExport, 40, scex(_("FEX|Ll#l#L")));
447 fl_setpup_shortcut(SubFileExport, 41, scex(_("FEX|Dd#d#D")));
448 fl_setpup_shortcut(SubFileExport, 42, scex(_("FEX|Pp#p#P")));
449 fl_setpup_shortcut(SubFileExport, 43, scex(_("FEX|Tt#t#T")));
450 fl_setpup_shortcut(SubFileExport, 44, scex(_("FEX|mM#m#M")));
452 int FileMenu = fl_defpup(FL_ObjWin(ob),
454 "|New from template..."
468 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
469 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
470 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
471 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Cc#c#C")));
472 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|Ss#s#S")));
473 fl_setpup_shortcut(FileMenu, 6, scex(_("FM|Aa#a#A")));
474 fl_setpup_shortcut(FileMenu, 7, scex(_("FM|Rr#r#R")));
475 fl_setpup_shortcut(FileMenu, 8, scex(_("FM|dD#d#D")));
476 fl_setpup_shortcut(FileMenu, 9, scex(_("FM|wW#w#W")));
477 fl_setpup_shortcut(FileMenu,10, scex(_("FM|vV#v#V")));
478 fl_setpup_shortcut(FileMenu,11, scex(_("FM|Uu#u#U")));
479 fl_setpup_shortcut(FileMenu,12, scex(_("FM|Bb#b#B")));
480 fl_setpup_shortcut(FileMenu,13, scex(_("FM|Pp#p#P")));
481 fl_setpup_shortcut(FileMenu,14, scex(_("FM|Ff#f#F")));
483 // These commands are disabled when the corresponding programs
484 // are not installed. I simply grey them out, since I do not
485 // want to change their number (JMarc)
486 bool hasLaTeX = lyxrc->latex_command != "none";
488 if (!hasLaTeX || lyxrc->view_dvi_command == "none")
489 fl_setpup_mode(FileMenu, 8, FL_PUP_GREY);
491 if (!hasLaTeX || lyxrc->view_ps_command == "none")
492 fl_setpup_mode(FileMenu, 9, FL_PUP_GREY);
495 fl_setpup_mode(FileMenu, 10, FL_PUP_GREY);
496 fl_setpup_mode(FileMenu, 11, FL_PUP_GREY);
499 if (lyxrc->literate_command == "none" || ! Literate)
500 fl_setpup_mode(FileMenu, 12, FL_PUP_GREY);
502 if (!hasLaTeX || lyxrc->print_command == "none")
503 fl_setpup_mode(FileMenu, 13, FL_PUP_GREY);
505 if (!hasLaTeX || lyxrc->fax_command == "none")
506 fl_setpup_mode(FileMenu, 14, FL_PUP_GREY);
508 bool hasReLyX = lyxrc->relyx_command != "none";
510 // Disable import LaTeX and Noweb
511 fl_setpup_mode(SubFileImport, 30, FL_PUP_GREY);
512 fl_setpup_mode(SubFileImport, 33, FL_PUP_GREY);
516 // Disable export dvi and export postscript
517 fl_setpup_mode(SubFileExport, 41, FL_PUP_GREY);
518 fl_setpup_mode(SubFileExport, 42, FL_PUP_GREY);
520 // xgettext:no-c-format
521 fl_addtopup(FileMenu,_("|Import%m"), SubFileImport);
522 // xgettext:no-c-format
523 fl_addtopup(FileMenu,_("|Export%m%l"), SubFileExport);
524 // xgettext:no-c-format
525 fl_addtopup(FileMenu,_("|Exit%l"));
526 fl_setpup_shortcut(FileMenu, 15, scex(_("FM|Ii#i#I")));
527 fl_setpup_shortcut(FileMenu, 16, scex(_("FM|Ee#e#E")));
528 fl_setpup_shortcut(FileMenu, 17, scex(_("FM|xX#x#X")));
530 // make the lastfiles menu
531 LastFiles_Iter liter(*lastfiles); // :-)
534 while( ii < 10 && !(filname = liter()).empty() ) {
537 LString relbuf = MakeDisplayPath(filname,30);
540 tmp += ". " + relbuf;
541 tmp2 += LString('#') + ii;
542 fl_addtopup(FileMenu, tmp.c_str());
543 fl_setpup_shortcut(FileMenu, 18 - 1 + ii, tmp2.c_str());
549 men->_view->getForm()->x + ob->x,
550 men->_view->getForm()->y + ob->y + ob->h + 10);
551 int choice = fl_dopup(FileMenu);
554 // set the pseudo menu-button back
555 fl_set_object_boxtype(ob, FL_FLAT_BOX);
556 fl_redraw_object(ob);
559 case -1: case 0: // we won't do anything
561 case 1: tmpfunc->Dispatch(LFUN_MENUNEW); break;
562 case 2: tmpfunc->Dispatch(LFUN_MENUNEWTMPLT); break;
563 case 3: tmpfunc->Dispatch(LFUN_MENUOPEN); break;
564 case 4: tmpfunc->Dispatch(LFUN_CLOSEBUFFER); break;
565 case 5: tmpfunc->Dispatch(LFUN_MENUWRITE); break;
566 case 6: tmpfunc->Dispatch(LFUN_MENUWRITEAS); break;
567 case 7: tmpfunc->Dispatch(LFUN_MENURELOAD); break;
568 case 8: tmpfunc->Dispatch(LFUN_PREVIEW); break;
569 case 9: tmpfunc->Dispatch(LFUN_PREVIEWPS); break;
570 case 10: tmpfunc->Dispatch(LFUN_RUNLATEX); break;
571 case 11: tmpfunc->Dispatch(LFUN_RUNDVIPS); break;
572 case 12: tmpfunc->Dispatch(LFUN_BUILDPROG); break;
573 case 13: tmpfunc->Dispatch(LFUN_MENUPRINT); break;
574 case 14: tmpfunc->Dispatch(LFUN_FAX); break;
575 case 15: // import menu
576 case 30: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
578 case 31: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
580 case 32: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
582 case 33: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
584 case 16: // export menu
586 if (!LinuxDoc && !DocBook)
587 tmpfunc->Dispatch(LFUN_EXPORT, "latex");
589 tmpfunc->Dispatch(LFUN_EXPORT, "linuxdoc");
591 tmpfunc->Dispatch(LFUN_EXPORT, "docbook");
593 case 41: tmpfunc->Dispatch(LFUN_EXPORT, "dvi");
595 case 42: tmpfunc->Dispatch(LFUN_EXPORT, "postscript");
597 case 43: tmpfunc->Dispatch(LFUN_EXPORT, "ascii");
599 case 44: tmpfunc->Dispatch(LFUN_EXPORT, "custom");
601 case 17: tmpfunc->Dispatch(LFUN_QUIT); break;
603 case 18: // The first item with lastfiles.
605 men->currentView()->setBuffer(bufferlist.loadLyXFile(liter[choice-18])); // ok one more
608 fl_freepup(SubFileImport);
609 fl_freepup(SubFileExport);
610 fl_freepup(FileMenu);
616 void Menus::ShowFileMenu2(FL_OBJECT *ob, long)
618 Menus *men = (Menus*) ob->u_ldata;
620 // Regarding the pseudo-menu-button:
621 // ok, ok this is a hack. It would be better to use the menus of the
622 // xforms 0.8 library. but then all popups have to be defined all the
623 // time, code rewriting would be necessary and contex-depending menus
624 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
625 // course it would be more proper (and little faster). So if anybody
626 // likes to do the cleanup, just do it. Matthias
628 // set the pseudo menu-button
629 fl_set_object_boxtype(ob, FL_UP_BOX);
630 fl_set_button(ob, 0);
631 fl_redraw_object(ob);
633 LyXFunc *tmpfunc = men->_view->getLyXFunc();
637 int SubFileImport = fl_defpup(FL_ObjWin(ob),
640 "|Ascii Text as Lines...%x16"
641 "|Ascii Text as Paragraphs...%x17"
643 fl_setpup_shortcut(SubFileImport, 15, scex(_("FIM|Ll#l#L")));
644 fl_setpup_shortcut(SubFileImport, 16, scex(_("FIM|Aa#a#A")));
645 fl_setpup_shortcut(SubFileImport, 17, scex(_("FIM|Pp#p#P")));
646 fl_setpup_shortcut(SubFileImport, 18, scex(_("FIM|Nn#n#N")));
648 bool hasReLyX = lyxrc->relyx_command != "none";
650 // Disable import LaTeX and Noweb
651 fl_setpup_mode(SubFileImport, 15, FL_PUP_GREY);
652 fl_setpup_mode(SubFileImport, 18, FL_PUP_GREY);
655 // This can be done cleaner later.
656 int FileMenu = fl_defpup(FL_ObjWin(ob),
658 "|New from template..."
661 "|Exit%l"), SubFileImport);
662 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
663 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
664 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
665 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Ii#i#I")));
666 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|xX#x#X")));
668 // make the lastfiles menu
669 LastFiles_Iter liter(*lastfiles); // :-)
672 while( ii < 10 && !(filname = liter()).empty() ) {
675 LString relbuf = MakeDisplayPath(filname,30);
678 tmp += ". " + relbuf;
679 tmp2 += LString('#') + ii;
680 fl_addtopup(FileMenu, tmp.c_str());
681 fl_setpup_shortcut(FileMenu, 6 - 1 + ii, tmp2.c_str());
687 men->_view->getForm()->x + ob->x,
688 men->_view->getForm()->y + ob->y + ob->h + 10);
689 int choice = fl_dopup(FileMenu);
692 // set the pseudo menu-button back
693 fl_set_object_boxtype(ob, FL_FLAT_BOX);
694 fl_redraw_object(ob);
697 case -1: case 0: // we won't do anything
700 tmpfunc->Dispatch(LFUN_MENUNEW);
703 tmpfunc->Dispatch(LFUN_MENUNEWTMPLT);
706 tmpfunc->Dispatch(LFUN_MENUOPEN);
708 case 4: // import menu
709 case 15: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
711 case 16: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
713 case 17: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
715 case 18: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
718 tmpfunc->Dispatch(LFUN_QUIT);
722 men->currentView()->setBuffer(bufferlist.loadLyXFile(liter[choice-6]));
726 fl_freepup(SubFileImport);
727 fl_freepup(FileMenu);
733 void Menus::ShowEditMenu(FL_OBJECT *ob, long)
735 Menus *men = (Menus*) ob->u_ldata;
737 // set the pseudo menu-button
738 fl_set_object_boxtype(ob, FL_UP_BOX);
739 fl_set_button(ob, 0);
740 fl_redraw_object(ob);
742 Buffer *tmpbuffer = men->_view->currentBuffer();
743 LyXFunc *tmpfunc = men->_view->getLyXFunc();
745 // Floats & Insets submenu
746 int SubEditFloats=fl_defpup(FL_ObjWin(ob),
747 _("Floats & Insets%t"
750 "|Open All Footnotes/Margin Notes%x23"
751 "|Close All Footnotes/Margin Notes%x24"
752 "|Open All Figures/Tables%x25"
753 "|Close All Figures/Tables%x26%l"
754 "|Remove all Error Boxes%x27")
756 fl_setpup_shortcut(SubEditFloats, 21, scex(_("EMF|Oo#o#O")));
757 fl_setpup_shortcut(SubEditFloats, 22, scex(_("EMF|Mm#m#M")));
758 fl_setpup_shortcut(SubEditFloats, 23, scex(_("EMF|Aa#a#A")));
759 fl_setpup_shortcut(SubEditFloats, 24, scex(_("EMF|Cc#c#C")));
760 fl_setpup_shortcut(SubEditFloats, 25, scex(_("EMF|Ff#f#F")));
761 fl_setpup_shortcut(SubEditFloats, 26, scex(_("EMF|Tt#t#T")));
762 fl_setpup_shortcut(SubEditFloats, 27, scex(_("EMF|Rr#r#R")));
765 int SubEditTable = fl_newpup(FL_ObjWin(ob));
766 if (men->currentView()->available() &&
767 tmpbuffer->text->cursor.par->table &&
768 !tmpbuffer->isReadonly()){
770 fl_addtopup(SubEditTable, _("Table%t"));
772 if (tmpbuffer->text->cursor.par->table->
773 IsMultiColumn(tmpbuffer->text->
774 NumberOfCell(tmpbuffer->
778 fl_addtopup(SubEditTable, _("|Multicolumn%B%x44%l"));
780 fl_addtopup(SubEditTable, _("|Multicolumn%b%x44%l"));
781 fl_setpup_shortcut(SubEditTable, 44, scex(_("EMT|Mm#m#M")));
783 if (tmpbuffer->text->cursor.par->table->
784 TopLine(tmpbuffer->text->
785 NumberOfCell(tmpbuffer->
789 fl_addtopup(SubEditTable, _("|Line Top%B%x36"));
791 fl_addtopup(SubEditTable, _("|Line Top%b%x36"));
792 fl_setpup_shortcut(SubEditTable, 36, scex(_("EMT|Tt#t#T")));
794 if (tmpbuffer->text->cursor.par->table->
795 BottomLine(tmpbuffer->text->
796 NumberOfCell(tmpbuffer->
800 fl_addtopup(SubEditTable, _("|Line Bottom%B%x37"));
802 fl_addtopup(SubEditTable, _("|Line Bottom%b%x37"));
803 fl_setpup_shortcut(SubEditTable, 37, scex(_("EMT|Bb#b#B")));
805 if (tmpbuffer->text->cursor.par->table->
806 LeftLine(tmpbuffer->text->
807 NumberOfCell(tmpbuffer->
811 fl_addtopup(SubEditTable, _("|Line Left%B%x38"));
813 fl_addtopup(SubEditTable, _("|Line Left%b%x38"));
814 fl_setpup_shortcut(SubEditTable, 38, scex(_("EMT|Ll#l#L")));
816 if (tmpbuffer->text->cursor.par->table->
817 RightLine(tmpbuffer->text->
818 NumberOfCell(tmpbuffer->
822 fl_addtopup(SubEditTable, _("|Line Right%B%x39%l"));
824 fl_addtopup(SubEditTable, _("|Line Right%b%x39%l"));
825 fl_setpup_shortcut(SubEditTable, 39, scex(_("EMT|Rr#r#R")));
827 int align = tmpbuffer->text->cursor.par->
828 table->GetAlignment(tmpbuffer->text->
829 NumberOfCell(tmpbuffer->
833 if (align == LYX_ALIGN_LEFT)
834 fl_addtopup(SubEditTable, _("|Align Left%R%x40"));
836 fl_addtopup(SubEditTable, _("|Align Left%r%x40"));
837 fl_setpup_shortcut(SubEditTable, 40, scex(_("EMT|eE#e#E")));
839 if (align == LYX_ALIGN_RIGHT)
840 fl_addtopup(SubEditTable, _("|Align Right%R%x41"));
842 fl_addtopup(SubEditTable, _("|Align Right%r%x41"));
843 fl_setpup_shortcut(SubEditTable, 41, scex(_("EMT|iI#i#I")));
845 if (align == LYX_ALIGN_CENTER)
846 fl_addtopup(SubEditTable, _("|Align Center%R%x42%l"));
848 fl_addtopup(SubEditTable, _("|Align Center%r%x42%l"));
849 fl_setpup_shortcut(SubEditTable, 42, scex(_("EMT|Cc#c#C")));
851 // xgettext:no-c-format
852 fl_addtopup(SubEditTable, _("|Append Row%x32"));
853 fl_setpup_shortcut(SubEditTable, 32, scex(_("EMT|oO#o#O")));
854 // xgettext:no-c-format
855 fl_addtopup(SubEditTable, _("|Append Column%x33%l"));
856 fl_setpup_shortcut(SubEditTable, 33, scex(_("EMT|uU#u#U")));
857 // xgettext:no-c-format
858 fl_addtopup(SubEditTable, _("|Delete Row%x34"));
859 fl_setpup_shortcut(SubEditTable, 34, scex(_("EMT|wW#w#W")));
860 // xgettext:no-c-format
861 fl_addtopup(SubEditTable, _("|Delete Column%x35%l"));
862 fl_setpup_shortcut(SubEditTable, 35, scex(_("EMT|nN#n#N")));
863 // xgettext:no-c-format
864 fl_addtopup(SubEditTable, _("|Delete Table%x43"));
865 fl_setpup_shortcut(SubEditTable, 43, scex(_("EMT|Dd#d#D")));
868 fl_addtopup(SubEditTable, _("Table%t"));
869 // xgettext:no-c-format
870 fl_addtopup(SubEditTable, _("|Insert table%x31"));
871 fl_setpup_shortcut(SubEditTable, 31, scex(_("EMT|Ii#i#I")));
874 int SubVersionControl = fl_newpup(FL_ObjWin(ob));
875 fl_addtopup(SubVersionControl, _("Version Control%t"));
876 if (tmpbuffer->lyxvc.inUse()) {
877 // xgettext:no-c-format
878 fl_addtopup(SubVersionControl, _("|Register%d%x51"));
879 if (tmpbuffer->isReadonly()) {
880 // signifies that the file is not checked out
881 // xgettext:no-c-format
882 fl_addtopup(SubVersionControl, _("|Check In Changes%d%x52"));
883 // xgettext:no-c-format
884 fl_addtopup(SubVersionControl, _("|Check Out for Edit%x53"));
886 // signifies that the file is checked out
887 // xgettext:no-c-format
888 fl_addtopup(SubVersionControl, _("|Check In Changes%x52"));
889 // xgettext:no-c-format
890 fl_addtopup(SubVersionControl, _("|Check Out for Edit%d%x53"));
892 // xgettext:no-c-format
893 fl_addtopup(SubVersionControl, _("|Revert to last version%x54"));
894 // xgettext:no-c-format
895 fl_addtopup(SubVersionControl, _("|Undo last check in%x55"));
896 // xgettext:no-c-format
897 fl_addtopup(SubVersionControl, _("|Show History%x56"));
899 // xgettext:no-c-format
900 fl_addtopup(SubVersionControl, _("|Register%x51"));
902 // the shortcuts are not good.
903 fl_setpup_shortcut(SubVersionControl, 51, scex(_("EMV|Rr#r#R")));
904 fl_setpup_shortcut(SubVersionControl, 52, scex(_("EMV|Ii#i#I")));
905 fl_setpup_shortcut(SubVersionControl, 53, scex(_("EMV|Oo#o#O")));
906 fl_setpup_shortcut(SubVersionControl, 54, scex(_("EMV|lL#l#l")));
907 fl_setpup_shortcut(SubVersionControl, 55, scex(_("EMV|Uu#u#U")));
908 fl_setpup_shortcut(SubVersionControl, 56, scex(_("EMV|Hh#h#H")));
910 int EditMenu=fl_defpup(FL_ObjWin(ob),
923 "|Table of Contents...%l"
924 "|Version Control%m%l"
925 "|View LaTeX log file%l"
926 "|Paste Primary Selection as Lines"
927 "|Paste Primary Selection as Paragraphs"),
928 SubEditFloats, SubEditTable, SubVersionControl);
930 fl_setpup_shortcut(EditMenu, 1, scex(_("EM|Uu#u#U")));
931 fl_setpup_shortcut(EditMenu, 2, scex(_("EM|Rr#r#R")));
932 fl_setpup_shortcut(EditMenu, 3, scex(_("EM|Cc#c#C")));
933 fl_setpup_shortcut(EditMenu, 4, scex(_("EM|oO#o#O")));
934 fl_setpup_shortcut(EditMenu, 5, scex(_("EM|Pp#p#P")));
935 fl_setpup_shortcut(EditMenu, 6, scex(_("EM|Ff#f#F")));
936 fl_setpup_shortcut(EditMenu, 7, scex(_("EM|Ee#e#E")));
937 fl_setpup_shortcut(EditMenu, 8, scex(_("EM|Nn#n#N")));
938 fl_setpup_shortcut(EditMenu, 9, scex(_("EM|Ii#i#I")));
939 fl_setpup_shortcut(EditMenu, 10, scex(_("EM|Tt#t#T")));
940 fl_setpup_shortcut(EditMenu, 11, scex(_("EM|Ss#s#S")));
941 fl_setpup_shortcut(EditMenu, 12, scex(_("EM|hH#h#H")));
942 fl_setpup_shortcut(EditMenu, 13, scex(_("EM|aA#a#A")));
943 fl_setpup_shortcut(EditMenu, 14, scex(_("EM|Vv#v#V")));
944 fl_setpup_shortcut(EditMenu, 15, scex(_("EM|wW#w#W")));
945 fl_setpup_shortcut(EditMenu, 16, scex(_("EM|Ll#l#L")));
946 fl_setpup_shortcut(EditMenu, 17, scex(_("EM|gG#g#G")));
948 // disable unavailable entries.
949 if(tmpbuffer->undostack.Top() == NULL)
950 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
951 if(tmpbuffer->redostack.Top() == NULL)
952 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
953 if(lyxrc->isp_command == "none")
954 fl_setpup_mode(EditMenu, 11, FL_PUP_GREY);
955 if(lyxrc->chktex_command == "none")
956 fl_setpup_mode(EditMenu, 12, FL_PUP_GREY);
958 if (tmpbuffer->isReadonly()) {
959 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
960 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
961 fl_setpup_mode(EditMenu, 3, FL_PUP_GREY);
962 fl_setpup_mode(EditMenu, 5, FL_PUP_GREY);
963 fl_setpup_mode(EditMenu, 16, FL_PUP_GREY);
964 fl_setpup_mode(EditMenu, 17, FL_PUP_GREY);
967 fl_setpup_position(men->_view->getForm()->x + ob->x,
968 men->_view->getForm()->y + ob->y +
970 int choice = fl_dopup(EditMenu);
973 // set the pseudo menu-button back
974 fl_set_object_boxtype(ob, FL_FLAT_BOX);
975 fl_redraw_object(ob);
978 case 1: tmpfunc->Dispatch(LFUN_UNDO); break;
979 case 2: tmpfunc->Dispatch(LFUN_REDO); break;
980 case 3: tmpfunc->Dispatch(LFUN_CUT); break;
981 case 4: tmpfunc->Dispatch(LFUN_COPY); break;
982 case 5: tmpfunc->Dispatch(LFUN_PASTE); break;
983 case 6: tmpfunc->Dispatch(LFUN_MENUSEARCH); break;
984 case 7: tmpfunc->Dispatch(LFUN_GOTOERROR); break;
985 case 8: tmpfunc->Dispatch(LFUN_GOTONOTE); break;
986 case 9: // floats & insets
990 case 11: tmpfunc->Dispatch(LFUN_SPELLCHECK); break;
991 case 12: tmpfunc->Dispatch(LFUN_RUNCHKTEX); break;
992 case 13: tmpfunc->Dispatch(LFUN_TOCVIEW); break;
993 case 14: // version control
995 case 15: tmpfunc->Dispatch(LFUN_LATEX_LOG); break;
996 case 16: tmpfunc->Dispatch(LFUN_PASTESELECTION, "line"); break;
997 case 17: tmpfunc->Dispatch(LFUN_PASTESELECTION, "paragraph"); break;
999 // floats & insets sub-menu
1000 case 21: ToggleFloat(); break;
1001 case 22: tmpfunc->Dispatch(LFUN_MELT); break;
1002 case 23: AllFloats(1, 0); break;
1003 case 24: AllFloats(0, 0); break;
1004 case 25: AllFloats(1, 1); break;
1005 case 26: AllFloats(0, 1); break;
1006 case 27: tmpfunc->Dispatch(LFUN_REMOVEERRORS); break;
1008 case 31: tmpfunc->Dispatch(LFUN_TABLE); break;
1009 // this is really temporary. We need new function in keybind.C
1010 // These should set the minibuffer, too.
1011 case 32: case 33: case 34:
1012 case 35: case 36: case 37:
1013 case 38: case 39: case 40:
1014 case 41: case 42: case 43:
1016 if (men->currentView()->available()){
1017 men->currentView()->getScreen()->HideCursor();
1018 if (!tmpbuffer->text->selection){
1020 tmpbuffer->update(-2);
1023 TableFeatures(choice - 32);
1024 tmpbuffer->update(1);
1027 // version control sub-menu
1028 case 51: // register
1029 tmpfunc->Dispatch(LFUN_VC_REGISTER);
1031 case 52: // check in
1032 tmpfunc->Dispatch(LFUN_VC_CHECKIN);
1034 case 53: // check out
1035 tmpfunc->Dispatch(LFUN_VC_CHECKOUT);
1037 case 54: // revert to last
1038 tmpfunc->Dispatch(LFUN_VC_REVERT);
1040 case 55: // undo last
1041 tmpfunc->Dispatch(LFUN_VC_UNDO);
1043 case 56: // show history
1044 tmpfunc->Dispatch(LFUN_VC_HISTORY);
1048 fl_freepup(EditMenu);
1049 fl_freepup(SubEditFloats);
1050 fl_freepup(SubEditTable);
1051 fl_freepup(SubVersionControl);
1055 void Menus::ShowLayoutMenu(FL_OBJECT *ob, long)
1057 Menus *men = (Menus*) ob->u_ldata;
1059 if (!men->currentView()->available())
1062 // set the pseudo menu-button
1063 fl_set_object_boxtype(ob, FL_UP_BOX);
1064 fl_set_button(ob, 0);
1065 fl_redraw_object(ob);
1067 Buffer *tmpbuffer = men->_view->currentBuffer();
1068 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1070 int LayoutMenu = fl_newpup(FL_ObjWin(ob));
1071 fl_addtopup(LayoutMenu, _("Character..."
1077 "|Emphasize Style%b"
1081 "|Change Environment Depth"
1082 "|LaTeX Preamble...%l"
1083 "|Save layout as default"));
1084 fl_setpup_shortcut(LayoutMenu, 1, scex(_("LM|Cc#c#C")));
1085 fl_setpup_shortcut(LayoutMenu, 2, scex(_("LM|Pp#p#P")));
1086 fl_setpup_shortcut(LayoutMenu, 3, scex(_("LM|Dd#d#D")));
1087 fl_setpup_shortcut(LayoutMenu, 4, scex(_("LM|aA#a#A")));
1088 fl_setpup_shortcut(LayoutMenu, 5, scex(_("LM|eE#e#E")));
1089 fl_setpup_shortcut(LayoutMenu, 6, scex(_("LM|Qq#q#Q")));
1090 fl_setpup_shortcut(LayoutMenu, 7, scex(_("LM|mM#m#M")));
1091 fl_setpup_shortcut(LayoutMenu, 8, scex(_("LM|Nn#n#N")));
1092 fl_setpup_shortcut(LayoutMenu, 9, scex(_("LM|Bb#b#B")));
1093 fl_setpup_shortcut(LayoutMenu, 10, scex(_("LM|Tt#t#T")));
1094 fl_setpup_shortcut(LayoutMenu, 11, scex(_("LM|vV#v#V")));
1095 fl_setpup_shortcut(LayoutMenu, 12, scex(_("LM|Ll#l#L")));
1096 fl_setpup_shortcut(LayoutMenu, 13, scex(_("LM|Ss#s#S")));
1098 // Set values of checkboxes according to font
1099 LyXFont font = tmpbuffer->text->real_current_font;
1100 if (font.emph() == LyXFont::ON)
1101 fl_setpup_mode(LayoutMenu, 7, FL_PUP_CHECK);
1102 if (font.noun() == LyXFont::ON)
1103 fl_setpup_mode(LayoutMenu, 8, FL_PUP_CHECK);
1104 if (font.series() == LyXFont::BOLD_SERIES)
1105 fl_setpup_mode(LayoutMenu, 9, FL_PUP_CHECK);
1106 if (font.latex() == LyXFont::ON)
1107 fl_setpup_mode(LayoutMenu, 10, FL_PUP_CHECK);
1109 // Grey out unavailable entries
1110 if (!tmpbuffer->text->cursor.par->table)
1111 fl_setpup_mode(LayoutMenu, 5, FL_PUP_GREY);
1113 if (tmpbuffer->isReadonly()) {
1114 fl_setpup_mode(LayoutMenu, 1, FL_PUP_GREY);
1115 fl_setpup_mode(LayoutMenu, 6, FL_PUP_GREY);
1116 fl_setpup_mode(LayoutMenu, 11, FL_PUP_GREY);
1120 men->_view->getForm()->x + ob->x,
1121 men->_view->getForm()->y + ob->y + ob->h + 10);
1122 int choice = fl_dopup(LayoutMenu);
1125 // set the pseudo menu-button back
1126 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1127 fl_redraw_object(ob);
1130 case 1: tmpfunc->Dispatch(LFUN_LAYOUT_CHARACTER); break;
1131 case 2: tmpfunc->Dispatch(LFUN_LAYOUT_PARAGRAPH); break;
1132 case 3: tmpfunc->Dispatch(LFUN_LAYOUT_DOCUMENT); break;
1133 case 4: tmpfunc->Dispatch(LFUN_LAYOUT_PAPER); break;
1134 case 5: tmpfunc->Dispatch(LFUN_LAYOUT_TABLE, "true"); break;
1135 case 6: tmpfunc->Dispatch(LFUN_LAYOUT_QUOTES); break;
1136 case 7: tmpfunc->Dispatch(LFUN_EMPH); break;
1137 case 8: tmpfunc->Dispatch(LFUN_NOUN); break;
1138 case 9: tmpfunc->Dispatch(LFUN_BOLD); break;
1139 case 10: tmpfunc->Dispatch(LFUN_TEX); break;
1140 case 11: tmpfunc->Dispatch(LFUN_DEPTH_PLUS); break;
1141 case 12: tmpfunc->Dispatch(LFUN_LAYOUT_PREAMBLE); break;
1142 case 13: tmpfunc->Dispatch(LFUN_LAYOUT_SAVE_DEFAULT); break;//MenuLayoutSave(); break;
1144 fl_freepup(LayoutMenu);
1148 void Menus::ShowInsertMenu(FL_OBJECT *ob, long /*data*/)
1150 Menus *men = (Menus*) ob->u_ldata;
1152 // set the pseudo menu-button
1153 fl_set_object_boxtype(ob, FL_UP_BOX);
1154 fl_set_button(ob, 0);
1155 fl_redraw_object(ob);
1157 Buffer *tmpbuffer = men->_view->currentBuffer();
1158 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1161 // Is textclass LinuxDoc?
1162 bool LinuxDoc = tmpbuffer->isLinuxDoc();
1165 int SubInsertAscii = fl_defpup(FL_ObjWin(ob),
1166 _("Import ASCII file%t"
1168 "|As Paragraphs%x42"));
1169 fl_setpup_shortcut(SubInsertAscii, 41, scex(_("IMA|Ll#l#L")));
1170 fl_setpup_shortcut(SubInsertAscii, 42, scex(_("IMA|Pp#p#P")));
1172 int SubInsertTableList=fl_defpup(FL_ObjWin(ob),
1174 "|Table of Contents%x21"
1175 "|List of Figures%x22"
1176 "|List of Tables%x23"
1177 "|List of Algorithms%x24"
1179 "|BibTeX Reference%x26"));
1180 fl_setpup_shortcut(SubInsertTableList, 21, scex(_("IMT|Cc#c#C")));
1181 fl_setpup_shortcut(SubInsertTableList, 22, scex(_("IMT|Ff#f#F")));
1182 fl_setpup_shortcut(SubInsertTableList, 23, scex(_("IMT|Tt#t#T")));
1183 fl_setpup_shortcut(SubInsertTableList, 24, scex(_("IMT|Aa#a#A")));
1184 fl_setpup_shortcut(SubInsertTableList, 25, scex(_("IMT|Ii#i#I")));
1185 fl_setpup_shortcut(SubInsertTableList, 26, scex(_("IMT|Bb#b#B")));
1187 int SubInsertFloatList;
1188 //if (men->_view->currentBuffer()->params.columns == 1) {
1189 // SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
1191 // "|Figure Float%x71"
1192 // "|Table Float%l%x72"
1193 // "|Algorithm Float%x73"));
1196 SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
1200 "|Wide Figure Float%x73"
1201 "|Wide Table Float%l%x74"
1202 "|Algorithm Float%x75"));
1204 fl_setpup_shortcut(SubInsertFloatList, 71, scex(_("IMF|gG#g#G")));
1205 fl_setpup_shortcut(SubInsertFloatList, 72, scex(_("IMF|Tt#t#T")));
1206 fl_setpup_shortcut(SubInsertFloatList, 73, scex(_("IMF|Ww#w#W")));
1207 fl_setpup_shortcut(SubInsertFloatList, 74, scex(_("IMF|iI#i#I")));
1208 fl_setpup_shortcut(SubInsertFloatList, 75, scex(_("IMF|Aa#a#A")));
1210 int SubInsertSpecial=fl_defpup(FL_ObjWin(ob),
1211 _("Special Character%t"
1213 "|Hyphenation Point%x32"
1214 "|Protected Blank%x33"
1216 "|Ellipsis (...)%x35"
1217 "|End of sentence period%x36"
1218 "|Ordinary Quote (\")%x37"
1219 "|Menu Separator %x38"));
1221 fl_setpup_shortcut(SubInsertSpecial, 31, scex(_("IMS|Hh#h#H")));
1222 fl_setpup_shortcut(SubInsertSpecial, 32, scex(_("IMS|Pp#p#P")));
1223 fl_setpup_shortcut(SubInsertSpecial, 33, scex(_("IMS|Bb#b#B")));
1224 fl_setpup_shortcut(SubInsertSpecial, 34, scex(_("IMS|Ll#l#L")));
1225 fl_setpup_shortcut(SubInsertSpecial, 35, scex(_("IMS|iI#i#I")));
1226 fl_setpup_shortcut(SubInsertSpecial, 36, scex(_("IMS|Ee#e#E")));
1227 fl_setpup_shortcut(SubInsertSpecial, 37, scex(_("IMS|Qq#q#Q")));
1228 fl_setpup_shortcut(SubInsertSpecial, 38, scex(_("IMS|Mm#m#M")));
1230 int InsertMenu = fl_defpup(FL_ObjWin(ob),
1234 "|Import ASCII File%m"
1235 "|Insert LyX File...%l"
1240 "|Special Character%m%l"
1243 "|Cross-Reference..."
1244 "|Citation Reference..."
1246 "|Index entry of last word"),
1252 fl_setpup_shortcut(InsertMenu, 1, scex(_("IM|gG#g#G")));
1253 fl_setpup_shortcut(InsertMenu, 2, scex(_("IM|bB#b#B")));
1254 fl_setpup_shortcut(InsertMenu, 3, scex(_("IM|cC#c#C")));
1255 fl_setpup_shortcut(InsertMenu, 4, scex(_("IM|Aa#a#A")));
1256 fl_setpup_shortcut(InsertMenu, 5, scex(_("IM|Xx#x#X")));
1257 fl_setpup_shortcut(InsertMenu, 6, scex(_("IM|Ff#f#F")));
1258 fl_setpup_shortcut(InsertMenu, 7, scex(_("IM|Mm#m#M")));
1259 fl_setpup_shortcut(InsertMenu, 8, scex(_("IM|oO#o#O")));
1260 fl_setpup_shortcut(InsertMenu, 9, scex(_("IM|Tt#t#T")));
1261 fl_setpup_shortcut(InsertMenu, 10, scex(_("IM|Ss#s#S")));
1262 fl_setpup_shortcut(InsertMenu, 11, scex(_("IM|Nn#n#N")));
1263 fl_setpup_shortcut(InsertMenu, 12, scex(_("IM|Ll#l#L")));
1264 fl_setpup_shortcut(InsertMenu, 13, scex(_("IM|rR#r#R")));
1265 fl_setpup_shortcut(InsertMenu, 14, scex(_("IM|iI#i#I")));
1266 fl_setpup_shortcut(InsertMenu, 15, scex(_("IM|dD#d#D")));
1267 fl_setpup_shortcut(InsertMenu, 16, scex(_("IM|wW#w#W")));
1271 /* for linuxdoc sgml */
1273 fl_addtopup(InsertMenu, _("|URL..."));
1274 fl_setpup_shortcut(InsertMenu, 17, scex(_("IM|Uu#u#U")));
1278 if (tmpbuffer->isReadonly()) {
1279 for (int ii = 1; ii <= 16; ii++)
1280 fl_setpup_mode(InsertMenu, ii, FL_PUP_GREY);
1284 fl_setpup_mode(InsertMenu, 17, FL_PUP_GREY);
1291 men->_view->getForm()->x + ob->x,
1292 men->_view->getForm()->y + ob->y + ob->h + 10);
1294 int choice = fl_dopup(InsertMenu);
1297 // set the pseudo menu-button back
1298 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1299 fl_redraw_object(ob);
1301 if (men->currentView()->available()){
1302 men->currentView()->getScreen()->HideCursor();
1304 case 1: tmpfunc->Dispatch(LFUN_FIGURE); break;
1305 case 2: tmpfunc->Dispatch(LFUN_TABLE); break;
1306 case 3: tmpfunc->Dispatch(LFUN_CHILDINSERT); break;
1307 case 4: // Insert ASCII file submenu
1309 case 5: tmpfunc->Dispatch(LFUN_FILE_INSERT); break;
1310 case 41: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "line"); break;
1311 case 42: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "paragraph"); break;
1315 case 6: tmpfunc->Dispatch(LFUN_FOOTMELT); break
1317 case 7: tmpfunc->Dispatch(LFUN_MARGINMELT); break;
1319 case 8: // Float sub-menu
1321 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "figure");
1324 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "table");
1327 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-fig");
1330 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-tab");
1333 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "algorithm");
1336 case 9: // Table/List submenu
1338 case 21: tmpfunc->Dispatch(LFUN_TOC_INSERT); break;
1339 case 22: tmpfunc->Dispatch(LFUN_LOF_INSERT); break;
1340 case 23: tmpfunc->Dispatch(LFUN_LOT_INSERT); break;
1341 case 24: tmpfunc->Dispatch(LFUN_LOA_INSERT); break;
1342 case 25: tmpfunc->Dispatch(LFUN_INDEX_PRINT); break;
1343 case 26: tmpfunc->Dispatch(LFUN_INSERT_BIBTEX); break;
1345 case 10: // Special Character submenu
1347 case 31: tmpfunc->Dispatch(LFUN_HFILL); break;
1348 case 32: tmpfunc->Dispatch(LFUN_HYPHENATION); break;
1349 case 33: tmpfunc->Dispatch(LFUN_PROTECTEDSPACE); break;
1350 case 34: tmpfunc->Dispatch(LFUN_BREAKLINE); break;
1351 case 35: tmpfunc->Dispatch(LFUN_LDOTS); break;
1352 case 36: tmpfunc->Dispatch(LFUN_END_OF_SENTENCE); break;
1353 case 37: tmpfunc->Dispatch(LFUN_QUOTE); break;
1354 case 38: tmpfunc->Dispatch(LFUN_MENU_SEPARATOR); break;
1356 case 11: tmpfunc->Dispatch(LFUN_INSERT_NOTE); break;
1357 case 12: tmpfunc->Dispatch(LFUN_INSERT_LABEL); break;
1358 case 13: tmpfunc->Dispatch(LFUN_INSERT_REF); break;
1359 case 14: tmpfunc->Dispatch(LFUN_INSERT_CITATION); break;
1360 case 15: tmpfunc->Dispatch(LFUN_INDEX_INSERT); break;
1361 case 16: tmpfunc->Dispatch(LFUN_INDEX_INSERT_LAST); break;
1362 case 17: tmpfunc->Dispatch(LFUN_URL); break;
1365 fl_freepup(InsertMenu);
1366 fl_freepup(SubInsertAscii);
1367 fl_freepup(SubInsertTableList);
1368 fl_freepup(SubInsertFloatList);
1369 fl_freepup(SubInsertSpecial);
1373 void Menus::ShowMathMenu(FL_OBJECT *ob, long)
1375 extern void math_insert_symbol(char const* s);
1377 Menus *men = (Menus*) ob->u_ldata;
1379 // set the pseudo menu-button
1380 fl_set_object_boxtype(ob, FL_UP_BOX);
1381 fl_set_button(ob, 0);
1382 fl_redraw_object(ob);
1384 Buffer *tmpbuffer = men->_view->currentBuffer();
1385 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1387 int MathMenu = fl_defpup(FL_ObjWin(ob),
1398 fl_setpup_shortcut(MathMenu, 1, scex(_("MM|Ff#f#F")));
1399 fl_setpup_shortcut(MathMenu, 2, scex(_("MM|Ss#s#S")));
1400 fl_setpup_shortcut(MathMenu, 3, scex(_("MM|Ee#e#E")));
1401 fl_setpup_shortcut(MathMenu, 4, scex(_("MM|xX#x#X")));
1402 fl_setpup_shortcut(MathMenu, 5, scex(_("MM|uU#u#U")));
1403 fl_setpup_shortcut(MathMenu, 6, scex(_("MM|Ii#i#I")));
1404 fl_setpup_shortcut(MathMenu, 7, scex(_("MM|Mm#m#M")));
1405 fl_setpup_shortcut(MathMenu, 8, scex(_("MM|Dd#d#D")));
1406 fl_setpup_shortcut(MathMenu, 9, scex(_("MM|Pp#p#P")));
1408 if (tmpbuffer->isReadonly())
1409 for (int ii = 1; ii <= 9; ii++)
1410 fl_setpup_mode(MathMenu, ii, FL_PUP_GREY);
1414 men->_view->getForm()->x + ob->x,
1415 men->_view->getForm()->y + ob->y + ob->h + 10);
1416 int choice = fl_dopup(MathMenu);
1419 // set the pseudo menu-button back
1420 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1421 fl_redraw_object(ob);
1423 if (men->currentView()->available()) {
1426 tmpfunc->Dispatch(LFUN_INSERT_MATH, "frac");
1429 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sqrt");
1431 case 3: /* Exponent */
1432 tmpfunc->Dispatch(LFUN_INSERT_MATH, "^");
1435 tmpfunc->Dispatch(LFUN_INSERT_MATH, "_");
1438 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sum");
1441 tmpfunc->Dispatch(LFUN_INSERT_MATH, "int");
1444 tmpfunc->Dispatch(LFUN_MATH_MODE);
1447 tmpfunc->Dispatch(LFUN_MATH_DISPLAY);
1450 show_symbols_form(tmpfunc);
1453 tmpbuffer->update(0);
1455 fl_freepup(MathMenu);
1459 void Menus::ShowOptionsMenu(FL_OBJECT *ob, long)
1461 Menus *men = (Menus*) ob->u_ldata;
1463 // set the pseudo menu-button
1464 fl_set_object_boxtype(ob, FL_UP_BOX);
1465 fl_set_button(ob, 0);
1466 fl_redraw_object(ob);
1468 //Buffer *tmpbuffer = men->_view->currentBuffer();
1469 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1471 int OptionsMenu = fl_defpup(FL_ObjWin(ob),
1473 "|Spellchecker Options..."
1478 fl_setpup_shortcut(OptionsMenu, 1, scex(_("OM|Ff#f#F")));
1479 fl_setpup_shortcut(OptionsMenu, 2, scex(_("OM|Ss#s#S")));
1480 fl_setpup_shortcut(OptionsMenu, 3, scex(_("OM|Kk#k#K")));
1481 fl_setpup_shortcut(OptionsMenu, 4, scex(_("OM|Ll#l#L")));
1482 fl_setpup_shortcut(OptionsMenu, 5, scex(_("OM|Rr#r#R")));
1484 if(lyxrc->isp_command == "none")
1485 fl_setpup_mode(OptionsMenu, 2, FL_PUP_GREY);
1488 men->_view->getForm()->x + ob->x,
1489 men->_view->getForm()->y + ob->y + ob->h + 10);
1490 int choice = fl_dopup(OptionsMenu);
1493 // set the pseudo menu-button back
1494 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1495 fl_redraw_object(ob);
1497 case 1: men->ScreenOptions(); break;
1498 case 2: SpellCheckerOptions(); break;
1499 case 3: men->_view->getIntl()->MenuKeymap(); break;
1500 case 4: LaTeXOptions(); break;
1501 case 5: tmpfunc->Dispatch(LFUN_RECONFIGURE); break;
1504 fl_freepup(OptionsMenu);
1508 void Menus::ShowBufferMenu(FL_OBJECT *ob, long)
1510 Menus *men = (Menus*) ob->u_ldata;
1512 // set the pseudo menu-button
1513 fl_set_object_boxtype(ob, FL_UP_BOX);
1514 fl_set_button(ob, 0);
1515 fl_redraw_object(ob);
1517 int BufferMenu = fl_newpup(FL_ObjWin(ob));
1518 bufferlist.makePup(BufferMenu);
1521 men->_view->getForm()->x + ob->x,
1522 men->_view->getForm()->y + ob->y + ob->h + 10);
1523 int choice = fl_dopup(BufferMenu);
1526 // set the pseudo menu-button back
1527 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1528 fl_redraw_object(ob);
1529 if (choice > 0) men->handleBufferMenu(choice);
1531 fl_freepup(BufferMenu);
1536 char const *doc_files [] = {"Intro", "Tutorial",
1537 "UserGuide", "Extended",
1538 "Customization", "Reference",
1539 "BUGS", "LaTeXConfig"};
1541 void Menus::ShowHelpMenu(FL_OBJECT *ob, long)
1543 Menus *men = (Menus*) ob->u_ldata;
1545 // set the pseudo menu-button
1546 fl_set_object_boxtype(ob, FL_UP_BOX);
1547 fl_set_button(ob, 0);
1548 fl_redraw_object(ob);
1550 int HelpMenu = fl_defpup(FL_ObjWin(ob),
1554 "|Extended Features"
1558 "|LaTeX Configuration%l"
1559 "|Copyright and Warranty..."
1563 fl_setpup_shortcut(HelpMenu, 1, scex(_("HM|Ii#I#i")));
1564 fl_setpup_shortcut(HelpMenu, 2, scex(_("HM|Tt#T#t")));
1565 fl_setpup_shortcut(HelpMenu, 3, scex(_("HM|Uu#U#u")));
1566 fl_setpup_shortcut(HelpMenu, 4, scex(_("HM|xX#x#X")));
1567 fl_setpup_shortcut(HelpMenu, 5, scex(_("HM|Cc#C#c")));
1568 fl_setpup_shortcut(HelpMenu, 6, scex(_("HM|Rr#R#r")));
1569 fl_setpup_shortcut(HelpMenu, 7, scex(_("HM|Kk#K#k")));
1570 fl_setpup_shortcut(HelpMenu, 8, scex(_("HM|Ll#L#l")));
1571 fl_setpup_shortcut(HelpMenu, 9, scex(_("HM|oO#o#O")));
1572 fl_setpup_shortcut(HelpMenu, 10, scex(_("HM|eE#e#E")));
1573 fl_setpup_shortcut(HelpMenu, 11, scex(_("HM|Vv#v#V")));
1576 men->_view->getForm()->x + ob->x,
1577 men->_view->getForm()->y + ob->y + ob->h + 10);
1578 int choice = fl_dopup(HelpMenu);
1581 // set the pseudo menu-button back
1582 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1583 fl_redraw_object(ob);
1586 case 1: case 2: case 3: case 4: case 5:
1587 case 6: case 7: case 8:
1589 men->MenuDocu(doc_files[choice - 1]);
1592 case 9: ShowCopyright(); break;
1593 case 10: ShowCredits(); break;
1596 fl_show_message((LString(_("LyX Version ")) + LYX_VERSION
1597 + _(" of ") + LYX_RELEASE).c_str(),
1598 (_("Library directory: ")
1599 + MakeDisplayPath(system_lyxdir)).c_str(),
1600 (_("User directory: ")
1601 + MakeDisplayPath(user_lyxdir)).c_str());
1605 fl_freepup(HelpMenu);
1609 void Menus::MenuDocu(LString const &docname)
1611 LString fname = i18nLibFileSearch("doc", docname, "lyx");
1612 _view->getMiniBuffer()->Set(_("Opening help file"),
1613 MakeDisplayPath(fname),"...");
1614 currentView()->setBuffer(bufferlist.loadLyXFile(fname,false));
1616 if (docname == "Reference")
1617 _view->getLyXFunc()->Dispatch(LFUN_TOCVIEW);
1621 void Menus::handleBufferMenu(int choice)
1623 currentView()->setBuffer(bufferlist.getBuffer(choice));