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"
50 extern FD_form_screen * fd_form_screen;
51 extern BufferList bufferlist;
53 // I would really prefere to see most or all of these 'extern's disappear.
54 // Their commands should be called through LyXFunc (IMO). (Lgb)
56 extern void MenuLayoutSave();
57 extern void ShowCredits();
58 extern void ShowCopyright();
59 extern void show_symbols_form(LyXFunc *);
60 extern void BeforeChange();
61 extern void ProhibitInput();
62 extern void AllowInput();
63 extern void OpenStuff();
64 extern void ToggleFloat();
65 extern void AllFloats(char flag, char figmar);
66 extern void LaTeXOptions();
68 // A bunch of wrappers
70 extern "C" void C_Menus_ShowFileMenu(FL_OBJECT * ob, long data)
72 Menus::ShowFileMenu(ob, data);
75 extern "C" void C_Menus_ShowFileMenu2(FL_OBJECT * ob, long data)
77 Menus::ShowFileMenu2(ob, data);
80 extern "C" void C_Menus_ShowEditMenu(FL_OBJECT * ob, long data)
82 Menus::ShowEditMenu(ob, data);
85 extern "C" void C_Menus_ShowLayoutMenu(FL_OBJECT * ob, long data)
87 Menus::ShowLayoutMenu(ob, data);
90 extern "C" void C_Menus_ShowInsertMenu(FL_OBJECT * ob, long data)
92 Menus::ShowInsertMenu(ob, data);
95 extern "C" void C_Menus_ShowMathMenu(FL_OBJECT * ob, long data)
97 Menus::ShowMathMenu(ob, data);
100 extern "C" void C_Menus_ShowOptionsMenu(FL_OBJECT * ob, long data)
102 Menus::ShowOptionsMenu(ob, data);
105 extern "C" void C_Menus_ShowBufferMenu(FL_OBJECT * ob, long data)
107 Menus::ShowBufferMenu(ob, data);
110 extern "C" void C_Menus_ShowHelpMenu(FL_OBJECT * ob, long data)
112 Menus::ShowHelpMenu(ob, data);
116 Menus::Menus(LyXView * view, int air)
120 // deactivate the menu accelerators
121 fl_set_object_shortcut(menu_file, "", 1);
122 fl_set_object_shortcut(menu_file2, "", 1);
123 fl_set_object_shortcut(menu_edit, "", 1);
124 fl_set_object_shortcut(menu_layout, "", 1);
125 fl_set_object_shortcut(menu_math, "", 1);
126 fl_set_object_shortcut(menu_insert, "", 1);
127 fl_set_object_shortcut(menu_options, "", 1);
128 fl_set_object_shortcut(menu_options2, "", 1);
129 fl_set_object_shortcut(menu_buffer, "", 1);
130 fl_set_object_shortcut(menu_help, "", 1);
131 fl_set_object_shortcut(menu_help2, "", 1);
136 inline BufferView * Menus::currentView()
138 return _view->view();
142 void Menus::showMenus()
144 fl_hide_object(menu_grp2);
145 fl_show_object(menu_grp1);
149 void Menus::hideMenus()
151 fl_hide_object(menu_grp1);
152 fl_show_object(menu_grp2);
156 void Menus::openByName(string const & menuName)
157 /* Opens the visible menu of given name, or simply does nothing
158 when the name is not known. NOTE THE EXTREMELY STUPID
159 IMPLEMENTATION! :-) There are probably hundred ways to do
160 this better, for instance, by scanning the menu objects and
161 testing for the given name. I leave this as an exercise for an
162 experienced GG (GUI Guy/Girl). RVDK_PATCH_5. */
164 if (menu_file->visible) {
165 if (menuName == _("File"))
166 ShowFileMenu(menu_file, 0);
167 else if (menuName == _("Edit"))
168 ShowEditMenu(menu_edit, 0);
169 else if (menuName == _("Layout"))
170 ShowLayoutMenu(menu_layout, 0);
171 else if (menuName == _("Insert"))
172 ShowInsertMenu(menu_insert, 0);
173 else if (menuName == _("Math"))
174 ShowMathMenu(menu_math, 0);
175 else if (menuName == _("Options"))
176 ShowOptionsMenu(menu_options, 0);
177 else if (menuName == _("Documents"))
178 ShowBufferMenu(menu_buffer, 0);
179 else if (menuName == _("Help"))
180 ShowHelpMenu(menu_help, 0);
181 else lyxerr << "The menu '" << menuName
182 << "' is not available." << endl;
184 if (menuName == _("File"))
185 ShowFileMenu2(menu_file2, 0);
186 else if (menuName == _("Options"))
187 ShowOptionsMenu(menu_options2, 0);
188 else if (menuName == _("Help"))
189 ShowHelpMenu(menu_help2, 0);
190 else lyxerr << "The menu '" << menuName
191 << "' is not available." << endl;
196 void Menus::create_menus(int air)
198 FL_FORM * form = _view->getForm();
200 // Here I'd really like to see code like:
204 const int MENU_LABEL_SIZE = FL_NORMAL_SIZE;
205 const int mheight = 30;
206 const int mbheight= 22;
207 // where to place the menubar?
208 const int yloc = (mheight - mbheight)/2; //air + bw;
209 const int mbadd = 20; // menu button add (to width)
213 obj = fl_add_frame(FL_UP_FRAME, 0, 0, form->w, mheight, "");
214 fl_set_object_resize(obj, FL_RESIZE_ALL);
215 fl_set_object_gravity(obj, NorthWestGravity, NorthEastGravity);
217 menu_grp1 = fl_bgn_group();
221 fl_add_button(FL_TOUCH_BUTTON,
223 fl_get_string_width(FL_BOLD_STYLE,
226 strlen(_("File"))) + mbadd,
227 mbheight, _("File"));
228 moffset += obj->w + air;
229 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
230 fl_set_object_callback(obj, C_Menus_ShowFileMenu, 0);
235 fl_add_button(FL_TOUCH_BUTTON,
237 fl_get_string_width(FL_BOLD_STYLE,
240 strlen(_("Edit"))) + mbadd,
241 mbheight, _("Edit"));
242 moffset += obj->w + air;
243 fl_set_object_shortcut(obj, scex(_("MB|#E")), 1);
244 fl_set_object_callback(obj, C_Menus_ShowEditMenu, 0);
247 // Layout menu button
249 fl_add_button(FL_TOUCH_BUTTON,
251 fl_get_string_width(FL_BOLD_STYLE,
254 strlen(_("Layout"))) + mbadd,
255 mbheight, _("Layout"));
256 moffset += obj->w + air;
257 fl_set_object_shortcut(obj, scex(_("MB|#L")), 1);
258 fl_set_object_callback(obj, C_Menus_ShowLayoutMenu, 0);
261 // Insert menu button button
263 fl_add_button(FL_TOUCH_BUTTON,
265 fl_get_string_width(FL_BOLD_STYLE,
268 strlen(_("Insert"))) + mbadd,
269 mbheight, _("Insert"));
270 moffset += obj->w + air;
271 fl_set_object_shortcut(obj, scex(_("MB|#I")), 1);
272 fl_set_object_callback(obj, C_Menus_ShowInsertMenu, 0);
277 fl_add_button(FL_TOUCH_BUTTON,
279 fl_get_string_width(FL_BOLD_STYLE,
282 strlen(_("Math"))) + mbadd,
283 mbheight, _("Math"));
284 moffset += obj->w + air;
285 fl_set_object_shortcut(obj, scex(_("MB|#M")), 1);
286 fl_set_object_callback(obj, C_Menus_ShowMathMenu, 0);
289 // Options menu button
291 fl_add_button(FL_TOUCH_BUTTON,
293 fl_get_string_width(FL_BOLD_STYLE,
296 strlen(_("Options"))) + mbadd,
297 mbheight, _("Options"));
298 moffset += obj->w + air;
299 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
300 fl_set_object_callback(obj, C_Menus_ShowOptionsMenu, 0);
303 // Documents menu button
305 fl_add_button(FL_TOUCH_BUTTON,
307 fl_get_string_width(FL_BOLD_STYLE,
310 strlen(_("Documents"))) + mbadd,
311 mbheight, _("Documents"));
312 moffset += obj->w + air;
313 fl_set_object_shortcut(obj, scex(_("MB|#D")), 1);
314 fl_set_object_callback(obj, C_Menus_ShowBufferMenu, 0);
319 fl_add_button(FL_TOUCH_BUTTON,
321 fl_get_string_width(FL_BOLD_STYLE,
324 strlen(_("Help"))) + mbadd,
325 mbheight, _("Help"));
326 moffset += obj->w + air;
327 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
328 fl_set_object_callback(obj, C_Menus_ShowHelpMenu, 0);
333 // Set the menu buttons atrributes.
334 // Due to a bug in xforms we cant do this only an the group.
335 obj = menu_grp1->next;
337 fl_set_object_boxtype(obj, FL_FLAT_BOX);
338 fl_set_object_color(obj, FL_MCOL, FL_MCOL);
339 fl_set_object_lsize(obj, MENU_LABEL_SIZE);
340 fl_set_object_lstyle(obj, FL_BOLD_STYLE);
341 fl_set_object_resize(obj, FL_RESIZE_ALL);
342 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
344 } while (obj != 0 && obj->objclass != FL_END_GROUP);
348 menu_grp2 = fl_bgn_group();
352 fl_add_button(FL_TOUCH_BUTTON,
354 fl_get_string_width(FL_BOLD_STYLE,
357 strlen(_("File"))) + mbadd,
358 mbheight, _("File"));
359 moffset += obj->w + air;
360 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
361 fl_set_object_callback(obj, C_Menus_ShowFileMenu2, 0);
364 // Options menu button
365 menu_options2 = obj =
366 fl_add_button(FL_TOUCH_BUTTON,
368 fl_get_string_width(FL_BOLD_STYLE,
371 strlen(_("Options"))) +mbadd,
372 mbheight, _("Options"));
373 moffset += obj->w + air;
374 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
375 fl_set_object_callback(obj, C_Menus_ShowOptionsMenu, 0);
380 fl_add_button(FL_TOUCH_BUTTON,
382 fl_get_string_width(FL_BOLD_STYLE,
385 strlen(_("Help"))) + mbadd,
386 mbheight, _("Help"));
387 moffset += obj->w + air;
388 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
389 fl_set_object_callback(obj, C_Menus_ShowHelpMenu, 0);
394 // Set the menu buttons atrributes.
395 // Due to a bug in xforms we cant do this only an the group.
396 obj = menu_grp2->next;
398 fl_set_object_boxtype(obj, FL_FLAT_BOX);
399 fl_set_object_color(obj, FL_MCOL, FL_MCOL);
400 fl_set_object_lsize(obj, MENU_LABEL_SIZE);
401 fl_set_object_lstyle(obj, FL_BOLD_STYLE);
402 fl_set_object_resize(obj, FL_RESIZE_ALL);
403 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
405 } while (obj != 0 && obj->objclass != FL_END_GROUP);
409 void Menus::ScreenOptions()
411 static int ow = -1, oh;
413 // this is not very nice....
414 fl_set_input(fd_form_screen->input_roman,
415 lyxrc->roman_font_name.c_str());
416 fl_set_input(fd_form_screen->input_sans,
417 lyxrc->sans_font_name.c_str());
418 fl_set_input(fd_form_screen->input_typewriter,
419 lyxrc->typewriter_font_name.c_str());
420 fl_set_input(fd_form_screen->input_font_norm,
421 lyxrc->font_norm.c_str());
423 sprintf(tmpstring, "%d", lyxrc->zoom);
424 fl_set_input(fd_form_screen->intinput_size, tmpstring);
425 if (fd_form_screen->form_screen->visible) {
426 fl_raise_form(fd_form_screen->form_screen);
428 fl_show_form(fd_form_screen->form_screen,
429 FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
430 _("Screen Options"));
432 ow = fd_form_screen->form_screen->w;
433 oh = fd_form_screen->form_screen->h;
435 fl_set_form_minsize(fd_form_screen->form_screen, ow, oh);
441 // Here comes all the menu callbacks.
444 void Menus::ShowFileMenu(FL_OBJECT * ob, long)
446 Menus * men = static_cast<Menus*>(ob->u_vdata);
448 // Regarding the pseudo-menu-button:
449 // ok, ok this is a hack. It would be better to use the menus of the
450 // xforms 0.8 library. but then all popups have to be defined all the
451 // time, code rewriting would be necessary and contex-depending menus
452 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
453 // course it would be more proper (and little faster). So if anybody
454 // likes to do the cleanup, just do it. Matthias
456 // set the pseudo menu-button
457 fl_set_object_boxtype(ob, FL_UP_BOX);
458 fl_set_button(ob, 0);
459 fl_redraw_object(ob);
461 Buffer * tmpbuffer = men->_view->buffer();
462 LyXFunc * tmpfunc = men->_view->getLyXFunc();
464 bool LinuxDoc = tmpbuffer->isLinuxDoc();
465 bool DocBook = tmpbuffer->isDocBook();
466 bool Literate = tmpbuffer->isLiterate();
470 int SubFileImport = fl_defpup(FL_ObjWin(ob),
473 "|Ascii Text as Lines...%x31"
474 "|Ascii Text as Paragraphs%x32"
477 fl_setpup_shortcut(SubFileImport, 30, scex(_("FIM|Ll#l#L")));
478 fl_setpup_shortcut(SubFileImport, 31, scex(_("FIM|Aa#a#A")));
479 fl_setpup_shortcut(SubFileImport, 32, scex(_("FIM|Pp#p#P")));
480 fl_setpup_shortcut(SubFileImport, 33, scex(_("FIM|Nn#n#N")));
484 // remember to make this handle linuxdoc too.
485 // and now docbook also.
486 int SubFileExport = 0;
487 if (!LinuxDoc && !DocBook)
488 SubFileExport= fl_defpup(FL_ObjWin(ob),
492 "|as PostScript...%x42"
493 "|as Ascii Text...%x43"
497 SubFileExport= fl_defpup(FL_ObjWin(ob),
499 "|as LinuxDoc...%x40"
501 "|as PostScript...%x42"
502 "|as Ascii Text...%x43"));
504 SubFileExport= fl_defpup(FL_ObjWin(ob),
508 "|as PostScript...%x42"
509 "|as Ascii Text...%x43"));
511 fl_setpup_shortcut(SubFileExport, 40, scex(_("FEX|Ll#l#L")));
512 fl_setpup_shortcut(SubFileExport, 41, scex(_("FEX|Dd#d#D")));
513 fl_setpup_shortcut(SubFileExport, 42, scex(_("FEX|Pp#p#P")));
514 fl_setpup_shortcut(SubFileExport, 43, scex(_("FEX|Tt#t#T")));
515 if (!LinuxDoc && !DocBook) {
516 fl_setpup_shortcut(SubFileExport, 44, scex(_("FEX|Hh#h#H")));
517 fl_setpup_shortcut(SubFileExport, 45, scex(_("FEX|mM#m#M")));
520 int FileMenu = fl_defpup(FL_ObjWin(ob),
522 "|New from template..."
536 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
537 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
538 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
539 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Cc#c#C")));
540 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|Ss#s#S")));
541 fl_setpup_shortcut(FileMenu, 6, scex(_("FM|Aa#a#A")));
542 fl_setpup_shortcut(FileMenu, 7, scex(_("FM|Rr#r#R")));
543 fl_setpup_shortcut(FileMenu, 8, scex(_("FM|dD#d#D")));
544 fl_setpup_shortcut(FileMenu, 9, scex(_("FM|wW#w#W")));
545 fl_setpup_shortcut(FileMenu, 10, scex(_("FM|vV#v#V")));
546 fl_setpup_shortcut(FileMenu, 11, scex(_("FM|Uu#u#U")));
547 fl_setpup_shortcut(FileMenu, 12, scex(_("FM|Bb#b#B")));
548 fl_setpup_shortcut(FileMenu, 13, scex(_("FM|Pp#p#P")));
549 fl_setpup_shortcut(FileMenu, 14, scex(_("FM|Ff#f#F")));
551 // These commands are disabled when the corresponding programs
552 // are not installed. I simply grey them out, since I do not
553 // want to change their number (JMarc)
554 bool hasLaTeX = lyxrc->latex_command != "none";
556 if (!hasLaTeX || lyxrc->view_dvi_command == "none")
557 fl_setpup_mode(FileMenu, 8, FL_PUP_GREY);
559 if (!hasLaTeX || lyxrc->view_ps_command == "none")
560 fl_setpup_mode(FileMenu, 9, FL_PUP_GREY);
563 fl_setpup_mode(FileMenu, 10, FL_PUP_GREY);
564 fl_setpup_mode(FileMenu, 11, FL_PUP_GREY);
567 if (lyxrc->literate_command == "none" || ! Literate)
568 fl_setpup_mode(FileMenu, 12, FL_PUP_GREY);
570 if (!hasLaTeX || lyxrc->print_command == "none")
571 fl_setpup_mode(FileMenu, 13, FL_PUP_GREY);
573 if (!hasLaTeX || lyxrc->fax_command == "none")
574 fl_setpup_mode(FileMenu, 14, FL_PUP_GREY);
576 bool hasReLyX = lyxrc->relyx_command != "none";
578 // Disable import LaTeX and Noweb
579 fl_setpup_mode(SubFileImport, 30, FL_PUP_GREY);
580 fl_setpup_mode(SubFileImport, 33, FL_PUP_GREY);
584 // Disable export dvi and export postscript
585 fl_setpup_mode(SubFileExport, 41, FL_PUP_GREY);
586 fl_setpup_mode(SubFileExport, 42, FL_PUP_GREY);
589 if (lyxrc->html_command == "none") {
590 // Disable export HTML
591 fl_setpup_mode(SubFileExport, 44, FL_PUP_GREY);
594 // xgettext:no-c-format
595 fl_addtopup(FileMenu, _("|Import%m"), SubFileImport);
596 // xgettext:no-c-format
597 fl_addtopup(FileMenu, _("|Export%m%l"), SubFileExport);
598 // xgettext:no-c-format
599 fl_addtopup(FileMenu, _("|Exit%l"));
600 fl_setpup_shortcut(FileMenu, 15, scex(_("FM|Ii#i#I")));
601 fl_setpup_shortcut(FileMenu, 16, scex(_("FM|Ee#e#E")));
602 fl_setpup_shortcut(FileMenu, 17, scex(_("FM|xX#x#X")));
604 // make the lastfiles menu
606 for (LastFiles::Files::const_iterator cit = lastfiles->begin();
607 cit != lastfiles->end() && ii < 10; ++cit, ++ii) {
608 string tmp = tostr(ii);
609 string tmp2 = tmp + "#" + tmp;;
610 tmp += ". " + MakeDisplayPath((*cit), 30);
611 fl_addtopup(FileMenu, tmp.c_str());
612 fl_setpup_shortcut(FileMenu, 18 - 1 + ii, tmp2.c_str());
617 men->_view->getForm()->x + ob->x,
618 men->_view->getForm()->y + ob->y + ob->h + 10);
619 int choice = fl_dopup(FileMenu);
622 // set the pseudo menu-button back
623 fl_set_object_boxtype(ob, FL_FLAT_BOX);
624 fl_redraw_object(ob);
627 case -1: case 0: // we won't do anything
629 case 1: tmpfunc->Dispatch(LFUN_MENUNEW); break;
630 case 2: tmpfunc->Dispatch(LFUN_MENUNEWTMPLT); break;
631 case 3: tmpfunc->Dispatch(LFUN_MENUOPEN); break;
632 case 4: tmpfunc->Dispatch(LFUN_CLOSEBUFFER); break;
633 case 5: tmpfunc->Dispatch(LFUN_MENUWRITE); break;
634 case 6: tmpfunc->Dispatch(LFUN_MENUWRITEAS); break;
635 case 7: tmpfunc->Dispatch(LFUN_MENURELOAD); break;
636 case 8: tmpfunc->Dispatch(LFUN_PREVIEW); break;
637 case 9: tmpfunc->Dispatch(LFUN_PREVIEWPS); break;
638 case 10: tmpfunc->Dispatch(LFUN_RUNLATEX); break;
639 case 11: tmpfunc->Dispatch(LFUN_RUNDVIPS); break;
640 case 12: tmpfunc->Dispatch(LFUN_BUILDPROG); break;
641 case 13: tmpfunc->Dispatch(LFUN_MENUPRINT); break;
642 case 14: tmpfunc->Dispatch(LFUN_FAX); break;
643 case 15: // import menu
644 case 30: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
646 case 31: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
648 case 32: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
650 case 33: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
652 case 16: // export menu
654 if (!LinuxDoc && !DocBook)
655 tmpfunc->Dispatch(LFUN_EXPORT, "latex");
657 tmpfunc->Dispatch(LFUN_EXPORT, "linuxdoc");
659 tmpfunc->Dispatch(LFUN_EXPORT, "docbook");
661 case 41: tmpfunc->Dispatch(LFUN_EXPORT, "dvi");
663 case 42: tmpfunc->Dispatch(LFUN_EXPORT, "postscript");
665 case 43: tmpfunc->Dispatch(LFUN_EXPORT, "ascii");
667 case 44: tmpfunc->Dispatch(LFUN_EXPORT, "html");
669 case 45: tmpfunc->Dispatch(LFUN_EXPORT, "custom");
671 case 17: tmpfunc->Dispatch(LFUN_QUIT); break;
673 case 18: // The first item with lastfiles.
677 .loadLyXFile((*lastfiles)[choice - 18]));
680 fl_freepup(SubFileImport);
681 fl_freepup(SubFileExport);
682 fl_freepup(FileMenu);
688 void Menus::ShowFileMenu2(FL_OBJECT * ob, long)
690 Menus * men = static_cast<Menus*>(ob->u_vdata);
692 // Regarding the pseudo-menu-button:
693 // ok, ok this is a hack. It would be better to use the menus of the
694 // xforms 0.8 library. but then all popups have to be defined all the
695 // time, code rewriting would be necessary and contex-depending menus
696 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
697 // course it would be more proper (and little faster). So if anybody
698 // likes to do the cleanup, just do it. Matthias
700 // set the pseudo menu-button
701 fl_set_object_boxtype(ob, FL_UP_BOX);
702 fl_set_button(ob, 0);
703 fl_redraw_object(ob);
705 LyXFunc * tmpfunc = men->_view->getLyXFunc();
709 int SubFileImport = fl_defpup(FL_ObjWin(ob),
712 "|Ascii Text as Lines...%x16"
713 "|Ascii Text as Paragraphs...%x17"
716 fl_setpup_shortcut(SubFileImport, 15, scex(_("FIM|Ll#l#L")));
717 fl_setpup_shortcut(SubFileImport, 16, scex(_("FIM|Aa#a#A")));
718 fl_setpup_shortcut(SubFileImport, 17, scex(_("FIM|Pp#p#P")));
719 fl_setpup_shortcut(SubFileImport, 18, scex(_("FIM|Nn#n#N")));
721 bool hasReLyX = lyxrc->relyx_command != "none";
723 // Disable import LaTeX and Noweb
724 fl_setpup_mode(SubFileImport, 15, FL_PUP_GREY);
725 fl_setpup_mode(SubFileImport, 18, FL_PUP_GREY);
728 // This can be done cleaner later.
729 int FileMenu = fl_defpup(FL_ObjWin(ob),
731 "|New from template..."
734 "|Exit%l"), SubFileImport);
736 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
737 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
738 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
739 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Ii#i#I")));
740 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|xX#x#X")));
742 // make the lastfiles menu
744 for (LastFiles::Files::const_iterator cit = lastfiles->begin();
745 cit != lastfiles->end() && ii < 10; ++cit, ++ii) {
746 string tmp = tostr(ii);
747 string tmp2 = tmp + "#" + tmp;;
748 tmp += ". " + MakeDisplayPath((*cit), 30);
749 fl_addtopup(FileMenu, tmp.c_str());
750 fl_setpup_shortcut(FileMenu, 18 - 1 + ii, tmp2.c_str());
755 men->_view->getForm()->x + ob->x,
756 men->_view->getForm()->y + ob->y + ob->h + 10);
757 int choice = fl_dopup(FileMenu);
760 // set the pseudo menu-button back
761 fl_set_object_boxtype(ob, FL_FLAT_BOX);
762 fl_redraw_object(ob);
765 case -1: case 0: // we won't do anything
768 tmpfunc->Dispatch(LFUN_MENUNEW);
771 tmpfunc->Dispatch(LFUN_MENUNEWTMPLT);
774 tmpfunc->Dispatch(LFUN_MENUOPEN);
776 case 4: // import menu
777 case 15: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
779 case 16: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
781 case 17: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
783 case 18: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
786 tmpfunc->Dispatch(LFUN_QUIT);
789 case 6: // The first item with lastfiles.
793 .loadLyXFile((*lastfiles)[choice - 6]));
797 fl_freepup(SubFileImport);
798 fl_freepup(FileMenu);
804 void Menus::ShowEditMenu(FL_OBJECT * ob, long)
806 Menus * men = static_cast<Menus*>(ob->u_vdata);
808 // set the pseudo menu-button
809 fl_set_object_boxtype(ob, FL_UP_BOX);
810 fl_set_button(ob, 0);
811 fl_redraw_object(ob);
813 Buffer * tmpbuffer = men->_view->buffer();
814 LyXFunc * tmpfunc = men->_view->getLyXFunc();
816 // Floats & Insets submenu
817 int SubEditFloats= fl_defpup(FL_ObjWin(ob),
818 _("Floats & Insets%t"
821 "|Open All Footnotes/Margin Notes%x23"
822 "|Close All Footnotes/Margin Notes%x24"
823 "|Open All Figures/Tables%x25"
824 "|Close All Figures/Tables%x26%l"
825 "|Remove all Error Boxes%x27"));
827 fl_setpup_shortcut(SubEditFloats, 21, scex(_("EMF|Oo#o#O")));
828 fl_setpup_shortcut(SubEditFloats, 22, scex(_("EMF|Mm#m#M")));
829 fl_setpup_shortcut(SubEditFloats, 23, scex(_("EMF|Aa#a#A")));
830 fl_setpup_shortcut(SubEditFloats, 24, scex(_("EMF|Cc#c#C")));
831 fl_setpup_shortcut(SubEditFloats, 25, scex(_("EMF|Ff#f#F")));
832 fl_setpup_shortcut(SubEditFloats, 26, scex(_("EMF|Tt#t#T")));
833 fl_setpup_shortcut(SubEditFloats, 27, scex(_("EMF|Rr#r#R")));
836 int SubEditTable = fl_newpup(FL_ObjWin(ob));
837 if (men->currentView()->available() &&
838 men->currentView()->text->cursor.par->table &&
839 !tmpbuffer->isReadonly()){
841 fl_addtopup(SubEditTable, _("Table%t"));
843 if (men->currentView()->text->cursor.par->table->
844 IsMultiColumn(men->currentView()->text->
845 NumberOfCell(men->currentView()->
849 fl_addtopup(SubEditTable, _("|Multicolumn%B%x44%l"));
851 fl_addtopup(SubEditTable, _("|Multicolumn%b%x44%l"));
852 fl_setpup_shortcut(SubEditTable, 44, scex(_("EMT|Mm#m#M")));
854 if (men->currentView()->text->cursor.par->table->
855 TopLine(men->currentView()->text->
856 NumberOfCell(men->currentView()->
858 men->currentView()->text->
860 fl_addtopup(SubEditTable, _("|Line Top%B%x36"));
862 fl_addtopup(SubEditTable, _("|Line Top%b%x36"));
863 fl_setpup_shortcut(SubEditTable, 36, scex(_("EMT|Tt#t#T")));
865 if (men->currentView()->text->cursor.par->table->
866 BottomLine(men->currentView()->text->
867 NumberOfCell(men->currentView()->
871 fl_addtopup(SubEditTable, _("|Line Bottom%B%x37"));
873 fl_addtopup(SubEditTable, _("|Line Bottom%b%x37"));
874 fl_setpup_shortcut(SubEditTable, 37, scex(_("EMT|Bb#b#B")));
876 if (men->currentView()->text->cursor.par->table->
877 LeftLine(men->currentView()->text->
878 NumberOfCell(men->currentView()->
882 fl_addtopup(SubEditTable, _("|Line Left%B%x38"));
884 fl_addtopup(SubEditTable, _("|Line Left%b%x38"));
885 fl_setpup_shortcut(SubEditTable, 38, scex(_("EMT|Ll#l#L")));
887 if (men->currentView()->text->cursor.par->table->
888 RightLine(men->currentView()->text->
889 NumberOfCell(men->currentView()->
893 fl_addtopup(SubEditTable, _("|Line Right%B%x39%l"));
895 fl_addtopup(SubEditTable, _("|Line Right%b%x39%l"));
896 fl_setpup_shortcut(SubEditTable, 39, scex(_("EMT|Rr#r#R")));
898 int align = men->currentView()->text->cursor.par->
899 table->GetAlignment(men->currentView()->text->
900 NumberOfCell(men->currentView()->
904 if (align == LYX_ALIGN_LEFT)
905 fl_addtopup(SubEditTable, _("|Align Left%R%x40"));
907 fl_addtopup(SubEditTable, _("|Align Left%r%x40"));
908 fl_setpup_shortcut(SubEditTable, 40, scex(_("EMT|eE#e#E")));
910 if (align == LYX_ALIGN_RIGHT)
911 fl_addtopup(SubEditTable, _("|Align Right%R%x41"));
913 fl_addtopup(SubEditTable, _("|Align Right%r%x41"));
914 fl_setpup_shortcut(SubEditTable, 41, scex(_("EMT|iI#i#I")));
916 if (align == LYX_ALIGN_CENTER)
917 fl_addtopup(SubEditTable, _("|Align Center%R%x42%l"));
919 fl_addtopup(SubEditTable, _("|Align Center%r%x42%l"));
920 fl_setpup_shortcut(SubEditTable, 42, scex(_("EMT|Cc#c#C")));
922 // xgettext:no-c-format
923 fl_addtopup(SubEditTable, _("|Append Row%x32"));
924 fl_setpup_shortcut(SubEditTable, 32, scex(_("EMT|oO#o#O")));
925 // xgettext:no-c-format
926 fl_addtopup(SubEditTable, _("|Append Column%x33%l"));
927 fl_setpup_shortcut(SubEditTable, 33, scex(_("EMT|uU#u#U")));
928 // xgettext:no-c-format
929 fl_addtopup(SubEditTable, _("|Delete Row%x34"));
930 fl_setpup_shortcut(SubEditTable, 34, scex(_("EMT|wW#w#W")));
931 // xgettext:no-c-format
932 fl_addtopup(SubEditTable, _("|Delete Column%x35%l"));
933 fl_setpup_shortcut(SubEditTable, 35, scex(_("EMT|nN#n#N")));
934 // xgettext:no-c-format
935 fl_addtopup(SubEditTable, _("|Delete Table%x43"));
936 fl_setpup_shortcut(SubEditTable, 43, scex(_("EMT|Dd#d#D")));
939 fl_addtopup(SubEditTable, _("Table%t"));
940 // xgettext:no-c-format
941 fl_addtopup(SubEditTable, _("|Insert table%x31"));
942 fl_setpup_shortcut(SubEditTable, 31, scex(_("EMT|Ii#i#I")));
945 int SubVersionControl = fl_newpup(FL_ObjWin(ob));
946 fl_addtopup(SubVersionControl, _("Version Control%t"));
947 if (tmpbuffer->lyxvc.inUse()) {
948 // xgettext:no-c-format
949 fl_addtopup(SubVersionControl, _("|Register%d%x51"));
950 if (tmpbuffer->isReadonly()) {
951 // signifies that the file is not checked out
952 // xgettext:no-c-format
953 fl_addtopup(SubVersionControl, _("|Check In Changes%d%x52"));
954 // xgettext:no-c-format
955 fl_addtopup(SubVersionControl, _("|Check Out for Edit%x53"));
957 // signifies that the file is checked out
958 // xgettext:no-c-format
959 fl_addtopup(SubVersionControl, _("|Check In Changes%x52"));
960 // xgettext:no-c-format
961 fl_addtopup(SubVersionControl, _("|Check Out for Edit%d%x53"));
963 // xgettext:no-c-format
964 fl_addtopup(SubVersionControl, _("|Revert to last version%x54"));
965 // xgettext:no-c-format
966 fl_addtopup(SubVersionControl, _("|Undo last check in%x55"));
967 // xgettext:no-c-format
968 fl_addtopup(SubVersionControl, _("|Show History%x56"));
970 // xgettext:no-c-format
971 fl_addtopup(SubVersionControl, _("|Register%x51"));
973 // the shortcuts are not good.
974 fl_setpup_shortcut(SubVersionControl, 51, scex(_("EMV|Rr#r#R")));
975 fl_setpup_shortcut(SubVersionControl, 52, scex(_("EMV|Ii#i#I")));
976 fl_setpup_shortcut(SubVersionControl, 53, scex(_("EMV|Oo#o#O")));
977 fl_setpup_shortcut(SubVersionControl, 54, scex(_("EMV|lL#l#l")));
978 fl_setpup_shortcut(SubVersionControl, 55, scex(_("EMV|Uu#u#U")));
979 fl_setpup_shortcut(SubVersionControl, 56, scex(_("EMV|Hh#h#H")));
981 int EditMenu= fl_defpup(FL_ObjWin(ob),
994 "|Table of Contents...%l"
995 "|Version Control%m%l"
996 "|View LaTeX log file%l"
997 "|Paste Primary Selection as Lines"
998 "|Paste Primary Selection as Paragraphs"),
999 SubEditFloats, SubEditTable, SubVersionControl);
1001 fl_setpup_shortcut(EditMenu, 1, scex(_("EM|Uu#u#U")));
1002 fl_setpup_shortcut(EditMenu, 2, scex(_("EM|Rr#r#R")));
1003 fl_setpup_shortcut(EditMenu, 3, scex(_("EM|Cc#c#C")));
1004 fl_setpup_shortcut(EditMenu, 4, scex(_("EM|oO#o#O")));
1005 fl_setpup_shortcut(EditMenu, 5, scex(_("EM|Pp#p#P")));
1006 fl_setpup_shortcut(EditMenu, 6, scex(_("EM|Ff#f#F")));
1007 fl_setpup_shortcut(EditMenu, 7, scex(_("EM|Ee#e#E")));
1008 fl_setpup_shortcut(EditMenu, 8, scex(_("EM|Nn#n#N")));
1009 fl_setpup_shortcut(EditMenu, 9, scex(_("EM|Ii#i#I")));
1010 fl_setpup_shortcut(EditMenu, 10, scex(_("EM|Tt#t#T")));
1011 fl_setpup_shortcut(EditMenu, 11, scex(_("EM|Ss#s#S")));
1012 fl_setpup_shortcut(EditMenu, 12, scex(_("EM|hH#h#H")));
1013 fl_setpup_shortcut(EditMenu, 13, scex(_("EM|aA#a#A")));
1014 fl_setpup_shortcut(EditMenu, 14, scex(_("EM|Vv#v#V")));
1015 fl_setpup_shortcut(EditMenu, 15, scex(_("EM|wW#w#W")));
1016 fl_setpup_shortcut(EditMenu, 16, scex(_("EM|Ll#l#L")));
1017 fl_setpup_shortcut(EditMenu, 17, scex(_("EM|gG#g#G")));
1019 // disable unavailable entries.
1020 if(tmpbuffer->undostack.empty())
1021 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
1022 if(tmpbuffer->redostack.empty())
1023 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
1024 if(lyxrc->isp_command == "none")
1025 fl_setpup_mode(EditMenu, 11, FL_PUP_GREY);
1026 if(lyxrc->chktex_command == "none")
1027 fl_setpup_mode(EditMenu, 12, FL_PUP_GREY);
1029 if (tmpbuffer->isReadonly()) {
1030 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
1031 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
1032 fl_setpup_mode(EditMenu, 3, FL_PUP_GREY);
1033 fl_setpup_mode(EditMenu, 5, FL_PUP_GREY);
1034 fl_setpup_mode(EditMenu, 16, FL_PUP_GREY);
1035 fl_setpup_mode(EditMenu, 17, FL_PUP_GREY);
1038 fl_setpup_position(men->_view->getForm()->x + ob->x,
1039 men->_view->getForm()->y + ob->y +
1041 int choice = fl_dopup(EditMenu);
1044 // set the pseudo menu-button back
1045 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1046 fl_redraw_object(ob);
1049 case 1: tmpfunc->Dispatch(LFUN_UNDO); break;
1050 case 2: tmpfunc->Dispatch(LFUN_REDO); break;
1051 case 3: tmpfunc->Dispatch(LFUN_CUT); break;
1052 case 4: tmpfunc->Dispatch(LFUN_COPY); break;
1053 case 5: tmpfunc->Dispatch(LFUN_PASTE); break;
1054 case 6: tmpfunc->Dispatch(LFUN_MENUSEARCH); break;
1055 case 7: tmpfunc->Dispatch(LFUN_GOTOERROR); break;
1056 case 8: tmpfunc->Dispatch(LFUN_GOTONOTE); break;
1057 case 9: // floats & insets
1061 case 11: tmpfunc->Dispatch(LFUN_SPELLCHECK); break;
1062 case 12: tmpfunc->Dispatch(LFUN_RUNCHKTEX); break;
1063 case 13: tmpfunc->Dispatch(LFUN_TOCVIEW); break;
1064 case 14: // version control
1066 case 15: tmpfunc->Dispatch(LFUN_LATEX_LOG); break;
1067 case 16: tmpfunc->Dispatch(LFUN_PASTESELECTION, "line"); break;
1068 case 17: tmpfunc->Dispatch(LFUN_PASTESELECTION, "paragraph"); break;
1070 // floats & insets sub-menu
1071 case 21: ToggleFloat(); break;
1072 case 22: tmpfunc->Dispatch(LFUN_MELT); break;
1073 case 23: AllFloats(1, 0); break;
1074 case 24: AllFloats(0, 0); break;
1075 case 25: AllFloats(1, 1); break;
1076 case 26: AllFloats(0, 1); break;
1077 case 27: tmpfunc->Dispatch(LFUN_REMOVEERRORS); break;
1079 case 31: tmpfunc->Dispatch(LFUN_TABLE); break;
1080 // this is really temporary. We need new function in keybind.C
1081 // These should set the minibuffer, too.
1082 case 32: case 33: case 34:
1083 case 35: case 36: case 37:
1084 case 38: case 39: case 40:
1085 case 41: case 42: case 43:
1087 if (men->currentView()->available()){
1088 men->currentView()->getScreen()->HideCursor();
1089 if (!men->currentView()->text->selection){
1091 men->currentView()->update(-2);
1093 men->currentView()->text->
1094 TableFeatures(choice - 32);
1095 men->currentView()->update(1);
1098 // version control sub-menu
1099 case 51: // register
1100 tmpfunc->Dispatch(LFUN_VC_REGISTER);
1102 case 52: // check in
1103 tmpfunc->Dispatch(LFUN_VC_CHECKIN);
1105 case 53: // check out
1106 tmpfunc->Dispatch(LFUN_VC_CHECKOUT);
1108 case 54: // revert to last
1109 tmpfunc->Dispatch(LFUN_VC_REVERT);
1111 case 55: // undo last
1112 tmpfunc->Dispatch(LFUN_VC_UNDO);
1114 case 56: // show history
1115 tmpfunc->Dispatch(LFUN_VC_HISTORY);
1119 fl_freepup(EditMenu);
1120 fl_freepup(SubEditFloats);
1121 fl_freepup(SubEditTable);
1122 fl_freepup(SubVersionControl);
1125 void Menus::ShowEditMenu(FL_OBJECT * ob, long)
1127 Menus * men = static_cast<Menus*>(ob->u_vdata);
1129 // set the pseudo menu-button
1130 fl_set_object_boxtype(ob, FL_UP_BOX);
1131 fl_set_button(ob, 0);
1132 fl_redraw_object(ob);
1134 Buffer * tmpbuffer = men->_view->buffer();
1135 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1137 // Floats & Insets submenu
1138 int SubEditFloats= fl_defpup(FL_ObjWin(ob),
1139 _("Floats & Insets%t"
1142 "|Open All Footnotes/Margin Notes%x23"
1143 "|Close All Footnotes/Margin Notes%x24"
1144 "|Open All Figures/Tables%x25"
1145 "|Close All Figures/Tables%x26%l"
1146 "|Remove all Error Boxes%x27"));
1148 fl_setpup_shortcut(SubEditFloats, 21, scex(_("EMF|Oo#o#O")));
1149 fl_setpup_shortcut(SubEditFloats, 22, scex(_("EMF|Mm#m#M")));
1150 fl_setpup_shortcut(SubEditFloats, 23, scex(_("EMF|Aa#a#A")));
1151 fl_setpup_shortcut(SubEditFloats, 24, scex(_("EMF|Cc#c#C")));
1152 fl_setpup_shortcut(SubEditFloats, 25, scex(_("EMF|Ff#f#F")));
1153 fl_setpup_shortcut(SubEditFloats, 26, scex(_("EMF|Tt#t#T")));
1154 fl_setpup_shortcut(SubEditFloats, 27, scex(_("EMF|Rr#r#R")));
1157 int SubEditTable = fl_newpup(FL_ObjWin(ob));
1158 if (men->currentView()->available() &&
1159 tmpbuffer->text->cursor.par->table &&
1160 !tmpbuffer->isReadonly()){
1162 fl_addtopup(SubEditTable, _("Table%t"));
1164 if (tmpbuffer->text->cursor.par->table->
1165 IsMultiColumn(tmpbuffer->text->
1166 NumberOfCell(tmpbuffer->
1170 fl_addtopup(SubEditTable, _("|Multicolumn%B%x44%l"));
1172 fl_addtopup(SubEditTable, _("|Multicolumn%b%x44%l"));
1173 fl_setpup_shortcut(SubEditTable, 44, scex(_("EMT|Mm#m#M")));
1175 if (tmpbuffer->text->cursor.par->table->
1176 TopLine(tmpbuffer->text->
1177 NumberOfCell(tmpbuffer->
1181 fl_addtopup(SubEditTable, _("|Line Top%B%x36"));
1183 fl_addtopup(SubEditTable, _("|Line Top%b%x36"));
1184 fl_setpup_shortcut(SubEditTable, 36, scex(_("EMT|Tt#t#T")));
1186 if (tmpbuffer->text->cursor.par->table->
1187 BottomLine(tmpbuffer->text->
1188 NumberOfCell(tmpbuffer->
1192 fl_addtopup(SubEditTable, _("|Line Bottom%B%x37"));
1194 fl_addtopup(SubEditTable, _("|Line Bottom%b%x37"));
1195 fl_setpup_shortcut(SubEditTable, 37, scex(_("EMT|Bb#b#B")));
1197 if (tmpbuffer->text->cursor.par->table->
1198 LeftLine(tmpbuffer->text->
1199 NumberOfCell(tmpbuffer->
1203 fl_addtopup(SubEditTable, _("|Line Left%B%x38"));
1205 fl_addtopup(SubEditTable, _("|Line Left%b%x38"));
1206 fl_setpup_shortcut(SubEditTable, 38, scex(_("EMT|Ll#l#L")));
1208 if (tmpbuffer->text->cursor.par->table->
1209 RightLine(tmpbuffer->text->
1210 NumberOfCell(tmpbuffer->
1214 fl_addtopup(SubEditTable, _("|Line Right%B%x39%l"));
1216 fl_addtopup(SubEditTable, _("|Line Right%b%x39%l"));
1217 fl_setpup_shortcut(SubEditTable, 39, scex(_("EMT|Rr#r#R")));
1219 int align = tmpbuffer->text->cursor.par->
1220 table->GetAlignment(tmpbuffer->text->
1221 NumberOfCell(tmpbuffer->
1225 if (align == LYX_ALIGN_LEFT)
1226 fl_addtopup(SubEditTable, _("|Align Left%R%x40"));
1228 fl_addtopup(SubEditTable, _("|Align Left%r%x40"));
1229 fl_setpup_shortcut(SubEditTable, 40, scex(_("EMT|eE#e#E")));
1231 if (align == LYX_ALIGN_RIGHT)
1232 fl_addtopup(SubEditTable, _("|Align Right%R%x41"));
1234 fl_addtopup(SubEditTable, _("|Align Right%r%x41"));
1235 fl_setpup_shortcut(SubEditTable, 41, scex(_("EMT|iI#i#I")));
1237 if (align == LYX_ALIGN_CENTER)
1238 fl_addtopup(SubEditTable, _("|Align Center%R%x42%l"));
1240 fl_addtopup(SubEditTable, _("|Align Center%r%x42%l"));
1241 fl_setpup_shortcut(SubEditTable, 42, scex(_("EMT|Cc#c#C")));
1243 // xgettext:no-c-format
1244 fl_addtopup(SubEditTable, _("|Append Row%x32"));
1245 fl_setpup_shortcut(SubEditTable, 32, scex(_("EMT|oO#o#O")));
1246 // xgettext:no-c-format
1247 fl_addtopup(SubEditTable, _("|Append Column%x33%l"));
1248 fl_setpup_shortcut(SubEditTable, 33, scex(_("EMT|uU#u#U")));
1249 // xgettext:no-c-format
1250 fl_addtopup(SubEditTable, _("|Delete Row%x34"));
1251 fl_setpup_shortcut(SubEditTable, 34, scex(_("EMT|wW#w#W")));
1252 // xgettext:no-c-format
1253 fl_addtopup(SubEditTable, _("|Delete Column%x35%l"));
1254 fl_setpup_shortcut(SubEditTable, 35, scex(_("EMT|nN#n#N")));
1255 // xgettext:no-c-format
1256 fl_addtopup(SubEditTable, _("|Delete Table%x43"));
1257 fl_setpup_shortcut(SubEditTable, 43, scex(_("EMT|Dd#d#D")));
1260 fl_addtopup(SubEditTable, _("Table%t"));
1261 // xgettext:no-c-format
1262 fl_addtopup(SubEditTable, _("|Insert table%x31"));
1263 fl_setpup_shortcut(SubEditTable, 31, scex(_("EMT|Ii#i#I")));
1266 int SubVersionControl = fl_newpup(FL_ObjWin(ob));
1267 fl_addtopup(SubVersionControl, _("Version Control%t"));
1268 if (tmpbuffer->lyxvc.inUse()) {
1269 // xgettext:no-c-format
1270 fl_addtopup(SubVersionControl, _("|Register%d%x51"));
1271 if (tmpbuffer->isReadonly()) {
1272 // signifies that the file is not checked out
1273 // xgettext:no-c-format
1274 fl_addtopup(SubVersionControl, _("|Check In Changes%d%x52"));
1275 // xgettext:no-c-format
1276 fl_addtopup(SubVersionControl, _("|Check Out for Edit%x53"));
1278 // signifies that the file is checked out
1279 // xgettext:no-c-format
1280 fl_addtopup(SubVersionControl, _("|Check In Changes%x52"));
1281 // xgettext:no-c-format
1282 fl_addtopup(SubVersionControl, _("|Check Out for Edit%d%x53"));
1284 // xgettext:no-c-format
1285 fl_addtopup(SubVersionControl, _("|Revert to last version%x54"));
1286 // xgettext:no-c-format
1287 fl_addtopup(SubVersionControl, _("|Undo last check in%x55"));
1288 // xgettext:no-c-format
1289 fl_addtopup(SubVersionControl, _("|Show History%x56"));
1291 // xgettext:no-c-format
1292 fl_addtopup(SubVersionControl, _("|Register%x51"));
1294 // the shortcuts are not good.
1295 fl_setpup_shortcut(SubVersionControl, 51, scex(_("EMV|Rr#r#R")));
1296 fl_setpup_shortcut(SubVersionControl, 52, scex(_("EMV|Ii#i#I")));
1297 fl_setpup_shortcut(SubVersionControl, 53, scex(_("EMV|Oo#o#O")));
1298 fl_setpup_shortcut(SubVersionControl, 54, scex(_("EMV|lL#l#l")));
1299 fl_setpup_shortcut(SubVersionControl, 55, scex(_("EMV|Uu#u#U")));
1300 fl_setpup_shortcut(SubVersionControl, 56, scex(_("EMV|Hh#h#H")));
1302 int EditMenu= fl_defpup(FL_ObjWin(ob),
1308 "|Find & Replace..."
1311 "|Floats & Insets%m"
1315 "|Table of Contents...%l"
1316 "|Version Control%m%l"
1317 "|View LaTeX log file%l"
1318 "|Paste Primary Selection as Lines"
1319 "|Paste Primary Selection as Paragraphs"),
1320 SubEditFloats, SubEditTable, SubVersionControl);
1322 fl_setpup_shortcut(EditMenu, 1, scex(_("EM|Uu#u#U")));
1323 fl_setpup_shortcut(EditMenu, 2, scex(_("EM|Rr#r#R")));
1324 fl_setpup_shortcut(EditMenu, 3, scex(_("EM|Cc#c#C")));
1325 fl_setpup_shortcut(EditMenu, 4, scex(_("EM|oO#o#O")));
1326 fl_setpup_shortcut(EditMenu, 5, scex(_("EM|Pp#p#P")));
1327 fl_setpup_shortcut(EditMenu, 6, scex(_("EM|Ff#f#F")));
1328 fl_setpup_shortcut(EditMenu, 7, scex(_("EM|Ee#e#E")));
1329 fl_setpup_shortcut(EditMenu, 8, scex(_("EM|Nn#n#N")));
1330 fl_setpup_shortcut(EditMenu, 9, scex(_("EM|Ii#i#I")));
1331 fl_setpup_shortcut(EditMenu, 10, scex(_("EM|Tt#t#T")));
1332 fl_setpup_shortcut(EditMenu, 11, scex(_("EM|Ss#s#S")));
1333 fl_setpup_shortcut(EditMenu, 12, scex(_("EM|hH#h#H")));
1334 fl_setpup_shortcut(EditMenu, 13, scex(_("EM|aA#a#A")));
1335 fl_setpup_shortcut(EditMenu, 14, scex(_("EM|Vv#v#V")));
1336 fl_setpup_shortcut(EditMenu, 15, scex(_("EM|wW#w#W")));
1337 fl_setpup_shortcut(EditMenu, 16, scex(_("EM|Ll#l#L")));
1338 fl_setpup_shortcut(EditMenu, 17, scex(_("EM|gG#g#G")));
1340 // disable unavailable entries.
1341 if(tmpbuffer->undostack.empty())
1342 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
1343 if(tmpbuffer->redostack.empty())
1344 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
1345 if(lyxrc->isp_command == "none")
1346 fl_setpup_mode(EditMenu, 11, FL_PUP_GREY);
1347 if(lyxrc->chktex_command == "none")
1348 fl_setpup_mode(EditMenu, 12, FL_PUP_GREY);
1350 if (tmpbuffer->isReadonly()) {
1351 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
1352 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
1353 fl_setpup_mode(EditMenu, 3, FL_PUP_GREY);
1354 fl_setpup_mode(EditMenu, 5, FL_PUP_GREY);
1355 fl_setpup_mode(EditMenu, 16, FL_PUP_GREY);
1356 fl_setpup_mode(EditMenu, 17, FL_PUP_GREY);
1359 fl_setpup_position(men->_view->getForm()->x + ob->x,
1360 men->_view->getForm()->y + ob->y +
1362 int choice = fl_dopup(EditMenu);
1365 // set the pseudo menu-button back
1366 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1367 fl_redraw_object(ob);
1370 case 1: tmpfunc->Dispatch(LFUN_UNDO); break;
1371 case 2: tmpfunc->Dispatch(LFUN_REDO); break;
1372 case 3: tmpfunc->Dispatch(LFUN_CUT); break;
1373 case 4: tmpfunc->Dispatch(LFUN_COPY); break;
1374 case 5: tmpfunc->Dispatch(LFUN_PASTE); break;
1375 case 6: tmpfunc->Dispatch(LFUN_MENUSEARCH); break;
1376 case 7: tmpfunc->Dispatch(LFUN_GOTOERROR); break;
1377 case 8: tmpfunc->Dispatch(LFUN_GOTONOTE); break;
1378 case 9: // floats & insets
1382 case 11: tmpfunc->Dispatch(LFUN_SPELLCHECK); break;
1383 case 12: tmpfunc->Dispatch(LFUN_RUNCHKTEX); break;
1384 case 13: tmpfunc->Dispatch(LFUN_TOCVIEW); break;
1385 case 14: // version control
1387 case 15: tmpfunc->Dispatch(LFUN_LATEX_LOG); break;
1388 case 16: tmpfunc->Dispatch(LFUN_PASTESELECTION, "line"); break;
1389 case 17: tmpfunc->Dispatch(LFUN_PASTESELECTION, "paragraph"); break;
1391 // floats & insets sub-menu
1392 case 21: ToggleFloat(); break;
1393 case 22: tmpfunc->Dispatch(LFUN_MELT); break;
1394 case 23: AllFloats(1, 0); break;
1395 case 24: AllFloats(0, 0); break;
1396 case 25: AllFloats(1, 1); break;
1397 case 26: AllFloats(0, 1); break;
1398 case 27: tmpfunc->Dispatch(LFUN_REMOVEERRORS); break;
1400 case 31: tmpfunc->Dispatch(LFUN_TABLE); break;
1401 // this is really temporary. We need new function in keybind.C
1402 // These should set the minibuffer, too.
1403 case 32: case 33: case 34:
1404 case 35: case 36: case 37:
1405 case 38: case 39: case 40:
1406 case 41: case 42: case 43:
1408 if (men->currentView()->available()){
1409 men->currentView()->getScreen()->HideCursor();
1410 if (!tmpbuffer->text->selection){
1412 tmpbuffer->update(-2);
1415 TableFeatures(choice - 32);
1416 tmpbuffer->update(1);
1419 // version control sub-menu
1420 case 51: // register
1421 tmpfunc->Dispatch(LFUN_VC_REGISTER);
1423 case 52: // check in
1424 tmpfunc->Dispatch(LFUN_VC_CHECKIN);
1426 case 53: // check out
1427 tmpfunc->Dispatch(LFUN_VC_CHECKOUT);
1429 case 54: // revert to last
1430 tmpfunc->Dispatch(LFUN_VC_REVERT);
1432 case 55: // undo last
1433 tmpfunc->Dispatch(LFUN_VC_UNDO);
1435 case 56: // show history
1436 tmpfunc->Dispatch(LFUN_VC_HISTORY);
1440 fl_freepup(EditMenu);
1441 fl_freepup(SubEditFloats);
1442 fl_freepup(SubEditTable);
1443 fl_freepup(SubVersionControl);
1448 void Menus::ShowLayoutMenu(FL_OBJECT * ob, long)
1450 Menus * men = static_cast<Menus*>(ob->u_vdata);
1452 if (!men->currentView()->available())
1455 // set the pseudo menu-button
1456 fl_set_object_boxtype(ob, FL_UP_BOX);
1457 fl_set_button(ob, 0);
1458 fl_redraw_object(ob);
1460 Buffer * tmpbuffer = men->_view->buffer();
1461 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1463 int LayoutMenu = fl_newpup(FL_ObjWin(ob));
1464 fl_addtopup(LayoutMenu, _("Character..."
1470 "|Emphasize Style%b"
1474 "|Change Environment Depth"
1475 "|LaTeX Preamble...%l"
1476 "|Save layout as default"));
1477 fl_setpup_shortcut(LayoutMenu, 1, scex(_("LM|Cc#c#C")));
1478 fl_setpup_shortcut(LayoutMenu, 2, scex(_("LM|Pp#p#P")));
1479 fl_setpup_shortcut(LayoutMenu, 3, scex(_("LM|Dd#d#D")));
1480 fl_setpup_shortcut(LayoutMenu, 4, scex(_("LM|aA#a#A")));
1481 fl_setpup_shortcut(LayoutMenu, 5, scex(_("LM|eE#e#E")));
1482 fl_setpup_shortcut(LayoutMenu, 6, scex(_("LM|Qq#q#Q")));
1483 fl_setpup_shortcut(LayoutMenu, 7, scex(_("LM|mM#m#M")));
1484 fl_setpup_shortcut(LayoutMenu, 8, scex(_("LM|Nn#n#N")));
1485 fl_setpup_shortcut(LayoutMenu, 9, scex(_("LM|Bb#b#B")));
1486 fl_setpup_shortcut(LayoutMenu, 10, scex(_("LM|Tt#t#T")));
1487 fl_setpup_shortcut(LayoutMenu, 11, scex(_("LM|vV#v#V")));
1488 fl_setpup_shortcut(LayoutMenu, 12, scex(_("LM|Ll#l#L")));
1489 fl_setpup_shortcut(LayoutMenu, 13, scex(_("LM|Ss#s#S")));
1491 // Set values of checkboxes according to font
1493 LyXFont font = men->currentView()->text->real_current_font;
1495 LyXFont font = tmpbuffer->text->real_current_font;
1497 if (font.emph() == LyXFont::ON)
1498 fl_setpup_mode(LayoutMenu, 7, FL_PUP_CHECK);
1499 if (font.noun() == LyXFont::ON)
1500 fl_setpup_mode(LayoutMenu, 8, FL_PUP_CHECK);
1501 if (font.series() == LyXFont::BOLD_SERIES)
1502 fl_setpup_mode(LayoutMenu, 9, FL_PUP_CHECK);
1503 if (font.latex() == LyXFont::ON)
1504 fl_setpup_mode(LayoutMenu, 10, FL_PUP_CHECK);
1506 // Grey out unavailable entries
1508 if (!men->currentView()->text->cursor.par->table)
1509 fl_setpup_mode(LayoutMenu, 5, FL_PUP_GREY);
1511 if (!tmpbuffer->text->cursor.par->table)
1512 fl_setpup_mode(LayoutMenu, 5, FL_PUP_GREY);
1515 if (tmpbuffer->isReadonly()) {
1516 fl_setpup_mode(LayoutMenu, 1, FL_PUP_GREY);
1517 fl_setpup_mode(LayoutMenu, 6, FL_PUP_GREY);
1518 fl_setpup_mode(LayoutMenu, 11, FL_PUP_GREY);
1522 men->_view->getForm()->x + ob->x,
1523 men->_view->getForm()->y + ob->y + ob->h + 10);
1524 int choice = fl_dopup(LayoutMenu);
1527 // set the pseudo menu-button back
1528 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1529 fl_redraw_object(ob);
1532 case 1: tmpfunc->Dispatch(LFUN_LAYOUT_CHARACTER); break;
1533 case 2: tmpfunc->Dispatch(LFUN_LAYOUT_PARAGRAPH); break;
1534 case 3: tmpfunc->Dispatch(LFUN_LAYOUT_DOCUMENT); break;
1535 case 4: tmpfunc->Dispatch(LFUN_LAYOUT_PAPER); break;
1536 case 5: tmpfunc->Dispatch(LFUN_LAYOUT_TABLE, "true"); break;
1537 case 6: tmpfunc->Dispatch(LFUN_LAYOUT_QUOTES); break;
1538 case 7: tmpfunc->Dispatch(LFUN_EMPH); break;
1539 case 8: tmpfunc->Dispatch(LFUN_NOUN); break;
1540 case 9: tmpfunc->Dispatch(LFUN_BOLD); break;
1541 case 10: tmpfunc->Dispatch(LFUN_TEX); break;
1542 case 11: tmpfunc->Dispatch(LFUN_DEPTH_PLUS); break;
1543 case 12: tmpfunc->Dispatch(LFUN_LAYOUT_PREAMBLE); break;
1544 case 13: tmpfunc->Dispatch(LFUN_LAYOUT_SAVE_DEFAULT); break;
1546 fl_freepup(LayoutMenu);
1550 void Menus::ShowInsertMenu(FL_OBJECT * ob, long)
1552 Menus * men = static_cast<Menus*>(ob->u_vdata);
1554 // set the pseudo menu-button
1555 fl_set_object_boxtype(ob, FL_UP_BOX);
1556 fl_set_button(ob, 0);
1557 fl_redraw_object(ob);
1559 Buffer * tmpbuffer = men->_view->buffer();
1560 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1562 int SubInsertAscii = fl_defpup(FL_ObjWin(ob),
1563 _("Import ASCII file%t"
1565 "|As Paragraphs%x42"));
1567 fl_setpup_shortcut(SubInsertAscii, 41, scex(_("IMA|Ll#l#L")));
1568 fl_setpup_shortcut(SubInsertAscii, 42, scex(_("IMA|Pp#p#P")));
1570 int SubInsertTableList= fl_defpup(FL_ObjWin(ob),
1572 "|Table of Contents%x21"
1573 "|List of Figures%x22"
1574 "|List of Tables%x23"
1575 "|List of Algorithms%x24"
1577 "|BibTeX Reference%x26"));
1579 fl_setpup_shortcut(SubInsertTableList, 21, scex(_("IMT|Cc#c#C")));
1580 fl_setpup_shortcut(SubInsertTableList, 22, scex(_("IMT|Ff#f#F")));
1581 fl_setpup_shortcut(SubInsertTableList, 23, scex(_("IMT|Tt#t#T")));
1582 fl_setpup_shortcut(SubInsertTableList, 24, scex(_("IMT|Aa#a#A")));
1583 fl_setpup_shortcut(SubInsertTableList, 25, scex(_("IMT|Ii#i#I")));
1584 fl_setpup_shortcut(SubInsertTableList, 26, scex(_("IMT|Bb#b#B")));
1586 int SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
1590 "|Wide Figure Float%x73"
1591 "|Wide Table Float%l%x74"
1592 "|Algorithm Float%x75"));
1594 fl_setpup_shortcut(SubInsertFloatList, 71, scex(_("IMF|gG#g#G")));
1595 fl_setpup_shortcut(SubInsertFloatList, 72, scex(_("IMF|Tt#t#T")));
1596 fl_setpup_shortcut(SubInsertFloatList, 73, scex(_("IMF|Ww#w#W")));
1597 fl_setpup_shortcut(SubInsertFloatList, 74, scex(_("IMF|iI#i#I")));
1598 fl_setpup_shortcut(SubInsertFloatList, 75, scex(_("IMF|Aa#a#A")));
1600 int SubInsertSpecial = fl_defpup(FL_ObjWin(ob),
1601 _("Special Character%t"
1603 "|Hyphenation Point%x32"
1604 "|Protected Blank%x33"
1606 "|Ellipsis (...)%x35"
1607 "|End of sentence period%x36"
1608 "|Ordinary Quote (\")%x37"
1609 "|Menu Separator %x38"));
1611 fl_setpup_shortcut(SubInsertSpecial, 31, scex(_("IMS|Hh#h#H")));
1612 fl_setpup_shortcut(SubInsertSpecial, 32, scex(_("IMS|Pp#p#P")));
1613 fl_setpup_shortcut(SubInsertSpecial, 33, scex(_("IMS|Bb#b#B")));
1614 fl_setpup_shortcut(SubInsertSpecial, 34, scex(_("IMS|Ll#l#L")));
1615 fl_setpup_shortcut(SubInsertSpecial, 35, scex(_("IMS|iI#i#I")));
1616 fl_setpup_shortcut(SubInsertSpecial, 36, scex(_("IMS|Ee#e#E")));
1617 fl_setpup_shortcut(SubInsertSpecial, 37, scex(_("IMS|Qq#q#Q")));
1618 fl_setpup_shortcut(SubInsertSpecial, 38, scex(_("IMS|Mm#m#M")));
1620 int InsertMenu = fl_defpup(FL_ObjWin(ob),
1624 "|Import ASCII File%m"
1625 "|Insert LyX File...%l"
1630 "|Special Character%m%l"
1633 "|Cross-Reference..."
1634 "|Citation Reference..."
1636 "|Index entry of last word"),
1642 fl_setpup_shortcut(InsertMenu, 1, scex(_("IM|gG#g#G")));
1643 fl_setpup_shortcut(InsertMenu, 2, scex(_("IM|bB#b#B")));
1644 fl_setpup_shortcut(InsertMenu, 3, scex(_("IM|cC#c#C")));
1645 fl_setpup_shortcut(InsertMenu, 4, scex(_("IM|Aa#a#A")));
1646 fl_setpup_shortcut(InsertMenu, 5, scex(_("IM|Xx#x#X")));
1647 fl_setpup_shortcut(InsertMenu, 6, scex(_("IM|Ff#f#F")));
1648 fl_setpup_shortcut(InsertMenu, 7, scex(_("IM|Mm#m#M")));
1649 fl_setpup_shortcut(InsertMenu, 8, scex(_("IM|oO#o#O")));
1650 fl_setpup_shortcut(InsertMenu, 9, scex(_("IM|Tt#t#T")));
1651 fl_setpup_shortcut(InsertMenu, 10, scex(_("IM|Ss#s#S")));
1652 fl_setpup_shortcut(InsertMenu, 11, scex(_("IM|Nn#n#N")));
1653 fl_setpup_shortcut(InsertMenu, 12, scex(_("IM|Ll#l#L")));
1654 fl_setpup_shortcut(InsertMenu, 13, scex(_("IM|rR#r#R")));
1655 fl_setpup_shortcut(InsertMenu, 14, scex(_("IM|iI#i#I")));
1656 fl_setpup_shortcut(InsertMenu, 15, scex(_("IM|dD#d#D")));
1657 fl_setpup_shortcut(InsertMenu, 16, scex(_("IM|wW#w#W")));
1659 fl_addtopup(InsertMenu, _("|URL..."));
1660 fl_setpup_shortcut(InsertMenu, 17, scex(_("IM|Uu#u#U")));
1662 if (tmpbuffer->isReadonly()) {
1663 for (int ii = 1; ii <= 16; ii++)
1664 fl_setpup_mode(InsertMenu, ii, FL_PUP_GREY);
1665 fl_setpup_mode(InsertMenu, 17, FL_PUP_GREY);
1669 men->_view->getForm()->x + ob->x,
1670 men->_view->getForm()->y + ob->y + ob->h + 10);
1672 int choice = fl_dopup(InsertMenu);
1675 // set the pseudo menu-button back
1676 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1677 fl_redraw_object(ob);
1679 if (men->currentView()->available()){
1680 men->currentView()->getScreen()->HideCursor();
1682 case 1: tmpfunc->Dispatch(LFUN_FIGURE); break;
1683 case 2: tmpfunc->Dispatch(LFUN_TABLE); break;
1684 case 3: tmpfunc->Dispatch(LFUN_CHILDINSERT); break;
1685 case 4: // Insert ASCII file submenu
1687 case 5: tmpfunc->Dispatch(LFUN_FILE_INSERT); break;
1688 case 41: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "line"); break;
1689 case 42: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "paragraph"); break;
1693 case 6: tmpfunc->Dispatch(LFUN_FOOTMELT); break
1695 case 7: tmpfunc->Dispatch(LFUN_MARGINMELT); break;
1697 case 8: // Float sub-menu
1699 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "figure");
1702 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "table");
1705 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-fig");
1708 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-tab");
1711 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "algorithm");
1714 case 9: // Table/List submenu
1716 case 21: tmpfunc->Dispatch(LFUN_TOC_INSERT); break;
1717 case 22: tmpfunc->Dispatch(LFUN_LOF_INSERT); break;
1718 case 23: tmpfunc->Dispatch(LFUN_LOT_INSERT); break;
1719 case 24: tmpfunc->Dispatch(LFUN_LOA_INSERT); break;
1720 case 25: tmpfunc->Dispatch(LFUN_INDEX_PRINT); break;
1721 case 26: tmpfunc->Dispatch(LFUN_INSERT_BIBTEX); break;
1723 case 10: // Special Character submenu
1725 case 31: tmpfunc->Dispatch(LFUN_HFILL); break;
1726 case 32: tmpfunc->Dispatch(LFUN_HYPHENATION); break;
1727 case 33: tmpfunc->Dispatch(LFUN_PROTECTEDSPACE); break;
1728 case 34: tmpfunc->Dispatch(LFUN_BREAKLINE); break;
1729 case 35: tmpfunc->Dispatch(LFUN_LDOTS); break;
1730 case 36: tmpfunc->Dispatch(LFUN_END_OF_SENTENCE); break;
1731 case 37: tmpfunc->Dispatch(LFUN_QUOTE); break;
1732 case 38: tmpfunc->Dispatch(LFUN_MENU_SEPARATOR); break;
1734 case 11: tmpfunc->Dispatch(LFUN_INSERT_NOTE); break;
1735 case 12: tmpfunc->Dispatch(LFUN_INSERT_LABEL); break;
1736 case 13: tmpfunc->Dispatch(LFUN_INSERT_REF); break;
1737 case 14: tmpfunc->Dispatch(LFUN_INSERT_CITATION); break;
1738 case 15: tmpfunc->Dispatch(LFUN_INDEX_INSERT); break;
1739 case 16: tmpfunc->Dispatch(LFUN_INDEX_INSERT_LAST); break;
1740 case 17: tmpfunc->Dispatch(LFUN_URL); break;
1743 fl_freepup(InsertMenu);
1744 fl_freepup(SubInsertAscii);
1745 fl_freepup(SubInsertTableList);
1746 fl_freepup(SubInsertFloatList);
1747 fl_freepup(SubInsertSpecial);
1751 void Menus::ShowMathMenu(FL_OBJECT * ob, long)
1753 extern void math_insert_symbol(char const * s);
1755 Menus * men = static_cast<Menus*>(ob->u_vdata);
1757 // set the pseudo menu-button
1758 fl_set_object_boxtype(ob, FL_UP_BOX);
1759 fl_set_button(ob, 0);
1760 fl_redraw_object(ob);
1762 Buffer * tmpbuffer = men->_view->buffer();
1763 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1765 int MathMenu = fl_defpup(FL_ObjWin(ob),
1776 fl_setpup_shortcut(MathMenu, 1, scex(_("MM|Ff#f#F")));
1777 fl_setpup_shortcut(MathMenu, 2, scex(_("MM|Ss#s#S")));
1778 fl_setpup_shortcut(MathMenu, 3, scex(_("MM|Ee#e#E")));
1779 fl_setpup_shortcut(MathMenu, 4, scex(_("MM|xX#x#X")));
1780 fl_setpup_shortcut(MathMenu, 5, scex(_("MM|uU#u#U")));
1781 fl_setpup_shortcut(MathMenu, 6, scex(_("MM|Ii#i#I")));
1782 fl_setpup_shortcut(MathMenu, 7, scex(_("MM|Mm#m#M")));
1783 fl_setpup_shortcut(MathMenu, 8, scex(_("MM|Dd#d#D")));
1784 fl_setpup_shortcut(MathMenu, 9, scex(_("MM|Pp#p#P")));
1786 if (tmpbuffer->isReadonly())
1787 for (int ii = 1; ii <= 9; ii++)
1788 fl_setpup_mode(MathMenu, ii, FL_PUP_GREY);
1792 men->_view->getForm()->x + ob->x,
1793 men->_view->getForm()->y + ob->y + ob->h + 10);
1794 int choice = fl_dopup(MathMenu);
1797 // set the pseudo menu-button back
1798 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1799 fl_redraw_object(ob);
1801 if (men->currentView()->available()) {
1804 tmpfunc->Dispatch(LFUN_INSERT_MATH, "frac");
1807 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sqrt");
1809 case 3: /* Exponent */
1810 tmpfunc->Dispatch(LFUN_INSERT_MATH, "^");
1813 tmpfunc->Dispatch(LFUN_INSERT_MATH, "_");
1816 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sum");
1819 tmpfunc->Dispatch(LFUN_INSERT_MATH, "int");
1822 tmpfunc->Dispatch(LFUN_MATH_MODE);
1825 tmpfunc->Dispatch(LFUN_MATH_DISPLAY);
1828 show_symbols_form(tmpfunc);
1831 men->currentView()->update(0);
1833 fl_freepup(MathMenu);
1837 void Menus::ShowOptionsMenu(FL_OBJECT * ob, long)
1839 Menus * men = static_cast<Menus*>(ob->u_vdata);
1841 // set the pseudo menu-button
1842 fl_set_object_boxtype(ob, FL_UP_BOX);
1843 fl_set_button(ob, 0);
1844 fl_redraw_object(ob);
1846 //Buffer *tmpbuffer = men->_view->currentBuffer();
1847 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1849 int OptionsMenu = fl_defpup(FL_ObjWin(ob),
1851 "|Spellchecker Options..."
1856 fl_setpup_shortcut(OptionsMenu, 1, scex(_("OM|Ff#f#F")));
1857 fl_setpup_shortcut(OptionsMenu, 2, scex(_("OM|Ss#s#S")));
1858 fl_setpup_shortcut(OptionsMenu, 3, scex(_("OM|Kk#k#K")));
1859 fl_setpup_shortcut(OptionsMenu, 4, scex(_("OM|Ll#l#L")));
1860 fl_setpup_shortcut(OptionsMenu, 5, scex(_("OM|Rr#r#R")));
1862 if(lyxrc->isp_command == "none")
1863 fl_setpup_mode(OptionsMenu, 2, FL_PUP_GREY);
1866 men->_view->getForm()->x + ob->x,
1867 men->_view->getForm()->y + ob->y + ob->h + 10);
1868 int choice = fl_dopup(OptionsMenu);
1871 // set the pseudo menu-button back
1872 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1873 fl_redraw_object(ob);
1875 case 1: men->ScreenOptions(); break;
1876 case 2: SpellCheckerOptions(); break;
1877 case 3: men->_view->getIntl()->MenuKeymap(); break;
1878 case 4: LaTeXOptions(); break;
1879 case 5: tmpfunc->Dispatch(LFUN_RECONFIGURE); break;
1882 fl_freepup(OptionsMenu);
1886 void Menus::ShowBufferMenu(FL_OBJECT * ob, long)
1888 Menus * men = static_cast<Menus*>(ob->u_vdata);
1890 // set the pseudo menu-button
1891 fl_set_object_boxtype(ob, FL_UP_BOX);
1892 fl_set_button(ob, 0);
1893 fl_redraw_object(ob);
1895 int BufferMenu = fl_newpup(FL_ObjWin(ob));
1896 bufferlist.makePup(BufferMenu);
1899 men->_view->getForm()->x + ob->x,
1900 men->_view->getForm()->y + ob->y + ob->h + 10);
1901 int choice = fl_dopup(BufferMenu);
1904 // set the pseudo menu-button back
1905 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1906 fl_redraw_object(ob);
1907 if (choice > 0) men->handleBufferMenu(choice - 1);
1909 fl_freepup(BufferMenu);
1914 char const * doc_files [] = {"Intro", "Tutorial",
1915 "UserGuide", "Extended",
1916 "Customization", "Reference",
1917 "BUGS", "LaTeXConfig"};
1919 void Menus::ShowHelpMenu(FL_OBJECT * ob, long)
1921 Menus * men = static_cast<Menus*>(ob->u_vdata);
1923 // set the pseudo menu-button
1924 fl_set_object_boxtype(ob, FL_UP_BOX);
1925 fl_set_button(ob, 0);
1926 fl_redraw_object(ob);
1928 int HelpMenu = fl_defpup(FL_ObjWin(ob),
1932 "|Extended Features"
1936 "|LaTeX Configuration%l"
1937 "|Copyright and Warranty..."
1941 fl_setpup_shortcut(HelpMenu, 1, scex(_("HM|Ii#I#i")));
1942 fl_setpup_shortcut(HelpMenu, 2, scex(_("HM|Tt#T#t")));
1943 fl_setpup_shortcut(HelpMenu, 3, scex(_("HM|Uu#U#u")));
1944 fl_setpup_shortcut(HelpMenu, 4, scex(_("HM|xX#x#X")));
1945 fl_setpup_shortcut(HelpMenu, 5, scex(_("HM|Cc#C#c")));
1946 fl_setpup_shortcut(HelpMenu, 6, scex(_("HM|Rr#R#r")));
1947 fl_setpup_shortcut(HelpMenu, 7, scex(_("HM|Kk#K#k")));
1948 fl_setpup_shortcut(HelpMenu, 8, scex(_("HM|Ll#L#l")));
1949 fl_setpup_shortcut(HelpMenu, 9, scex(_("HM|oO#o#O")));
1950 fl_setpup_shortcut(HelpMenu, 10, scex(_("HM|eE#e#E")));
1951 fl_setpup_shortcut(HelpMenu, 11, scex(_("HM|Vv#v#V")));
1954 men->_view->getForm()->x + ob->x,
1955 men->_view->getForm()->y + ob->y + ob->h + 10);
1956 int choice = fl_dopup(HelpMenu);
1959 // set the pseudo menu-button back
1960 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1961 fl_redraw_object(ob);
1964 case 1: case 2: case 3: case 4: case 5:
1965 case 6: case 7: case 8:
1967 men->MenuDocu(doc_files[choice - 1]);
1970 case 9: ShowCopyright(); break;
1971 case 10: ShowCredits(); break;
1974 fl_show_message((string(_("LyX Version ")) + LYX_VERSION
1975 + _(" of ") + LYX_RELEASE).c_str(),
1976 (_("Library directory: ")
1977 + MakeDisplayPath(system_lyxdir)).c_str(),
1978 (_("User directory: ")
1979 + MakeDisplayPath(user_lyxdir)).c_str());
1983 fl_freepup(HelpMenu);
1987 void Menus::MenuDocu(string const & docname)
1989 string fname = i18nLibFileSearch("doc", docname, "lyx");
1990 _view->getMiniBuffer()->Set(_("Opening help file"),
1991 MakeDisplayPath(fname), "...");
1992 currentView()->buffer(bufferlist.loadLyXFile(fname, false));
1994 if (docname == "Reference")
1995 _view->getLyXFunc()->Dispatch(LFUN_TOCVIEW);
1999 void Menus::handleBufferMenu(int choice)
2001 currentView()->buffer(bufferlist.getBuffer(choice));