3 * ==================================================
5 * LyX, The Document Processor
7 * Copyright 1995 Matthias Ettrich
8 * Copyright 1995-2000 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
36 #include "spellchecker.h"
37 #include "support/filetools.h"
39 #include "lastfiles.h"
40 #include "bufferlist.h"
41 #include "lyx_gui_misc.h"
42 #include "minibuffer.h"
50 #include "bufferview_funcs.h"
51 #include "insets/insetref.h"
52 #include "insets/insettabular.h"
60 extern FD_form_screen * fd_form_screen;
61 extern BufferList bufferlist;
63 // I would really prefere to see most or all of these 'extern's disappear.
64 // Their commands should be called through LyXFunc (IMO). (Lgb)
66 extern void MenuLayoutSave();
67 extern void ShowCredits();
68 extern void ShowCopyright();
69 extern void show_symbols_form(LyXFunc *);
70 extern void LaTeXOptions(BufferView *);
72 // A bunch of wrappers
74 extern "C" void C_Menus_ShowFileMenu(FL_OBJECT * ob, long data)
76 Menus::ShowFileMenu(ob, data);
79 extern "C" void C_Menus_ShowFileMenu2(FL_OBJECT * ob, long data)
81 Menus::ShowFileMenu2(ob, data);
84 extern "C" void C_Menus_ShowEditMenu(FL_OBJECT * ob, long data)
86 Menus::ShowEditMenu(ob, data);
89 extern "C" void C_Menus_ShowTocMenu(FL_OBJECT * ob, long data)
91 Menus::ShowTocMenu(ob, data);
94 extern "C" void C_Menus_ShowRefsMenu(FL_OBJECT * ob, long data)
96 Menus::ShowRefsMenu(ob, data);
99 extern "C" void C_Menus_ShowLayoutMenu(FL_OBJECT * ob, long data)
101 Menus::ShowLayoutMenu(ob, data);
104 extern "C" void C_Menus_ShowInsertMenu(FL_OBJECT * ob, long data)
106 Menus::ShowInsertMenu(ob, data);
109 extern "C" void C_Menus_ShowMathMenu(FL_OBJECT * ob, long data)
111 Menus::ShowMathMenu(ob, data);
114 extern "C" void C_Menus_ShowOptionsMenu(FL_OBJECT * ob, long data)
116 Menus::ShowOptionsMenu(ob, data);
119 extern "C" void C_Menus_ShowBufferMenu(FL_OBJECT * ob, long data)
121 Menus::ShowBufferMenu(ob, data);
124 extern "C" void C_Menus_ShowHelpMenu(FL_OBJECT * ob, long data)
126 Menus::ShowHelpMenu(ob, data);
130 Menus::Menus(LyXView * view, int air)
134 // deactivate the menu accelerators
135 fl_set_object_shortcut(menu_file, "", 1);
136 fl_set_object_shortcut(menu_file2, "", 1);
137 fl_set_object_shortcut(menu_edit, "", 1);
138 fl_set_object_shortcut(menu_toc, "", 1);
139 fl_set_object_shortcut(menu_refs, "", 1);
140 fl_set_object_shortcut(menu_layout, "", 1);
141 fl_set_object_shortcut(menu_math, "", 1);
142 fl_set_object_shortcut(menu_insert, "", 1);
143 fl_set_object_shortcut(menu_options, "", 1);
144 fl_set_object_shortcut(menu_options2, "", 1);
145 fl_set_object_shortcut(menu_buffer, "", 1);
146 fl_set_object_shortcut(menu_help, "", 1);
147 fl_set_object_shortcut(menu_help2, "", 1);
153 BufferView * Menus::currentView()
155 return _view->view();
159 void Menus::showMenus()
161 fl_hide_object(menu_grp2);
162 fl_show_object(menu_grp1);
166 void Menus::hideMenus()
168 fl_hide_object(menu_grp1);
169 fl_show_object(menu_grp2);
173 void Menus::openByName(string const & menuName)
174 /* Opens the visible menu of given name, or simply does nothing
175 when the name is not known. NOTE THE EXTREMELY STUPID
176 IMPLEMENTATION! :-) There are probably hundred ways to do
177 this better, for instance, by scanning the menu objects and
178 testing for the given name. I leave this as an exercise for an
179 experienced GG (GUI Guy/Girl). RVDK_PATCH_5. */
181 if (menu_file->visible) {
182 if (menuName == _("File"))
183 ShowFileMenu(menu_file, 0);
184 else if (menuName == _("Edit"))
185 ShowEditMenu(menu_edit, 0);
186 else if (menuName == _("TOC"))
187 ShowTocMenu(menu_toc, 0);
188 else if (menuName == _("Refs"))
189 ShowRefsMenu(menu_refs, 0);
190 else if (menuName == _("Layout"))
191 ShowLayoutMenu(menu_layout, 0);
192 else if (menuName == _("Insert"))
193 ShowInsertMenu(menu_insert, 0);
194 else if (menuName == _("Math"))
195 ShowMathMenu(menu_math, 0);
196 else if (menuName == _("Options"))
197 ShowOptionsMenu(menu_options, 0);
198 else if (menuName == _("Documents"))
199 ShowBufferMenu(menu_buffer, 0);
200 else if (menuName == _("Help"))
201 ShowHelpMenu(menu_help, 0);
202 else lyxerr << "The menu '" << menuName
203 << "' is not available." << endl;
205 if (menuName == _("File"))
206 ShowFileMenu2(menu_file2, 0);
207 else if (menuName == _("Options"))
208 ShowOptionsMenu(menu_options2, 0);
209 else if (menuName == _("Help"))
210 ShowHelpMenu(menu_help2, 0);
211 else lyxerr << "The menu '" << menuName
212 << "' is not available." << endl;
217 void Menus::create_menus(int air)
219 FL_FORM * form = _view->getForm();
221 // Here I'd really like to see code like:
225 const int MENU_LABEL_SIZE = FL_NORMAL_SIZE;
226 const int mheight = 30;
227 const int mbheight= 22;
228 // where to place the menubar?
229 const int yloc = (mheight - mbheight)/2; //air + bw;
230 const int mbadd = 20; // menu button add (to width)
234 obj = fl_add_frame(FL_UP_FRAME, 0, 0, form->w, mheight, "");
235 fl_set_object_resize(obj, FL_RESIZE_ALL);
236 fl_set_object_gravity(obj, NorthWestGravity, NorthEastGravity);
238 menu_grp1 = fl_bgn_group();
242 fl_add_button(FL_TOUCH_BUTTON,
244 fl_get_string_width(FL_BOLD_STYLE,
247 strlen(_("File"))) + mbadd,
248 mbheight, _("File"));
249 moffset += obj->w + air;
250 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
251 fl_set_object_callback(obj, C_Menus_ShowFileMenu, 0);
256 fl_add_button(FL_TOUCH_BUTTON,
258 fl_get_string_width(FL_BOLD_STYLE,
261 strlen(_("Edit"))) + mbadd,
262 mbheight, _("Edit"));
263 moffset += obj->w + air;
264 fl_set_object_shortcut(obj, scex(_("MB|#E")), 1);
265 fl_set_object_callback(obj, C_Menus_ShowEditMenu, 0);
270 fl_add_button(FL_TOUCH_BUTTON,
272 fl_get_string_width(FL_BOLD_STYLE,
275 strlen(_("TOC"))) + mbadd,
277 moffset += obj->w + air;
278 fl_set_object_shortcut(obj, scex(_("MB|#T")), 1);
279 fl_set_object_callback(obj, C_Menus_ShowTocMenu, 0);
284 fl_add_button(FL_TOUCH_BUTTON,
286 fl_get_string_width(FL_BOLD_STYLE,
289 strlen(_("Refs"))) + mbadd,
290 mbheight, _("Refs"));
291 moffset += obj->w + air;
292 fl_set_object_shortcut(obj, scex(_("MB|#R")), 1);
293 fl_set_object_callback(obj, C_Menus_ShowRefsMenu, 0);
296 // Layout menu button
298 fl_add_button(FL_TOUCH_BUTTON,
300 fl_get_string_width(FL_BOLD_STYLE,
303 strlen(_("Layout"))) + mbadd,
304 mbheight, _("Layout"));
305 moffset += obj->w + air;
306 fl_set_object_shortcut(obj, scex(_("MB|#L")), 1);
307 fl_set_object_callback(obj, C_Menus_ShowLayoutMenu, 0);
310 // Insert menu button button
312 fl_add_button(FL_TOUCH_BUTTON,
314 fl_get_string_width(FL_BOLD_STYLE,
317 strlen(_("Insert"))) + mbadd,
318 mbheight, _("Insert"));
319 moffset += obj->w + air;
320 fl_set_object_shortcut(obj, scex(_("MB|#I")), 1);
321 fl_set_object_callback(obj, C_Menus_ShowInsertMenu, 0);
326 fl_add_button(FL_TOUCH_BUTTON,
328 fl_get_string_width(FL_BOLD_STYLE,
331 strlen(_("Math"))) + mbadd,
332 mbheight, _("Math"));
333 moffset += obj->w + air;
334 fl_set_object_shortcut(obj, scex(_("MB|#M")), 1);
335 fl_set_object_callback(obj, C_Menus_ShowMathMenu, 0);
338 // Options menu button
340 fl_add_button(FL_TOUCH_BUTTON,
342 fl_get_string_width(FL_BOLD_STYLE,
345 strlen(_("Options"))) + mbadd,
346 mbheight, _("Options"));
347 moffset += obj->w + air;
348 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
349 fl_set_object_callback(obj, C_Menus_ShowOptionsMenu, 0);
352 // Documents menu button
354 fl_add_button(FL_TOUCH_BUTTON,
356 fl_get_string_width(FL_BOLD_STYLE,
359 strlen(_("Documents"))) + mbadd,
360 mbheight, _("Documents"));
361 moffset += obj->w + air;
362 fl_set_object_shortcut(obj, scex(_("MB|#D")), 1);
363 fl_set_object_callback(obj, C_Menus_ShowBufferMenu, 0);
368 fl_add_button(FL_TOUCH_BUTTON,
370 fl_get_string_width(FL_BOLD_STYLE,
373 strlen(_("Help"))) + mbadd,
374 mbheight, _("Help"));
375 moffset += obj->w + air;
376 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
377 fl_set_object_callback(obj, C_Menus_ShowHelpMenu, 0);
382 // Set the menu buttons atrributes.
383 // Due to a bug in xforms we cant do this only an the group.
384 obj = menu_grp1->next;
386 fl_set_object_boxtype(obj, FL_FLAT_BOX);
387 fl_set_object_color(obj, FL_MCOL, FL_MCOL);
388 fl_set_object_lsize(obj, MENU_LABEL_SIZE);
389 fl_set_object_lstyle(obj, FL_BOLD_STYLE);
390 fl_set_object_resize(obj, FL_RESIZE_ALL);
391 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
393 } while (obj != 0 && obj->objclass != FL_END_GROUP);
397 menu_grp2 = fl_bgn_group();
401 fl_add_button(FL_TOUCH_BUTTON,
403 fl_get_string_width(FL_BOLD_STYLE,
406 strlen(_("File"))) + mbadd,
407 mbheight, _("File"));
408 moffset += obj->w + air;
409 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
410 fl_set_object_callback(obj, C_Menus_ShowFileMenu2, 0);
413 // Options menu button
414 menu_options2 = obj =
415 fl_add_button(FL_TOUCH_BUTTON,
417 fl_get_string_width(FL_BOLD_STYLE,
420 strlen(_("Options"))) +mbadd,
421 mbheight, _("Options"));
422 moffset += obj->w + air;
423 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
424 fl_set_object_callback(obj, C_Menus_ShowOptionsMenu, 0);
429 fl_add_button(FL_TOUCH_BUTTON,
431 fl_get_string_width(FL_BOLD_STYLE,
434 strlen(_("Help"))) + mbadd,
435 mbheight, _("Help"));
436 moffset += obj->w + air;
437 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
438 fl_set_object_callback(obj, C_Menus_ShowHelpMenu, 0);
443 // Set the menu buttons atrributes.
444 // Due to a bug in xforms we cant do this only an the group.
445 obj = menu_grp2->next;
447 fl_set_object_boxtype(obj, FL_FLAT_BOX);
448 fl_set_object_color(obj, FL_MCOL, FL_MCOL);
449 fl_set_object_lsize(obj, MENU_LABEL_SIZE);
450 fl_set_object_lstyle(obj, FL_BOLD_STYLE);
451 fl_set_object_resize(obj, FL_RESIZE_ALL);
452 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
454 } while (obj != 0 && obj->objclass != FL_END_GROUP);
458 void Menus::ScreenOptions()
460 static int ow = -1, oh;
462 // this is not very nice....
463 fl_set_input(fd_form_screen->input_roman,
464 lyxrc.roman_font_name.c_str());
465 fl_set_input(fd_form_screen->input_sans,
466 lyxrc.sans_font_name.c_str());
467 fl_set_input(fd_form_screen->input_typewriter,
468 lyxrc.typewriter_font_name.c_str());
469 fl_set_input(fd_form_screen->input_font_norm,
470 lyxrc.font_norm.c_str());
472 sprintf(tmpstring, "%d", lyxrc.zoom);
473 fl_set_input(fd_form_screen->intinput_size, tmpstring);
474 if (fd_form_screen->form_screen->visible) {
475 fl_raise_form(fd_form_screen->form_screen);
477 fl_show_form(fd_form_screen->form_screen,
478 FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
479 _("Screen Options"));
481 ow = fd_form_screen->form_screen->w;
482 oh = fd_form_screen->form_screen->h;
484 fl_set_form_minsize(fd_form_screen->form_screen, ow, oh);
490 // Here comes all the menu callbacks.
493 void Menus::ShowFileMenu(FL_OBJECT * ob, long)
495 Menus * men = static_cast<Menus*>(ob->u_vdata);
497 // Regarding the pseudo-menu-button:
498 // ok, ok this is a hack. It would be better to use the menus of the
499 // xforms 0.8 library. but then all popups have to be defined all the
500 // time, code rewriting would be necessary and contex-depending menus
501 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
502 // course it would be more proper (and little faster). So if anybody
503 // likes to do the cleanup, just do it. Matthias
505 // set the pseudo menu-button
506 fl_set_object_boxtype(ob, FL_UP_BOX);
507 fl_set_button(ob, 0);
508 fl_redraw_object(ob);
510 Buffer * tmpbuffer = men->_view->buffer();
511 LyXFunc * tmpfunc = men->_view->getLyXFunc();
513 bool LinuxDoc = tmpbuffer->isLinuxDoc();
514 bool DocBook = tmpbuffer->isDocBook();
515 bool Literate = tmpbuffer->isLiterate();
519 int SubFileImport = fl_defpup(FL_ObjWin(ob),
522 "|Ascii Text as Lines...%x31"
523 "|Ascii Text as Paragraphs%x32"
527 fl_setpup_shortcut(SubFileImport, 30, scex(_("FIM|Ll#l#L")));
528 fl_setpup_shortcut(SubFileImport, 31, scex(_("FIM|Aa#a#A")));
529 fl_setpup_shortcut(SubFileImport, 32, scex(_("FIM|Pp#p#P")));
530 fl_setpup_shortcut(SubFileImport, 33, scex(_("FIM|Nn#n#N")));
531 fl_setpup_shortcut(SubFileImport, 34, scex(_("FIM|Dd#d#D")));
535 // remember to make this handle linuxdoc too.
536 // and now docbook also.
537 int SubFileExport = 0;
538 if (!LinuxDoc && !DocBook)
539 SubFileExport= fl_defpup(FL_ObjWin(ob),
543 "|as PostScript...%x42"
544 "|as Ascii Text...%x43"
548 SubFileExport= fl_defpup(FL_ObjWin(ob),
550 "|as LinuxDoc...%x40"
552 "|as PostScript...%x42"
553 "|as Ascii Text...%x43"
556 SubFileExport= fl_defpup(FL_ObjWin(ob),
560 "|as PostScript...%x42"
561 "|as Ascii Text...%x43"
564 fl_setpup_shortcut(SubFileExport, 40, scex(_("FEX|Ll#l#L")));
565 fl_setpup_shortcut(SubFileExport, 41, scex(_("FEX|Dd#d#D")));
566 fl_setpup_shortcut(SubFileExport, 42, scex(_("FEX|Pp#p#P")));
567 fl_setpup_shortcut(SubFileExport, 43, scex(_("FEX|Tt#t#T")));
568 fl_setpup_shortcut(SubFileExport, 44, scex(_("FEX|Hh#h#H")));
570 if (!LinuxDoc && !DocBook) {
571 fl_setpup_shortcut(SubFileExport, 45, scex(_("FEX|mM#m#M")));
574 int FileMenu = fl_defpup(FL_ObjWin(ob),
576 "|New from template..."
590 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
591 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
592 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
593 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Cc#c#C")));
594 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|Ss#s#S")));
595 fl_setpup_shortcut(FileMenu, 6, scex(_("FM|Aa#a#A")));
596 fl_setpup_shortcut(FileMenu, 7, scex(_("FM|Rr#r#R")));
597 fl_setpup_shortcut(FileMenu, 8, scex(_("FM|dD#d#D")));
598 fl_setpup_shortcut(FileMenu, 9, scex(_("FM|wW#w#W")));
599 fl_setpup_shortcut(FileMenu, 10, scex(_("FM|vV#v#V")));
600 fl_setpup_shortcut(FileMenu, 11, scex(_("FM|Uu#u#U")));
601 fl_setpup_shortcut(FileMenu, 12, scex(_("FM|Bb#b#B")));
602 fl_setpup_shortcut(FileMenu, 13, scex(_("FM|Pp#p#P")));
603 fl_setpup_shortcut(FileMenu, 14, scex(_("FM|Ff#f#F")));
605 // These commands are disabled when the corresponding programs
606 // are not installed. I simply grey them out, since I do not
607 // want to change their number (JMarc)
608 bool hasLaTeX = lyxrc.latex_command != "none";
610 if (!hasLaTeX || lyxrc.view_dvi_command == "none")
611 fl_setpup_mode(FileMenu, 8, FL_PUP_GREY);
613 if (!hasLaTeX || lyxrc.view_ps_command == "none")
614 fl_setpup_mode(FileMenu, 9, FL_PUP_GREY);
617 fl_setpup_mode(FileMenu, 10, FL_PUP_GREY);
618 fl_setpup_mode(FileMenu, 11, FL_PUP_GREY);
621 if (lyxrc.literate_command == "none" || ! Literate)
622 fl_setpup_mode(FileMenu, 12, FL_PUP_GREY);
624 if (!hasLaTeX || lyxrc.print_command == "none")
625 fl_setpup_mode(FileMenu, 13, FL_PUP_GREY);
627 if (!hasLaTeX || lyxrc.fax_command == "none")
628 fl_setpup_mode(FileMenu, 14, FL_PUP_GREY);
630 bool hasReLyX = lyxrc.relyx_command != "none";
632 // Disable import LaTeX and Noweb
633 fl_setpup_mode(SubFileImport, 30, FL_PUP_GREY);
634 fl_setpup_mode(SubFileImport, 33, FL_PUP_GREY);
637 if ( lyxrc.linuxdoc_to_lyx_command == "none")
638 fl_setpup_mode(SubFileImport, 34, FL_PUP_GREY);
641 // Disable export dvi and export postscript
642 fl_setpup_mode(SubFileExport, 41, FL_PUP_GREY);
643 fl_setpup_mode(SubFileExport, 42, FL_PUP_GREY);
646 if ((!LinuxDoc && !DocBook && lyxrc.html_command == "none") ||
647 ( LinuxDoc && lyxrc.linuxdoc_to_html_command == "none") ||
648 ( DocBook && lyxrc.docbook_to_html_command == "none")) {
649 // Disable export HTML
650 fl_setpup_mode(SubFileExport, 44, FL_PUP_GREY);
653 // xgettext:no-c-format
654 fl_addtopup(FileMenu, _("|Import%m"), SubFileImport);
655 // xgettext:no-c-format
656 fl_addtopup(FileMenu, _("|Export%m%l"), SubFileExport);
657 // xgettext:no-c-format
658 fl_addtopup(FileMenu, _("|Exit%l"));
659 fl_setpup_shortcut(FileMenu, 15, scex(_("FM|Ii#i#I")));
660 fl_setpup_shortcut(FileMenu, 16, scex(_("FM|Ee#e#E")));
661 fl_setpup_shortcut(FileMenu, 17, scex(_("FM|xX#x#X")));
663 // make the lastfiles menu
665 for (LastFiles::const_iterator cit = lastfiles->begin();
666 cit != lastfiles->end() && ii < 10; ++cit, ++ii) {
667 string tmp = tostr(ii);
668 string tmp2 = tmp + "#" + tmp;
669 tmp += ". " + MakeDisplayPath((*cit), 30);
670 fl_addtopup(FileMenu, tmp.c_str());
671 fl_setpup_shortcut(FileMenu, 18 - 1 + ii, tmp2.c_str());
676 men->_view->getForm()->x + ob->x,
677 men->_view->getForm()->y + ob->y + ob->h + 10);
678 int choice = fl_dopup(FileMenu);
681 // set the pseudo menu-button back
682 fl_set_object_boxtype(ob, FL_FLAT_BOX);
683 fl_redraw_object(ob);
686 case -1: case 0: // we won't do anything
688 case 1: tmpfunc->Dispatch(LFUN_MENUNEW); break;
689 case 2: tmpfunc->Dispatch(LFUN_MENUNEWTMPLT); break;
690 case 3: tmpfunc->Dispatch(LFUN_MENUOPEN); break;
691 case 4: tmpfunc->Dispatch(LFUN_CLOSEBUFFER); break;
692 case 5: tmpfunc->Dispatch(LFUN_MENUWRITE); break;
693 case 6: tmpfunc->Dispatch(LFUN_MENUWRITEAS); break;
694 case 7: tmpfunc->Dispatch(LFUN_MENURELOAD); break;
695 case 8: tmpfunc->Dispatch(LFUN_PREVIEW); break;
696 case 9: tmpfunc->Dispatch(LFUN_PREVIEWPS); break;
697 case 10: tmpfunc->Dispatch(LFUN_RUNLATEX); break;
698 case 11: tmpfunc->Dispatch(LFUN_RUNDVIPS); break;
699 case 12: tmpfunc->Dispatch(LFUN_BUILDPROG); break;
700 case 13: tmpfunc->Dispatch(LFUN_MENUPRINT); break;
701 case 14: tmpfunc->Dispatch(LFUN_FAX); break;
702 case 15: // import menu
703 case 30: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
705 case 31: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
707 case 32: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
709 case 33: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
711 case 34: tmpfunc->Dispatch(LFUN_IMPORT, "linuxdoc");
713 case 16: // export menu
715 if (!LinuxDoc && !DocBook)
716 tmpfunc->Dispatch(LFUN_EXPORT, "latex");
718 tmpfunc->Dispatch(LFUN_EXPORT, "linuxdoc");
720 tmpfunc->Dispatch(LFUN_EXPORT, "docbook");
722 case 41: tmpfunc->Dispatch(LFUN_EXPORT, "dvi");
724 case 42: tmpfunc->Dispatch(LFUN_EXPORT, "postscript");
726 case 43: tmpfunc->Dispatch(LFUN_EXPORT, "ascii");
729 if (!LinuxDoc && !DocBook)
730 tmpfunc->Dispatch(LFUN_EXPORT, "html");
732 tmpfunc->Dispatch(LFUN_EXPORT, "html-linuxdoc");
734 tmpfunc->Dispatch(LFUN_EXPORT, "html-docbook");
736 case 45: tmpfunc->Dispatch(LFUN_EXPORT, "custom");
738 case 17: tmpfunc->Dispatch(LFUN_QUIT); break;
740 case 18: // The first item with lastfiles.
744 .loadLyXFile((*lastfiles)[choice - 18]));
747 fl_freepup(SubFileImport);
748 fl_freepup(SubFileExport);
749 fl_freepup(FileMenu);
751 AllowInput(men->currentView());
755 void Menus::ShowFileMenu2(FL_OBJECT * ob, long)
757 Menus * men = static_cast<Menus*>(ob->u_vdata);
759 // Regarding the pseudo-menu-button:
760 // ok, ok this is a hack. It would be better to use the menus of the
761 // xforms 0.8 library. but then all popups have to be defined all the
762 // time, code rewriting would be necessary and contex-depending menus
763 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
764 // course it would be more proper (and little faster). So if anybody
765 // likes to do the cleanup, just do it. Matthias
767 // set the pseudo menu-button
768 fl_set_object_boxtype(ob, FL_UP_BOX);
769 fl_set_button(ob, 0);
770 fl_redraw_object(ob);
772 LyXFunc * tmpfunc = men->_view->getLyXFunc();
776 int SubFileImport = fl_defpup(FL_ObjWin(ob),
779 "|Ascii Text as Lines...%x16"
780 "|Ascii Text as Paragraphs...%x17"
782 "|LinuxDoc...%x19"));
784 fl_setpup_shortcut(SubFileImport, 15, scex(_("FIM|Ll#l#L")));
785 fl_setpup_shortcut(SubFileImport, 16, scex(_("FIM|Aa#a#A")));
786 fl_setpup_shortcut(SubFileImport, 17, scex(_("FIM|Pp#p#P")));
787 fl_setpup_shortcut(SubFileImport, 18, scex(_("FIM|Nn#n#N")));
788 fl_setpup_shortcut(SubFileImport, 19, scex(_("FIM|Dd#d#D")));
790 bool hasReLyX = lyxrc.relyx_command != "none";
792 // Disable import LaTeX and Noweb
793 fl_setpup_mode(SubFileImport, 15, FL_PUP_GREY);
794 fl_setpup_mode(SubFileImport, 18, FL_PUP_GREY);
797 if ( lyxrc.linuxdoc_to_lyx_command == "none")
798 fl_setpup_mode(SubFileImport, 19, FL_PUP_GREY);
800 // This can be done cleaner later.
801 int FileMenu = fl_defpup(FL_ObjWin(ob),
803 "|New from template..."
806 "|Exit%l"), SubFileImport);
808 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
809 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
810 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
811 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Ii#i#I")));
812 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|xX#x#X")));
814 // make the lastfiles menu
816 for (LastFiles::const_iterator cit = lastfiles->begin();
817 cit != lastfiles->end() && ii < 10; ++cit, ++ii) {
818 string tmp = tostr(ii);
819 string tmp2 = tmp + "#" + tmp;
820 tmp += ". " + MakeDisplayPath((*cit), 30);
821 fl_addtopup(FileMenu, tmp.c_str());
822 fl_setpup_shortcut(FileMenu, 18 - 1 + ii, tmp2.c_str());
827 men->_view->getForm()->x + ob->x,
828 men->_view->getForm()->y + ob->y + ob->h + 10);
829 int choice = fl_dopup(FileMenu);
832 // set the pseudo menu-button back
833 fl_set_object_boxtype(ob, FL_FLAT_BOX);
834 fl_redraw_object(ob);
837 case -1: case 0: // we won't do anything
840 tmpfunc->Dispatch(LFUN_MENUNEW);
843 tmpfunc->Dispatch(LFUN_MENUNEWTMPLT);
846 tmpfunc->Dispatch(LFUN_MENUOPEN);
848 case 4: // import menu
849 case 15: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
851 case 16: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
853 case 17: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
855 case 18: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
857 case 19: tmpfunc->Dispatch(LFUN_IMPORT, "linuxdoc");
860 tmpfunc->Dispatch(LFUN_QUIT);
863 case 6: // The first item with lastfiles.
867 .loadLyXFile((*lastfiles)[choice - 6]));
871 fl_freepup(SubFileImport);
872 fl_freepup(FileMenu);
873 AllowInput(men->currentView());
878 void Menus::ShowEditMenu(FL_OBJECT * ob, long)
880 Menus * men = static_cast<Menus*>(ob->u_vdata);
882 // set the pseudo menu-button
883 fl_set_object_boxtype(ob, FL_UP_BOX);
884 fl_set_button(ob, 0);
885 fl_redraw_object(ob);
887 Buffer * tmpbuffer = men->_view->buffer();
888 LyXFunc * tmpfunc = men->_view->getLyXFunc();
890 // Floats & Insets submenu
891 int SubEditFloats= fl_defpup(FL_ObjWin(ob),
892 _("Floats & Insets%t"
895 "|Open All Footnotes/Margin Notes%x23"
896 "|Close All Footnotes/Margin Notes%x24"
897 "|Open All Figures/Tables%x25"
898 "|Close All Figures/Tables%x26%l"
899 "|Remove all Error Boxes%x27"));
901 fl_setpup_shortcut(SubEditFloats, 21, scex(_("EMF|Oo#o#O")));
902 fl_setpup_shortcut(SubEditFloats, 22, scex(_("EMF|Mm#m#M")));
903 fl_setpup_shortcut(SubEditFloats, 23, scex(_("EMF|Aa#a#A")));
904 fl_setpup_shortcut(SubEditFloats, 24, scex(_("EMF|Cc#c#C")));
905 fl_setpup_shortcut(SubEditFloats, 25, scex(_("EMF|Ff#f#F")));
906 fl_setpup_shortcut(SubEditFloats, 26, scex(_("EMF|Tt#t#T")));
907 fl_setpup_shortcut(SubEditFloats, 27, scex(_("EMF|Rr#r#R")));
910 int SubEditTable = fl_newpup(FL_ObjWin(ob));
911 if (men->currentView()->available() &&
912 men->currentView()->text->cursor.par->table &&
913 !tmpbuffer->isReadonly()){
914 LyXTable *table = men->currentView()->text->cursor.par->table;
916 fl_addtopup(SubEditTable, _("Table%t"));
918 if (table->IsMultiColumn(men->currentView()->text->
919 NumberOfCell(men->currentView()->
923 fl_addtopup(SubEditTable, _("|Multicolumn%B%x44%l"));
925 fl_addtopup(SubEditTable, _("|Multicolumn%b%x44%l"));
926 fl_setpup_shortcut(SubEditTable, 44, scex(_("EMT|Mm#m#M")));
928 if (table->TopLine(men->currentView()->text->
929 NumberOfCell(men->currentView()->
931 men->currentView()->text->
933 fl_addtopup(SubEditTable, _("|Line Top%B%x36"));
935 fl_addtopup(SubEditTable, _("|Line Top%b%x36"));
936 fl_setpup_shortcut(SubEditTable, 36, scex(_("EMT|Tt#t#T")));
938 if (table->BottomLine(men->currentView()->text->
939 NumberOfCell(men->currentView()->
943 fl_addtopup(SubEditTable, _("|Line Bottom%B%x37"));
945 fl_addtopup(SubEditTable, _("|Line Bottom%b%x37"));
946 fl_setpup_shortcut(SubEditTable, 37, scex(_("EMT|Bb#b#B")));
948 if (table->LeftLine(men->currentView()->text->
949 NumberOfCell(men->currentView()->
953 fl_addtopup(SubEditTable, _("|Line Left%B%x38"));
955 fl_addtopup(SubEditTable, _("|Line Left%b%x38"));
956 fl_setpup_shortcut(SubEditTable, 38, scex(_("EMT|Ll#l#L")));
958 if (table->RightLine(men->currentView()->text->
959 NumberOfCell(men->currentView()->
963 fl_addtopup(SubEditTable, _("|Line Right%B%x39%l"));
965 fl_addtopup(SubEditTable, _("|Line Right%b%x39%l"));
966 fl_setpup_shortcut(SubEditTable, 39, scex(_("EMT|Rr#r#R")));
969 table->GetAlignment(men->currentView()->text->
970 NumberOfCell(men->currentView()->
974 if (align == LYX_ALIGN_LEFT)
975 fl_addtopup(SubEditTable, _("|Align Left%R%x40"));
977 fl_addtopup(SubEditTable, _("|Align Left%r%x40"));
978 fl_setpup_shortcut(SubEditTable, 40, scex(_("EMT|eE#e#E")));
980 if (align == LYX_ALIGN_RIGHT)
981 fl_addtopup(SubEditTable, _("|Align Right%R%x41"));
983 fl_addtopup(SubEditTable, _("|Align Right%r%x41"));
984 fl_setpup_shortcut(SubEditTable, 41, scex(_("EMT|iI#i#I")));
986 if (align == LYX_ALIGN_CENTER)
987 fl_addtopup(SubEditTable, _("|Align Center%R%x42%l"));
989 fl_addtopup(SubEditTable, _("|Align Center%r%x42%l"));
990 fl_setpup_shortcut(SubEditTable, 42, scex(_("EMT|Cc#c#C")));
992 // xgettext:no-c-format
993 fl_addtopup(SubEditTable, _("|Append Row%x32"));
994 fl_setpup_shortcut(SubEditTable, 32, scex(_("EMT|oO#o#O")));
995 // xgettext:no-c-format
996 fl_addtopup(SubEditTable, _("|Append Column%x33%l"));
997 fl_setpup_shortcut(SubEditTable, 33, scex(_("EMT|uU#u#U")));
998 // xgettext:no-c-format
999 fl_addtopup(SubEditTable, _("|Delete Row%x34"));
1000 fl_setpup_shortcut(SubEditTable, 34, scex(_("EMT|wW#w#W")));
1001 // xgettext:no-c-format
1002 fl_addtopup(SubEditTable, _("|Delete Column%x35%l"));
1003 fl_setpup_shortcut(SubEditTable, 35, scex(_("EMT|nN#n#N")));
1004 // xgettext:no-c-format
1005 fl_addtopup(SubEditTable, _("|Delete Table%x43"));
1006 fl_setpup_shortcut(SubEditTable, 43, scex(_("EMT|Dd#d#D")));
1007 } else if (men->currentView()->the_locking_inset &&
1008 (men->currentView()->the_locking_inset->LyxCode() ==
1009 Inset::TABULAR_CODE) &&
1010 !tmpbuffer->isReadonly()) {
1011 InsetTabular * inset = static_cast<InsetTabular *>(men->currentView()->the_locking_inset);
1012 LyXTabular * table = inset->tabular;
1014 fl_addtopup(SubEditTable, _("Table%t"));
1016 if (table->IsMultiColumn(inset->GetActCell()))
1017 fl_addtopup(SubEditTable, _("|Multicolumn%B%x44%l"));
1019 fl_addtopup(SubEditTable, _("|Multicolumn%b%x44%l"));
1020 fl_setpup_shortcut(SubEditTable, 44, scex(_("EMT|Mm#m#M")));
1022 if (table->TopLine(inset->GetActCell()))
1023 fl_addtopup(SubEditTable, _("|Line Top%B%x36"));
1025 fl_addtopup(SubEditTable, _("|Line Top%b%x36"));
1026 fl_setpup_shortcut(SubEditTable, 36, scex(_("EMT|Tt#t#T")));
1028 if (table->BottomLine(inset->GetActCell()))
1029 fl_addtopup(SubEditTable, _("|Line Bottom%B%x37"));
1031 fl_addtopup(SubEditTable, _("|Line Bottom%b%x37"));
1032 fl_setpup_shortcut(SubEditTable, 37, scex(_("EMT|Bb#b#B")));
1034 if (table->LeftLine(inset->GetActCell()))
1035 fl_addtopup(SubEditTable, _("|Line Left%B%x38"));
1037 fl_addtopup(SubEditTable, _("|Line Left%b%x38"));
1038 fl_setpup_shortcut(SubEditTable, 38, scex(_("EMT|Ll#l#L")));
1040 if (table->RightLine(inset->GetActCell()))
1041 fl_addtopup(SubEditTable, _("|Line Right%B%x39%l"));
1043 fl_addtopup(SubEditTable, _("|Line Right%b%x39%l"));
1044 fl_setpup_shortcut(SubEditTable, 39, scex(_("EMT|Rr#r#R")));
1046 int align = table->GetAlignment(inset->GetActCell());
1047 if (align == LYX_ALIGN_LEFT)
1048 fl_addtopup(SubEditTable, _("|Align Left%R%x40"));
1050 fl_addtopup(SubEditTable, _("|Align Left%r%x40"));
1051 fl_setpup_shortcut(SubEditTable, 40, scex(_("EMT|eE#e#E")));
1053 if (align == LYX_ALIGN_RIGHT)
1054 fl_addtopup(SubEditTable, _("|Align Right%R%x41"));
1056 fl_addtopup(SubEditTable, _("|Align Right%r%x41"));
1057 fl_setpup_shortcut(SubEditTable, 41, scex(_("EMT|iI#i#I")));
1059 if (align == LYX_ALIGN_CENTER)
1060 fl_addtopup(SubEditTable, _("|Align Center%R%x42%l"));
1062 fl_addtopup(SubEditTable, _("|Align Center%r%x42%l"));
1063 fl_setpup_shortcut(SubEditTable, 42, scex(_("EMT|Cc#c#C")));
1065 // xgettext:no-c-format
1066 fl_addtopup(SubEditTable, _("|Append Row%x32"));
1067 fl_setpup_shortcut(SubEditTable, 32, scex(_("EMT|oO#o#O")));
1068 // xgettext:no-c-format
1069 fl_addtopup(SubEditTable, _("|Append Column%x33%l"));
1070 fl_setpup_shortcut(SubEditTable, 33, scex(_("EMT|uU#u#U")));
1071 // xgettext:no-c-format
1072 fl_addtopup(SubEditTable, _("|Delete Row%x34"));
1073 fl_setpup_shortcut(SubEditTable, 34, scex(_("EMT|wW#w#W")));
1074 // xgettext:no-c-format
1075 fl_addtopup(SubEditTable, _("|Delete Column%x35%l"));
1076 fl_setpup_shortcut(SubEditTable, 35, scex(_("EMT|nN#n#N")));
1077 // xgettext:no-c-format
1078 fl_addtopup(SubEditTable, _("|Delete Table%x43"));
1079 fl_setpup_shortcut(SubEditTable, 43, scex(_("EMT|Dd#d#D")));
1081 fl_addtopup(SubEditTable, _("Table%t"));
1082 // xgettext:no-c-format
1083 fl_addtopup(SubEditTable, _("|Insert table%x31"));
1084 fl_setpup_shortcut(SubEditTable, 31, scex(_("EMT|Ii#i#I")));
1087 int SubVersionControl = fl_newpup(FL_ObjWin(ob));
1088 fl_addtopup(SubVersionControl, _("Version Control%t"));
1089 if (tmpbuffer->lyxvc.inUse()) {
1090 // xgettext:no-c-format
1091 fl_addtopup(SubVersionControl, _("|Register%d%x51"));
1092 if (tmpbuffer->isReadonly()) {
1093 // signifies that the file is not checked out
1094 // xgettext:no-c-format
1095 fl_addtopup(SubVersionControl, _("|Check In Changes%d%x52"));
1096 // xgettext:no-c-format
1097 fl_addtopup(SubVersionControl, _("|Check Out for Edit%x53"));
1099 // signifies that the file is checked out
1100 // xgettext:no-c-format
1101 fl_addtopup(SubVersionControl, _("|Check In Changes%x52"));
1102 // xgettext:no-c-format
1103 fl_addtopup(SubVersionControl, _("|Check Out for Edit%d%x53"));
1105 // xgettext:no-c-format
1106 fl_addtopup(SubVersionControl, _("|Revert to last version%x54"));
1107 // xgettext:no-c-format
1108 fl_addtopup(SubVersionControl, _("|Undo last check in%x55"));
1109 // xgettext:no-c-format
1110 fl_addtopup(SubVersionControl, _("|Show History%x56"));
1112 // xgettext:no-c-format
1113 fl_addtopup(SubVersionControl, _("|Register%x51"));
1115 // the shortcuts are not good.
1116 fl_setpup_shortcut(SubVersionControl, 51, scex(_("EMV|Rr#r#R")));
1117 fl_setpup_shortcut(SubVersionControl, 52, scex(_("EMV|Ii#i#I")));
1118 fl_setpup_shortcut(SubVersionControl, 53, scex(_("EMV|Oo#o#O")));
1119 fl_setpup_shortcut(SubVersionControl, 54, scex(_("EMV|lL#l#l")));
1120 fl_setpup_shortcut(SubVersionControl, 55, scex(_("EMV|Uu#u#U")));
1121 fl_setpup_shortcut(SubVersionControl, 56, scex(_("EMV|Hh#h#H")));
1123 int EditMenu= fl_defpup(FL_ObjWin(ob),
1129 "|Find & Replace..."
1132 "|Floats & Insets%m"
1136 "|Table of Contents..."
1137 "|List of Figures..."
1138 "|List of Tables..."
1139 "|List of Algorithms...%l"
1140 "|Version Control%m%l"
1141 "|View LaTeX log file%l"
1142 "|Paste Primary Selection as Lines"
1143 "|Paste Primary Selection as Paragraphs"),
1144 SubEditFloats, SubEditTable, SubVersionControl);
1146 fl_setpup_shortcut(EditMenu, 1, scex(_("EM|Uu#u#U")));
1147 fl_setpup_shortcut(EditMenu, 2, scex(_("EM|Rr#r#R")));
1148 fl_setpup_shortcut(EditMenu, 3, scex(_("EM|Cc#c#C")));
1149 fl_setpup_shortcut(EditMenu, 4, scex(_("EM|oO#o#O")));
1150 fl_setpup_shortcut(EditMenu, 5, scex(_("EM|Pp#p#P")));
1151 fl_setpup_shortcut(EditMenu, 6, scex(_("EM|Ff#f#F")));
1152 fl_setpup_shortcut(EditMenu, 7, scex(_("EM|Ee#e#E")));
1153 fl_setpup_shortcut(EditMenu, 8, scex(_("EM|Nn#n#N")));
1154 fl_setpup_shortcut(EditMenu, 9, scex(_("EM|Ii#i#I")));
1155 //fl_setpup_shortcut(EditMenu, 10, scex(_("EM|Tt#t#T")));
1156 fl_setpup_shortcut(EditMenu, 11, scex(_("EM|Ss#s#S")));
1157 fl_setpup_shortcut(EditMenu, 12, scex(_("EM|hH#h#H")));
1158 fl_setpup_shortcut(EditMenu, 13, scex(_("EM|Tt#t#T")));
1159 //fl_setpup_shortcut(EditMenu, 14, scex(_("EM|Ff#f#F")));
1160 //fl_setpup_shortcut(EditMenu, 15, scex(_("EM|bB#b#B")));
1161 //fl_setpup_shortcut(EditMenu, 16, scex(_("EM|mM#m#M")));
1162 fl_setpup_shortcut(EditMenu, 17, scex(_("EM|Vv#v#V")));
1163 fl_setpup_shortcut(EditMenu, 18, scex(_("EM|wW#w#W")));
1164 fl_setpup_shortcut(EditMenu, 19, scex(_("EM|Ll#l#L")));
1165 fl_setpup_shortcut(EditMenu, 20, scex(_("EM|gG#g#G")));
1167 // disable unavailable entries.
1168 if(tmpbuffer->undostack.empty())
1169 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
1170 if(tmpbuffer->redostack.empty())
1171 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
1172 if(lyxrc.isp_command == "none")
1173 fl_setpup_mode(EditMenu, 11, FL_PUP_GREY);
1174 if(lyxrc.chktex_command == "none")
1175 fl_setpup_mode(EditMenu, 12, FL_PUP_GREY);
1177 if (tmpbuffer->isReadonly()) {
1178 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
1179 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
1180 fl_setpup_mode(EditMenu, 3, FL_PUP_GREY);
1181 fl_setpup_mode(EditMenu, 5, FL_PUP_GREY);
1182 fl_setpup_mode(EditMenu, 19, FL_PUP_GREY);
1183 fl_setpup_mode(EditMenu, 20, FL_PUP_GREY);
1186 fl_setpup_position(men->_view->getForm()->x + ob->x,
1187 men->_view->getForm()->y + ob->y +
1189 int choice = fl_dopup(EditMenu);
1192 // set the pseudo menu-button back
1193 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1194 fl_redraw_object(ob);
1197 case 1: tmpfunc->Dispatch(LFUN_UNDO); break;
1198 case 2: tmpfunc->Dispatch(LFUN_REDO); break;
1199 case 3: tmpfunc->Dispatch(LFUN_CUT); break;
1200 case 4: tmpfunc->Dispatch(LFUN_COPY); break;
1201 case 5: tmpfunc->Dispatch(LFUN_PASTE); break;
1202 case 6: tmpfunc->Dispatch(LFUN_MENUSEARCH); break;
1203 case 7: tmpfunc->Dispatch(LFUN_GOTOERROR); break;
1204 case 8: tmpfunc->Dispatch(LFUN_GOTONOTE); break;
1205 case 9: // floats & insets
1209 case 11: tmpfunc->Dispatch(LFUN_SPELLCHECK); break;
1210 case 12: tmpfunc->Dispatch(LFUN_RUNCHKTEX); break;
1211 case 13: tmpfunc->Dispatch(LFUN_TOCVIEW); break;
1212 case 14: tmpfunc->Dispatch(LFUN_LOFVIEW); break;
1213 case 15: tmpfunc->Dispatch(LFUN_LOTVIEW); break;
1214 case 16: tmpfunc->Dispatch(LFUN_LOAVIEW); break;
1215 case 17: // version control
1217 case 18: tmpfunc->Dispatch(LFUN_LATEX_LOG); break;
1218 case 19: tmpfunc->Dispatch(LFUN_PASTESELECTION, "line"); break;
1219 case 20: tmpfunc->Dispatch(LFUN_PASTESELECTION, "paragraph"); break;
1221 // floats & insets sub-menu
1222 case 21: men->currentView()->toggleFloat(); break;
1223 case 22: tmpfunc->Dispatch(LFUN_MELT); break;
1224 case 23: men->currentView()->allFloats(1, 0); break;
1225 case 24: men->currentView()->allFloats(0, 0); break;
1226 case 25: men->currentView()->allFloats(1, 1); break;
1227 case 26: men->currentView()->allFloats(0, 1); break;
1228 case 27: tmpfunc->Dispatch(LFUN_REMOVEERRORS); break;
1230 case 31: tmpfunc->Dispatch(LFUN_TABLE); break;
1231 // this is really temporary. We need new function in keybind.C
1232 // These should set the minibuffer, too.
1233 case 32: case 33: case 34:
1234 case 35: case 36: case 37:
1235 case 38: case 39: case 40:
1236 case 41: case 42: case 43:
1238 if (men->currentView()->available()) {
1239 men->currentView()->hideCursor();
1240 if (!men->currentView()->text->selection){
1241 men->currentView()->beforeChange();
1242 men->currentView()->update(-2);
1244 if (men->currentView()->the_locking_inset &&
1245 (men->currentView()->the_locking_inset->LyxCode()
1246 == Inset::TABULAR_CODE)) {
1247 InsetTabular * inset =
1248 static_cast<InsetTabular *>
1249 (men->currentView()->the_locking_inset);
1250 inset->TabularFeatures(men->currentView(), choice - 32);
1252 men->currentView()->text->
1253 TableFeatures(choice - 32);
1254 men->currentView()->update(1);
1258 // version control sub-menu
1259 case 51: // register
1260 tmpfunc->Dispatch(LFUN_VC_REGISTER);
1262 case 52: // check in
1263 tmpfunc->Dispatch(LFUN_VC_CHECKIN);
1265 case 53: // check out
1266 tmpfunc->Dispatch(LFUN_VC_CHECKOUT);
1268 case 54: // revert to last
1269 tmpfunc->Dispatch(LFUN_VC_REVERT);
1271 case 55: // undo last
1272 tmpfunc->Dispatch(LFUN_VC_UNDO);
1274 case 56: // show history
1275 tmpfunc->Dispatch(LFUN_VC_HISTORY);
1279 fl_freepup(EditMenu);
1280 fl_freepup(SubEditFloats);
1281 fl_freepup(SubEditTable);
1282 fl_freepup(SubVersionControl);
1286 void Add_to_toc_menu(vector<Buffer::TocItem> const & toclist,
1287 unsigned int from, unsigned int to, int depth,
1288 int menu, vector<int> & menus, FL_OBJECT * ob)
1290 unsigned int const max_number_of_items = 25;
1291 unsigned int const max_item_length = 40;
1292 if (to - from <= max_number_of_items) {
1293 for (unsigned int i = from; i < to; ++i) {
1295 string line(4 * max(0, toclist[i].depth - depth),' ');
1296 line += toclist[i].str;
1297 string entry(line, 0, max_item_length);
1299 entry += tostr(i + 1);
1301 fl_addtopup(menu, entry.c_str());
1304 unsigned int pos = from;
1306 unsigned int new_pos = pos+1;
1307 while (new_pos < to &&
1308 toclist[new_pos].depth > depth)
1310 if (new_pos == pos + 1) {
1311 string line(4 * max(0, toclist[pos].depth - depth), ' ');
1312 line += toclist[pos].str;
1313 string entry(line, 0, max_item_length);
1315 entry += tostr(pos + 1);
1317 fl_addtopup(menu, entry.c_str());
1319 int menu2 = fl_newpup(FL_ObjWin(ob));
1320 menus.push_back(menu2);
1321 Add_to_toc_menu(toclist, pos, new_pos,
1322 depth + 1, menu2, menus,ob);
1323 string line(4 * max(0, toclist[pos].depth - depth), ' ');
1324 line += toclist[pos].str;
1325 string entry(line, 0, max_item_length);
1328 fl_addtopup(menu, entry.c_str(), menu2);
1335 int const BIG_NUM = 1048576;
1337 void Menus::ShowTocMenu(FL_OBJECT * ob, long)
1339 Menus * men = static_cast<Menus*>(ob->u_vdata);
1342 // set the pseudo menu-button
1343 fl_set_object_boxtype(ob, FL_UP_BOX);
1344 fl_set_button(ob, 0);
1345 fl_redraw_object(ob);
1347 int TocMenu = fl_newpup(FL_ObjWin(ob));
1348 menus.push_back(TocMenu);
1349 vector<vector<Buffer::TocItem> > toclist =
1350 men->currentView()->buffer()->getTocList();
1352 //xgettext:no-c-format
1353 static char const * MenuNames[3] = { N_("List of Figures%m"),
1354 //xgettext:no-c-format
1355 N_("List of Tables%m"),
1356 //xgettext:no-c-format
1357 N_("List of Algorithms%m") };
1359 int max_nonempty = 0;
1360 for (int j = 1; j <= 3; ++j)
1361 if (!toclist[j].empty())
1364 for (int j = 1; j <= 3; ++j)
1365 if (!toclist[j].empty()) {
1366 int menu2 = fl_newpup(FL_ObjWin(ob));
1367 menus.push_back(menu2);
1368 for (unsigned int i = 0; i < toclist[j].size(); ++i)
1370 (toclist[j][i].str + "%x"
1371 + tostr(i+1+j*BIG_NUM)).c_str());
1372 if (j == max_nonempty) {
1373 string tmp = _(MenuNames[j-1]);
1375 fl_addtopup(TocMenu, tmp.c_str(), menu2);
1377 fl_addtopup(TocMenu, _(MenuNames[j-1]), menu2);
1380 Add_to_toc_menu(toclist[0], 0, toclist[0].size(), 0,
1381 TocMenu, menus, ob);
1384 men->_view->getForm()->x + ob->x,
1385 men->_view->getForm()->y + ob->y + ob->h + 10);
1386 int choice = fl_dopup(TocMenu);
1389 // set the pseudo menu-button back
1390 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1391 fl_redraw_object(ob);
1393 men->_view->getLyXFunc()->Dispatch(LFUN_TOCVIEW);
1394 else if (choice > 0) {
1395 int type = choice / BIG_NUM;
1396 int num = (choice % BIG_NUM) - 1;
1397 BufferView *bv = men->currentView();
1399 bv->text->SetCursor(toclist[type][num].par, 0);
1400 bv->text->sel_cursor = bv->text->cursor;
1403 for (unsigned int i = 0; i < menus.size(); ++i)
1404 fl_freepup(menus[i]);
1407 void Add_to_refs_menu(vector<string> const & label_list, int offset,
1408 int menu, vector<int> & menus, FL_OBJECT * ob)
1410 typedef vector<string>::size_type size_type;
1411 size_type const max_number_of_items = 25;
1412 size_type const max_number_of_items2 = 20;
1414 if (label_list.size() <= max_number_of_items)
1415 for (size_type i = 0; i < label_list.size(); ++i)
1417 (label_list[i] + "%x"
1418 +tostr(i+offset)).c_str());
1420 for (size_type i = 0; i < label_list.size();
1421 i += max_number_of_items2) {
1422 size_type j = std::min(label_list.size(),
1423 i+max_number_of_items2);
1424 int menu2 = fl_newpup(FL_ObjWin(ob));
1425 menus.push_back(menu2);
1426 for (size_type k = i; k < j; ++k)
1428 (label_list[k] + "%x"
1429 + tostr(k+offset)).c_str());
1432 +label_list[j-1]+"%m").c_str(),
1439 void Menus::ShowRefsMenu(FL_OBJECT * ob, long)
1443 Menus * men = static_cast<Menus*>(ob->u_vdata);
1445 // set the pseudo menu-button
1446 fl_set_object_boxtype(ob, FL_UP_BOX);
1447 fl_set_button(ob, 0);
1448 fl_redraw_object(ob);
1450 int RefsMenu = fl_newpup(FL_ObjWin(ob));
1451 menus.push_back(RefsMenu);
1452 Buffer * buffer = men->currentView()->buffer();
1453 vector<string> label_list = buffer->getLabelList();
1454 sort(label_list.begin(), label_list.end());
1456 //xgettext:no-c-format
1457 static char const * MenuNames[6] = { N_("Insert Reference%m"),
1458 //xgettext:no-c-format
1459 N_("Insert Page Number%m"),
1460 //xgettext:no-c-format
1461 N_("Insert vref%m"),
1462 //xgettext:no-c-format
1463 N_("Insert vpageref%m"),
1464 //xgettext:no-c-format
1465 N_("Insert Pretty Ref%m"),
1466 //xgettext:no-c-format
1467 N_("Goto Reference%m") };
1469 for (int j = 0; j < 6; ++j) {
1470 int menu2 = fl_newpup(FL_ObjWin(ob));
1471 menus.push_back(menu2);
1472 Add_to_refs_menu(label_list, 1+j*BIG_NUM, menu2, menus, ob);
1473 fl_addtopup(RefsMenu, _(MenuNames[j]), menu2);
1476 bool empty = label_list.empty();
1477 bool sgml = buffer->isSGML();
1478 bool readonly = buffer->isReadonly();
1481 fl_setpup_mode(RefsMenu, 6, FL_PUP_GREY);
1482 if (empty || readonly) {
1483 fl_setpup_mode(RefsMenu, 1, FL_PUP_GREY);
1484 fl_setpup_mode(RefsMenu, 2, FL_PUP_GREY);
1486 if (empty || readonly || sgml) {
1487 fl_setpup_mode(RefsMenu, 3, FL_PUP_GREY);
1488 fl_setpup_mode(RefsMenu, 4, FL_PUP_GREY);
1489 fl_setpup_mode(RefsMenu, 5, FL_PUP_GREY);
1493 men->_view->getForm()->x + ob->x,
1494 men->_view->getForm()->y + ob->y + ob->h + 10);
1495 int choice = fl_dopup(RefsMenu);
1498 // set the pseudo menu-button back
1499 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1500 fl_redraw_object(ob);
1503 int type = choice / BIG_NUM;
1504 int num = (choice % BIG_NUM) - 1;
1506 men->_view->getLyXFunc()->Dispatch(LFUN_REFGOTO,
1507 label_list[num].c_str());
1509 static string const commands[5]
1510 = { "\\ref", "\\pageref", "\\vref", "\\vpageref",
1512 string t = commands[type] + "{" + label_list[num] + "}";
1513 men->currentView()->insertInset(new InsetRef(t, buffer));
1517 for (unsigned int i = 0; i < menus.size(); ++i)
1518 fl_freepup(menus[i]);
1522 void Menus::ShowLayoutMenu(FL_OBJECT * ob, long)
1524 Menus * men = static_cast<Menus*>(ob->u_vdata);
1526 if (!men->currentView()->available())
1529 // set the pseudo menu-button
1530 fl_set_object_boxtype(ob, FL_UP_BOX);
1531 fl_set_button(ob, 0);
1532 fl_redraw_object(ob);
1534 Buffer * tmpbuffer = men->_view->buffer();
1535 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1537 int LayoutMenu = fl_newpup(FL_ObjWin(ob));
1538 fl_addtopup(LayoutMenu, _("Character..."
1544 "|Emphasize Style%b"
1548 "|Change Environment Depth"
1549 "|LaTeX Preamble..."
1550 "|Start of Appendix%l"
1551 "|Save layout as default"));
1552 fl_setpup_shortcut(LayoutMenu, 1, scex(_("LM|Cc#c#C")));
1553 fl_setpup_shortcut(LayoutMenu, 2, scex(_("LM|Pp#p#P")));
1554 fl_setpup_shortcut(LayoutMenu, 3, scex(_("LM|Dd#d#D")));
1555 fl_setpup_shortcut(LayoutMenu, 4, scex(_("LM|aA#a#A")));
1556 fl_setpup_shortcut(LayoutMenu, 5, scex(_("LM|eE#e#E")));
1557 fl_setpup_shortcut(LayoutMenu, 6, scex(_("LM|Qq#q#Q")));
1558 fl_setpup_shortcut(LayoutMenu, 7, scex(_("LM|mM#m#M")));
1559 fl_setpup_shortcut(LayoutMenu, 8, scex(_("LM|Nn#n#N")));
1560 fl_setpup_shortcut(LayoutMenu, 9, scex(_("LM|Bb#b#B")));
1561 fl_setpup_shortcut(LayoutMenu, 10, scex(_("LM|Tt#t#T")));
1562 fl_setpup_shortcut(LayoutMenu, 11, scex(_("LM|vV#v#V")));
1563 fl_setpup_shortcut(LayoutMenu, 12, scex(_("LM|Ll#l#L")));
1564 fl_setpup_shortcut(LayoutMenu, 13, scex(_("LM|xX#x#X")));
1565 fl_setpup_shortcut(LayoutMenu, 14, scex(_("LM|Ss#s#S")));
1567 // Set values of checkboxes according to font
1568 LyXFont font = men->currentView()->text->real_current_font;
1569 if (font.emph() == LyXFont::ON)
1570 fl_setpup_mode(LayoutMenu, 7, FL_PUP_CHECK);
1571 if (font.noun() == LyXFont::ON)
1572 fl_setpup_mode(LayoutMenu, 8, FL_PUP_CHECK);
1573 if (font.series() == LyXFont::BOLD_SERIES)
1574 fl_setpup_mode(LayoutMenu, 9, FL_PUP_CHECK);
1575 if (font.latex() == LyXFont::ON)
1576 fl_setpup_mode(LayoutMenu, 10, FL_PUP_CHECK);
1578 // Grey out unavailable entries
1579 if (!men->currentView()->text->cursor.par->table)
1580 fl_setpup_mode(LayoutMenu, 5, FL_PUP_GREY);
1582 if (tmpbuffer->isReadonly()) {
1583 fl_setpup_mode(LayoutMenu, 1, FL_PUP_GREY);
1584 fl_setpup_mode(LayoutMenu, 6, FL_PUP_GREY);
1585 fl_setpup_mode(LayoutMenu, 11, FL_PUP_GREY);
1589 men->_view->getForm()->x + ob->x,
1590 men->_view->getForm()->y + ob->y + ob->h + 10);
1591 int choice = fl_dopup(LayoutMenu);
1594 // set the pseudo menu-button back
1595 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1596 fl_redraw_object(ob);
1599 case 1: tmpfunc->Dispatch(LFUN_LAYOUT_CHARACTER); break;
1600 case 2: tmpfunc->Dispatch(LFUN_LAYOUT_PARAGRAPH); break;
1601 case 3: tmpfunc->Dispatch(LFUN_LAYOUT_DOCUMENT); break;
1602 case 4: tmpfunc->Dispatch(LFUN_LAYOUT_PAPER); break;
1603 case 5: tmpfunc->Dispatch(LFUN_LAYOUT_TABLE, "true"); break;
1604 case 6: tmpfunc->Dispatch(LFUN_LAYOUT_QUOTES); break;
1605 case 7: tmpfunc->Dispatch(LFUN_EMPH); break;
1606 case 8: tmpfunc->Dispatch(LFUN_NOUN); break;
1607 case 9: tmpfunc->Dispatch(LFUN_BOLD); break;
1608 case 10: tmpfunc->Dispatch(LFUN_TEX); break;
1609 case 11: tmpfunc->Dispatch(LFUN_DEPTH_PLUS); break;
1610 case 12: tmpfunc->Dispatch(LFUN_LAYOUT_PREAMBLE); break;
1611 case 13: tmpfunc->Dispatch(LFUN_APPENDIX); break;
1612 case 14: tmpfunc->Dispatch(LFUN_LAYOUT_SAVE_DEFAULT); break;
1614 fl_freepup(LayoutMenu);
1618 void Menus::ShowInsertMenu(FL_OBJECT * ob, long)
1620 Menus * men = static_cast<Menus*>(ob->u_vdata);
1622 // set the pseudo menu-button
1623 fl_set_object_boxtype(ob, FL_UP_BOX);
1624 fl_set_button(ob, 0);
1625 fl_redraw_object(ob);
1627 Buffer * tmpbuffer = men->_view->buffer();
1628 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1630 int SubInsertAscii = fl_defpup(FL_ObjWin(ob),
1631 _("Import ASCII file%t"
1633 "|As Paragraphs%x42"));
1635 fl_setpup_shortcut(SubInsertAscii, 41, scex(_("IMA|Ll#l#L")));
1636 fl_setpup_shortcut(SubInsertAscii, 42, scex(_("IMA|Pp#p#P")));
1638 int SubInsertTableList= fl_defpup(FL_ObjWin(ob),
1640 "|Table of Contents%x21"
1641 "|List of Figures%x22"
1642 "|List of Tables%x23"
1643 "|List of Algorithms%x24"
1645 "|BibTeX Reference%x26"));
1647 fl_setpup_shortcut(SubInsertTableList, 21, scex(_("IMT|Cc#c#C")));
1648 fl_setpup_shortcut(SubInsertTableList, 22, scex(_("IMT|Ff#f#F")));
1649 fl_setpup_shortcut(SubInsertTableList, 23, scex(_("IMT|Tt#t#T")));
1650 fl_setpup_shortcut(SubInsertTableList, 24, scex(_("IMT|Aa#a#A")));
1651 fl_setpup_shortcut(SubInsertTableList, 25, scex(_("IMT|Ii#i#I")));
1652 fl_setpup_shortcut(SubInsertTableList, 26, scex(_("IMT|Bb#b#B")));
1654 int SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
1658 "|Wide Figure Float%x73"
1659 "|Wide Table Float%l%x74"
1660 "|Algorithm Float%x75"));
1662 fl_setpup_shortcut(SubInsertFloatList, 71, scex(_("IMF|gG#g#G")));
1663 fl_setpup_shortcut(SubInsertFloatList, 72, scex(_("IMF|Tt#t#T")));
1664 fl_setpup_shortcut(SubInsertFloatList, 73, scex(_("IMF|Ww#w#W")));
1665 fl_setpup_shortcut(SubInsertFloatList, 74, scex(_("IMF|iI#i#I")));
1666 fl_setpup_shortcut(SubInsertFloatList, 75, scex(_("IMF|Aa#a#A")));
1668 int SubInsertSpecial = fl_defpup(FL_ObjWin(ob),
1669 _("Special Character%t"
1671 "|Hyphenation Point%x32"
1672 "|Protected Blank%x33"
1674 "|Ellipsis (...)%x35"
1675 "|End of sentence period%x36"
1676 "|Ordinary Quote (\")%x37"
1677 "|Menu Separator %x38"));
1679 fl_setpup_shortcut(SubInsertSpecial, 31, scex(_("IMS|Hh#h#H")));
1680 fl_setpup_shortcut(SubInsertSpecial, 32, scex(_("IMS|Pp#p#P")));
1681 fl_setpup_shortcut(SubInsertSpecial, 33, scex(_("IMS|Bb#b#B")));
1682 fl_setpup_shortcut(SubInsertSpecial, 34, scex(_("IMS|Ll#l#L")));
1683 fl_setpup_shortcut(SubInsertSpecial, 35, scex(_("IMS|iI#i#I")));
1684 fl_setpup_shortcut(SubInsertSpecial, 36, scex(_("IMS|Ee#e#E")));
1685 fl_setpup_shortcut(SubInsertSpecial, 37, scex(_("IMS|Qq#q#Q")));
1686 fl_setpup_shortcut(SubInsertSpecial, 38, scex(_("IMS|Mm#m#M")));
1688 int InsertMenu = fl_defpup(FL_ObjWin(ob),
1692 "|Import ASCII File%m"
1693 "|Insert LyX File...%l"
1698 "|Special Character%m%l"
1701 "|Cross-Reference..."
1702 "|Citation Reference..."
1704 "|Index entry of last word"),
1710 fl_setpup_shortcut(InsertMenu, 1, scex(_("IM|gG#g#G")));
1711 fl_setpup_shortcut(InsertMenu, 2, scex(_("IM|bB#b#B")));
1712 fl_setpup_shortcut(InsertMenu, 3, scex(_("IM|cC#c#C")));
1713 fl_setpup_shortcut(InsertMenu, 4, scex(_("IM|Aa#a#A")));
1714 fl_setpup_shortcut(InsertMenu, 5, scex(_("IM|Xx#x#X")));
1715 fl_setpup_shortcut(InsertMenu, 6, scex(_("IM|Ff#f#F")));
1716 fl_setpup_shortcut(InsertMenu, 7, scex(_("IM|Mm#m#M")));
1717 fl_setpup_shortcut(InsertMenu, 8, scex(_("IM|oO#o#O")));
1718 fl_setpup_shortcut(InsertMenu, 9, scex(_("IM|Tt#t#T")));
1719 fl_setpup_shortcut(InsertMenu, 10, scex(_("IM|Ss#s#S")));
1720 fl_setpup_shortcut(InsertMenu, 11, scex(_("IM|Nn#n#N")));
1721 fl_setpup_shortcut(InsertMenu, 12, scex(_("IM|Ll#l#L")));
1722 fl_setpup_shortcut(InsertMenu, 13, scex(_("IM|rR#r#R")));
1723 fl_setpup_shortcut(InsertMenu, 14, scex(_("IM|iI#i#I")));
1724 fl_setpup_shortcut(InsertMenu, 15, scex(_("IM|dD#d#D")));
1725 fl_setpup_shortcut(InsertMenu, 16, scex(_("IM|wW#w#W")));
1727 fl_addtopup(InsertMenu, _("|URL..."));
1728 fl_setpup_shortcut(InsertMenu, 17, scex(_("IM|Uu#u#U")));
1730 if (tmpbuffer->isReadonly()) {
1731 for (int ii = 1; ii <= 16; ++ii)
1732 fl_setpup_mode(InsertMenu, ii, FL_PUP_GREY);
1733 fl_setpup_mode(InsertMenu, 17, FL_PUP_GREY);
1737 men->_view->getForm()->x + ob->x,
1738 men->_view->getForm()->y + ob->y + ob->h + 10);
1740 int choice = fl_dopup(InsertMenu);
1743 // set the pseudo menu-button back
1744 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1745 fl_redraw_object(ob);
1747 if (men->currentView()->available()){
1748 men->currentView()->hideCursor();
1750 case 1: tmpfunc->Dispatch(LFUN_FIGURE); break;
1751 case 2: tmpfunc->Dispatch(LFUN_TABLE); break;
1752 case 3: tmpfunc->Dispatch(LFUN_CHILDINSERT); break;
1753 case 4: // Insert ASCII file submenu
1755 case 5: tmpfunc->Dispatch(LFUN_FILE_INSERT); break;
1756 case 41: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "line"); break;
1757 case 42: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "paragraph"); break;
1761 case 6: tmpfunc->Dispatch(LFUN_FOOTMELT); break
1763 case 7: tmpfunc->Dispatch(LFUN_MARGINMELT); break;
1765 case 8: // Float sub-menu
1767 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "figure");
1770 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "table");
1773 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-fig");
1776 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-tab");
1779 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "algorithm");
1782 case 9: // Table/List submenu
1784 case 21: tmpfunc->Dispatch(LFUN_TOC_INSERT); break;
1785 case 22: tmpfunc->Dispatch(LFUN_LOF_INSERT); break;
1786 case 23: tmpfunc->Dispatch(LFUN_LOT_INSERT); break;
1787 case 24: tmpfunc->Dispatch(LFUN_LOA_INSERT); break;
1788 case 25: tmpfunc->Dispatch(LFUN_INDEX_PRINT); break;
1789 case 26: tmpfunc->Dispatch(LFUN_INSERT_BIBTEX); break;
1791 case 10: // Special Character submenu
1793 case 31: tmpfunc->Dispatch(LFUN_HFILL); break;
1794 case 32: tmpfunc->Dispatch(LFUN_HYPHENATION); break;
1795 case 33: tmpfunc->Dispatch(LFUN_PROTECTEDSPACE); break;
1796 case 34: tmpfunc->Dispatch(LFUN_BREAKLINE); break;
1797 case 35: tmpfunc->Dispatch(LFUN_LDOTS); break;
1798 case 36: tmpfunc->Dispatch(LFUN_END_OF_SENTENCE); break;
1799 case 37: tmpfunc->Dispatch(LFUN_QUOTE); break;
1800 case 38: tmpfunc->Dispatch(LFUN_MENU_SEPARATOR); break;
1802 case 11: tmpfunc->Dispatch(LFUN_INSERT_NOTE); break;
1803 case 12: tmpfunc->Dispatch(LFUN_INSERT_LABEL); break;
1804 case 13: tmpfunc->Dispatch(LFUN_INSERT_REF); break;
1805 case 14: tmpfunc->Dispatch(LFUN_INSERT_CITATION); break;
1806 case 15: tmpfunc->Dispatch(LFUN_INDEX_INSERT); break;
1807 case 16: tmpfunc->Dispatch(LFUN_INDEX_INSERT_LAST); break;
1808 case 17: tmpfunc->Dispatch(LFUN_URL); break;
1811 fl_freepup(InsertMenu);
1812 fl_freepup(SubInsertAscii);
1813 fl_freepup(SubInsertTableList);
1814 fl_freepup(SubInsertFloatList);
1815 fl_freepup(SubInsertSpecial);
1819 void Menus::ShowMathMenu(FL_OBJECT * ob, long)
1821 extern void math_insert_symbol(char const * s);
1823 Menus * men = static_cast<Menus*>(ob->u_vdata);
1825 // set the pseudo menu-button
1826 fl_set_object_boxtype(ob, FL_UP_BOX);
1827 fl_set_button(ob, 0);
1828 fl_redraw_object(ob);
1830 Buffer * tmpbuffer = men->_view->buffer();
1831 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1833 int MathMenu = fl_defpup(FL_ObjWin(ob),
1844 fl_setpup_shortcut(MathMenu, 1, scex(_("MM|Ff#f#F")));
1845 fl_setpup_shortcut(MathMenu, 2, scex(_("MM|Ss#s#S")));
1846 fl_setpup_shortcut(MathMenu, 3, scex(_("MM|Ee#e#E")));
1847 fl_setpup_shortcut(MathMenu, 4, scex(_("MM|xX#x#X")));
1848 fl_setpup_shortcut(MathMenu, 5, scex(_("MM|uU#u#U")));
1849 fl_setpup_shortcut(MathMenu, 6, scex(_("MM|Ii#i#I")));
1850 fl_setpup_shortcut(MathMenu, 7, scex(_("MM|Mm#m#M")));
1851 fl_setpup_shortcut(MathMenu, 8, scex(_("MM|Dd#d#D")));
1852 fl_setpup_shortcut(MathMenu, 9, scex(_("MM|Pp#p#P")));
1854 if (tmpbuffer->isReadonly())
1855 for (int ii = 1; ii <= 9; ++ii)
1856 fl_setpup_mode(MathMenu, ii, FL_PUP_GREY);
1860 men->_view->getForm()->x + ob->x,
1861 men->_view->getForm()->y + ob->y + ob->h + 10);
1862 int choice = fl_dopup(MathMenu);
1865 // set the pseudo menu-button back
1866 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1867 fl_redraw_object(ob);
1869 if (men->currentView()->available()) {
1872 tmpfunc->Dispatch(LFUN_INSERT_MATH, "frac");
1875 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sqrt");
1877 case 3: /* Exponent */
1878 tmpfunc->Dispatch(LFUN_INSERT_MATH, "^");
1881 tmpfunc->Dispatch(LFUN_INSERT_MATH, "_");
1884 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sum");
1887 tmpfunc->Dispatch(LFUN_INSERT_MATH, "int");
1890 tmpfunc->Dispatch(LFUN_MATH_MODE);
1893 tmpfunc->Dispatch(LFUN_MATH_DISPLAY);
1896 show_symbols_form(tmpfunc);
1899 men->currentView()->update(0);
1901 fl_freepup(MathMenu);
1905 void Menus::ShowOptionsMenu(FL_OBJECT * ob, long)
1907 Menus * men = static_cast<Menus*>(ob->u_vdata);
1909 // set the pseudo menu-button
1910 fl_set_object_boxtype(ob, FL_UP_BOX);
1911 fl_set_button(ob, 0);
1912 fl_redraw_object(ob);
1914 //Buffer *tmpbuffer = men->_view->currentBuffer();
1915 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1917 int OptionsMenu = fl_defpup(FL_ObjWin(ob),
1919 "|Spellchecker Options..."
1924 fl_setpup_shortcut(OptionsMenu, 1, scex(_("OM|Ff#f#F")));
1925 fl_setpup_shortcut(OptionsMenu, 2, scex(_("OM|Ss#s#S")));
1926 fl_setpup_shortcut(OptionsMenu, 3, scex(_("OM|Kk#k#K")));
1927 fl_setpup_shortcut(OptionsMenu, 4, scex(_("OM|Ll#l#L")));
1928 fl_setpup_shortcut(OptionsMenu, 5, scex(_("OM|Rr#r#R")));
1930 if(lyxrc.isp_command == "none")
1931 fl_setpup_mode(OptionsMenu, 2, FL_PUP_GREY);
1934 men->_view->getForm()->x + ob->x,
1935 men->_view->getForm()->y + ob->y + ob->h + 10);
1936 int choice = fl_dopup(OptionsMenu);
1939 // set the pseudo menu-button back
1940 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1941 fl_redraw_object(ob);
1943 case 1: men->ScreenOptions(); break;
1944 case 2: SpellCheckerOptions(); break;
1945 case 3: men->_view->getIntl()->MenuKeymap(); break;
1946 case 4: LaTeXOptions(men->_view->view()); break;
1947 case 5: tmpfunc->Dispatch(LFUN_RECONFIGURE); break;
1950 fl_freepup(OptionsMenu);
1954 void Menus::ShowBufferMenu(FL_OBJECT * ob, long)
1956 Menus * men = static_cast<Menus*>(ob->u_vdata);
1958 // set the pseudo menu-button
1959 fl_set_object_boxtype(ob, FL_UP_BOX);
1960 fl_set_button(ob, 0);
1961 fl_redraw_object(ob);
1963 int BufferMenu = fl_newpup(FL_ObjWin(ob));
1964 vector<string> namevec = bufferlist.getFileNames();
1965 if (namevec.size() != 0) {
1966 for (vector<string>::const_iterator cit = namevec.begin();
1967 cit != namevec.end(); ++cit) {
1968 string relbuf = MakeDisplayPath((*cit), 30);
1969 fl_addtopup(BufferMenu, relbuf.c_str());
1972 fl_addtopup(BufferMenu, _("No Documents Open!%t"));
1976 men->_view->getForm()->x + ob->x,
1977 men->_view->getForm()->y + ob->y + ob->h + 10);
1978 int choice = fl_dopup(BufferMenu);
1981 // set the pseudo menu-button back
1982 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1983 fl_redraw_object(ob);
1984 if (choice > 0) men->handleBufferMenu(choice - 1);
1986 fl_freepup(BufferMenu);
1991 char const * doc_files [] = {"Intro", "Tutorial",
1992 "UserGuide", "Extended",
1993 "Customization", "Reference",
1995 "BUGS", "LaTeXConfig"};
1997 void Menus::ShowHelpMenu(FL_OBJECT * ob, long)
1999 Menus * men = static_cast<Menus*>(ob->u_vdata);
2001 // set the pseudo menu-button
2002 fl_set_object_boxtype(ob, FL_UP_BOX);
2003 fl_set_button(ob, 0);
2004 fl_redraw_object(ob);
2006 int HelpMenu = fl_defpup(FL_ObjWin(ob),
2010 "|Extended Features"
2014 "|Table of Contents"
2016 "|LaTeX Configuration%l"
2017 "|Copyright and Warranty..."
2021 fl_setpup_shortcut(HelpMenu, 1, scex(_("HM|Ii#I#i")));
2022 fl_setpup_shortcut(HelpMenu, 2, scex(_("HM|Tt#T#t")));
2023 fl_setpup_shortcut(HelpMenu, 3, scex(_("HM|Uu#U#u")));
2024 fl_setpup_shortcut(HelpMenu, 4, scex(_("HM|xX#x#X")));
2025 fl_setpup_shortcut(HelpMenu, 5, scex(_("HM|Cc#C#c")));
2026 fl_setpup_shortcut(HelpMenu, 6, scex(_("HM|Rr#R#r")));
2027 fl_setpup_shortcut(HelpMenu, 7, scex(_("HM|Ff#F#f")));
2028 fl_setpup_shortcut(HelpMenu, 8, scex(_("HM|aA#a#A")));
2029 fl_setpup_shortcut(HelpMenu, 9, scex(_("HM|Kk#K#k")));
2030 fl_setpup_shortcut(HelpMenu, 10, scex(_("HM|Ll#L#l")));
2031 fl_setpup_shortcut(HelpMenu, 11, scex(_("HM|oO#o#O")));
2032 fl_setpup_shortcut(HelpMenu, 12, scex(_("HM|eE#e#E")));
2033 fl_setpup_shortcut(HelpMenu, 13, scex(_("HM|Vv#v#V")));
2036 men->_view->getForm()->x + ob->x,
2037 men->_view->getForm()->y + ob->y + ob->h + 10);
2038 int choice = fl_dopup(HelpMenu);
2041 // set the pseudo menu-button back
2042 fl_set_object_boxtype(ob, FL_FLAT_BOX);
2043 fl_redraw_object(ob);
2046 case 1: case 2: case 3: case 4: case 5:
2047 case 6: case 7: case 8: case 9: case 10:
2048 ProhibitInput(men->currentView());
2049 men->MenuDocu(doc_files[choice - 1]);
2050 AllowInput(men->currentView());
2052 case 11: ShowCopyright(); break;
2053 case 12: ShowCredits(); break;
2055 ProhibitInput(men->currentView());
2056 fl_show_message((string(_("LyX Version ")) + LYX_VERSION
2057 + _(" of ") + LYX_RELEASE).c_str(),
2058 (_("Library directory: ")
2059 + MakeDisplayPath(system_lyxdir)).c_str(),
2060 (_("User directory: ")
2061 + MakeDisplayPath(user_lyxdir)).c_str());
2062 AllowInput(men->currentView());
2065 fl_freepup(HelpMenu);
2069 void Menus::MenuDocu(string const & docname)
2071 string fname = i18nLibFileSearch("doc", docname, "lyx");
2072 if (fname.empty()) {
2073 WriteAlert(_("Error!"),
2074 _("Could not find requested Documentation file"),
2078 _view->getMiniBuffer()->Set(_("Opening help file"),
2079 MakeDisplayPath(fname), "...");
2080 currentView()->buffer(bufferlist.loadLyXFile(fname, false));
2082 if (docname == "Reference")
2083 _view->getLyXFunc()->Dispatch(LFUN_TOCVIEW);
2087 void Menus::handleBufferMenu(int choice)
2089 currentView()->buffer(bufferlist.getBuffer(choice));