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
34 #include "spellchecker.h"
35 #include "support/filetools.h"
37 #include "lastfiles.h"
38 #include "bufferlist.h"
39 #include "lyx_gui_misc.h"
40 #include "minibuffer.h"
52 extern FD_form_screen * fd_form_screen;
53 extern BufferList bufferlist;
55 // I would really prefere to see most or all of these 'extern's disappear.
56 // Their commands should be called through LyXFunc (IMO). (Lgb)
58 extern void MenuLayoutSave();
59 extern void ShowCredits();
60 extern void ShowCopyright();
61 extern void show_symbols_form(LyXFunc *);
62 extern void LaTeXOptions(BufferView *);
64 // A bunch of wrappers
66 extern "C" void C_Menus_ShowFileMenu(FL_OBJECT * ob, long data)
68 Menus::ShowFileMenu(ob, data);
71 extern "C" void C_Menus_ShowFileMenu2(FL_OBJECT * ob, long data)
73 Menus::ShowFileMenu2(ob, data);
76 extern "C" void C_Menus_ShowEditMenu(FL_OBJECT * ob, long data)
78 Menus::ShowEditMenu(ob, data);
81 extern "C" void C_Menus_ShowLayoutMenu(FL_OBJECT * ob, long data)
83 Menus::ShowLayoutMenu(ob, data);
86 extern "C" void C_Menus_ShowInsertMenu(FL_OBJECT * ob, long data)
88 Menus::ShowInsertMenu(ob, data);
91 extern "C" void C_Menus_ShowMathMenu(FL_OBJECT * ob, long data)
93 Menus::ShowMathMenu(ob, data);
96 extern "C" void C_Menus_ShowOptionsMenu(FL_OBJECT * ob, long data)
98 Menus::ShowOptionsMenu(ob, data);
101 extern "C" void C_Menus_ShowBufferMenu(FL_OBJECT * ob, long data)
103 Menus::ShowBufferMenu(ob, data);
106 extern "C" void C_Menus_ShowHelpMenu(FL_OBJECT * ob, long data)
108 Menus::ShowHelpMenu(ob, data);
112 Menus::Menus(LyXView * view, int air)
116 // deactivate the menu accelerators
117 fl_set_object_shortcut(menu_file, "", 1);
118 fl_set_object_shortcut(menu_file2, "", 1);
119 fl_set_object_shortcut(menu_edit, "", 1);
120 fl_set_object_shortcut(menu_layout, "", 1);
121 fl_set_object_shortcut(menu_math, "", 1);
122 fl_set_object_shortcut(menu_insert, "", 1);
123 fl_set_object_shortcut(menu_options, "", 1);
124 fl_set_object_shortcut(menu_options2, "", 1);
125 fl_set_object_shortcut(menu_buffer, "", 1);
126 fl_set_object_shortcut(menu_help, "", 1);
127 fl_set_object_shortcut(menu_help2, "", 1);
133 BufferView * Menus::currentView()
135 return _view->view();
139 void Menus::showMenus()
141 fl_hide_object(menu_grp2);
142 fl_show_object(menu_grp1);
146 void Menus::hideMenus()
148 fl_hide_object(menu_grp1);
149 fl_show_object(menu_grp2);
153 void Menus::openByName(string const & menuName)
154 /* Opens the visible menu of given name, or simply does nothing
155 when the name is not known. NOTE THE EXTREMELY STUPID
156 IMPLEMENTATION! :-) There are probably hundred ways to do
157 this better, for instance, by scanning the menu objects and
158 testing for the given name. I leave this as an exercise for an
159 experienced GG (GUI Guy/Girl). RVDK_PATCH_5. */
161 if (menu_file->visible) {
162 if (menuName == _("File"))
163 ShowFileMenu(menu_file, 0);
164 else if (menuName == _("Edit"))
165 ShowEditMenu(menu_edit, 0);
166 else if (menuName == _("Layout"))
167 ShowLayoutMenu(menu_layout, 0);
168 else if (menuName == _("Insert"))
169 ShowInsertMenu(menu_insert, 0);
170 else if (menuName == _("Math"))
171 ShowMathMenu(menu_math, 0);
172 else if (menuName == _("Options"))
173 ShowOptionsMenu(menu_options, 0);
174 else if (menuName == _("Documents"))
175 ShowBufferMenu(menu_buffer, 0);
176 else if (menuName == _("Help"))
177 ShowHelpMenu(menu_help, 0);
178 else lyxerr << "The menu '" << menuName
179 << "' is not available." << endl;
181 if (menuName == _("File"))
182 ShowFileMenu2(menu_file2, 0);
183 else if (menuName == _("Options"))
184 ShowOptionsMenu(menu_options2, 0);
185 else if (menuName == _("Help"))
186 ShowHelpMenu(menu_help2, 0);
187 else lyxerr << "The menu '" << menuName
188 << "' is not available." << endl;
193 void Menus::create_menus(int air)
195 FL_FORM * form = _view->getForm();
197 // Here I'd really like to see code like:
201 const int MENU_LABEL_SIZE = FL_NORMAL_SIZE;
202 const int mheight = 30;
203 const int mbheight= 22;
204 // where to place the menubar?
205 const int yloc = (mheight - mbheight)/2; //air + bw;
206 const int mbadd = 20; // menu button add (to width)
210 obj = fl_add_frame(FL_UP_FRAME, 0, 0, form->w, mheight, "");
211 fl_set_object_resize(obj, FL_RESIZE_ALL);
212 fl_set_object_gravity(obj, NorthWestGravity, NorthEastGravity);
214 menu_grp1 = fl_bgn_group();
218 fl_add_button(FL_TOUCH_BUTTON,
220 fl_get_string_width(FL_BOLD_STYLE,
223 strlen(_("File"))) + mbadd,
224 mbheight, _("File"));
225 moffset += obj->w + air;
226 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
227 fl_set_object_callback(obj, C_Menus_ShowFileMenu, 0);
232 fl_add_button(FL_TOUCH_BUTTON,
234 fl_get_string_width(FL_BOLD_STYLE,
237 strlen(_("Edit"))) + mbadd,
238 mbheight, _("Edit"));
239 moffset += obj->w + air;
240 fl_set_object_shortcut(obj, scex(_("MB|#E")), 1);
241 fl_set_object_callback(obj, C_Menus_ShowEditMenu, 0);
244 // Layout menu button
246 fl_add_button(FL_TOUCH_BUTTON,
248 fl_get_string_width(FL_BOLD_STYLE,
251 strlen(_("Layout"))) + mbadd,
252 mbheight, _("Layout"));
253 moffset += obj->w + air;
254 fl_set_object_shortcut(obj, scex(_("MB|#L")), 1);
255 fl_set_object_callback(obj, C_Menus_ShowLayoutMenu, 0);
258 // Insert menu button button
260 fl_add_button(FL_TOUCH_BUTTON,
262 fl_get_string_width(FL_BOLD_STYLE,
265 strlen(_("Insert"))) + mbadd,
266 mbheight, _("Insert"));
267 moffset += obj->w + air;
268 fl_set_object_shortcut(obj, scex(_("MB|#I")), 1);
269 fl_set_object_callback(obj, C_Menus_ShowInsertMenu, 0);
274 fl_add_button(FL_TOUCH_BUTTON,
276 fl_get_string_width(FL_BOLD_STYLE,
279 strlen(_("Math"))) + mbadd,
280 mbheight, _("Math"));
281 moffset += obj->w + air;
282 fl_set_object_shortcut(obj, scex(_("MB|#M")), 1);
283 fl_set_object_callback(obj, C_Menus_ShowMathMenu, 0);
286 // Options menu button
288 fl_add_button(FL_TOUCH_BUTTON,
290 fl_get_string_width(FL_BOLD_STYLE,
293 strlen(_("Options"))) + mbadd,
294 mbheight, _("Options"));
295 moffset += obj->w + air;
296 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
297 fl_set_object_callback(obj, C_Menus_ShowOptionsMenu, 0);
300 // Documents menu button
302 fl_add_button(FL_TOUCH_BUTTON,
304 fl_get_string_width(FL_BOLD_STYLE,
307 strlen(_("Documents"))) + mbadd,
308 mbheight, _("Documents"));
309 moffset += obj->w + air;
310 fl_set_object_shortcut(obj, scex(_("MB|#D")), 1);
311 fl_set_object_callback(obj, C_Menus_ShowBufferMenu, 0);
316 fl_add_button(FL_TOUCH_BUTTON,
318 fl_get_string_width(FL_BOLD_STYLE,
321 strlen(_("Help"))) + mbadd,
322 mbheight, _("Help"));
323 moffset += obj->w + air;
324 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
325 fl_set_object_callback(obj, C_Menus_ShowHelpMenu, 0);
330 // Set the menu buttons atrributes.
331 // Due to a bug in xforms we cant do this only an the group.
332 obj = menu_grp1->next;
334 fl_set_object_boxtype(obj, FL_FLAT_BOX);
335 fl_set_object_color(obj, FL_MCOL, FL_MCOL);
336 fl_set_object_lsize(obj, MENU_LABEL_SIZE);
337 fl_set_object_lstyle(obj, FL_BOLD_STYLE);
338 fl_set_object_resize(obj, FL_RESIZE_ALL);
339 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
341 } while (obj != 0 && obj->objclass != FL_END_GROUP);
345 menu_grp2 = fl_bgn_group();
349 fl_add_button(FL_TOUCH_BUTTON,
351 fl_get_string_width(FL_BOLD_STYLE,
354 strlen(_("File"))) + mbadd,
355 mbheight, _("File"));
356 moffset += obj->w + air;
357 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
358 fl_set_object_callback(obj, C_Menus_ShowFileMenu2, 0);
361 // Options menu button
362 menu_options2 = obj =
363 fl_add_button(FL_TOUCH_BUTTON,
365 fl_get_string_width(FL_BOLD_STYLE,
368 strlen(_("Options"))) +mbadd,
369 mbheight, _("Options"));
370 moffset += obj->w + air;
371 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
372 fl_set_object_callback(obj, C_Menus_ShowOptionsMenu, 0);
377 fl_add_button(FL_TOUCH_BUTTON,
379 fl_get_string_width(FL_BOLD_STYLE,
382 strlen(_("Help"))) + mbadd,
383 mbheight, _("Help"));
384 moffset += obj->w + air;
385 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
386 fl_set_object_callback(obj, C_Menus_ShowHelpMenu, 0);
391 // Set the menu buttons atrributes.
392 // Due to a bug in xforms we cant do this only an the group.
393 obj = menu_grp2->next;
395 fl_set_object_boxtype(obj, FL_FLAT_BOX);
396 fl_set_object_color(obj, FL_MCOL, FL_MCOL);
397 fl_set_object_lsize(obj, MENU_LABEL_SIZE);
398 fl_set_object_lstyle(obj, FL_BOLD_STYLE);
399 fl_set_object_resize(obj, FL_RESIZE_ALL);
400 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
402 } while (obj != 0 && obj->objclass != FL_END_GROUP);
406 void Menus::ScreenOptions()
408 static int ow = -1, oh;
410 // this is not very nice....
411 fl_set_input(fd_form_screen->input_roman,
412 lyxrc.roman_font_name.c_str());
413 fl_set_input(fd_form_screen->input_sans,
414 lyxrc.sans_font_name.c_str());
415 fl_set_input(fd_form_screen->input_typewriter,
416 lyxrc.typewriter_font_name.c_str());
417 fl_set_input(fd_form_screen->input_font_norm,
418 lyxrc.font_norm.c_str());
420 sprintf(tmpstring, "%d", lyxrc.zoom);
421 fl_set_input(fd_form_screen->intinput_size, tmpstring);
422 if (fd_form_screen->form_screen->visible) {
423 fl_raise_form(fd_form_screen->form_screen);
425 fl_show_form(fd_form_screen->form_screen,
426 FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
427 _("Screen Options"));
429 ow = fd_form_screen->form_screen->w;
430 oh = fd_form_screen->form_screen->h;
432 fl_set_form_minsize(fd_form_screen->form_screen, ow, oh);
438 // Here comes all the menu callbacks.
441 void Menus::ShowFileMenu(FL_OBJECT * ob, long)
443 Menus * men = static_cast<Menus*>(ob->u_vdata);
445 // Regarding the pseudo-menu-button:
446 // ok, ok this is a hack. It would be better to use the menus of the
447 // xforms 0.8 library. but then all popups have to be defined all the
448 // time, code rewriting would be necessary and contex-depending menus
449 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
450 // course it would be more proper (and little faster). So if anybody
451 // likes to do the cleanup, just do it. Matthias
453 // set the pseudo menu-button
454 fl_set_object_boxtype(ob, FL_UP_BOX);
455 fl_set_button(ob, 0);
456 fl_redraw_object(ob);
458 Buffer * tmpbuffer = men->_view->buffer();
459 LyXFunc * tmpfunc = men->_view->getLyXFunc();
461 bool LinuxDoc = tmpbuffer->isLinuxDoc();
462 bool DocBook = tmpbuffer->isDocBook();
463 bool Literate = tmpbuffer->isLiterate();
467 int SubFileImport = fl_defpup(FL_ObjWin(ob),
470 "|Ascii Text as Lines...%x31"
471 "|Ascii Text as Paragraphs%x32"
475 fl_setpup_shortcut(SubFileImport, 30, scex(_("FIM|Ll#l#L")));
476 fl_setpup_shortcut(SubFileImport, 31, scex(_("FIM|Aa#a#A")));
477 fl_setpup_shortcut(SubFileImport, 32, scex(_("FIM|Pp#p#P")));
478 fl_setpup_shortcut(SubFileImport, 33, scex(_("FIM|Nn#n#N")));
479 fl_setpup_shortcut(SubFileImport, 34, scex(_("FIM|Dd#d#D")));
483 // remember to make this handle linuxdoc too.
484 // and now docbook also.
485 int SubFileExport = 0;
486 if (!LinuxDoc && !DocBook)
487 SubFileExport= fl_defpup(FL_ObjWin(ob),
491 "|as PostScript...%x42"
492 "|as Ascii Text...%x43"
496 SubFileExport= fl_defpup(FL_ObjWin(ob),
498 "|as LinuxDoc...%x40"
500 "|as PostScript...%x42"
501 "|as Ascii Text...%x43"
504 SubFileExport= fl_defpup(FL_ObjWin(ob),
508 "|as PostScript...%x42"
509 "|as Ascii Text...%x43"
512 fl_setpup_shortcut(SubFileExport, 40, scex(_("FEX|Ll#l#L")));
513 fl_setpup_shortcut(SubFileExport, 41, scex(_("FEX|Dd#d#D")));
514 fl_setpup_shortcut(SubFileExport, 42, scex(_("FEX|Pp#p#P")));
515 fl_setpup_shortcut(SubFileExport, 43, scex(_("FEX|Tt#t#T")));
516 fl_setpup_shortcut(SubFileExport, 44, scex(_("FEX|Hh#h#H")));
518 if (!LinuxDoc && !DocBook) {
519 fl_setpup_shortcut(SubFileExport, 45, scex(_("FEX|mM#m#M")));
522 int FileMenu = fl_defpup(FL_ObjWin(ob),
524 "|New from template..."
538 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
539 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
540 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
541 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Cc#c#C")));
542 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|Ss#s#S")));
543 fl_setpup_shortcut(FileMenu, 6, scex(_("FM|Aa#a#A")));
544 fl_setpup_shortcut(FileMenu, 7, scex(_("FM|Rr#r#R")));
545 fl_setpup_shortcut(FileMenu, 8, scex(_("FM|dD#d#D")));
546 fl_setpup_shortcut(FileMenu, 9, scex(_("FM|wW#w#W")));
547 fl_setpup_shortcut(FileMenu, 10, scex(_("FM|vV#v#V")));
548 fl_setpup_shortcut(FileMenu, 11, scex(_("FM|Uu#u#U")));
549 fl_setpup_shortcut(FileMenu, 12, scex(_("FM|Bb#b#B")));
550 fl_setpup_shortcut(FileMenu, 13, scex(_("FM|Pp#p#P")));
551 fl_setpup_shortcut(FileMenu, 14, scex(_("FM|Ff#f#F")));
553 // These commands are disabled when the corresponding programs
554 // are not installed. I simply grey them out, since I do not
555 // want to change their number (JMarc)
556 bool hasLaTeX = lyxrc.latex_command != "none";
558 if (!hasLaTeX || lyxrc.view_dvi_command == "none")
559 fl_setpup_mode(FileMenu, 8, FL_PUP_GREY);
561 if (!hasLaTeX || lyxrc.view_ps_command == "none")
562 fl_setpup_mode(FileMenu, 9, FL_PUP_GREY);
565 fl_setpup_mode(FileMenu, 10, FL_PUP_GREY);
566 fl_setpup_mode(FileMenu, 11, FL_PUP_GREY);
569 if (lyxrc.literate_command == "none" || ! Literate)
570 fl_setpup_mode(FileMenu, 12, FL_PUP_GREY);
572 if (!hasLaTeX || lyxrc.print_command == "none")
573 fl_setpup_mode(FileMenu, 13, FL_PUP_GREY);
575 if (!hasLaTeX || lyxrc.fax_command == "none")
576 fl_setpup_mode(FileMenu, 14, FL_PUP_GREY);
578 bool hasReLyX = lyxrc.relyx_command != "none";
580 // Disable import LaTeX and Noweb
581 fl_setpup_mode(SubFileImport, 30, FL_PUP_GREY);
582 fl_setpup_mode(SubFileImport, 33, FL_PUP_GREY);
585 if ( lyxrc.linuxdoc_to_lyx_command == "none")
586 fl_setpup_mode(SubFileImport, 34, FL_PUP_GREY);
589 // Disable export dvi and export postscript
590 fl_setpup_mode(SubFileExport, 41, FL_PUP_GREY);
591 fl_setpup_mode(SubFileExport, 42, FL_PUP_GREY);
594 if ((!LinuxDoc && !DocBook && lyxrc.html_command == "none") ||
595 ( LinuxDoc && lyxrc.linuxdoc_to_html_command == "none") ||
596 ( DocBook && lyxrc.docbook_to_html_command == "none")) {
597 // Disable export HTML
598 fl_setpup_mode(SubFileExport, 44, FL_PUP_GREY);
601 // xgettext:no-c-format
602 fl_addtopup(FileMenu, _("|Import%m"), SubFileImport);
603 // xgettext:no-c-format
604 fl_addtopup(FileMenu, _("|Export%m%l"), SubFileExport);
605 // xgettext:no-c-format
606 fl_addtopup(FileMenu, _("|Exit%l"));
607 fl_setpup_shortcut(FileMenu, 15, scex(_("FM|Ii#i#I")));
608 fl_setpup_shortcut(FileMenu, 16, scex(_("FM|Ee#e#E")));
609 fl_setpup_shortcut(FileMenu, 17, scex(_("FM|xX#x#X")));
611 // make the lastfiles menu
613 for (LastFiles::Files::const_iterator cit = lastfiles->begin();
614 cit != lastfiles->end() && ii < 10; ++cit, ++ii) {
615 string tmp = tostr(ii);
616 string tmp2 = tmp + "#" + tmp;;
617 tmp += ". " + MakeDisplayPath((*cit), 30);
618 fl_addtopup(FileMenu, tmp.c_str());
619 fl_setpup_shortcut(FileMenu, 18 - 1 + ii, tmp2.c_str());
624 men->_view->getForm()->x + ob->x,
625 men->_view->getForm()->y + ob->y + ob->h + 10);
626 int choice = fl_dopup(FileMenu);
629 // set the pseudo menu-button back
630 fl_set_object_boxtype(ob, FL_FLAT_BOX);
631 fl_redraw_object(ob);
634 case -1: case 0: // we won't do anything
636 case 1: tmpfunc->Dispatch(LFUN_MENUNEW); break;
637 case 2: tmpfunc->Dispatch(LFUN_MENUNEWTMPLT); break;
638 case 3: tmpfunc->Dispatch(LFUN_MENUOPEN); break;
639 case 4: tmpfunc->Dispatch(LFUN_CLOSEBUFFER); break;
640 case 5: tmpfunc->Dispatch(LFUN_MENUWRITE); break;
641 case 6: tmpfunc->Dispatch(LFUN_MENUWRITEAS); break;
642 case 7: tmpfunc->Dispatch(LFUN_MENURELOAD); break;
643 case 8: tmpfunc->Dispatch(LFUN_PREVIEW); break;
644 case 9: tmpfunc->Dispatch(LFUN_PREVIEWPS); break;
645 case 10: tmpfunc->Dispatch(LFUN_RUNLATEX); break;
646 case 11: tmpfunc->Dispatch(LFUN_RUNDVIPS); break;
647 case 12: tmpfunc->Dispatch(LFUN_BUILDPROG); break;
648 case 13: tmpfunc->Dispatch(LFUN_MENUPRINT); break;
649 case 14: tmpfunc->Dispatch(LFUN_FAX); break;
650 case 15: // import menu
651 case 30: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
653 case 31: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
655 case 32: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
657 case 33: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
659 case 34: tmpfunc->Dispatch(LFUN_IMPORT, "linuxdoc");
661 case 16: // export menu
663 if (!LinuxDoc && !DocBook)
664 tmpfunc->Dispatch(LFUN_EXPORT, "latex");
666 tmpfunc->Dispatch(LFUN_EXPORT, "linuxdoc");
668 tmpfunc->Dispatch(LFUN_EXPORT, "docbook");
670 case 41: tmpfunc->Dispatch(LFUN_EXPORT, "dvi");
672 case 42: tmpfunc->Dispatch(LFUN_EXPORT, "postscript");
674 case 43: tmpfunc->Dispatch(LFUN_EXPORT, "ascii");
677 if (!LinuxDoc && !DocBook)
678 tmpfunc->Dispatch(LFUN_EXPORT, "html");
680 tmpfunc->Dispatch(LFUN_EXPORT, "html-linuxdoc");
682 tmpfunc->Dispatch(LFUN_EXPORT, "html-docbook");
684 case 45: tmpfunc->Dispatch(LFUN_EXPORT, "custom");
686 case 17: tmpfunc->Dispatch(LFUN_QUIT); break;
688 case 18: // The first item with lastfiles.
692 .loadLyXFile((*lastfiles)[choice - 18]));
695 fl_freepup(SubFileImport);
696 fl_freepup(SubFileExport);
697 fl_freepup(FileMenu);
699 AllowInput(men->currentView());
703 void Menus::ShowFileMenu2(FL_OBJECT * ob, long)
705 Menus * men = static_cast<Menus*>(ob->u_vdata);
707 // Regarding the pseudo-menu-button:
708 // ok, ok this is a hack. It would be better to use the menus of the
709 // xforms 0.8 library. but then all popups have to be defined all the
710 // time, code rewriting would be necessary and contex-depending menus
711 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
712 // course it would be more proper (and little faster). So if anybody
713 // likes to do the cleanup, just do it. Matthias
715 // set the pseudo menu-button
716 fl_set_object_boxtype(ob, FL_UP_BOX);
717 fl_set_button(ob, 0);
718 fl_redraw_object(ob);
720 LyXFunc * tmpfunc = men->_view->getLyXFunc();
724 int SubFileImport = fl_defpup(FL_ObjWin(ob),
727 "|Ascii Text as Lines...%x16"
728 "|Ascii Text as Paragraphs...%x17"
730 "|LinuxDoc...%x19"));
732 fl_setpup_shortcut(SubFileImport, 15, scex(_("FIM|Ll#l#L")));
733 fl_setpup_shortcut(SubFileImport, 16, scex(_("FIM|Aa#a#A")));
734 fl_setpup_shortcut(SubFileImport, 17, scex(_("FIM|Pp#p#P")));
735 fl_setpup_shortcut(SubFileImport, 18, scex(_("FIM|Nn#n#N")));
736 fl_setpup_shortcut(SubFileImport, 19, scex(_("FIM|Dd#d#D")));
738 bool hasReLyX = lyxrc.relyx_command != "none";
740 // Disable import LaTeX and Noweb
741 fl_setpup_mode(SubFileImport, 15, FL_PUP_GREY);
742 fl_setpup_mode(SubFileImport, 18, FL_PUP_GREY);
745 if ( lyxrc.linuxdoc_to_lyx_command == "none")
746 fl_setpup_mode(SubFileImport, 19, FL_PUP_GREY);
748 // This can be done cleaner later.
749 int FileMenu = fl_defpup(FL_ObjWin(ob),
751 "|New from template..."
754 "|Exit%l"), SubFileImport);
756 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
757 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
758 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
759 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Ii#i#I")));
760 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|xX#x#X")));
762 // make the lastfiles menu
764 for (LastFiles::Files::const_iterator cit = lastfiles->begin();
765 cit != lastfiles->end() && ii < 10; ++cit, ++ii) {
766 string tmp = tostr(ii);
767 string tmp2 = tmp + "#" + tmp;;
768 tmp += ". " + MakeDisplayPath((*cit), 30);
769 fl_addtopup(FileMenu, tmp.c_str());
770 fl_setpup_shortcut(FileMenu, 18 - 1 + ii, tmp2.c_str());
775 men->_view->getForm()->x + ob->x,
776 men->_view->getForm()->y + ob->y + ob->h + 10);
777 int choice = fl_dopup(FileMenu);
780 // set the pseudo menu-button back
781 fl_set_object_boxtype(ob, FL_FLAT_BOX);
782 fl_redraw_object(ob);
785 case -1: case 0: // we won't do anything
788 tmpfunc->Dispatch(LFUN_MENUNEW);
791 tmpfunc->Dispatch(LFUN_MENUNEWTMPLT);
794 tmpfunc->Dispatch(LFUN_MENUOPEN);
796 case 4: // import menu
797 case 15: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
799 case 16: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
801 case 17: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
803 case 18: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
805 case 19: tmpfunc->Dispatch(LFUN_IMPORT, "linuxdoc");
808 tmpfunc->Dispatch(LFUN_QUIT);
811 case 6: // The first item with lastfiles.
815 .loadLyXFile((*lastfiles)[choice - 6]));
819 fl_freepup(SubFileImport);
820 fl_freepup(FileMenu);
821 AllowInput(men->currentView());
826 void Menus::ShowEditMenu(FL_OBJECT * ob, long)
828 Menus * men = static_cast<Menus*>(ob->u_vdata);
830 // set the pseudo menu-button
831 fl_set_object_boxtype(ob, FL_UP_BOX);
832 fl_set_button(ob, 0);
833 fl_redraw_object(ob);
835 Buffer * tmpbuffer = men->_view->buffer();
836 LyXFunc * tmpfunc = men->_view->getLyXFunc();
838 // Floats & Insets submenu
839 int SubEditFloats= fl_defpup(FL_ObjWin(ob),
840 _("Floats & Insets%t"
843 "|Open All Footnotes/Margin Notes%x23"
844 "|Close All Footnotes/Margin Notes%x24"
845 "|Open All Figures/Tables%x25"
846 "|Close All Figures/Tables%x26%l"
847 "|Remove all Error Boxes%x27"));
849 fl_setpup_shortcut(SubEditFloats, 21, scex(_("EMF|Oo#o#O")));
850 fl_setpup_shortcut(SubEditFloats, 22, scex(_("EMF|Mm#m#M")));
851 fl_setpup_shortcut(SubEditFloats, 23, scex(_("EMF|Aa#a#A")));
852 fl_setpup_shortcut(SubEditFloats, 24, scex(_("EMF|Cc#c#C")));
853 fl_setpup_shortcut(SubEditFloats, 25, scex(_("EMF|Ff#f#F")));
854 fl_setpup_shortcut(SubEditFloats, 26, scex(_("EMF|Tt#t#T")));
855 fl_setpup_shortcut(SubEditFloats, 27, scex(_("EMF|Rr#r#R")));
858 int SubEditTable = fl_newpup(FL_ObjWin(ob));
859 if (men->currentView()->available() &&
860 men->currentView()->text->cursor.par->table &&
861 !tmpbuffer->isReadonly()){
863 fl_addtopup(SubEditTable, _("Table%t"));
865 if (men->currentView()->text->cursor.par->table->
866 IsMultiColumn(men->currentView()->text->
867 NumberOfCell(men->currentView()->
871 fl_addtopup(SubEditTable, _("|Multicolumn%B%x44%l"));
873 fl_addtopup(SubEditTable, _("|Multicolumn%b%x44%l"));
874 fl_setpup_shortcut(SubEditTable, 44, scex(_("EMT|Mm#m#M")));
876 if (men->currentView()->text->cursor.par->table->
877 TopLine(men->currentView()->text->
878 NumberOfCell(men->currentView()->
880 men->currentView()->text->
882 fl_addtopup(SubEditTable, _("|Line Top%B%x36"));
884 fl_addtopup(SubEditTable, _("|Line Top%b%x36"));
885 fl_setpup_shortcut(SubEditTable, 36, scex(_("EMT|Tt#t#T")));
887 if (men->currentView()->text->cursor.par->table->
888 BottomLine(men->currentView()->text->
889 NumberOfCell(men->currentView()->
893 fl_addtopup(SubEditTable, _("|Line Bottom%B%x37"));
895 fl_addtopup(SubEditTable, _("|Line Bottom%b%x37"));
896 fl_setpup_shortcut(SubEditTable, 37, scex(_("EMT|Bb#b#B")));
898 if (men->currentView()->text->cursor.par->table->
899 LeftLine(men->currentView()->text->
900 NumberOfCell(men->currentView()->
904 fl_addtopup(SubEditTable, _("|Line Left%B%x38"));
906 fl_addtopup(SubEditTable, _("|Line Left%b%x38"));
907 fl_setpup_shortcut(SubEditTable, 38, scex(_("EMT|Ll#l#L")));
909 if (men->currentView()->text->cursor.par->table->
910 RightLine(men->currentView()->text->
911 NumberOfCell(men->currentView()->
915 fl_addtopup(SubEditTable, _("|Line Right%B%x39%l"));
917 fl_addtopup(SubEditTable, _("|Line Right%b%x39%l"));
918 fl_setpup_shortcut(SubEditTable, 39, scex(_("EMT|Rr#r#R")));
920 int align = men->currentView()->text->cursor.par->
921 table->GetAlignment(men->currentView()->text->
922 NumberOfCell(men->currentView()->
926 if (align == LYX_ALIGN_LEFT)
927 fl_addtopup(SubEditTable, _("|Align Left%R%x40"));
929 fl_addtopup(SubEditTable, _("|Align Left%r%x40"));
930 fl_setpup_shortcut(SubEditTable, 40, scex(_("EMT|eE#e#E")));
932 if (align == LYX_ALIGN_RIGHT)
933 fl_addtopup(SubEditTable, _("|Align Right%R%x41"));
935 fl_addtopup(SubEditTable, _("|Align Right%r%x41"));
936 fl_setpup_shortcut(SubEditTable, 41, scex(_("EMT|iI#i#I")));
938 if (align == LYX_ALIGN_CENTER)
939 fl_addtopup(SubEditTable, _("|Align Center%R%x42%l"));
941 fl_addtopup(SubEditTable, _("|Align Center%r%x42%l"));
942 fl_setpup_shortcut(SubEditTable, 42, scex(_("EMT|Cc#c#C")));
944 // xgettext:no-c-format
945 fl_addtopup(SubEditTable, _("|Append Row%x32"));
946 fl_setpup_shortcut(SubEditTable, 32, scex(_("EMT|oO#o#O")));
947 // xgettext:no-c-format
948 fl_addtopup(SubEditTable, _("|Append Column%x33%l"));
949 fl_setpup_shortcut(SubEditTable, 33, scex(_("EMT|uU#u#U")));
950 // xgettext:no-c-format
951 fl_addtopup(SubEditTable, _("|Delete Row%x34"));
952 fl_setpup_shortcut(SubEditTable, 34, scex(_("EMT|wW#w#W")));
953 // xgettext:no-c-format
954 fl_addtopup(SubEditTable, _("|Delete Column%x35%l"));
955 fl_setpup_shortcut(SubEditTable, 35, scex(_("EMT|nN#n#N")));
956 // xgettext:no-c-format
957 fl_addtopup(SubEditTable, _("|Delete Table%x43"));
958 fl_setpup_shortcut(SubEditTable, 43, scex(_("EMT|Dd#d#D")));
961 fl_addtopup(SubEditTable, _("Table%t"));
962 // xgettext:no-c-format
963 fl_addtopup(SubEditTable, _("|Insert table%x31"));
964 fl_setpup_shortcut(SubEditTable, 31, scex(_("EMT|Ii#i#I")));
967 int SubVersionControl = fl_newpup(FL_ObjWin(ob));
968 fl_addtopup(SubVersionControl, _("Version Control%t"));
969 if (tmpbuffer->lyxvc.inUse()) {
970 // xgettext:no-c-format
971 fl_addtopup(SubVersionControl, _("|Register%d%x51"));
972 if (tmpbuffer->isReadonly()) {
973 // signifies that the file is not checked out
974 // xgettext:no-c-format
975 fl_addtopup(SubVersionControl, _("|Check In Changes%d%x52"));
976 // xgettext:no-c-format
977 fl_addtopup(SubVersionControl, _("|Check Out for Edit%x53"));
979 // signifies that the file is checked out
980 // xgettext:no-c-format
981 fl_addtopup(SubVersionControl, _("|Check In Changes%x52"));
982 // xgettext:no-c-format
983 fl_addtopup(SubVersionControl, _("|Check Out for Edit%d%x53"));
985 // xgettext:no-c-format
986 fl_addtopup(SubVersionControl, _("|Revert to last version%x54"));
987 // xgettext:no-c-format
988 fl_addtopup(SubVersionControl, _("|Undo last check in%x55"));
989 // xgettext:no-c-format
990 fl_addtopup(SubVersionControl, _("|Show History%x56"));
992 // xgettext:no-c-format
993 fl_addtopup(SubVersionControl, _("|Register%x51"));
995 // the shortcuts are not good.
996 fl_setpup_shortcut(SubVersionControl, 51, scex(_("EMV|Rr#r#R")));
997 fl_setpup_shortcut(SubVersionControl, 52, scex(_("EMV|Ii#i#I")));
998 fl_setpup_shortcut(SubVersionControl, 53, scex(_("EMV|Oo#o#O")));
999 fl_setpup_shortcut(SubVersionControl, 54, scex(_("EMV|lL#l#l")));
1000 fl_setpup_shortcut(SubVersionControl, 55, scex(_("EMV|Uu#u#U")));
1001 fl_setpup_shortcut(SubVersionControl, 56, scex(_("EMV|Hh#h#H")));
1003 int EditMenu= fl_defpup(FL_ObjWin(ob),
1009 "|Find & Replace..."
1012 "|Floats & Insets%m"
1016 "|Table of Contents...%l"
1017 "|Version Control%m%l"
1018 "|View LaTeX log file%l"
1019 "|Paste Primary Selection as Lines"
1020 "|Paste Primary Selection as Paragraphs"),
1021 SubEditFloats, SubEditTable, SubVersionControl);
1023 fl_setpup_shortcut(EditMenu, 1, scex(_("EM|Uu#u#U")));
1024 fl_setpup_shortcut(EditMenu, 2, scex(_("EM|Rr#r#R")));
1025 fl_setpup_shortcut(EditMenu, 3, scex(_("EM|Cc#c#C")));
1026 fl_setpup_shortcut(EditMenu, 4, scex(_("EM|oO#o#O")));
1027 fl_setpup_shortcut(EditMenu, 5, scex(_("EM|Pp#p#P")));
1028 fl_setpup_shortcut(EditMenu, 6, scex(_("EM|Ff#f#F")));
1029 fl_setpup_shortcut(EditMenu, 7, scex(_("EM|Ee#e#E")));
1030 fl_setpup_shortcut(EditMenu, 8, scex(_("EM|Nn#n#N")));
1031 fl_setpup_shortcut(EditMenu, 9, scex(_("EM|Ii#i#I")));
1032 fl_setpup_shortcut(EditMenu, 10, scex(_("EM|Tt#t#T")));
1033 fl_setpup_shortcut(EditMenu, 11, scex(_("EM|Ss#s#S")));
1034 fl_setpup_shortcut(EditMenu, 12, scex(_("EM|hH#h#H")));
1035 fl_setpup_shortcut(EditMenu, 13, scex(_("EM|aA#a#A")));
1036 fl_setpup_shortcut(EditMenu, 14, scex(_("EM|Vv#v#V")));
1037 fl_setpup_shortcut(EditMenu, 15, scex(_("EM|wW#w#W")));
1038 fl_setpup_shortcut(EditMenu, 16, scex(_("EM|Ll#l#L")));
1039 fl_setpup_shortcut(EditMenu, 17, scex(_("EM|gG#g#G")));
1041 // disable unavailable entries.
1042 if(tmpbuffer->undostack.empty())
1043 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
1044 if(tmpbuffer->redostack.empty())
1045 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
1046 if(lyxrc.isp_command == "none")
1047 fl_setpup_mode(EditMenu, 11, FL_PUP_GREY);
1048 if(lyxrc.chktex_command == "none")
1049 fl_setpup_mode(EditMenu, 12, FL_PUP_GREY);
1051 if (tmpbuffer->isReadonly()) {
1052 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
1053 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
1054 fl_setpup_mode(EditMenu, 3, FL_PUP_GREY);
1055 fl_setpup_mode(EditMenu, 5, FL_PUP_GREY);
1056 fl_setpup_mode(EditMenu, 16, FL_PUP_GREY);
1057 fl_setpup_mode(EditMenu, 17, FL_PUP_GREY);
1060 fl_setpup_position(men->_view->getForm()->x + ob->x,
1061 men->_view->getForm()->y + ob->y +
1063 int choice = fl_dopup(EditMenu);
1066 // set the pseudo menu-button back
1067 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1068 fl_redraw_object(ob);
1071 case 1: tmpfunc->Dispatch(LFUN_UNDO); break;
1072 case 2: tmpfunc->Dispatch(LFUN_REDO); break;
1073 case 3: tmpfunc->Dispatch(LFUN_CUT); break;
1074 case 4: tmpfunc->Dispatch(LFUN_COPY); break;
1075 case 5: tmpfunc->Dispatch(LFUN_PASTE); break;
1076 case 6: tmpfunc->Dispatch(LFUN_MENUSEARCH); break;
1077 case 7: tmpfunc->Dispatch(LFUN_GOTOERROR); break;
1078 case 8: tmpfunc->Dispatch(LFUN_GOTONOTE); break;
1079 case 9: // floats & insets
1083 case 11: tmpfunc->Dispatch(LFUN_SPELLCHECK); break;
1084 case 12: tmpfunc->Dispatch(LFUN_RUNCHKTEX); break;
1085 case 13: tmpfunc->Dispatch(LFUN_TOCVIEW); break;
1086 case 14: // version control
1088 case 15: tmpfunc->Dispatch(LFUN_LATEX_LOG); break;
1089 case 16: tmpfunc->Dispatch(LFUN_PASTESELECTION, "line"); break;
1090 case 17: tmpfunc->Dispatch(LFUN_PASTESELECTION, "paragraph"); break;
1092 // floats & insets sub-menu
1093 case 21: men->currentView()->toggleFloat(); break;
1094 case 22: tmpfunc->Dispatch(LFUN_MELT); break;
1095 case 23: men->currentView()->allFloats(1, 0); break;
1096 case 24: men->currentView()->allFloats(0, 0); break;
1097 case 25: men->currentView()->allFloats(1, 1); break;
1098 case 26: men->currentView()->allFloats(0, 1); break;
1099 case 27: tmpfunc->Dispatch(LFUN_REMOVEERRORS); break;
1101 case 31: tmpfunc->Dispatch(LFUN_TABLE); break;
1102 // this is really temporary. We need new function in keybind.C
1103 // These should set the minibuffer, too.
1104 case 32: case 33: case 34:
1105 case 35: case 36: case 37:
1106 case 38: case 39: case 40:
1107 case 41: case 42: case 43:
1109 if (men->currentView()->available()) {
1110 men->currentView()->hideCursor();
1111 if (!men->currentView()->text->selection){
1112 men->currentView()->beforeChange();
1113 men->currentView()->update(-2);
1115 men->currentView()->text->
1116 TableFeatures(choice - 32);
1117 men->currentView()->update(1);
1120 // version control sub-menu
1121 case 51: // register
1122 tmpfunc->Dispatch(LFUN_VC_REGISTER);
1124 case 52: // check in
1125 tmpfunc->Dispatch(LFUN_VC_CHECKIN);
1127 case 53: // check out
1128 tmpfunc->Dispatch(LFUN_VC_CHECKOUT);
1130 case 54: // revert to last
1131 tmpfunc->Dispatch(LFUN_VC_REVERT);
1133 case 55: // undo last
1134 tmpfunc->Dispatch(LFUN_VC_UNDO);
1136 case 56: // show history
1137 tmpfunc->Dispatch(LFUN_VC_HISTORY);
1141 fl_freepup(EditMenu);
1142 fl_freepup(SubEditFloats);
1143 fl_freepup(SubEditTable);
1144 fl_freepup(SubVersionControl);
1148 void Menus::ShowLayoutMenu(FL_OBJECT * ob, long)
1150 Menus * men = static_cast<Menus*>(ob->u_vdata);
1152 if (!men->currentView()->available())
1155 // set the pseudo menu-button
1156 fl_set_object_boxtype(ob, FL_UP_BOX);
1157 fl_set_button(ob, 0);
1158 fl_redraw_object(ob);
1160 Buffer * tmpbuffer = men->_view->buffer();
1161 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1163 int LayoutMenu = fl_newpup(FL_ObjWin(ob));
1164 fl_addtopup(LayoutMenu, _("Character..."
1170 "|Emphasize Style%b"
1174 "|Change Environment Depth"
1175 "|LaTeX Preamble...%l"
1176 "|Save layout as default"));
1177 fl_setpup_shortcut(LayoutMenu, 1, scex(_("LM|Cc#c#C")));
1178 fl_setpup_shortcut(LayoutMenu, 2, scex(_("LM|Pp#p#P")));
1179 fl_setpup_shortcut(LayoutMenu, 3, scex(_("LM|Dd#d#D")));
1180 fl_setpup_shortcut(LayoutMenu, 4, scex(_("LM|aA#a#A")));
1181 fl_setpup_shortcut(LayoutMenu, 5, scex(_("LM|eE#e#E")));
1182 fl_setpup_shortcut(LayoutMenu, 6, scex(_("LM|Qq#q#Q")));
1183 fl_setpup_shortcut(LayoutMenu, 7, scex(_("LM|mM#m#M")));
1184 fl_setpup_shortcut(LayoutMenu, 8, scex(_("LM|Nn#n#N")));
1185 fl_setpup_shortcut(LayoutMenu, 9, scex(_("LM|Bb#b#B")));
1186 fl_setpup_shortcut(LayoutMenu, 10, scex(_("LM|Tt#t#T")));
1187 fl_setpup_shortcut(LayoutMenu, 11, scex(_("LM|vV#v#V")));
1188 fl_setpup_shortcut(LayoutMenu, 12, scex(_("LM|Ll#l#L")));
1189 fl_setpup_shortcut(LayoutMenu, 13, scex(_("LM|Ss#s#S")));
1191 // Set values of checkboxes according to font
1192 LyXFont font = men->currentView()->text->real_current_font;
1193 if (font.emph() == LyXFont::ON)
1194 fl_setpup_mode(LayoutMenu, 7, FL_PUP_CHECK);
1195 if (font.noun() == LyXFont::ON)
1196 fl_setpup_mode(LayoutMenu, 8, FL_PUP_CHECK);
1197 if (font.series() == LyXFont::BOLD_SERIES)
1198 fl_setpup_mode(LayoutMenu, 9, FL_PUP_CHECK);
1199 if (font.latex() == LyXFont::ON)
1200 fl_setpup_mode(LayoutMenu, 10, FL_PUP_CHECK);
1202 // Grey out unavailable entries
1203 if (!men->currentView()->text->cursor.par->table)
1204 fl_setpup_mode(LayoutMenu, 5, FL_PUP_GREY);
1206 if (tmpbuffer->isReadonly()) {
1207 fl_setpup_mode(LayoutMenu, 1, FL_PUP_GREY);
1208 fl_setpup_mode(LayoutMenu, 6, FL_PUP_GREY);
1209 fl_setpup_mode(LayoutMenu, 11, FL_PUP_GREY);
1213 men->_view->getForm()->x + ob->x,
1214 men->_view->getForm()->y + ob->y + ob->h + 10);
1215 int choice = fl_dopup(LayoutMenu);
1218 // set the pseudo menu-button back
1219 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1220 fl_redraw_object(ob);
1223 case 1: tmpfunc->Dispatch(LFUN_LAYOUT_CHARACTER); break;
1224 case 2: tmpfunc->Dispatch(LFUN_LAYOUT_PARAGRAPH); break;
1225 case 3: tmpfunc->Dispatch(LFUN_LAYOUT_DOCUMENT); break;
1226 case 4: tmpfunc->Dispatch(LFUN_LAYOUT_PAPER); break;
1227 case 5: tmpfunc->Dispatch(LFUN_LAYOUT_TABLE, "true"); break;
1228 case 6: tmpfunc->Dispatch(LFUN_LAYOUT_QUOTES); break;
1229 case 7: tmpfunc->Dispatch(LFUN_EMPH); break;
1230 case 8: tmpfunc->Dispatch(LFUN_NOUN); break;
1231 case 9: tmpfunc->Dispatch(LFUN_BOLD); break;
1232 case 10: tmpfunc->Dispatch(LFUN_TEX); break;
1233 case 11: tmpfunc->Dispatch(LFUN_DEPTH_PLUS); break;
1234 case 12: tmpfunc->Dispatch(LFUN_LAYOUT_PREAMBLE); break;
1235 case 13: tmpfunc->Dispatch(LFUN_LAYOUT_SAVE_DEFAULT); break;
1237 fl_freepup(LayoutMenu);
1241 void Menus::ShowInsertMenu(FL_OBJECT * ob, long)
1243 Menus * men = static_cast<Menus*>(ob->u_vdata);
1245 // set the pseudo menu-button
1246 fl_set_object_boxtype(ob, FL_UP_BOX);
1247 fl_set_button(ob, 0);
1248 fl_redraw_object(ob);
1250 Buffer * tmpbuffer = men->_view->buffer();
1251 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1253 int SubInsertAscii = fl_defpup(FL_ObjWin(ob),
1254 _("Import ASCII file%t"
1256 "|As Paragraphs%x42"));
1258 fl_setpup_shortcut(SubInsertAscii, 41, scex(_("IMA|Ll#l#L")));
1259 fl_setpup_shortcut(SubInsertAscii, 42, scex(_("IMA|Pp#p#P")));
1261 int SubInsertTableList= fl_defpup(FL_ObjWin(ob),
1263 "|Table of Contents%x21"
1264 "|List of Figures%x22"
1265 "|List of Tables%x23"
1266 "|List of Algorithms%x24"
1268 "|BibTeX Reference%x26"));
1270 fl_setpup_shortcut(SubInsertTableList, 21, scex(_("IMT|Cc#c#C")));
1271 fl_setpup_shortcut(SubInsertTableList, 22, scex(_("IMT|Ff#f#F")));
1272 fl_setpup_shortcut(SubInsertTableList, 23, scex(_("IMT|Tt#t#T")));
1273 fl_setpup_shortcut(SubInsertTableList, 24, scex(_("IMT|Aa#a#A")));
1274 fl_setpup_shortcut(SubInsertTableList, 25, scex(_("IMT|Ii#i#I")));
1275 fl_setpup_shortcut(SubInsertTableList, 26, scex(_("IMT|Bb#b#B")));
1277 int SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
1285 fl_setpup_shortcut(SubInsertFloatList, 71, scex(_("IMF|gG#g#G")));
1286 fl_setpup_shortcut(SubInsertFloatList, 72, scex(_("IMF|Tt#t#T")));
1287 fl_setpup_shortcut(SubInsertFloatList, 73, scex(_("IMF|Ww#w#W")));
1288 fl_setpup_shortcut(SubInsertFloatList, 74, scex(_("IMF|iI#i#I")));
1289 fl_setpup_shortcut(SubInsertFloatList, 75, scex(_("IMF|Aa#a#A")));
1291 int SubInsertSpecial = fl_defpup(FL_ObjWin(ob),
1292 _("Special Character%t"
1294 "|Hyphenation Point%x32"
1295 "|Protected Blank%x33"
1297 "|Ellipsis (...)%x35"
1298 "|End of sentence period%x36"
1299 "|Ordinary Quote (\")%x37"
1300 "|Menu Separator %x38"));
1302 fl_setpup_shortcut(SubInsertSpecial, 31, scex(_("IMS|Hh#h#H")));
1303 fl_setpup_shortcut(SubInsertSpecial, 32, scex(_("IMS|Pp#p#P")));
1304 fl_setpup_shortcut(SubInsertSpecial, 33, scex(_("IMS|Bb#b#B")));
1305 fl_setpup_shortcut(SubInsertSpecial, 34, scex(_("IMS|Ll#l#L")));
1306 fl_setpup_shortcut(SubInsertSpecial, 35, scex(_("IMS|iI#i#I")));
1307 fl_setpup_shortcut(SubInsertSpecial, 36, scex(_("IMS|Ee#e#E")));
1308 fl_setpup_shortcut(SubInsertSpecial, 37, scex(_("IMS|Qq#q#Q")));
1309 fl_setpup_shortcut(SubInsertSpecial, 38, scex(_("IMS|Mm#m#M")));
1311 int InsertMenu = fl_defpup(FL_ObjWin(ob),
1315 "|Import ASCII File%m"
1316 "|Insert LyX File...%l"
1319 "|Floating Material%m%l"
1321 "|Special Character%m%l"
1324 "|Cross-Reference..."
1325 "|Citation Reference..."
1327 "|Index entry of last word"),
1333 fl_setpup_shortcut(InsertMenu, 1, scex(_("IM|gG#g#G")));
1334 fl_setpup_shortcut(InsertMenu, 2, scex(_("IM|bB#b#B")));
1335 fl_setpup_shortcut(InsertMenu, 3, scex(_("IM|cC#c#C")));
1336 fl_setpup_shortcut(InsertMenu, 4, scex(_("IM|Aa#a#A")));
1337 fl_setpup_shortcut(InsertMenu, 5, scex(_("IM|Xx#x#X")));
1338 fl_setpup_shortcut(InsertMenu, 6, scex(_("IM|Ff#f#F")));
1339 fl_setpup_shortcut(InsertMenu, 7, scex(_("IM|Mm#m#M")));
1340 fl_setpup_shortcut(InsertMenu, 8, scex(_("IM|oO#o#O")));
1341 fl_setpup_shortcut(InsertMenu, 9, scex(_("IM|Tt#t#T")));
1342 fl_setpup_shortcut(InsertMenu, 10, scex(_("IM|Ss#s#S")));
1343 fl_setpup_shortcut(InsertMenu, 11, scex(_("IM|Nn#n#N")));
1344 fl_setpup_shortcut(InsertMenu, 12, scex(_("IM|Ll#l#L")));
1345 fl_setpup_shortcut(InsertMenu, 13, scex(_("IM|rR#r#R")));
1346 fl_setpup_shortcut(InsertMenu, 14, scex(_("IM|iI#i#I")));
1347 fl_setpup_shortcut(InsertMenu, 15, scex(_("IM|dD#d#D")));
1348 fl_setpup_shortcut(InsertMenu, 16, scex(_("IM|wW#w#W")));
1350 fl_addtopup(InsertMenu, _("|URL..."));
1351 fl_setpup_shortcut(InsertMenu, 17, scex(_("IM|Uu#u#U")));
1353 if (tmpbuffer->isReadonly()) {
1354 for (int ii = 1; ii <= 16; ++ii)
1355 fl_setpup_mode(InsertMenu, ii, FL_PUP_GREY);
1356 fl_setpup_mode(InsertMenu, 17, FL_PUP_GREY);
1360 men->_view->getForm()->x + ob->x,
1361 men->_view->getForm()->y + ob->y + ob->h + 10);
1363 int choice = fl_dopup(InsertMenu);
1366 // set the pseudo menu-button back
1367 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1368 fl_redraw_object(ob);
1370 if (men->currentView()->available()){
1371 men->currentView()->hideCursor();
1373 case 1: tmpfunc->Dispatch(LFUN_FIGURE); break;
1374 case 2: tmpfunc->Dispatch(LFUN_TABLE); break;
1375 case 3: tmpfunc->Dispatch(LFUN_CHILDINSERT); break;
1376 case 4: // Insert ASCII file submenu
1378 case 5: tmpfunc->Dispatch(LFUN_FILE_INSERT); break;
1379 case 41: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "line"); break;
1380 case 42: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "paragraph"); break;
1384 case 6: tmpfunc->Dispatch(LFUN_FOOTMELT); break
1386 case 7: tmpfunc->Dispatch(LFUN_MARGINMELT); break;
1388 case 8: // Float sub-menu
1390 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "figure");
1393 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "table");
1396 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-fig");
1399 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-tab");
1402 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "algorithm");
1405 case 9: // Table/List submenu
1407 case 21: tmpfunc->Dispatch(LFUN_TOC_INSERT); break;
1408 case 22: tmpfunc->Dispatch(LFUN_LOF_INSERT); break;
1409 case 23: tmpfunc->Dispatch(LFUN_LOT_INSERT); break;
1410 case 24: tmpfunc->Dispatch(LFUN_LOA_INSERT); break;
1411 case 25: tmpfunc->Dispatch(LFUN_INDEX_PRINT); break;
1412 case 26: tmpfunc->Dispatch(LFUN_INSERT_BIBTEX); break;
1414 case 10: // Special Character submenu
1416 case 31: tmpfunc->Dispatch(LFUN_HFILL); break;
1417 case 32: tmpfunc->Dispatch(LFUN_HYPHENATION); break;
1418 case 33: tmpfunc->Dispatch(LFUN_PROTECTEDSPACE); break;
1419 case 34: tmpfunc->Dispatch(LFUN_BREAKLINE); break;
1420 case 35: tmpfunc->Dispatch(LFUN_LDOTS); break;
1421 case 36: tmpfunc->Dispatch(LFUN_END_OF_SENTENCE); break;
1422 case 37: tmpfunc->Dispatch(LFUN_QUOTE); break;
1423 case 38: tmpfunc->Dispatch(LFUN_MENU_SEPARATOR); break;
1425 case 11: tmpfunc->Dispatch(LFUN_INSERT_NOTE); break;
1426 case 12: tmpfunc->Dispatch(LFUN_INSERT_LABEL); break;
1427 case 13: tmpfunc->Dispatch(LFUN_INSERT_REF); break;
1428 case 14: tmpfunc->Dispatch(LFUN_INSERT_CITATION); break;
1429 case 15: tmpfunc->Dispatch(LFUN_INDEX_INSERT); break;
1430 case 16: tmpfunc->Dispatch(LFUN_INDEX_INSERT_LAST); break;
1431 case 17: tmpfunc->Dispatch(LFUN_URL); break;
1434 fl_freepup(InsertMenu);
1435 fl_freepup(SubInsertAscii);
1436 fl_freepup(SubInsertTableList);
1437 fl_freepup(SubInsertFloatList);
1438 fl_freepup(SubInsertSpecial);
1442 void Menus::ShowMathMenu(FL_OBJECT * ob, long)
1444 extern void math_insert_symbol(char const * s);
1446 Menus * men = static_cast<Menus*>(ob->u_vdata);
1448 // set the pseudo menu-button
1449 fl_set_object_boxtype(ob, FL_UP_BOX);
1450 fl_set_button(ob, 0);
1451 fl_redraw_object(ob);
1453 Buffer * tmpbuffer = men->_view->buffer();
1454 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1456 int MathMenu = fl_defpup(FL_ObjWin(ob),
1467 fl_setpup_shortcut(MathMenu, 1, scex(_("MM|Ff#f#F")));
1468 fl_setpup_shortcut(MathMenu, 2, scex(_("MM|Ss#s#S")));
1469 fl_setpup_shortcut(MathMenu, 3, scex(_("MM|Ee#e#E")));
1470 fl_setpup_shortcut(MathMenu, 4, scex(_("MM|xX#x#X")));
1471 fl_setpup_shortcut(MathMenu, 5, scex(_("MM|uU#u#U")));
1472 fl_setpup_shortcut(MathMenu, 6, scex(_("MM|Ii#i#I")));
1473 fl_setpup_shortcut(MathMenu, 7, scex(_("MM|Mm#m#M")));
1474 fl_setpup_shortcut(MathMenu, 8, scex(_("MM|Dd#d#D")));
1475 fl_setpup_shortcut(MathMenu, 9, scex(_("MM|Pp#p#P")));
1477 if (tmpbuffer->isReadonly())
1478 for (int ii = 1; ii <= 9; ++ii)
1479 fl_setpup_mode(MathMenu, ii, FL_PUP_GREY);
1483 men->_view->getForm()->x + ob->x,
1484 men->_view->getForm()->y + ob->y + ob->h + 10);
1485 int choice = fl_dopup(MathMenu);
1488 // set the pseudo menu-button back
1489 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1490 fl_redraw_object(ob);
1492 if (men->currentView()->available()) {
1495 tmpfunc->Dispatch(LFUN_INSERT_MATH, "frac");
1498 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sqrt");
1500 case 3: /* Exponent */
1501 tmpfunc->Dispatch(LFUN_INSERT_MATH, "^");
1504 tmpfunc->Dispatch(LFUN_INSERT_MATH, "_");
1507 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sum");
1510 tmpfunc->Dispatch(LFUN_INSERT_MATH, "int");
1513 tmpfunc->Dispatch(LFUN_MATH_MODE);
1516 tmpfunc->Dispatch(LFUN_MATH_DISPLAY);
1519 show_symbols_form(tmpfunc);
1522 men->currentView()->update(0);
1524 fl_freepup(MathMenu);
1528 void Menus::ShowOptionsMenu(FL_OBJECT * ob, long)
1530 Menus * men = static_cast<Menus*>(ob->u_vdata);
1532 // set the pseudo menu-button
1533 fl_set_object_boxtype(ob, FL_UP_BOX);
1534 fl_set_button(ob, 0);
1535 fl_redraw_object(ob);
1537 //Buffer *tmpbuffer = men->_view->currentBuffer();
1538 LyXFunc * tmpfunc = men->_view->getLyXFunc();
1540 int OptionsMenu = fl_defpup(FL_ObjWin(ob),
1542 "|Spellchecker Options..."
1547 fl_setpup_shortcut(OptionsMenu, 1, scex(_("OM|Ff#f#F")));
1548 fl_setpup_shortcut(OptionsMenu, 2, scex(_("OM|Ss#s#S")));
1549 fl_setpup_shortcut(OptionsMenu, 3, scex(_("OM|Kk#k#K")));
1550 fl_setpup_shortcut(OptionsMenu, 4, scex(_("OM|Ll#l#L")));
1551 fl_setpup_shortcut(OptionsMenu, 5, scex(_("OM|Rr#r#R")));
1553 if(lyxrc.isp_command == "none")
1554 fl_setpup_mode(OptionsMenu, 2, FL_PUP_GREY);
1557 men->_view->getForm()->x + ob->x,
1558 men->_view->getForm()->y + ob->y + ob->h + 10);
1559 int choice = fl_dopup(OptionsMenu);
1562 // set the pseudo menu-button back
1563 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1564 fl_redraw_object(ob);
1566 case 1: men->ScreenOptions(); break;
1567 case 2: SpellCheckerOptions(); break;
1568 case 3: men->_view->getIntl()->MenuKeymap(); break;
1569 case 4: LaTeXOptions(men->_view->view()); break;
1570 case 5: tmpfunc->Dispatch(LFUN_RECONFIGURE); break;
1573 fl_freepup(OptionsMenu);
1577 void Menus::ShowBufferMenu(FL_OBJECT * ob, long)
1579 Menus * men = static_cast<Menus*>(ob->u_vdata);
1581 // set the pseudo menu-button
1582 fl_set_object_boxtype(ob, FL_UP_BOX);
1583 fl_set_button(ob, 0);
1584 fl_redraw_object(ob);
1586 int BufferMenu = fl_newpup(FL_ObjWin(ob));
1587 vector<string> namevec = bufferlist.getFileNames();
1588 if (namevec.size() != 0) {
1589 for (vector<string>::const_iterator cit = namevec.begin();
1590 cit != namevec.end(); ++cit) {
1591 string relbuf = MakeDisplayPath((*cit), 30);
1592 fl_addtopup(BufferMenu, relbuf.c_str());
1595 fl_addtopup(BufferMenu, _("No Documents Open!%t"));
1599 men->_view->getForm()->x + ob->x,
1600 men->_view->getForm()->y + ob->y + ob->h + 10);
1601 int choice = fl_dopup(BufferMenu);
1604 // set the pseudo menu-button back
1605 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1606 fl_redraw_object(ob);
1607 if (choice > 0) men->handleBufferMenu(choice - 1);
1609 fl_freepup(BufferMenu);
1614 char const * doc_files [] = {"Intro", "Tutorial",
1615 "UserGuide", "Extended",
1616 "Customization", "Reference",
1618 "BUGS", "LaTeXConfig"};
1620 void Menus::ShowHelpMenu(FL_OBJECT * ob, long)
1622 Menus * men = static_cast<Menus*>(ob->u_vdata);
1624 // set the pseudo menu-button
1625 fl_set_object_boxtype(ob, FL_UP_BOX);
1626 fl_set_button(ob, 0);
1627 fl_redraw_object(ob);
1629 int HelpMenu = fl_defpup(FL_ObjWin(ob),
1633 "|Extended Features"
1637 "|Table of Contents"
1639 "|LaTeX Configuration%l"
1640 "|Copyright and Warranty..."
1644 fl_setpup_shortcut(HelpMenu, 1, scex(_("HM|Ii#I#i")));
1645 fl_setpup_shortcut(HelpMenu, 2, scex(_("HM|Tt#T#t")));
1646 fl_setpup_shortcut(HelpMenu, 3, scex(_("HM|Uu#U#u")));
1647 fl_setpup_shortcut(HelpMenu, 4, scex(_("HM|xX#x#X")));
1648 fl_setpup_shortcut(HelpMenu, 5, scex(_("HM|Cc#C#c")));
1649 fl_setpup_shortcut(HelpMenu, 6, scex(_("HM|Rr#R#r")));
1650 fl_setpup_shortcut(HelpMenu, 7, scex(_("HM|Ff#F#f")));
1651 fl_setpup_shortcut(HelpMenu, 8, scex(_("HM|aA#a#A")));
1652 fl_setpup_shortcut(HelpMenu, 9, scex(_("HM|Kk#K#k")));
1653 fl_setpup_shortcut(HelpMenu, 10, scex(_("HM|Ll#L#l")));
1654 fl_setpup_shortcut(HelpMenu, 11, scex(_("HM|oO#o#O")));
1655 fl_setpup_shortcut(HelpMenu, 12, scex(_("HM|eE#e#E")));
1656 fl_setpup_shortcut(HelpMenu, 13, scex(_("HM|Vv#v#V")));
1659 men->_view->getForm()->x + ob->x,
1660 men->_view->getForm()->y + ob->y + ob->h + 10);
1661 int choice = fl_dopup(HelpMenu);
1664 // set the pseudo menu-button back
1665 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1666 fl_redraw_object(ob);
1669 case 1: case 2: case 3: case 4: case 5:
1670 case 6: case 7: case 8: case 9: case 10:
1671 ProhibitInput(men->currentView());
1672 men->MenuDocu(doc_files[choice - 1]);
1673 AllowInput(men->currentView());
1675 case 11: ShowCopyright(); break;
1676 case 12: ShowCredits(); break;
1678 ProhibitInput(men->currentView());
1679 fl_show_message((string(_("LyX Version ")) + LYX_VERSION
1680 + _(" of ") + LYX_RELEASE).c_str(),
1681 (_("Library directory: ")
1682 + MakeDisplayPath(system_lyxdir)).c_str(),
1683 (_("User directory: ")
1684 + MakeDisplayPath(user_lyxdir)).c_str());
1685 AllowInput(men->currentView());
1688 fl_freepup(HelpMenu);
1692 void Menus::MenuDocu(string const & docname)
1694 string fname = i18nLibFileSearch("doc", docname, "lyx");
1695 if (fname.empty()) {
1696 WriteAlert(_("Error!"),
1697 _("Could not find requested Documentation file"),
1701 _view->getMiniBuffer()->Set(_("Opening help file"),
1702 MakeDisplayPath(fname), "...");
1703 currentView()->buffer(bufferlist.loadLyXFile(fname, false));
1705 if (docname == "Reference")
1706 _view->getLyXFunc()->Dispatch(LFUN_TOCVIEW);
1710 void Menus::handleBufferMenu(int choice)
1712 currentView()->buffer(bufferlist.getBuffer(choice));