3 * ==================================================
5 * LyX, The Document Processor
7 * Copyright 1995 Matthias Ettrich
8 * Copyright 1995-1999 The LyX Team.
10 * ==================================================
13 /* This file contains all the menu and submenu declarations.
14 The call backs are in lyx_cb.C */
18 * XFORMS can handle 10 (more with the new xforms, but not unlimited)
19 * popups at the same time
20 * so when you are finished looking at a pup free it (fl_freepup)
26 #pragma implementation
35 #include "spellchecker.h"
36 #include "support/filetools.h"
38 #include "lastfiles.h"
39 #include "bufferlist.h"
40 #include "lyx_gui_misc.h"
41 #include "minibuffer.h"
42 #include "lyxscreen.h"
49 extern FD_form_screen *fd_form_screen;
50 extern BufferList bufferlist;
52 // I would really prefere to see most or all of these 'extern's disappear.
53 // Their commands should be called through LyXFunc (IMO). (Lgb)
55 extern void MenuLayoutSave();
56 extern void ShowCredits();
57 extern void ShowCopyright();
58 extern void show_symbols_form(LyXFunc*);
59 extern void BeforeChange();
60 extern void ProhibitInput();
61 extern void AllowInput();
62 extern void OpenStuff();
63 extern void ToggleFloat();
64 extern void AllFloats(char flag, char figmar);
65 extern void LaTeXOptions();
67 // A bunch of wrappers
69 extern "C" void C_Menus_ShowFileMenu(FL_OBJECT *ob, long data)
71 Menus::ShowFileMenu(ob, data);
74 extern "C" void C_Menus_ShowFileMenu2(FL_OBJECT *ob, long data)
76 Menus::ShowFileMenu2(ob, data);
79 extern "C" void C_Menus_ShowEditMenu(FL_OBJECT *ob, long data)
81 Menus::ShowEditMenu(ob, data);
84 extern "C" void C_Menus_ShowLayoutMenu(FL_OBJECT *ob, long data)
86 Menus::ShowLayoutMenu(ob, data);
89 extern "C" void C_Menus_ShowInsertMenu(FL_OBJECT *ob, long data)
91 Menus::ShowInsertMenu(ob, data);
94 extern "C" void C_Menus_ShowMathMenu(FL_OBJECT *ob, long data)
96 Menus::ShowMathMenu(ob, data);
99 extern "C" void C_Menus_ShowOptionsMenu(FL_OBJECT *ob, long data)
101 Menus::ShowOptionsMenu(ob, data);
104 extern "C" void C_Menus_ShowBufferMenu(FL_OBJECT *ob, long data)
106 Menus::ShowBufferMenu(ob, data);
109 extern "C" void C_Menus_ShowHelpMenu(FL_OBJECT *ob, long data)
111 Menus::ShowHelpMenu(ob, data);
115 Menus::Menus(LyXView *view,int air)
119 // deactivate the menu accelerators
120 fl_set_object_shortcut(menu_file, "", 1);
121 fl_set_object_shortcut(menu_file2, "", 1);
122 fl_set_object_shortcut(menu_edit, "", 1);
123 fl_set_object_shortcut(menu_layout, "", 1);
124 fl_set_object_shortcut(menu_math, "", 1);
125 fl_set_object_shortcut(menu_insert, "", 1);
126 fl_set_object_shortcut(menu_options, "", 1);
127 fl_set_object_shortcut(menu_options2, "", 1);
128 fl_set_object_shortcut(menu_buffer, "", 1);
129 fl_set_object_shortcut(menu_help, "", 1);
130 fl_set_object_shortcut(menu_help2, "", 1);
135 inline BufferView *Menus::currentView()
137 return _view->currentView();
141 void Menus::showMenus()
143 fl_hide_object(menu_grp2);
144 fl_show_object(menu_grp1);
148 void Menus::hideMenus()
150 fl_hide_object(menu_grp1);
151 fl_show_object(menu_grp2);
155 void Menus::openByName(string const &menuName)
156 /* Opens the visible menu of given name, or simply does nothing
157 when the name is not known. NOTE THE EXTREMELY STUPID
158 IMPLEMENTATION! :-) There are probably hundred ways to do
159 this better, for instance, by scanning the menu objects and
160 testing for the given name. I leave this as an exercise for an
161 experienced GG (GUI Guy/Girl). RVDK_PATCH_5. */
163 if (menu_file->visible) {
164 if (menuName == _("File")) ShowFileMenu(menu_file, 0);
165 else if (menuName == _("Edit")) ShowEditMenu(menu_edit, 0);
166 else if (menuName == _("Layout")) ShowLayoutMenu(menu_layout, 0);
167 else if (menuName == _("Insert")) ShowInsertMenu(menu_insert, 0);
168 else if (menuName == _("Math")) ShowMathMenu(menu_math, 0);
169 else if (menuName == _("Options")) ShowOptionsMenu(menu_options, 0);
170 else if (menuName == _("Documents")) ShowBufferMenu(menu_buffer, 0);
171 else if (menuName == _("Help")) ShowHelpMenu(menu_help, 0);
172 else lyxerr << "The menu '" << menuName
173 << "' is not available." << endl;
175 if (menuName == _("File")) ShowFileMenu2(menu_file2, 0);
176 else if (menuName == _("Options")) ShowOptionsMenu(menu_options2, 0);
177 else if (menuName == _("Help")) ShowHelpMenu(menu_help2, 0);
178 else lyxerr << "The menu '" << menuName
179 << "' is not available." << endl;
184 void Menus::create_menus(int air)
186 FL_FORM *form = _view->getForm();
188 // Here I'd really like to see code like:
192 const int MENU_LABEL_SIZE = FL_NORMAL_SIZE;
193 const int mheight = 30;
194 const int mbheight= 22;
195 // where to place the menubar?
196 const int yloc = (mheight - mbheight)/2; //air + bw;
197 const int mbadd = 20; // menu button add (to width)
201 obj = fl_add_frame(FL_UP_FRAME,0,0,form->w,mheight,"");
202 fl_set_object_resize(obj, FL_RESIZE_ALL);
203 fl_set_object_gravity(obj, NorthWestGravity, NorthEastGravity);
205 menu_grp1 = fl_bgn_group();
209 fl_add_button(FL_TOUCH_BUTTON,
211 fl_get_string_width(FL_BOLD_STYLE,
214 strlen(_("File"))) + mbadd,
216 moffset += obj->w + air;
217 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
218 fl_set_object_callback(obj,C_Menus_ShowFileMenu, 0);
219 obj->u_ldata = (long)this;
223 fl_add_button(FL_TOUCH_BUTTON,
225 fl_get_string_width(FL_BOLD_STYLE,
228 strlen(_("Edit"))) + mbadd,
230 moffset += obj->w + air;
231 fl_set_object_shortcut(obj, scex(_("MB|#E")),1);
232 fl_set_object_callback(obj,C_Menus_ShowEditMenu,0);
233 obj->u_ldata = (long) this;
235 // Layout menu button
237 fl_add_button(FL_TOUCH_BUTTON,
239 fl_get_string_width(FL_BOLD_STYLE,
242 strlen(_("Layout"))) + mbadd,
243 mbheight,_("Layout"));
244 moffset += obj->w + air;
245 fl_set_object_shortcut(obj, scex(_("MB|#L")), 1);
246 fl_set_object_callback(obj,C_Menus_ShowLayoutMenu,0);
247 obj->u_ldata = (long) this;
249 // Insert menu button button
251 fl_add_button(FL_TOUCH_BUTTON,
253 fl_get_string_width(FL_BOLD_STYLE,
256 strlen(_("Insert"))) + mbadd,
257 mbheight,_("Insert"));
258 moffset += obj->w + air;
259 fl_set_object_shortcut(obj, scex(_("MB|#I")), 1);
260 fl_set_object_callback(obj,C_Menus_ShowInsertMenu,0);
261 obj->u_ldata = (long) this;
265 fl_add_button(FL_TOUCH_BUTTON,
267 fl_get_string_width(FL_BOLD_STYLE,
270 strlen(_("Math"))) + mbadd,
272 moffset += obj->w + air;
273 fl_set_object_shortcut(obj, scex(_("MB|#M")), 1);
274 fl_set_object_callback(obj,C_Menus_ShowMathMenu,0);
275 obj->u_ldata = (long) this;
277 // Options menu button
279 fl_add_button(FL_TOUCH_BUTTON,
281 fl_get_string_width(FL_BOLD_STYLE,
284 strlen(_("Options"))) + mbadd,
285 mbheight,_("Options"));
286 moffset += obj->w + air;
287 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
288 fl_set_object_callback(obj,C_Menus_ShowOptionsMenu, 0);
289 obj->u_ldata = (long) this;
291 // Documents menu button
293 fl_add_button(FL_TOUCH_BUTTON,
295 fl_get_string_width(FL_BOLD_STYLE,
298 strlen(_("Documents"))) + mbadd,
299 mbheight,_("Documents"));
300 moffset += obj->w + air;
301 fl_set_object_shortcut(obj, scex(_("MB|#D")), 1);
302 fl_set_object_callback(obj,C_Menus_ShowBufferMenu,0);
303 obj->u_ldata = (long) this;
307 fl_add_button(FL_TOUCH_BUTTON,
309 fl_get_string_width(FL_BOLD_STYLE,
312 strlen(_("Help"))) + mbadd,
314 moffset += obj->w + air;
315 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
316 fl_set_object_callback(obj,C_Menus_ShowHelpMenu,0);
317 obj->u_ldata = (long) this;
321 // Set the menu buttons atrributes.
322 // Due to a bug in xforms we cant do this only an the group.
323 obj = menu_grp1->next;
325 fl_set_object_boxtype(obj, FL_FLAT_BOX);
326 fl_set_object_color(obj,FL_MCOL, FL_MCOL);
327 fl_set_object_lsize(obj,MENU_LABEL_SIZE);
328 fl_set_object_lstyle(obj,FL_BOLD_STYLE);
329 fl_set_object_resize(obj, FL_RESIZE_ALL);
330 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
332 } while (obj != 0 && obj->objclass != FL_END_GROUP);
336 menu_grp2 = fl_bgn_group();
340 fl_add_button(FL_TOUCH_BUTTON,
342 fl_get_string_width(FL_BOLD_STYLE,
345 strlen(_("File"))) + mbadd,
347 moffset += obj->w + air;
348 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
349 fl_set_object_callback(obj,C_Menus_ShowFileMenu2, 0);
350 obj->u_ldata = (long)this;
352 // Options menu button
353 menu_options2 = obj =
354 fl_add_button(FL_TOUCH_BUTTON,
356 fl_get_string_width(FL_BOLD_STYLE,
359 strlen(_("Options"))) +mbadd,
360 mbheight,_("Options"));
361 moffset += obj->w + air;
362 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
363 fl_set_object_callback(obj,C_Menus_ShowOptionsMenu, 0);
364 obj->u_ldata = (long) this;
368 fl_add_button(FL_TOUCH_BUTTON,
370 fl_get_string_width(FL_BOLD_STYLE,
373 strlen(_("Help"))) + mbadd,
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);
378 obj->u_ldata = (long) this;
382 // Set the menu buttons atrributes.
383 // Due to a bug in xforms we cant do this only an the group.
384 obj = menu_grp2->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 void Menus::ScreenOptions()
399 static int ow = -1, oh;
401 // this is not very nice....
402 fl_set_input(fd_form_screen->input_roman,
403 lyxrc->roman_font_name.c_str());
404 fl_set_input(fd_form_screen->input_sans,
405 lyxrc->sans_font_name.c_str());
406 fl_set_input(fd_form_screen->input_typewriter,
407 lyxrc->typewriter_font_name.c_str());
408 fl_set_input(fd_form_screen->input_font_norm,
409 lyxrc->font_norm.c_str());
411 sprintf(tmpstring,"%d", lyxrc->zoom);
412 fl_set_input(fd_form_screen->intinput_size, tmpstring);
413 if (fd_form_screen->form_screen->visible) {
414 fl_raise_form(fd_form_screen->form_screen);
416 fl_show_form(fd_form_screen->form_screen,
417 FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
418 _("Screen Options"));
420 ow = fd_form_screen->form_screen->w;
421 oh = fd_form_screen->form_screen->h;
423 fl_set_form_minsize(fd_form_screen->form_screen, ow, oh);
429 // Here comes all the menu callbacks.
432 void Menus::ShowFileMenu(FL_OBJECT *ob, long)
434 Menus *men = (Menus*) ob->u_ldata;
436 // Regarding the pseudo-menu-button:
437 // ok, ok this is a hack. It would be better to use the menus of the
438 // xforms 0.8 library. but then all popups have to be defined all the
439 // time, code rewriting would be necessary and contex-depending menus
440 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
441 // course it would be more proper (and little faster). So if anybody
442 // likes to do the cleanup, just do it. Matthias
444 // set the pseudo menu-button
445 fl_set_object_boxtype(ob, FL_UP_BOX);
446 fl_set_button(ob, 0);
447 fl_redraw_object(ob);
449 Buffer *tmpbuffer = men->_view->currentBuffer();
450 LyXFunc *tmpfunc = men->_view->getLyXFunc();
452 bool LinuxDoc = tmpbuffer->isLinuxDoc();
453 bool DocBook = tmpbuffer->isDocBook();
454 bool Literate = tmpbuffer->isLiterate();
458 int SubFileImport =fl_defpup(FL_ObjWin(ob),
461 "|Ascii Text as Lines...%x31"
462 "|Ascii Text as Paragraphs%x32"
464 fl_setpup_shortcut(SubFileImport, 30, scex(_("FIM|Ll#l#L")));
465 fl_setpup_shortcut(SubFileImport, 31, scex(_("FIM|Aa#a#A")));
466 fl_setpup_shortcut(SubFileImport, 32, scex(_("FIM|Pp#p#P")));
467 fl_setpup_shortcut(SubFileImport, 33, scex(_("FIM|Nn#n#N")));
471 // remember to make this handle linuxdoc too.
472 // and now docbook also.
473 int SubFileExport = 0;
474 if (!LinuxDoc && !DocBook)
475 SubFileExport=fl_defpup(FL_ObjWin(ob),
479 "|as PostScript...%x42"
480 "|as Ascii Text...%x43"
484 SubFileExport=fl_defpup(FL_ObjWin(ob),
486 "|as LinuxDoc...%x40"
488 "|as PostScript...%x42"
489 "|as Ascii Text...%x43"));
491 SubFileExport=fl_defpup(FL_ObjWin(ob),
495 "|as PostScript...%x42"
496 "|as Ascii Text...%x43"));
498 fl_setpup_shortcut(SubFileExport, 40, scex(_("FEX|Ll#l#L")));
499 fl_setpup_shortcut(SubFileExport, 41, scex(_("FEX|Dd#d#D")));
500 fl_setpup_shortcut(SubFileExport, 42, scex(_("FEX|Pp#p#P")));
501 fl_setpup_shortcut(SubFileExport, 43, scex(_("FEX|Tt#t#T")));
502 if (!LinuxDoc && !DocBook) {
503 fl_setpup_shortcut(SubFileExport, 44, scex(_("FEX|Hh#h#H")));
504 fl_setpup_shortcut(SubFileExport, 45, scex(_("FEX|mM#m#M")));
507 int FileMenu = fl_defpup(FL_ObjWin(ob),
509 "|New from template..."
523 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
524 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
525 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
526 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Cc#c#C")));
527 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|Ss#s#S")));
528 fl_setpup_shortcut(FileMenu, 6, scex(_("FM|Aa#a#A")));
529 fl_setpup_shortcut(FileMenu, 7, scex(_("FM|Rr#r#R")));
530 fl_setpup_shortcut(FileMenu, 8, scex(_("FM|dD#d#D")));
531 fl_setpup_shortcut(FileMenu, 9, scex(_("FM|wW#w#W")));
532 fl_setpup_shortcut(FileMenu,10, scex(_("FM|vV#v#V")));
533 fl_setpup_shortcut(FileMenu,11, scex(_("FM|Uu#u#U")));
534 fl_setpup_shortcut(FileMenu,12, scex(_("FM|Bb#b#B")));
535 fl_setpup_shortcut(FileMenu,13, scex(_("FM|Pp#p#P")));
536 fl_setpup_shortcut(FileMenu,14, scex(_("FM|Ff#f#F")));
538 // These commands are disabled when the corresponding programs
539 // are not installed. I simply grey them out, since I do not
540 // want to change their number (JMarc)
541 bool hasLaTeX = lyxrc->latex_command != "none";
543 if (!hasLaTeX || lyxrc->view_dvi_command == "none")
544 fl_setpup_mode(FileMenu, 8, FL_PUP_GREY);
546 if (!hasLaTeX || lyxrc->view_ps_command == "none")
547 fl_setpup_mode(FileMenu, 9, FL_PUP_GREY);
550 fl_setpup_mode(FileMenu, 10, FL_PUP_GREY);
551 fl_setpup_mode(FileMenu, 11, FL_PUP_GREY);
554 if (lyxrc->literate_command == "none" || ! Literate)
555 fl_setpup_mode(FileMenu, 12, FL_PUP_GREY);
557 if (!hasLaTeX || lyxrc->print_command == "none")
558 fl_setpup_mode(FileMenu, 13, FL_PUP_GREY);
560 if (!hasLaTeX || lyxrc->fax_command == "none")
561 fl_setpup_mode(FileMenu, 14, FL_PUP_GREY);
563 bool hasReLyX = lyxrc->relyx_command != "none";
565 // Disable import LaTeX and Noweb
566 fl_setpup_mode(SubFileImport, 30, FL_PUP_GREY);
567 fl_setpup_mode(SubFileImport, 33, FL_PUP_GREY);
571 // Disable export dvi and export postscript
572 fl_setpup_mode(SubFileExport, 41, FL_PUP_GREY);
573 fl_setpup_mode(SubFileExport, 42, FL_PUP_GREY);
576 if (lyxrc->html_command == "none") {
577 // Disable export HTML
578 fl_setpup_mode(SubFileExport, 44, FL_PUP_GREY);
581 // xgettext:no-c-format
582 fl_addtopup(FileMenu,_("|Import%m"), SubFileImport);
583 // xgettext:no-c-format
584 fl_addtopup(FileMenu,_("|Export%m%l"), SubFileExport);
585 // xgettext:no-c-format
586 fl_addtopup(FileMenu,_("|Exit%l"));
587 fl_setpup_shortcut(FileMenu, 15, scex(_("FM|Ii#i#I")));
588 fl_setpup_shortcut(FileMenu, 16, scex(_("FM|Ee#e#E")));
589 fl_setpup_shortcut(FileMenu, 17, scex(_("FM|xX#x#X")));
591 // make the lastfiles menu
592 LastFiles_Iter liter(*lastfiles); // :-)
595 while( ii < 10 && !(filname = liter()).empty() ) {
598 string relbuf = MakeDisplayPath(filname,30);
601 tmp += ". " + relbuf;
602 tmp2 += string("#") + tostr(ii);
603 fl_addtopup(FileMenu, tmp.c_str());
604 fl_setpup_shortcut(FileMenu, 18 - 1 + ii, tmp2.c_str());
610 men->_view->getForm()->x + ob->x,
611 men->_view->getForm()->y + ob->y + ob->h + 10);
612 int choice = fl_dopup(FileMenu);
615 // set the pseudo menu-button back
616 fl_set_object_boxtype(ob, FL_FLAT_BOX);
617 fl_redraw_object(ob);
620 case -1: case 0: // we won't do anything
622 case 1: tmpfunc->Dispatch(LFUN_MENUNEW); break;
623 case 2: tmpfunc->Dispatch(LFUN_MENUNEWTMPLT); break;
624 case 3: tmpfunc->Dispatch(LFUN_MENUOPEN); break;
625 case 4: tmpfunc->Dispatch(LFUN_CLOSEBUFFER); break;
626 case 5: tmpfunc->Dispatch(LFUN_MENUWRITE); break;
627 case 6: tmpfunc->Dispatch(LFUN_MENUWRITEAS); break;
628 case 7: tmpfunc->Dispatch(LFUN_MENURELOAD); break;
629 case 8: tmpfunc->Dispatch(LFUN_PREVIEW); break;
630 case 9: tmpfunc->Dispatch(LFUN_PREVIEWPS); break;
631 case 10: tmpfunc->Dispatch(LFUN_RUNLATEX); break;
632 case 11: tmpfunc->Dispatch(LFUN_RUNDVIPS); break;
633 case 12: tmpfunc->Dispatch(LFUN_BUILDPROG); break;
634 case 13: tmpfunc->Dispatch(LFUN_MENUPRINT); break;
635 case 14: tmpfunc->Dispatch(LFUN_FAX); break;
636 case 15: // import menu
637 case 30: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
639 case 31: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
641 case 32: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
643 case 33: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
645 case 16: // export menu
647 if (!LinuxDoc && !DocBook)
648 tmpfunc->Dispatch(LFUN_EXPORT, "latex");
650 tmpfunc->Dispatch(LFUN_EXPORT, "linuxdoc");
652 tmpfunc->Dispatch(LFUN_EXPORT, "docbook");
654 case 41: tmpfunc->Dispatch(LFUN_EXPORT, "dvi");
656 case 42: tmpfunc->Dispatch(LFUN_EXPORT, "postscript");
658 case 43: tmpfunc->Dispatch(LFUN_EXPORT, "ascii");
660 case 44: tmpfunc->Dispatch(LFUN_EXPORT, "html");
662 case 45: tmpfunc->Dispatch(LFUN_EXPORT, "custom");
664 case 17: tmpfunc->Dispatch(LFUN_QUIT); break;
666 case 18: // The first item with lastfiles.
668 men->currentView()->setBuffer(bufferlist.loadLyXFile(liter[choice-18])); // ok one more
671 fl_freepup(SubFileImport);
672 fl_freepup(SubFileExport);
673 fl_freepup(FileMenu);
679 void Menus::ShowFileMenu2(FL_OBJECT *ob, long)
681 Menus *men = (Menus*) ob->u_ldata;
683 // Regarding the pseudo-menu-button:
684 // ok, ok this is a hack. It would be better to use the menus of the
685 // xforms 0.8 library. but then all popups have to be defined all the
686 // time, code rewriting would be necessary and contex-depending menus
687 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
688 // course it would be more proper (and little faster). So if anybody
689 // likes to do the cleanup, just do it. Matthias
691 // set the pseudo menu-button
692 fl_set_object_boxtype(ob, FL_UP_BOX);
693 fl_set_button(ob, 0);
694 fl_redraw_object(ob);
696 LyXFunc *tmpfunc = men->_view->getLyXFunc();
700 int SubFileImport = fl_defpup(FL_ObjWin(ob),
703 "|Ascii Text as Lines...%x16"
704 "|Ascii Text as Paragraphs...%x17"
706 fl_setpup_shortcut(SubFileImport, 15, scex(_("FIM|Ll#l#L")));
707 fl_setpup_shortcut(SubFileImport, 16, scex(_("FIM|Aa#a#A")));
708 fl_setpup_shortcut(SubFileImport, 17, scex(_("FIM|Pp#p#P")));
709 fl_setpup_shortcut(SubFileImport, 18, scex(_("FIM|Nn#n#N")));
711 bool hasReLyX = lyxrc->relyx_command != "none";
713 // Disable import LaTeX and Noweb
714 fl_setpup_mode(SubFileImport, 15, FL_PUP_GREY);
715 fl_setpup_mode(SubFileImport, 18, FL_PUP_GREY);
718 // This can be done cleaner later.
719 int FileMenu = fl_defpup(FL_ObjWin(ob),
721 "|New from template..."
724 "|Exit%l"), SubFileImport);
725 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
726 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
727 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
728 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Ii#i#I")));
729 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|xX#x#X")));
731 // make the lastfiles menu
732 LastFiles_Iter liter(*lastfiles); // :-)
735 while( ii < 10 && !(filname = liter()).empty() ) {
738 string relbuf = MakeDisplayPath(filname,30);
741 tmp += ". " + relbuf;
742 tmp2 += string("#") + tostr(ii);
743 fl_addtopup(FileMenu, tmp.c_str());
744 fl_setpup_shortcut(FileMenu, 6 - 1 + ii, tmp2.c_str());
750 men->_view->getForm()->x + ob->x,
751 men->_view->getForm()->y + ob->y + ob->h + 10);
752 int choice = fl_dopup(FileMenu);
755 // set the pseudo menu-button back
756 fl_set_object_boxtype(ob, FL_FLAT_BOX);
757 fl_redraw_object(ob);
760 case -1: case 0: // we won't do anything
763 tmpfunc->Dispatch(LFUN_MENUNEW);
766 tmpfunc->Dispatch(LFUN_MENUNEWTMPLT);
769 tmpfunc->Dispatch(LFUN_MENUOPEN);
771 case 4: // import menu
772 case 15: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
774 case 16: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
776 case 17: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
778 case 18: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
781 tmpfunc->Dispatch(LFUN_QUIT);
785 men->currentView()->setBuffer(bufferlist.loadLyXFile(liter[choice-6]));
789 fl_freepup(SubFileImport);
790 fl_freepup(FileMenu);
796 void Menus::ShowEditMenu(FL_OBJECT *ob, long)
798 Menus *men = (Menus*) ob->u_ldata;
800 // set the pseudo menu-button
801 fl_set_object_boxtype(ob, FL_UP_BOX);
802 fl_set_button(ob, 0);
803 fl_redraw_object(ob);
805 Buffer *tmpbuffer = men->_view->currentBuffer();
806 LyXFunc *tmpfunc = men->_view->getLyXFunc();
808 // Floats & Insets submenu
809 int SubEditFloats=fl_defpup(FL_ObjWin(ob),
810 _("Floats & Insets%t"
813 "|Open All Footnotes/Margin Notes%x23"
814 "|Close All Footnotes/Margin Notes%x24"
815 "|Open All Figures/Tables%x25"
816 "|Close All Figures/Tables%x26%l"
817 "|Remove all Error Boxes%x27")
819 fl_setpup_shortcut(SubEditFloats, 21, scex(_("EMF|Oo#o#O")));
820 fl_setpup_shortcut(SubEditFloats, 22, scex(_("EMF|Mm#m#M")));
821 fl_setpup_shortcut(SubEditFloats, 23, scex(_("EMF|Aa#a#A")));
822 fl_setpup_shortcut(SubEditFloats, 24, scex(_("EMF|Cc#c#C")));
823 fl_setpup_shortcut(SubEditFloats, 25, scex(_("EMF|Ff#f#F")));
824 fl_setpup_shortcut(SubEditFloats, 26, scex(_("EMF|Tt#t#T")));
825 fl_setpup_shortcut(SubEditFloats, 27, scex(_("EMF|Rr#r#R")));
828 int SubEditTable = fl_newpup(FL_ObjWin(ob));
829 if (men->currentView()->available() &&
830 tmpbuffer->text->cursor.par->table &&
831 !tmpbuffer->isReadonly()){
833 fl_addtopup(SubEditTable, _("Table%t"));
835 if (tmpbuffer->text->cursor.par->table->
836 IsMultiColumn(tmpbuffer->text->
837 NumberOfCell(tmpbuffer->
841 fl_addtopup(SubEditTable, _("|Multicolumn%B%x44%l"));
843 fl_addtopup(SubEditTable, _("|Multicolumn%b%x44%l"));
844 fl_setpup_shortcut(SubEditTable, 44, scex(_("EMT|Mm#m#M")));
846 if (tmpbuffer->text->cursor.par->table->
847 TopLine(tmpbuffer->text->
848 NumberOfCell(tmpbuffer->
852 fl_addtopup(SubEditTable, _("|Line Top%B%x36"));
854 fl_addtopup(SubEditTable, _("|Line Top%b%x36"));
855 fl_setpup_shortcut(SubEditTable, 36, scex(_("EMT|Tt#t#T")));
857 if (tmpbuffer->text->cursor.par->table->
858 BottomLine(tmpbuffer->text->
859 NumberOfCell(tmpbuffer->
863 fl_addtopup(SubEditTable, _("|Line Bottom%B%x37"));
865 fl_addtopup(SubEditTable, _("|Line Bottom%b%x37"));
866 fl_setpup_shortcut(SubEditTable, 37, scex(_("EMT|Bb#b#B")));
868 if (tmpbuffer->text->cursor.par->table->
869 LeftLine(tmpbuffer->text->
870 NumberOfCell(tmpbuffer->
874 fl_addtopup(SubEditTable, _("|Line Left%B%x38"));
876 fl_addtopup(SubEditTable, _("|Line Left%b%x38"));
877 fl_setpup_shortcut(SubEditTable, 38, scex(_("EMT|Ll#l#L")));
879 if (tmpbuffer->text->cursor.par->table->
880 RightLine(tmpbuffer->text->
881 NumberOfCell(tmpbuffer->
885 fl_addtopup(SubEditTable, _("|Line Right%B%x39%l"));
887 fl_addtopup(SubEditTable, _("|Line Right%b%x39%l"));
888 fl_setpup_shortcut(SubEditTable, 39, scex(_("EMT|Rr#r#R")));
890 int align = tmpbuffer->text->cursor.par->
891 table->GetAlignment(tmpbuffer->text->
892 NumberOfCell(tmpbuffer->
896 if (align == LYX_ALIGN_LEFT)
897 fl_addtopup(SubEditTable, _("|Align Left%R%x40"));
899 fl_addtopup(SubEditTable, _("|Align Left%r%x40"));
900 fl_setpup_shortcut(SubEditTable, 40, scex(_("EMT|eE#e#E")));
902 if (align == LYX_ALIGN_RIGHT)
903 fl_addtopup(SubEditTable, _("|Align Right%R%x41"));
905 fl_addtopup(SubEditTable, _("|Align Right%r%x41"));
906 fl_setpup_shortcut(SubEditTable, 41, scex(_("EMT|iI#i#I")));
908 if (align == LYX_ALIGN_CENTER)
909 fl_addtopup(SubEditTable, _("|Align Center%R%x42%l"));
911 fl_addtopup(SubEditTable, _("|Align Center%r%x42%l"));
912 fl_setpup_shortcut(SubEditTable, 42, scex(_("EMT|Cc#c#C")));
914 // xgettext:no-c-format
915 fl_addtopup(SubEditTable, _("|Append Row%x32"));
916 fl_setpup_shortcut(SubEditTable, 32, scex(_("EMT|oO#o#O")));
917 // xgettext:no-c-format
918 fl_addtopup(SubEditTable, _("|Append Column%x33%l"));
919 fl_setpup_shortcut(SubEditTable, 33, scex(_("EMT|uU#u#U")));
920 // xgettext:no-c-format
921 fl_addtopup(SubEditTable, _("|Delete Row%x34"));
922 fl_setpup_shortcut(SubEditTable, 34, scex(_("EMT|wW#w#W")));
923 // xgettext:no-c-format
924 fl_addtopup(SubEditTable, _("|Delete Column%x35%l"));
925 fl_setpup_shortcut(SubEditTable, 35, scex(_("EMT|nN#n#N")));
926 // xgettext:no-c-format
927 fl_addtopup(SubEditTable, _("|Delete Table%x43"));
928 fl_setpup_shortcut(SubEditTable, 43, scex(_("EMT|Dd#d#D")));
931 fl_addtopup(SubEditTable, _("Table%t"));
932 // xgettext:no-c-format
933 fl_addtopup(SubEditTable, _("|Insert table%x31"));
934 fl_setpup_shortcut(SubEditTable, 31, scex(_("EMT|Ii#i#I")));
937 int SubVersionControl = fl_newpup(FL_ObjWin(ob));
938 fl_addtopup(SubVersionControl, _("Version Control%t"));
939 if (tmpbuffer->lyxvc.inUse()) {
940 // xgettext:no-c-format
941 fl_addtopup(SubVersionControl, _("|Register%d%x51"));
942 if (tmpbuffer->isReadonly()) {
943 // signifies that the file is not checked out
944 // xgettext:no-c-format
945 fl_addtopup(SubVersionControl, _("|Check In Changes%d%x52"));
946 // xgettext:no-c-format
947 fl_addtopup(SubVersionControl, _("|Check Out for Edit%x53"));
949 // signifies that the file is checked out
950 // xgettext:no-c-format
951 fl_addtopup(SubVersionControl, _("|Check In Changes%x52"));
952 // xgettext:no-c-format
953 fl_addtopup(SubVersionControl, _("|Check Out for Edit%d%x53"));
955 // xgettext:no-c-format
956 fl_addtopup(SubVersionControl, _("|Revert to last version%x54"));
957 // xgettext:no-c-format
958 fl_addtopup(SubVersionControl, _("|Undo last check in%x55"));
959 // xgettext:no-c-format
960 fl_addtopup(SubVersionControl, _("|Show History%x56"));
962 // xgettext:no-c-format
963 fl_addtopup(SubVersionControl, _("|Register%x51"));
965 // the shortcuts are not good.
966 fl_setpup_shortcut(SubVersionControl, 51, scex(_("EMV|Rr#r#R")));
967 fl_setpup_shortcut(SubVersionControl, 52, scex(_("EMV|Ii#i#I")));
968 fl_setpup_shortcut(SubVersionControl, 53, scex(_("EMV|Oo#o#O")));
969 fl_setpup_shortcut(SubVersionControl, 54, scex(_("EMV|lL#l#l")));
970 fl_setpup_shortcut(SubVersionControl, 55, scex(_("EMV|Uu#u#U")));
971 fl_setpup_shortcut(SubVersionControl, 56, scex(_("EMV|Hh#h#H")));
973 int EditMenu=fl_defpup(FL_ObjWin(ob),
986 "|Table of Contents...%l"
987 "|Version Control%m%l"
988 "|View LaTeX log file%l"
989 "|Paste Primary Selection as Lines"
990 "|Paste Primary Selection as Paragraphs"),
991 SubEditFloats, SubEditTable, SubVersionControl);
993 fl_setpup_shortcut(EditMenu, 1, scex(_("EM|Uu#u#U")));
994 fl_setpup_shortcut(EditMenu, 2, scex(_("EM|Rr#r#R")));
995 fl_setpup_shortcut(EditMenu, 3, scex(_("EM|Cc#c#C")));
996 fl_setpup_shortcut(EditMenu, 4, scex(_("EM|oO#o#O")));
997 fl_setpup_shortcut(EditMenu, 5, scex(_("EM|Pp#p#P")));
998 fl_setpup_shortcut(EditMenu, 6, scex(_("EM|Ff#f#F")));
999 fl_setpup_shortcut(EditMenu, 7, scex(_("EM|Ee#e#E")));
1000 fl_setpup_shortcut(EditMenu, 8, scex(_("EM|Nn#n#N")));
1001 fl_setpup_shortcut(EditMenu, 9, scex(_("EM|Ii#i#I")));
1002 fl_setpup_shortcut(EditMenu, 10, scex(_("EM|Tt#t#T")));
1003 fl_setpup_shortcut(EditMenu, 11, scex(_("EM|Ss#s#S")));
1004 fl_setpup_shortcut(EditMenu, 12, scex(_("EM|hH#h#H")));
1005 fl_setpup_shortcut(EditMenu, 13, scex(_("EM|aA#a#A")));
1006 fl_setpup_shortcut(EditMenu, 14, scex(_("EM|Vv#v#V")));
1007 fl_setpup_shortcut(EditMenu, 15, scex(_("EM|wW#w#W")));
1008 fl_setpup_shortcut(EditMenu, 16, scex(_("EM|Ll#l#L")));
1009 fl_setpup_shortcut(EditMenu, 17, scex(_("EM|gG#g#G")));
1011 // disable unavailable entries.
1012 if(tmpbuffer->undostack.Top() == 0)
1013 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
1014 if(tmpbuffer->redostack.Top() == 0)
1015 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
1016 if(lyxrc->isp_command == "none")
1017 fl_setpup_mode(EditMenu, 11, FL_PUP_GREY);
1018 if(lyxrc->chktex_command == "none")
1019 fl_setpup_mode(EditMenu, 12, FL_PUP_GREY);
1021 if (tmpbuffer->isReadonly()) {
1022 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
1023 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
1024 fl_setpup_mode(EditMenu, 3, FL_PUP_GREY);
1025 fl_setpup_mode(EditMenu, 5, FL_PUP_GREY);
1026 fl_setpup_mode(EditMenu, 16, FL_PUP_GREY);
1027 fl_setpup_mode(EditMenu, 17, FL_PUP_GREY);
1030 fl_setpup_position(men->_view->getForm()->x + ob->x,
1031 men->_view->getForm()->y + ob->y +
1033 int choice = fl_dopup(EditMenu);
1036 // set the pseudo menu-button back
1037 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1038 fl_redraw_object(ob);
1041 case 1: tmpfunc->Dispatch(LFUN_UNDO); break;
1042 case 2: tmpfunc->Dispatch(LFUN_REDO); break;
1043 case 3: tmpfunc->Dispatch(LFUN_CUT); break;
1044 case 4: tmpfunc->Dispatch(LFUN_COPY); break;
1045 case 5: tmpfunc->Dispatch(LFUN_PASTE); break;
1046 case 6: tmpfunc->Dispatch(LFUN_MENUSEARCH); break;
1047 case 7: tmpfunc->Dispatch(LFUN_GOTOERROR); break;
1048 case 8: tmpfunc->Dispatch(LFUN_GOTONOTE); break;
1049 case 9: // floats & insets
1053 case 11: tmpfunc->Dispatch(LFUN_SPELLCHECK); break;
1054 case 12: tmpfunc->Dispatch(LFUN_RUNCHKTEX); break;
1055 case 13: tmpfunc->Dispatch(LFUN_TOCVIEW); break;
1056 case 14: // version control
1058 case 15: tmpfunc->Dispatch(LFUN_LATEX_LOG); break;
1059 case 16: tmpfunc->Dispatch(LFUN_PASTESELECTION, "line"); break;
1060 case 17: tmpfunc->Dispatch(LFUN_PASTESELECTION, "paragraph"); break;
1062 // floats & insets sub-menu
1063 case 21: ToggleFloat(); break;
1064 case 22: tmpfunc->Dispatch(LFUN_MELT); break;
1065 case 23: AllFloats(1, 0); break;
1066 case 24: AllFloats(0, 0); break;
1067 case 25: AllFloats(1, 1); break;
1068 case 26: AllFloats(0, 1); break;
1069 case 27: tmpfunc->Dispatch(LFUN_REMOVEERRORS); break;
1071 case 31: tmpfunc->Dispatch(LFUN_TABLE); break;
1072 // this is really temporary. We need new function in keybind.C
1073 // These should set the minibuffer, too.
1074 case 32: case 33: case 34:
1075 case 35: case 36: case 37:
1076 case 38: case 39: case 40:
1077 case 41: case 42: case 43:
1079 if (men->currentView()->available()){
1080 men->currentView()->getScreen()->HideCursor();
1081 if (!tmpbuffer->text->selection){
1083 tmpbuffer->update(-2);
1086 TableFeatures(choice - 32);
1087 tmpbuffer->update(1);
1090 // version control sub-menu
1091 case 51: // register
1092 tmpfunc->Dispatch(LFUN_VC_REGISTER);
1094 case 52: // check in
1095 tmpfunc->Dispatch(LFUN_VC_CHECKIN);
1097 case 53: // check out
1098 tmpfunc->Dispatch(LFUN_VC_CHECKOUT);
1100 case 54: // revert to last
1101 tmpfunc->Dispatch(LFUN_VC_REVERT);
1103 case 55: // undo last
1104 tmpfunc->Dispatch(LFUN_VC_UNDO);
1106 case 56: // show history
1107 tmpfunc->Dispatch(LFUN_VC_HISTORY);
1111 fl_freepup(EditMenu);
1112 fl_freepup(SubEditFloats);
1113 fl_freepup(SubEditTable);
1114 fl_freepup(SubVersionControl);
1118 void Menus::ShowLayoutMenu(FL_OBJECT *ob, long)
1120 Menus *men = (Menus*) ob->u_ldata;
1122 if (!men->currentView()->available())
1125 // set the pseudo menu-button
1126 fl_set_object_boxtype(ob, FL_UP_BOX);
1127 fl_set_button(ob, 0);
1128 fl_redraw_object(ob);
1130 Buffer *tmpbuffer = men->_view->currentBuffer();
1131 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1133 int LayoutMenu = fl_newpup(FL_ObjWin(ob));
1134 fl_addtopup(LayoutMenu, _("Character..."
1140 "|Emphasize Style%b"
1144 "|Change Environment Depth"
1145 "|LaTeX Preamble...%l"
1146 "|Save layout as default"));
1147 fl_setpup_shortcut(LayoutMenu, 1, scex(_("LM|Cc#c#C")));
1148 fl_setpup_shortcut(LayoutMenu, 2, scex(_("LM|Pp#p#P")));
1149 fl_setpup_shortcut(LayoutMenu, 3, scex(_("LM|Dd#d#D")));
1150 fl_setpup_shortcut(LayoutMenu, 4, scex(_("LM|aA#a#A")));
1151 fl_setpup_shortcut(LayoutMenu, 5, scex(_("LM|eE#e#E")));
1152 fl_setpup_shortcut(LayoutMenu, 6, scex(_("LM|Qq#q#Q")));
1153 fl_setpup_shortcut(LayoutMenu, 7, scex(_("LM|mM#m#M")));
1154 fl_setpup_shortcut(LayoutMenu, 8, scex(_("LM|Nn#n#N")));
1155 fl_setpup_shortcut(LayoutMenu, 9, scex(_("LM|Bb#b#B")));
1156 fl_setpup_shortcut(LayoutMenu, 10, scex(_("LM|Tt#t#T")));
1157 fl_setpup_shortcut(LayoutMenu, 11, scex(_("LM|vV#v#V")));
1158 fl_setpup_shortcut(LayoutMenu, 12, scex(_("LM|Ll#l#L")));
1159 fl_setpup_shortcut(LayoutMenu, 13, scex(_("LM|Ss#s#S")));
1161 // Set values of checkboxes according to font
1162 LyXFont font = tmpbuffer->text->real_current_font;
1163 if (font.emph() == LyXFont::ON)
1164 fl_setpup_mode(LayoutMenu, 7, FL_PUP_CHECK);
1165 if (font.noun() == LyXFont::ON)
1166 fl_setpup_mode(LayoutMenu, 8, FL_PUP_CHECK);
1167 if (font.series() == LyXFont::BOLD_SERIES)
1168 fl_setpup_mode(LayoutMenu, 9, FL_PUP_CHECK);
1169 if (font.latex() == LyXFont::ON)
1170 fl_setpup_mode(LayoutMenu, 10, FL_PUP_CHECK);
1172 // Grey out unavailable entries
1173 if (!tmpbuffer->text->cursor.par->table)
1174 fl_setpup_mode(LayoutMenu, 5, FL_PUP_GREY);
1176 if (tmpbuffer->isReadonly()) {
1177 fl_setpup_mode(LayoutMenu, 1, FL_PUP_GREY);
1178 fl_setpup_mode(LayoutMenu, 6, FL_PUP_GREY);
1179 fl_setpup_mode(LayoutMenu, 11, FL_PUP_GREY);
1183 men->_view->getForm()->x + ob->x,
1184 men->_view->getForm()->y + ob->y + ob->h + 10);
1185 int choice = fl_dopup(LayoutMenu);
1188 // set the pseudo menu-button back
1189 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1190 fl_redraw_object(ob);
1193 case 1: tmpfunc->Dispatch(LFUN_LAYOUT_CHARACTER); break;
1194 case 2: tmpfunc->Dispatch(LFUN_LAYOUT_PARAGRAPH); break;
1195 case 3: tmpfunc->Dispatch(LFUN_LAYOUT_DOCUMENT); break;
1196 case 4: tmpfunc->Dispatch(LFUN_LAYOUT_PAPER); break;
1197 case 5: tmpfunc->Dispatch(LFUN_LAYOUT_TABLE, "true"); break;
1198 case 6: tmpfunc->Dispatch(LFUN_LAYOUT_QUOTES); break;
1199 case 7: tmpfunc->Dispatch(LFUN_EMPH); break;
1200 case 8: tmpfunc->Dispatch(LFUN_NOUN); break;
1201 case 9: tmpfunc->Dispatch(LFUN_BOLD); break;
1202 case 10: tmpfunc->Dispatch(LFUN_TEX); break;
1203 case 11: tmpfunc->Dispatch(LFUN_DEPTH_PLUS); break;
1204 case 12: tmpfunc->Dispatch(LFUN_LAYOUT_PREAMBLE); break;
1205 case 13: tmpfunc->Dispatch(LFUN_LAYOUT_SAVE_DEFAULT); break;//MenuLayoutSave(); break;
1207 fl_freepup(LayoutMenu);
1211 void Menus::ShowInsertMenu(FL_OBJECT *ob, long /*data*/)
1213 Menus *men = (Menus*) ob->u_ldata;
1215 // set the pseudo menu-button
1216 fl_set_object_boxtype(ob, FL_UP_BOX);
1217 fl_set_button(ob, 0);
1218 fl_redraw_object(ob);
1220 Buffer *tmpbuffer = men->_view->currentBuffer();
1221 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1224 // Is textclass LinuxDoc?
1225 bool LinuxDoc = tmpbuffer->isLinuxDoc();
1228 int SubInsertAscii = fl_defpup(FL_ObjWin(ob),
1229 _("Import ASCII file%t"
1231 "|As Paragraphs%x42"));
1232 fl_setpup_shortcut(SubInsertAscii, 41, scex(_("IMA|Ll#l#L")));
1233 fl_setpup_shortcut(SubInsertAscii, 42, scex(_("IMA|Pp#p#P")));
1235 int SubInsertTableList=fl_defpup(FL_ObjWin(ob),
1237 "|Table of Contents%x21"
1238 "|List of Figures%x22"
1239 "|List of Tables%x23"
1240 "|List of Algorithms%x24"
1242 "|BibTeX Reference%x26"));
1243 fl_setpup_shortcut(SubInsertTableList, 21, scex(_("IMT|Cc#c#C")));
1244 fl_setpup_shortcut(SubInsertTableList, 22, scex(_("IMT|Ff#f#F")));
1245 fl_setpup_shortcut(SubInsertTableList, 23, scex(_("IMT|Tt#t#T")));
1246 fl_setpup_shortcut(SubInsertTableList, 24, scex(_("IMT|Aa#a#A")));
1247 fl_setpup_shortcut(SubInsertTableList, 25, scex(_("IMT|Ii#i#I")));
1248 fl_setpup_shortcut(SubInsertTableList, 26, scex(_("IMT|Bb#b#B")));
1250 int SubInsertFloatList;
1251 //if (men->_view->currentBuffer()->params.columns == 1) {
1252 // SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
1254 // "|Figure Float%x71"
1255 // "|Table Float%l%x72"
1256 // "|Algorithm Float%x73"));
1259 SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
1263 "|Wide Figure Float%x73"
1264 "|Wide Table Float%l%x74"
1265 "|Algorithm Float%x75"));
1267 fl_setpup_shortcut(SubInsertFloatList, 71, scex(_("IMF|gG#g#G")));
1268 fl_setpup_shortcut(SubInsertFloatList, 72, scex(_("IMF|Tt#t#T")));
1269 fl_setpup_shortcut(SubInsertFloatList, 73, scex(_("IMF|Ww#w#W")));
1270 fl_setpup_shortcut(SubInsertFloatList, 74, scex(_("IMF|iI#i#I")));
1271 fl_setpup_shortcut(SubInsertFloatList, 75, scex(_("IMF|Aa#a#A")));
1273 int SubInsertSpecial=fl_defpup(FL_ObjWin(ob),
1274 _("Special Character%t"
1276 "|Hyphenation Point%x32"
1277 "|Protected Blank%x33"
1279 "|Ellipsis (...)%x35"
1280 "|End of sentence period%x36"
1281 "|Ordinary Quote (\")%x37"
1282 "|Menu Separator %x38"));
1284 fl_setpup_shortcut(SubInsertSpecial, 31, scex(_("IMS|Hh#h#H")));
1285 fl_setpup_shortcut(SubInsertSpecial, 32, scex(_("IMS|Pp#p#P")));
1286 fl_setpup_shortcut(SubInsertSpecial, 33, scex(_("IMS|Bb#b#B")));
1287 fl_setpup_shortcut(SubInsertSpecial, 34, scex(_("IMS|Ll#l#L")));
1288 fl_setpup_shortcut(SubInsertSpecial, 35, scex(_("IMS|iI#i#I")));
1289 fl_setpup_shortcut(SubInsertSpecial, 36, scex(_("IMS|Ee#e#E")));
1290 fl_setpup_shortcut(SubInsertSpecial, 37, scex(_("IMS|Qq#q#Q")));
1291 fl_setpup_shortcut(SubInsertSpecial, 38, scex(_("IMS|Mm#m#M")));
1293 int InsertMenu = fl_defpup(FL_ObjWin(ob),
1297 "|Import ASCII File%m"
1298 "|Insert LyX File...%l"
1303 "|Special Character%m%l"
1306 "|Cross-Reference..."
1307 "|Citation Reference..."
1309 "|Index entry of last word"),
1315 fl_setpup_shortcut(InsertMenu, 1, scex(_("IM|gG#g#G")));
1316 fl_setpup_shortcut(InsertMenu, 2, scex(_("IM|bB#b#B")));
1317 fl_setpup_shortcut(InsertMenu, 3, scex(_("IM|cC#c#C")));
1318 fl_setpup_shortcut(InsertMenu, 4, scex(_("IM|Aa#a#A")));
1319 fl_setpup_shortcut(InsertMenu, 5, scex(_("IM|Xx#x#X")));
1320 fl_setpup_shortcut(InsertMenu, 6, scex(_("IM|Ff#f#F")));
1321 fl_setpup_shortcut(InsertMenu, 7, scex(_("IM|Mm#m#M")));
1322 fl_setpup_shortcut(InsertMenu, 8, scex(_("IM|oO#o#O")));
1323 fl_setpup_shortcut(InsertMenu, 9, scex(_("IM|Tt#t#T")));
1324 fl_setpup_shortcut(InsertMenu, 10, scex(_("IM|Ss#s#S")));
1325 fl_setpup_shortcut(InsertMenu, 11, scex(_("IM|Nn#n#N")));
1326 fl_setpup_shortcut(InsertMenu, 12, scex(_("IM|Ll#l#L")));
1327 fl_setpup_shortcut(InsertMenu, 13, scex(_("IM|rR#r#R")));
1328 fl_setpup_shortcut(InsertMenu, 14, scex(_("IM|iI#i#I")));
1329 fl_setpup_shortcut(InsertMenu, 15, scex(_("IM|dD#d#D")));
1330 fl_setpup_shortcut(InsertMenu, 16, scex(_("IM|wW#w#W")));
1334 /* for linuxdoc sgml */
1336 fl_addtopup(InsertMenu, _("|URL..."));
1337 fl_setpup_shortcut(InsertMenu, 17, scex(_("IM|Uu#u#U")));
1341 if (tmpbuffer->isReadonly()) {
1342 for (int ii = 1; ii <= 16; ii++)
1343 fl_setpup_mode(InsertMenu, ii, FL_PUP_GREY);
1347 fl_setpup_mode(InsertMenu, 17, FL_PUP_GREY);
1354 men->_view->getForm()->x + ob->x,
1355 men->_view->getForm()->y + ob->y + ob->h + 10);
1357 int choice = fl_dopup(InsertMenu);
1360 // set the pseudo menu-button back
1361 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1362 fl_redraw_object(ob);
1364 if (men->currentView()->available()){
1365 men->currentView()->getScreen()->HideCursor();
1367 case 1: tmpfunc->Dispatch(LFUN_FIGURE); break;
1368 case 2: tmpfunc->Dispatch(LFUN_TABLE); break;
1369 case 3: tmpfunc->Dispatch(LFUN_CHILDINSERT); break;
1370 case 4: // Insert ASCII file submenu
1372 case 5: tmpfunc->Dispatch(LFUN_FILE_INSERT); break;
1373 case 41: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "line"); break;
1374 case 42: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "paragraph"); break;
1378 case 6: tmpfunc->Dispatch(LFUN_FOOTMELT); break
1380 case 7: tmpfunc->Dispatch(LFUN_MARGINMELT); break;
1382 case 8: // Float sub-menu
1384 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "figure");
1387 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "table");
1390 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-fig");
1393 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-tab");
1396 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "algorithm");
1399 case 9: // Table/List submenu
1401 case 21: tmpfunc->Dispatch(LFUN_TOC_INSERT); break;
1402 case 22: tmpfunc->Dispatch(LFUN_LOF_INSERT); break;
1403 case 23: tmpfunc->Dispatch(LFUN_LOT_INSERT); break;
1404 case 24: tmpfunc->Dispatch(LFUN_LOA_INSERT); break;
1405 case 25: tmpfunc->Dispatch(LFUN_INDEX_PRINT); break;
1406 case 26: tmpfunc->Dispatch(LFUN_INSERT_BIBTEX); break;
1408 case 10: // Special Character submenu
1410 case 31: tmpfunc->Dispatch(LFUN_HFILL); break;
1411 case 32: tmpfunc->Dispatch(LFUN_HYPHENATION); break;
1412 case 33: tmpfunc->Dispatch(LFUN_PROTECTEDSPACE); break;
1413 case 34: tmpfunc->Dispatch(LFUN_BREAKLINE); break;
1414 case 35: tmpfunc->Dispatch(LFUN_LDOTS); break;
1415 case 36: tmpfunc->Dispatch(LFUN_END_OF_SENTENCE); break;
1416 case 37: tmpfunc->Dispatch(LFUN_QUOTE); break;
1417 case 38: tmpfunc->Dispatch(LFUN_MENU_SEPARATOR); break;
1419 case 11: tmpfunc->Dispatch(LFUN_INSERT_NOTE); break;
1420 case 12: tmpfunc->Dispatch(LFUN_INSERT_LABEL); break;
1421 case 13: tmpfunc->Dispatch(LFUN_INSERT_REF); break;
1422 case 14: tmpfunc->Dispatch(LFUN_INSERT_CITATION); break;
1423 case 15: tmpfunc->Dispatch(LFUN_INDEX_INSERT); break;
1424 case 16: tmpfunc->Dispatch(LFUN_INDEX_INSERT_LAST); break;
1425 case 17: tmpfunc->Dispatch(LFUN_URL); break;
1428 fl_freepup(InsertMenu);
1429 fl_freepup(SubInsertAscii);
1430 fl_freepup(SubInsertTableList);
1431 fl_freepup(SubInsertFloatList);
1432 fl_freepup(SubInsertSpecial);
1436 void Menus::ShowMathMenu(FL_OBJECT *ob, long)
1438 extern void math_insert_symbol(char const* s);
1440 Menus *men = (Menus*) ob->u_ldata;
1442 // set the pseudo menu-button
1443 fl_set_object_boxtype(ob, FL_UP_BOX);
1444 fl_set_button(ob, 0);
1445 fl_redraw_object(ob);
1447 Buffer *tmpbuffer = men->_view->currentBuffer();
1448 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1450 int MathMenu = fl_defpup(FL_ObjWin(ob),
1461 fl_setpup_shortcut(MathMenu, 1, scex(_("MM|Ff#f#F")));
1462 fl_setpup_shortcut(MathMenu, 2, scex(_("MM|Ss#s#S")));
1463 fl_setpup_shortcut(MathMenu, 3, scex(_("MM|Ee#e#E")));
1464 fl_setpup_shortcut(MathMenu, 4, scex(_("MM|xX#x#X")));
1465 fl_setpup_shortcut(MathMenu, 5, scex(_("MM|uU#u#U")));
1466 fl_setpup_shortcut(MathMenu, 6, scex(_("MM|Ii#i#I")));
1467 fl_setpup_shortcut(MathMenu, 7, scex(_("MM|Mm#m#M")));
1468 fl_setpup_shortcut(MathMenu, 8, scex(_("MM|Dd#d#D")));
1469 fl_setpup_shortcut(MathMenu, 9, scex(_("MM|Pp#p#P")));
1471 if (tmpbuffer->isReadonly())
1472 for (int ii = 1; ii <= 9; ii++)
1473 fl_setpup_mode(MathMenu, ii, FL_PUP_GREY);
1477 men->_view->getForm()->x + ob->x,
1478 men->_view->getForm()->y + ob->y + ob->h + 10);
1479 int choice = fl_dopup(MathMenu);
1482 // set the pseudo menu-button back
1483 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1484 fl_redraw_object(ob);
1486 if (men->currentView()->available()) {
1489 tmpfunc->Dispatch(LFUN_INSERT_MATH, "frac");
1492 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sqrt");
1494 case 3: /* Exponent */
1495 tmpfunc->Dispatch(LFUN_INSERT_MATH, "^");
1498 tmpfunc->Dispatch(LFUN_INSERT_MATH, "_");
1501 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sum");
1504 tmpfunc->Dispatch(LFUN_INSERT_MATH, "int");
1507 tmpfunc->Dispatch(LFUN_MATH_MODE);
1510 tmpfunc->Dispatch(LFUN_MATH_DISPLAY);
1513 show_symbols_form(tmpfunc);
1516 tmpbuffer->update(0);
1518 fl_freepup(MathMenu);
1522 void Menus::ShowOptionsMenu(FL_OBJECT *ob, long)
1524 Menus *men = (Menus*) ob->u_ldata;
1526 // set the pseudo menu-button
1527 fl_set_object_boxtype(ob, FL_UP_BOX);
1528 fl_set_button(ob, 0);
1529 fl_redraw_object(ob);
1531 //Buffer *tmpbuffer = men->_view->currentBuffer();
1532 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1534 int OptionsMenu = fl_defpup(FL_ObjWin(ob),
1536 "|Spellchecker Options..."
1541 fl_setpup_shortcut(OptionsMenu, 1, scex(_("OM|Ff#f#F")));
1542 fl_setpup_shortcut(OptionsMenu, 2, scex(_("OM|Ss#s#S")));
1543 fl_setpup_shortcut(OptionsMenu, 3, scex(_("OM|Kk#k#K")));
1544 fl_setpup_shortcut(OptionsMenu, 4, scex(_("OM|Ll#l#L")));
1545 fl_setpup_shortcut(OptionsMenu, 5, scex(_("OM|Rr#r#R")));
1547 if(lyxrc->isp_command == "none")
1548 fl_setpup_mode(OptionsMenu, 2, FL_PUP_GREY);
1551 men->_view->getForm()->x + ob->x,
1552 men->_view->getForm()->y + ob->y + ob->h + 10);
1553 int choice = fl_dopup(OptionsMenu);
1556 // set the pseudo menu-button back
1557 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1558 fl_redraw_object(ob);
1560 case 1: men->ScreenOptions(); break;
1561 case 2: SpellCheckerOptions(); break;
1562 case 3: men->_view->getIntl()->MenuKeymap(); break;
1563 case 4: LaTeXOptions(); break;
1564 case 5: tmpfunc->Dispatch(LFUN_RECONFIGURE); break;
1567 fl_freepup(OptionsMenu);
1571 void Menus::ShowBufferMenu(FL_OBJECT *ob, long)
1573 Menus *men = (Menus*) ob->u_ldata;
1575 // set the pseudo menu-button
1576 fl_set_object_boxtype(ob, FL_UP_BOX);
1577 fl_set_button(ob, 0);
1578 fl_redraw_object(ob);
1580 int BufferMenu = fl_newpup(FL_ObjWin(ob));
1581 bufferlist.makePup(BufferMenu);
1584 men->_view->getForm()->x + ob->x,
1585 men->_view->getForm()->y + ob->y + ob->h + 10);
1586 int choice = fl_dopup(BufferMenu);
1589 // set the pseudo menu-button back
1590 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1591 fl_redraw_object(ob);
1592 if (choice > 0) men->handleBufferMenu(choice);
1594 fl_freepup(BufferMenu);
1599 char const *doc_files [] = {"Intro", "Tutorial",
1600 "UserGuide", "Extended",
1601 "Customization", "Reference",
1602 "BUGS", "LaTeXConfig"};
1604 void Menus::ShowHelpMenu(FL_OBJECT *ob, long)
1606 Menus *men = (Menus*) ob->u_ldata;
1608 // set the pseudo menu-button
1609 fl_set_object_boxtype(ob, FL_UP_BOX);
1610 fl_set_button(ob, 0);
1611 fl_redraw_object(ob);
1613 int HelpMenu = fl_defpup(FL_ObjWin(ob),
1617 "|Extended Features"
1621 "|LaTeX Configuration%l"
1622 "|Copyright and Warranty..."
1626 fl_setpup_shortcut(HelpMenu, 1, scex(_("HM|Ii#I#i")));
1627 fl_setpup_shortcut(HelpMenu, 2, scex(_("HM|Tt#T#t")));
1628 fl_setpup_shortcut(HelpMenu, 3, scex(_("HM|Uu#U#u")));
1629 fl_setpup_shortcut(HelpMenu, 4, scex(_("HM|xX#x#X")));
1630 fl_setpup_shortcut(HelpMenu, 5, scex(_("HM|Cc#C#c")));
1631 fl_setpup_shortcut(HelpMenu, 6, scex(_("HM|Rr#R#r")));
1632 fl_setpup_shortcut(HelpMenu, 7, scex(_("HM|Kk#K#k")));
1633 fl_setpup_shortcut(HelpMenu, 8, scex(_("HM|Ll#L#l")));
1634 fl_setpup_shortcut(HelpMenu, 9, scex(_("HM|oO#o#O")));
1635 fl_setpup_shortcut(HelpMenu, 10, scex(_("HM|eE#e#E")));
1636 fl_setpup_shortcut(HelpMenu, 11, scex(_("HM|Vv#v#V")));
1639 men->_view->getForm()->x + ob->x,
1640 men->_view->getForm()->y + ob->y + ob->h + 10);
1641 int choice = fl_dopup(HelpMenu);
1644 // set the pseudo menu-button back
1645 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1646 fl_redraw_object(ob);
1649 case 1: case 2: case 3: case 4: case 5:
1650 case 6: case 7: case 8:
1652 men->MenuDocu(doc_files[choice - 1]);
1655 case 9: ShowCopyright(); break;
1656 case 10: ShowCredits(); break;
1659 fl_show_message((string(_("LyX Version ")) + LYX_VERSION
1660 + _(" of ") + LYX_RELEASE).c_str(),
1661 (_("Library directory: ")
1662 + MakeDisplayPath(system_lyxdir)).c_str(),
1663 (_("User directory: ")
1664 + MakeDisplayPath(user_lyxdir)).c_str());
1668 fl_freepup(HelpMenu);
1672 void Menus::MenuDocu(string const &docname)
1674 string fname = i18nLibFileSearch("doc", docname, "lyx");
1675 _view->getMiniBuffer()->Set(_("Opening help file"),
1676 MakeDisplayPath(fname),"...");
1677 currentView()->setBuffer(bufferlist.loadLyXFile(fname,false));
1679 if (docname == "Reference")
1680 _view->getLyXFunc()->Dispatch(LFUN_TOCVIEW);
1684 void Menus::handleBufferMenu(int choice)
1686 currentView()->setBuffer(bufferlist.getBuffer(choice));