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 Menus::Menus(LyXView *view,int air)
71 // deactivate the menu accelerators
72 fl_set_object_shortcut(menu_file, "", 1);
73 fl_set_object_shortcut(menu_file2, "", 1);
74 fl_set_object_shortcut(menu_edit, "", 1);
75 fl_set_object_shortcut(menu_layout, "", 1);
76 fl_set_object_shortcut(menu_math, "", 1);
77 fl_set_object_shortcut(menu_insert, "", 1);
78 fl_set_object_shortcut(menu_options, "", 1);
79 fl_set_object_shortcut(menu_options2, "", 1);
80 fl_set_object_shortcut(menu_buffer, "", 1);
81 fl_set_object_shortcut(menu_help, "", 1);
82 fl_set_object_shortcut(menu_help2, "", 1);
87 inline BufferView *Menus::currentView()
89 return _view->currentView();
93 void Menus::showMenus()
95 fl_hide_object(menu_grp2);
96 fl_show_object(menu_grp1);
100 void Menus::hideMenus()
102 fl_hide_object(menu_grp1);
103 fl_show_object(menu_grp2);
107 void Menus::openByName(string const &menuName)
108 /* Opens the visible menu of given name, or simply does nothing
109 when the name is not known. NOTE THE EXTREMELY STUPID
110 IMPLEMENTATION! :-) There are probably hundred ways to do
111 this better, for instance, by scanning the menu objects and
112 testing for the given name. I leave this as an exercise for an
113 experienced GG (GUI Guy/Girl). RVDK_PATCH_5. */
115 if (menu_file->visible) {
116 if (menuName == _("File")) ShowFileMenu(menu_file, 0);
117 else if (menuName == _("Edit")) ShowEditMenu(menu_edit, 0);
118 else if (menuName == _("Layout")) ShowLayoutMenu(menu_layout, 0);
119 else if (menuName == _("Insert")) ShowInsertMenu(menu_insert, 0);
120 else if (menuName == _("Math")) ShowMathMenu(menu_math, 0);
121 else if (menuName == _("Options")) ShowOptionsMenu(menu_options, 0);
122 else if (menuName == _("Documents")) ShowBufferMenu(menu_buffer, 0);
123 else if (menuName == _("Help")) ShowHelpMenu(menu_help, 0);
124 else lyxerr << "The menu '" << menuName
125 << "' is not available." << endl;
127 if (menuName == _("File")) ShowFileMenu2(menu_file2, 0);
128 else if (menuName == _("Options")) ShowOptionsMenu(menu_options2, 0);
129 else if (menuName == _("Help")) ShowHelpMenu(menu_help2, 0);
130 else lyxerr << "The menu '" << menuName
131 << "' is not available." << endl;
136 void Menus::create_menus(int air)
138 FL_FORM *form = _view->getForm();
140 // Here I'd really like to see code like:
144 const int MENU_LABEL_SIZE = FL_NORMAL_SIZE;
145 const int mheight = 30;
146 const int mbheight= 22;
147 // where to place the menubar?
148 const int yloc = (mheight - mbheight)/2; //air + bw;
149 const int mbadd = 20; // menu button add (to width)
153 obj = fl_add_frame(FL_UP_FRAME,0,0,form->w,mheight,"");
154 fl_set_object_resize(obj, FL_RESIZE_ALL);
155 fl_set_object_gravity(obj, NorthWestGravity, NorthEastGravity);
157 menu_grp1 = fl_bgn_group();
161 fl_add_button(FL_TOUCH_BUTTON,
163 fl_get_string_width(FL_BOLD_STYLE,
166 strlen(_("File"))) + mbadd,
168 moffset += obj->w + air;
169 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
170 fl_set_object_callback(obj,ShowFileMenu, 0);
171 obj->u_ldata = (long)this;
175 fl_add_button(FL_TOUCH_BUTTON,
177 fl_get_string_width(FL_BOLD_STYLE,
180 strlen(_("Edit"))) + mbadd,
182 moffset += obj->w + air;
183 fl_set_object_shortcut(obj, scex(_("MB|#E")),1);
184 fl_set_object_callback(obj,ShowEditMenu,0);
185 obj->u_ldata = (long) this;
187 // Layout menu button
189 fl_add_button(FL_TOUCH_BUTTON,
191 fl_get_string_width(FL_BOLD_STYLE,
194 strlen(_("Layout"))) + mbadd,
195 mbheight,_("Layout"));
196 moffset += obj->w + air;
197 fl_set_object_shortcut(obj, scex(_("MB|#L")), 1);
198 fl_set_object_callback(obj,ShowLayoutMenu,0);
199 obj->u_ldata = (long) this;
201 // Insert menu button button
203 fl_add_button(FL_TOUCH_BUTTON,
205 fl_get_string_width(FL_BOLD_STYLE,
208 strlen(_("Insert"))) + mbadd,
209 mbheight,_("Insert"));
210 moffset += obj->w + air;
211 fl_set_object_shortcut(obj, scex(_("MB|#I")), 1);
212 fl_set_object_callback(obj,ShowInsertMenu,0);
213 obj->u_ldata = (long) this;
217 fl_add_button(FL_TOUCH_BUTTON,
219 fl_get_string_width(FL_BOLD_STYLE,
222 strlen(_("Math"))) + mbadd,
224 moffset += obj->w + air;
225 fl_set_object_shortcut(obj, scex(_("MB|#M")), 1);
226 fl_set_object_callback(obj,ShowMathMenu,0);
227 obj->u_ldata = (long) this;
229 // Options menu button
231 fl_add_button(FL_TOUCH_BUTTON,
233 fl_get_string_width(FL_BOLD_STYLE,
236 strlen(_("Options"))) + mbadd,
237 mbheight,_("Options"));
238 moffset += obj->w + air;
239 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
240 fl_set_object_callback(obj,ShowOptionsMenu, 0);
241 obj->u_ldata = (long) this;
243 // Documents menu button
245 fl_add_button(FL_TOUCH_BUTTON,
247 fl_get_string_width(FL_BOLD_STYLE,
250 strlen(_("Documents"))) + mbadd,
251 mbheight,_("Documents"));
252 moffset += obj->w + air;
253 fl_set_object_shortcut(obj, scex(_("MB|#D")), 1);
254 fl_set_object_callback(obj,ShowBufferMenu,0);
255 obj->u_ldata = (long) this;
259 fl_add_button(FL_TOUCH_BUTTON,
261 fl_get_string_width(FL_BOLD_STYLE,
264 strlen(_("Help"))) + mbadd,
266 moffset += obj->w + air;
267 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
268 fl_set_object_callback(obj,ShowHelpMenu,0);
269 obj->u_ldata = (long) this;
273 // Set the menu buttons atrributes.
274 // Due to a bug in xforms we cant do this only an the group.
275 obj = menu_grp1->next;
277 fl_set_object_boxtype(obj, FL_FLAT_BOX);
278 fl_set_object_color(obj,FL_MCOL, FL_MCOL);
279 fl_set_object_lsize(obj,MENU_LABEL_SIZE);
280 fl_set_object_lstyle(obj,FL_BOLD_STYLE);
281 fl_set_object_resize(obj, FL_RESIZE_ALL);
282 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
284 } while (obj != 0 && obj->objclass != FL_END_GROUP);
288 menu_grp2 = fl_bgn_group();
292 fl_add_button(FL_TOUCH_BUTTON,
294 fl_get_string_width(FL_BOLD_STYLE,
297 strlen(_("File"))) + mbadd,
299 moffset += obj->w + air;
300 fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
301 fl_set_object_callback(obj,ShowFileMenu2, 0);
302 obj->u_ldata = (long)this;
304 // Options menu button
305 menu_options2 = obj =
306 fl_add_button(FL_TOUCH_BUTTON,
308 fl_get_string_width(FL_BOLD_STYLE,
311 strlen(_("Options"))) +mbadd,
312 mbheight,_("Options"));
313 moffset += obj->w + air;
314 fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
315 fl_set_object_callback(obj,ShowOptionsMenu, 0);
316 obj->u_ldata = (long) this;
320 fl_add_button(FL_TOUCH_BUTTON,
322 fl_get_string_width(FL_BOLD_STYLE,
325 strlen(_("Help"))) + mbadd,
327 moffset += obj->w + air;
328 fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
329 fl_set_object_callback(obj,ShowHelpMenu,0);
330 obj->u_ldata = (long) this;
334 // Set the menu buttons atrributes.
335 // Due to a bug in xforms we cant do this only an the group.
336 obj = menu_grp2->next;
338 fl_set_object_boxtype(obj, FL_FLAT_BOX);
339 fl_set_object_color(obj,FL_MCOL, FL_MCOL);
340 fl_set_object_lsize(obj,MENU_LABEL_SIZE);
341 fl_set_object_lstyle(obj,FL_BOLD_STYLE);
342 fl_set_object_resize(obj, FL_RESIZE_ALL);
343 fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
345 } while (obj != 0 && obj->objclass != FL_END_GROUP);
349 void Menus::ScreenOptions()
351 // this is not very nice....
352 fl_set_input(fd_form_screen->input_roman,
353 lyxrc->roman_font_name.c_str());
354 fl_set_input(fd_form_screen->input_sans,
355 lyxrc->sans_font_name.c_str());
356 fl_set_input(fd_form_screen->input_typewriter,
357 lyxrc->typewriter_font_name.c_str());
358 fl_set_input(fd_form_screen->input_font_norm,
359 lyxrc->font_norm.c_str());
361 sprintf(tmpstring,"%d", lyxrc->zoom);
362 fl_set_input(fd_form_screen->intinput_size, tmpstring);
363 if (fd_form_screen->form_screen->visible) {
364 fl_raise_form(fd_form_screen->form_screen);
366 fl_show_form(fd_form_screen->form_screen,
367 FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
368 _("Screen Options"));
374 // Here comes all the menu callbacks.
377 void Menus::ShowFileMenu(FL_OBJECT *ob, long)
379 Menus *men = (Menus*) ob->u_ldata;
381 // Regarding the pseudo-menu-button:
382 // ok, ok this is a hack. It would be better to use the menus of the
383 // xforms 0.8 library. but then all popups have to be defined all the
384 // time, code rewriting would be necessary and contex-depending menus
385 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
386 // course it would be more proper (and little faster). So if anybody
387 // likes to do the cleanup, just do it. Matthias
389 // set the pseudo menu-button
390 fl_set_object_boxtype(ob, FL_UP_BOX);
391 fl_set_button(ob, 0);
392 fl_redraw_object(ob);
394 Buffer *tmpbuffer = men->_view->currentBuffer();
395 LyXFunc *tmpfunc = men->_view->getLyXFunc();
397 bool LinuxDoc = tmpbuffer->isLinuxDoc();
398 bool DocBook = tmpbuffer->isDocBook();
399 bool Literate = tmpbuffer->isLiterate();
403 int SubFileImport =fl_defpup(FL_ObjWin(ob),
406 "|Ascii Text as Lines...%x31"
407 "|Ascii Text as Paragraphs%x32"
409 fl_setpup_shortcut(SubFileImport, 30, scex(_("FIM|Ll#l#L")));
410 fl_setpup_shortcut(SubFileImport, 31, scex(_("FIM|Aa#a#A")));
411 fl_setpup_shortcut(SubFileImport, 32, scex(_("FIM|Pp#p#P")));
412 fl_setpup_shortcut(SubFileImport, 33, scex(_("FIM|Nn#n#N")));
416 // remember to make this handle linuxdoc too.
417 // and now docbook also.
418 int SubFileExport = 0;
419 if (!LinuxDoc && !DocBook)
420 SubFileExport=fl_defpup(FL_ObjWin(ob),
424 "|as PostScript...%x42"
425 "|as Ascii Text...%x43"
429 SubFileExport=fl_defpup(FL_ObjWin(ob),
431 "|as LinuxDoc...%x40"
433 "|as PostScript...%x42"
434 "|as Ascii Text...%x43"));
436 SubFileExport=fl_defpup(FL_ObjWin(ob),
440 "|as PostScript...%x42"
441 "|as Ascii Text...%x43"));
443 fl_setpup_shortcut(SubFileExport, 40, scex(_("FEX|Ll#l#L")));
444 fl_setpup_shortcut(SubFileExport, 41, scex(_("FEX|Dd#d#D")));
445 fl_setpup_shortcut(SubFileExport, 42, scex(_("FEX|Pp#p#P")));
446 fl_setpup_shortcut(SubFileExport, 43, scex(_("FEX|Tt#t#T")));
447 if (!LinuxDoc && !DocBook) {
448 fl_setpup_shortcut(SubFileExport, 44, scex(_("FEX|Hh#h#H")));
449 fl_setpup_shortcut(SubFileExport, 45, scex(_("FEX|mM#m#M")));
452 int FileMenu = fl_defpup(FL_ObjWin(ob),
454 "|New from template..."
468 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
469 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
470 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
471 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Cc#c#C")));
472 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|Ss#s#S")));
473 fl_setpup_shortcut(FileMenu, 6, scex(_("FM|Aa#a#A")));
474 fl_setpup_shortcut(FileMenu, 7, scex(_("FM|Rr#r#R")));
475 fl_setpup_shortcut(FileMenu, 8, scex(_("FM|dD#d#D")));
476 fl_setpup_shortcut(FileMenu, 9, scex(_("FM|wW#w#W")));
477 fl_setpup_shortcut(FileMenu,10, scex(_("FM|vV#v#V")));
478 fl_setpup_shortcut(FileMenu,11, scex(_("FM|Uu#u#U")));
479 fl_setpup_shortcut(FileMenu,12, scex(_("FM|Bb#b#B")));
480 fl_setpup_shortcut(FileMenu,13, scex(_("FM|Pp#p#P")));
481 fl_setpup_shortcut(FileMenu,14, scex(_("FM|Ff#f#F")));
483 // These commands are disabled when the corresponding programs
484 // are not installed. I simply grey them out, since I do not
485 // want to change their number (JMarc)
486 bool hasLaTeX = lyxrc->latex_command != "none";
488 if (!hasLaTeX || lyxrc->view_dvi_command == "none")
489 fl_setpup_mode(FileMenu, 8, FL_PUP_GREY);
491 if (!hasLaTeX || lyxrc->view_ps_command == "none")
492 fl_setpup_mode(FileMenu, 9, FL_PUP_GREY);
495 fl_setpup_mode(FileMenu, 10, FL_PUP_GREY);
496 fl_setpup_mode(FileMenu, 11, FL_PUP_GREY);
499 if (lyxrc->literate_command == "none" || ! Literate)
500 fl_setpup_mode(FileMenu, 12, FL_PUP_GREY);
502 if (!hasLaTeX || lyxrc->print_command == "none")
503 fl_setpup_mode(FileMenu, 13, FL_PUP_GREY);
505 if (!hasLaTeX || lyxrc->fax_command == "none")
506 fl_setpup_mode(FileMenu, 14, FL_PUP_GREY);
508 bool hasReLyX = lyxrc->relyx_command != "none";
510 // Disable import LaTeX and Noweb
511 fl_setpup_mode(SubFileImport, 30, FL_PUP_GREY);
512 fl_setpup_mode(SubFileImport, 33, FL_PUP_GREY);
516 // Disable export dvi and export postscript
517 fl_setpup_mode(SubFileExport, 41, FL_PUP_GREY);
518 fl_setpup_mode(SubFileExport, 42, FL_PUP_GREY);
520 // xgettext:no-c-format
521 fl_addtopup(FileMenu,_("|Import%m"), SubFileImport);
522 // xgettext:no-c-format
523 fl_addtopup(FileMenu,_("|Export%m%l"), SubFileExport);
524 // xgettext:no-c-format
525 fl_addtopup(FileMenu,_("|Exit%l"));
526 fl_setpup_shortcut(FileMenu, 15, scex(_("FM|Ii#i#I")));
527 fl_setpup_shortcut(FileMenu, 16, scex(_("FM|Ee#e#E")));
528 fl_setpup_shortcut(FileMenu, 17, scex(_("FM|xX#x#X")));
530 // make the lastfiles menu
531 LastFiles_Iter liter(*lastfiles); // :-)
534 while( ii < 10 && !(filname = liter()).empty() ) {
537 string relbuf = MakeDisplayPath(filname,30);
540 tmp += ". " + relbuf;
541 tmp2 += string("#") + tostr(ii);
542 fl_addtopup(FileMenu, tmp.c_str());
543 fl_setpup_shortcut(FileMenu, 18 - 1 + ii, tmp2.c_str());
549 men->_view->getForm()->x + ob->x,
550 men->_view->getForm()->y + ob->y + ob->h + 10);
551 int choice = fl_dopup(FileMenu);
554 // set the pseudo menu-button back
555 fl_set_object_boxtype(ob, FL_FLAT_BOX);
556 fl_redraw_object(ob);
559 case -1: case 0: // we won't do anything
561 case 1: tmpfunc->Dispatch(LFUN_MENUNEW); break;
562 case 2: tmpfunc->Dispatch(LFUN_MENUNEWTMPLT); break;
563 case 3: tmpfunc->Dispatch(LFUN_MENUOPEN); break;
564 case 4: tmpfunc->Dispatch(LFUN_CLOSEBUFFER); break;
565 case 5: tmpfunc->Dispatch(LFUN_MENUWRITE); break;
566 case 6: tmpfunc->Dispatch(LFUN_MENUWRITEAS); break;
567 case 7: tmpfunc->Dispatch(LFUN_MENURELOAD); break;
568 case 8: tmpfunc->Dispatch(LFUN_PREVIEW); break;
569 case 9: tmpfunc->Dispatch(LFUN_PREVIEWPS); break;
570 case 10: tmpfunc->Dispatch(LFUN_RUNLATEX); break;
571 case 11: tmpfunc->Dispatch(LFUN_RUNDVIPS); break;
572 case 12: tmpfunc->Dispatch(LFUN_BUILDPROG); break;
573 case 13: tmpfunc->Dispatch(LFUN_MENUPRINT); break;
574 case 14: tmpfunc->Dispatch(LFUN_FAX); break;
575 case 15: // import menu
576 case 30: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
578 case 31: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
580 case 32: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
582 case 33: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
584 case 16: // export menu
586 if (!LinuxDoc && !DocBook)
587 tmpfunc->Dispatch(LFUN_EXPORT, "latex");
589 tmpfunc->Dispatch(LFUN_EXPORT, "linuxdoc");
591 tmpfunc->Dispatch(LFUN_EXPORT, "docbook");
593 case 41: tmpfunc->Dispatch(LFUN_EXPORT, "dvi");
595 case 42: tmpfunc->Dispatch(LFUN_EXPORT, "postscript");
597 case 43: tmpfunc->Dispatch(LFUN_EXPORT, "ascii");
599 case 44: tmpfunc->Dispatch(LFUN_EXPORT, "html");
601 case 45: tmpfunc->Dispatch(LFUN_EXPORT, "custom");
603 case 17: tmpfunc->Dispatch(LFUN_QUIT); break;
605 case 18: // The first item with lastfiles.
607 men->currentView()->setBuffer(bufferlist.loadLyXFile(liter[choice-18])); // ok one more
610 fl_freepup(SubFileImport);
611 fl_freepup(SubFileExport);
612 fl_freepup(FileMenu);
618 void Menus::ShowFileMenu2(FL_OBJECT *ob, long)
620 Menus *men = (Menus*) ob->u_ldata;
622 // Regarding the pseudo-menu-button:
623 // ok, ok this is a hack. It would be better to use the menus of the
624 // xforms 0.8 library. but then all popups have to be defined all the
625 // time, code rewriting would be necessary and contex-depending menus
626 // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
627 // course it would be more proper (and little faster). So if anybody
628 // likes to do the cleanup, just do it. Matthias
630 // set the pseudo menu-button
631 fl_set_object_boxtype(ob, FL_UP_BOX);
632 fl_set_button(ob, 0);
633 fl_redraw_object(ob);
635 LyXFunc *tmpfunc = men->_view->getLyXFunc();
639 int SubFileImport = fl_defpup(FL_ObjWin(ob),
642 "|Ascii Text as Lines...%x16"
643 "|Ascii Text as Paragraphs...%x17"
645 fl_setpup_shortcut(SubFileImport, 15, scex(_("FIM|Ll#l#L")));
646 fl_setpup_shortcut(SubFileImport, 16, scex(_("FIM|Aa#a#A")));
647 fl_setpup_shortcut(SubFileImport, 17, scex(_("FIM|Pp#p#P")));
648 fl_setpup_shortcut(SubFileImport, 18, scex(_("FIM|Nn#n#N")));
650 bool hasReLyX = lyxrc->relyx_command != "none";
652 // Disable import LaTeX and Noweb
653 fl_setpup_mode(SubFileImport, 15, FL_PUP_GREY);
654 fl_setpup_mode(SubFileImport, 18, FL_PUP_GREY);
657 // This can be done cleaner later.
658 int FileMenu = fl_defpup(FL_ObjWin(ob),
660 "|New from template..."
663 "|Exit%l"), SubFileImport);
664 fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
665 fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
666 fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
667 fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Ii#i#I")));
668 fl_setpup_shortcut(FileMenu, 5, scex(_("FM|xX#x#X")));
670 // make the lastfiles menu
671 LastFiles_Iter liter(*lastfiles); // :-)
674 while( ii < 10 && !(filname = liter()).empty() ) {
677 string relbuf = MakeDisplayPath(filname,30);
680 tmp += ". " + relbuf;
681 tmp2 += string("#") + tostr(ii);
682 fl_addtopup(FileMenu, tmp.c_str());
683 fl_setpup_shortcut(FileMenu, 6 - 1 + ii, tmp2.c_str());
689 men->_view->getForm()->x + ob->x,
690 men->_view->getForm()->y + ob->y + ob->h + 10);
691 int choice = fl_dopup(FileMenu);
694 // set the pseudo menu-button back
695 fl_set_object_boxtype(ob, FL_FLAT_BOX);
696 fl_redraw_object(ob);
699 case -1: case 0: // we won't do anything
702 tmpfunc->Dispatch(LFUN_MENUNEW);
705 tmpfunc->Dispatch(LFUN_MENUNEWTMPLT);
708 tmpfunc->Dispatch(LFUN_MENUOPEN);
710 case 4: // import menu
711 case 15: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
713 case 16: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
715 case 17: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
717 case 18: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
720 tmpfunc->Dispatch(LFUN_QUIT);
724 men->currentView()->setBuffer(bufferlist.loadLyXFile(liter[choice-6]));
728 fl_freepup(SubFileImport);
729 fl_freepup(FileMenu);
735 void Menus::ShowEditMenu(FL_OBJECT *ob, long)
737 Menus *men = (Menus*) ob->u_ldata;
739 // set the pseudo menu-button
740 fl_set_object_boxtype(ob, FL_UP_BOX);
741 fl_set_button(ob, 0);
742 fl_redraw_object(ob);
744 Buffer *tmpbuffer = men->_view->currentBuffer();
745 LyXFunc *tmpfunc = men->_view->getLyXFunc();
747 // Floats & Insets submenu
748 int SubEditFloats=fl_defpup(FL_ObjWin(ob),
749 _("Floats & Insets%t"
752 "|Open All Footnotes/Margin Notes%x23"
753 "|Close All Footnotes/Margin Notes%x24"
754 "|Open All Figures/Tables%x25"
755 "|Close All Figures/Tables%x26%l"
756 "|Remove all Error Boxes%x27")
758 fl_setpup_shortcut(SubEditFloats, 21, scex(_("EMF|Oo#o#O")));
759 fl_setpup_shortcut(SubEditFloats, 22, scex(_("EMF|Mm#m#M")));
760 fl_setpup_shortcut(SubEditFloats, 23, scex(_("EMF|Aa#a#A")));
761 fl_setpup_shortcut(SubEditFloats, 24, scex(_("EMF|Cc#c#C")));
762 fl_setpup_shortcut(SubEditFloats, 25, scex(_("EMF|Ff#f#F")));
763 fl_setpup_shortcut(SubEditFloats, 26, scex(_("EMF|Tt#t#T")));
764 fl_setpup_shortcut(SubEditFloats, 27, scex(_("EMF|Rr#r#R")));
767 int SubEditTable = fl_newpup(FL_ObjWin(ob));
768 if (men->currentView()->available() &&
769 tmpbuffer->text->cursor.par->table &&
770 !tmpbuffer->isReadonly()){
772 fl_addtopup(SubEditTable, _("Table%t"));
774 if (tmpbuffer->text->cursor.par->table->
775 IsMultiColumn(tmpbuffer->text->
776 NumberOfCell(tmpbuffer->
780 fl_addtopup(SubEditTable, _("|Multicolumn%B%x44%l"));
782 fl_addtopup(SubEditTable, _("|Multicolumn%b%x44%l"));
783 fl_setpup_shortcut(SubEditTable, 44, scex(_("EMT|Mm#m#M")));
785 if (tmpbuffer->text->cursor.par->table->
786 TopLine(tmpbuffer->text->
787 NumberOfCell(tmpbuffer->
791 fl_addtopup(SubEditTable, _("|Line Top%B%x36"));
793 fl_addtopup(SubEditTable, _("|Line Top%b%x36"));
794 fl_setpup_shortcut(SubEditTable, 36, scex(_("EMT|Tt#t#T")));
796 if (tmpbuffer->text->cursor.par->table->
797 BottomLine(tmpbuffer->text->
798 NumberOfCell(tmpbuffer->
802 fl_addtopup(SubEditTable, _("|Line Bottom%B%x37"));
804 fl_addtopup(SubEditTable, _("|Line Bottom%b%x37"));
805 fl_setpup_shortcut(SubEditTable, 37, scex(_("EMT|Bb#b#B")));
807 if (tmpbuffer->text->cursor.par->table->
808 LeftLine(tmpbuffer->text->
809 NumberOfCell(tmpbuffer->
813 fl_addtopup(SubEditTable, _("|Line Left%B%x38"));
815 fl_addtopup(SubEditTable, _("|Line Left%b%x38"));
816 fl_setpup_shortcut(SubEditTable, 38, scex(_("EMT|Ll#l#L")));
818 if (tmpbuffer->text->cursor.par->table->
819 RightLine(tmpbuffer->text->
820 NumberOfCell(tmpbuffer->
824 fl_addtopup(SubEditTable, _("|Line Right%B%x39%l"));
826 fl_addtopup(SubEditTable, _("|Line Right%b%x39%l"));
827 fl_setpup_shortcut(SubEditTable, 39, scex(_("EMT|Rr#r#R")));
829 int align = tmpbuffer->text->cursor.par->
830 table->GetAlignment(tmpbuffer->text->
831 NumberOfCell(tmpbuffer->
835 if (align == LYX_ALIGN_LEFT)
836 fl_addtopup(SubEditTable, _("|Align Left%R%x40"));
838 fl_addtopup(SubEditTable, _("|Align Left%r%x40"));
839 fl_setpup_shortcut(SubEditTable, 40, scex(_("EMT|eE#e#E")));
841 if (align == LYX_ALIGN_RIGHT)
842 fl_addtopup(SubEditTable, _("|Align Right%R%x41"));
844 fl_addtopup(SubEditTable, _("|Align Right%r%x41"));
845 fl_setpup_shortcut(SubEditTable, 41, scex(_("EMT|iI#i#I")));
847 if (align == LYX_ALIGN_CENTER)
848 fl_addtopup(SubEditTable, _("|Align Center%R%x42%l"));
850 fl_addtopup(SubEditTable, _("|Align Center%r%x42%l"));
851 fl_setpup_shortcut(SubEditTable, 42, scex(_("EMT|Cc#c#C")));
853 // xgettext:no-c-format
854 fl_addtopup(SubEditTable, _("|Append Row%x32"));
855 fl_setpup_shortcut(SubEditTable, 32, scex(_("EMT|oO#o#O")));
856 // xgettext:no-c-format
857 fl_addtopup(SubEditTable, _("|Append Column%x33%l"));
858 fl_setpup_shortcut(SubEditTable, 33, scex(_("EMT|uU#u#U")));
859 // xgettext:no-c-format
860 fl_addtopup(SubEditTable, _("|Delete Row%x34"));
861 fl_setpup_shortcut(SubEditTable, 34, scex(_("EMT|wW#w#W")));
862 // xgettext:no-c-format
863 fl_addtopup(SubEditTable, _("|Delete Column%x35%l"));
864 fl_setpup_shortcut(SubEditTable, 35, scex(_("EMT|nN#n#N")));
865 // xgettext:no-c-format
866 fl_addtopup(SubEditTable, _("|Delete Table%x43"));
867 fl_setpup_shortcut(SubEditTable, 43, scex(_("EMT|Dd#d#D")));
870 fl_addtopup(SubEditTable, _("Table%t"));
871 // xgettext:no-c-format
872 fl_addtopup(SubEditTable, _("|Insert table%x31"));
873 fl_setpup_shortcut(SubEditTable, 31, scex(_("EMT|Ii#i#I")));
876 int SubVersionControl = fl_newpup(FL_ObjWin(ob));
877 fl_addtopup(SubVersionControl, _("Version Control%t"));
878 if (tmpbuffer->lyxvc.inUse()) {
879 // xgettext:no-c-format
880 fl_addtopup(SubVersionControl, _("|Register%d%x51"));
881 if (tmpbuffer->isReadonly()) {
882 // signifies that the file is not checked out
883 // xgettext:no-c-format
884 fl_addtopup(SubVersionControl, _("|Check In Changes%d%x52"));
885 // xgettext:no-c-format
886 fl_addtopup(SubVersionControl, _("|Check Out for Edit%x53"));
888 // signifies that the file is checked out
889 // xgettext:no-c-format
890 fl_addtopup(SubVersionControl, _("|Check In Changes%x52"));
891 // xgettext:no-c-format
892 fl_addtopup(SubVersionControl, _("|Check Out for Edit%d%x53"));
894 // xgettext:no-c-format
895 fl_addtopup(SubVersionControl, _("|Revert to last version%x54"));
896 // xgettext:no-c-format
897 fl_addtopup(SubVersionControl, _("|Undo last check in%x55"));
898 // xgettext:no-c-format
899 fl_addtopup(SubVersionControl, _("|Show History%x56"));
901 // xgettext:no-c-format
902 fl_addtopup(SubVersionControl, _("|Register%x51"));
904 // the shortcuts are not good.
905 fl_setpup_shortcut(SubVersionControl, 51, scex(_("EMV|Rr#r#R")));
906 fl_setpup_shortcut(SubVersionControl, 52, scex(_("EMV|Ii#i#I")));
907 fl_setpup_shortcut(SubVersionControl, 53, scex(_("EMV|Oo#o#O")));
908 fl_setpup_shortcut(SubVersionControl, 54, scex(_("EMV|lL#l#l")));
909 fl_setpup_shortcut(SubVersionControl, 55, scex(_("EMV|Uu#u#U")));
910 fl_setpup_shortcut(SubVersionControl, 56, scex(_("EMV|Hh#h#H")));
912 int EditMenu=fl_defpup(FL_ObjWin(ob),
925 "|Table of Contents...%l"
926 "|Version Control%m%l"
927 "|View LaTeX log file%l"
928 "|Paste Primary Selection as Lines"
929 "|Paste Primary Selection as Paragraphs"),
930 SubEditFloats, SubEditTable, SubVersionControl);
932 fl_setpup_shortcut(EditMenu, 1, scex(_("EM|Uu#u#U")));
933 fl_setpup_shortcut(EditMenu, 2, scex(_("EM|Rr#r#R")));
934 fl_setpup_shortcut(EditMenu, 3, scex(_("EM|Cc#c#C")));
935 fl_setpup_shortcut(EditMenu, 4, scex(_("EM|oO#o#O")));
936 fl_setpup_shortcut(EditMenu, 5, scex(_("EM|Pp#p#P")));
937 fl_setpup_shortcut(EditMenu, 6, scex(_("EM|Ff#f#F")));
938 fl_setpup_shortcut(EditMenu, 7, scex(_("EM|Ee#e#E")));
939 fl_setpup_shortcut(EditMenu, 8, scex(_("EM|Nn#n#N")));
940 fl_setpup_shortcut(EditMenu, 9, scex(_("EM|Ii#i#I")));
941 fl_setpup_shortcut(EditMenu, 10, scex(_("EM|Tt#t#T")));
942 fl_setpup_shortcut(EditMenu, 11, scex(_("EM|Ss#s#S")));
943 fl_setpup_shortcut(EditMenu, 12, scex(_("EM|hH#h#H")));
944 fl_setpup_shortcut(EditMenu, 13, scex(_("EM|aA#a#A")));
945 fl_setpup_shortcut(EditMenu, 14, scex(_("EM|Vv#v#V")));
946 fl_setpup_shortcut(EditMenu, 15, scex(_("EM|wW#w#W")));
947 fl_setpup_shortcut(EditMenu, 16, scex(_("EM|Ll#l#L")));
948 fl_setpup_shortcut(EditMenu, 17, scex(_("EM|gG#g#G")));
950 // disable unavailable entries.
951 if(tmpbuffer->undostack.Top() == 0)
952 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
953 if(tmpbuffer->redostack.Top() == 0)
954 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
955 if(lyxrc->isp_command == "none")
956 fl_setpup_mode(EditMenu, 11, FL_PUP_GREY);
957 if(lyxrc->chktex_command == "none")
958 fl_setpup_mode(EditMenu, 12, FL_PUP_GREY);
960 if (tmpbuffer->isReadonly()) {
961 fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
962 fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
963 fl_setpup_mode(EditMenu, 3, FL_PUP_GREY);
964 fl_setpup_mode(EditMenu, 5, FL_PUP_GREY);
965 fl_setpup_mode(EditMenu, 16, FL_PUP_GREY);
966 fl_setpup_mode(EditMenu, 17, FL_PUP_GREY);
969 fl_setpup_position(men->_view->getForm()->x + ob->x,
970 men->_view->getForm()->y + ob->y +
972 int choice = fl_dopup(EditMenu);
975 // set the pseudo menu-button back
976 fl_set_object_boxtype(ob, FL_FLAT_BOX);
977 fl_redraw_object(ob);
980 case 1: tmpfunc->Dispatch(LFUN_UNDO); break;
981 case 2: tmpfunc->Dispatch(LFUN_REDO); break;
982 case 3: tmpfunc->Dispatch(LFUN_CUT); break;
983 case 4: tmpfunc->Dispatch(LFUN_COPY); break;
984 case 5: tmpfunc->Dispatch(LFUN_PASTE); break;
985 case 6: tmpfunc->Dispatch(LFUN_MENUSEARCH); break;
986 case 7: tmpfunc->Dispatch(LFUN_GOTOERROR); break;
987 case 8: tmpfunc->Dispatch(LFUN_GOTONOTE); break;
988 case 9: // floats & insets
992 case 11: tmpfunc->Dispatch(LFUN_SPELLCHECK); break;
993 case 12: tmpfunc->Dispatch(LFUN_RUNCHKTEX); break;
994 case 13: tmpfunc->Dispatch(LFUN_TOCVIEW); break;
995 case 14: // version control
997 case 15: tmpfunc->Dispatch(LFUN_LATEX_LOG); break;
998 case 16: tmpfunc->Dispatch(LFUN_PASTESELECTION, "line"); break;
999 case 17: tmpfunc->Dispatch(LFUN_PASTESELECTION, "paragraph"); break;
1001 // floats & insets sub-menu
1002 case 21: ToggleFloat(); break;
1003 case 22: tmpfunc->Dispatch(LFUN_MELT); break;
1004 case 23: AllFloats(1, 0); break;
1005 case 24: AllFloats(0, 0); break;
1006 case 25: AllFloats(1, 1); break;
1007 case 26: AllFloats(0, 1); break;
1008 case 27: tmpfunc->Dispatch(LFUN_REMOVEERRORS); break;
1010 case 31: tmpfunc->Dispatch(LFUN_TABLE); break;
1011 // this is really temporary. We need new function in keybind.C
1012 // These should set the minibuffer, too.
1013 case 32: case 33: case 34:
1014 case 35: case 36: case 37:
1015 case 38: case 39: case 40:
1016 case 41: case 42: case 43:
1018 if (men->currentView()->available()){
1019 men->currentView()->getScreen()->HideCursor();
1020 if (!tmpbuffer->text->selection){
1022 tmpbuffer->update(-2);
1025 TableFeatures(choice - 32);
1026 tmpbuffer->update(1);
1029 // version control sub-menu
1030 case 51: // register
1031 tmpfunc->Dispatch(LFUN_VC_REGISTER);
1033 case 52: // check in
1034 tmpfunc->Dispatch(LFUN_VC_CHECKIN);
1036 case 53: // check out
1037 tmpfunc->Dispatch(LFUN_VC_CHECKOUT);
1039 case 54: // revert to last
1040 tmpfunc->Dispatch(LFUN_VC_REVERT);
1042 case 55: // undo last
1043 tmpfunc->Dispatch(LFUN_VC_UNDO);
1045 case 56: // show history
1046 tmpfunc->Dispatch(LFUN_VC_HISTORY);
1050 fl_freepup(EditMenu);
1051 fl_freepup(SubEditFloats);
1052 fl_freepup(SubEditTable);
1053 fl_freepup(SubVersionControl);
1057 void Menus::ShowLayoutMenu(FL_OBJECT *ob, long)
1059 Menus *men = (Menus*) ob->u_ldata;
1061 if (!men->currentView()->available())
1064 // set the pseudo menu-button
1065 fl_set_object_boxtype(ob, FL_UP_BOX);
1066 fl_set_button(ob, 0);
1067 fl_redraw_object(ob);
1069 Buffer *tmpbuffer = men->_view->currentBuffer();
1070 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1072 int LayoutMenu = fl_newpup(FL_ObjWin(ob));
1073 fl_addtopup(LayoutMenu, _("Character..."
1079 "|Emphasize Style%b"
1083 "|Change Environment Depth"
1084 "|LaTeX Preamble...%l"
1085 "|Save layout as default"));
1086 fl_setpup_shortcut(LayoutMenu, 1, scex(_("LM|Cc#c#C")));
1087 fl_setpup_shortcut(LayoutMenu, 2, scex(_("LM|Pp#p#P")));
1088 fl_setpup_shortcut(LayoutMenu, 3, scex(_("LM|Dd#d#D")));
1089 fl_setpup_shortcut(LayoutMenu, 4, scex(_("LM|aA#a#A")));
1090 fl_setpup_shortcut(LayoutMenu, 5, scex(_("LM|eE#e#E")));
1091 fl_setpup_shortcut(LayoutMenu, 6, scex(_("LM|Qq#q#Q")));
1092 fl_setpup_shortcut(LayoutMenu, 7, scex(_("LM|mM#m#M")));
1093 fl_setpup_shortcut(LayoutMenu, 8, scex(_("LM|Nn#n#N")));
1094 fl_setpup_shortcut(LayoutMenu, 9, scex(_("LM|Bb#b#B")));
1095 fl_setpup_shortcut(LayoutMenu, 10, scex(_("LM|Tt#t#T")));
1096 fl_setpup_shortcut(LayoutMenu, 11, scex(_("LM|vV#v#V")));
1097 fl_setpup_shortcut(LayoutMenu, 12, scex(_("LM|Ll#l#L")));
1098 fl_setpup_shortcut(LayoutMenu, 13, scex(_("LM|Ss#s#S")));
1100 // Set values of checkboxes according to font
1101 LyXFont font = tmpbuffer->text->real_current_font;
1102 if (font.emph() == LyXFont::ON)
1103 fl_setpup_mode(LayoutMenu, 7, FL_PUP_CHECK);
1104 if (font.noun() == LyXFont::ON)
1105 fl_setpup_mode(LayoutMenu, 8, FL_PUP_CHECK);
1106 if (font.series() == LyXFont::BOLD_SERIES)
1107 fl_setpup_mode(LayoutMenu, 9, FL_PUP_CHECK);
1108 if (font.latex() == LyXFont::ON)
1109 fl_setpup_mode(LayoutMenu, 10, FL_PUP_CHECK);
1111 // Grey out unavailable entries
1112 if (!tmpbuffer->text->cursor.par->table)
1113 fl_setpup_mode(LayoutMenu, 5, FL_PUP_GREY);
1115 if (tmpbuffer->isReadonly()) {
1116 fl_setpup_mode(LayoutMenu, 1, FL_PUP_GREY);
1117 fl_setpup_mode(LayoutMenu, 6, FL_PUP_GREY);
1118 fl_setpup_mode(LayoutMenu, 11, FL_PUP_GREY);
1122 men->_view->getForm()->x + ob->x,
1123 men->_view->getForm()->y + ob->y + ob->h + 10);
1124 int choice = fl_dopup(LayoutMenu);
1127 // set the pseudo menu-button back
1128 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1129 fl_redraw_object(ob);
1132 case 1: tmpfunc->Dispatch(LFUN_LAYOUT_CHARACTER); break;
1133 case 2: tmpfunc->Dispatch(LFUN_LAYOUT_PARAGRAPH); break;
1134 case 3: tmpfunc->Dispatch(LFUN_LAYOUT_DOCUMENT); break;
1135 case 4: tmpfunc->Dispatch(LFUN_LAYOUT_PAPER); break;
1136 case 5: tmpfunc->Dispatch(LFUN_LAYOUT_TABLE, "true"); break;
1137 case 6: tmpfunc->Dispatch(LFUN_LAYOUT_QUOTES); break;
1138 case 7: tmpfunc->Dispatch(LFUN_EMPH); break;
1139 case 8: tmpfunc->Dispatch(LFUN_NOUN); break;
1140 case 9: tmpfunc->Dispatch(LFUN_BOLD); break;
1141 case 10: tmpfunc->Dispatch(LFUN_TEX); break;
1142 case 11: tmpfunc->Dispatch(LFUN_DEPTH_PLUS); break;
1143 case 12: tmpfunc->Dispatch(LFUN_LAYOUT_PREAMBLE); break;
1144 case 13: tmpfunc->Dispatch(LFUN_LAYOUT_SAVE_DEFAULT); break;//MenuLayoutSave(); break;
1146 fl_freepup(LayoutMenu);
1150 void Menus::ShowInsertMenu(FL_OBJECT *ob, long /*data*/)
1152 Menus *men = (Menus*) ob->u_ldata;
1154 // set the pseudo menu-button
1155 fl_set_object_boxtype(ob, FL_UP_BOX);
1156 fl_set_button(ob, 0);
1157 fl_redraw_object(ob);
1159 Buffer *tmpbuffer = men->_view->currentBuffer();
1160 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1163 // Is textclass LinuxDoc?
1164 bool LinuxDoc = tmpbuffer->isLinuxDoc();
1167 int SubInsertAscii = fl_defpup(FL_ObjWin(ob),
1168 _("Import ASCII file%t"
1170 "|As Paragraphs%x42"));
1171 fl_setpup_shortcut(SubInsertAscii, 41, scex(_("IMA|Ll#l#L")));
1172 fl_setpup_shortcut(SubInsertAscii, 42, scex(_("IMA|Pp#p#P")));
1174 int SubInsertTableList=fl_defpup(FL_ObjWin(ob),
1176 "|Table of Contents%x21"
1177 "|List of Figures%x22"
1178 "|List of Tables%x23"
1179 "|List of Algorithms%x24"
1181 "|BibTeX Reference%x26"));
1182 fl_setpup_shortcut(SubInsertTableList, 21, scex(_("IMT|Cc#c#C")));
1183 fl_setpup_shortcut(SubInsertTableList, 22, scex(_("IMT|Ff#f#F")));
1184 fl_setpup_shortcut(SubInsertTableList, 23, scex(_("IMT|Tt#t#T")));
1185 fl_setpup_shortcut(SubInsertTableList, 24, scex(_("IMT|Aa#a#A")));
1186 fl_setpup_shortcut(SubInsertTableList, 25, scex(_("IMT|Ii#i#I")));
1187 fl_setpup_shortcut(SubInsertTableList, 26, scex(_("IMT|Bb#b#B")));
1189 int SubInsertFloatList;
1190 //if (men->_view->currentBuffer()->params.columns == 1) {
1191 // SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
1193 // "|Figure Float%x71"
1194 // "|Table Float%l%x72"
1195 // "|Algorithm Float%x73"));
1198 SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
1202 "|Wide Figure Float%x73"
1203 "|Wide Table Float%l%x74"
1204 "|Algorithm Float%x75"));
1206 fl_setpup_shortcut(SubInsertFloatList, 71, scex(_("IMF|gG#g#G")));
1207 fl_setpup_shortcut(SubInsertFloatList, 72, scex(_("IMF|Tt#t#T")));
1208 fl_setpup_shortcut(SubInsertFloatList, 73, scex(_("IMF|Ww#w#W")));
1209 fl_setpup_shortcut(SubInsertFloatList, 74, scex(_("IMF|iI#i#I")));
1210 fl_setpup_shortcut(SubInsertFloatList, 75, scex(_("IMF|Aa#a#A")));
1212 int SubInsertSpecial=fl_defpup(FL_ObjWin(ob),
1213 _("Special Character%t"
1215 "|Hyphenation Point%x32"
1216 "|Protected Blank%x33"
1218 "|Ellipsis (...)%x35"
1219 "|End of sentence period%x36"
1220 "|Ordinary Quote (\")%x37"
1221 "|Menu Separator %x38"));
1223 fl_setpup_shortcut(SubInsertSpecial, 31, scex(_("IMS|Hh#h#H")));
1224 fl_setpup_shortcut(SubInsertSpecial, 32, scex(_("IMS|Pp#p#P")));
1225 fl_setpup_shortcut(SubInsertSpecial, 33, scex(_("IMS|Bb#b#B")));
1226 fl_setpup_shortcut(SubInsertSpecial, 34, scex(_("IMS|Ll#l#L")));
1227 fl_setpup_shortcut(SubInsertSpecial, 35, scex(_("IMS|iI#i#I")));
1228 fl_setpup_shortcut(SubInsertSpecial, 36, scex(_("IMS|Ee#e#E")));
1229 fl_setpup_shortcut(SubInsertSpecial, 37, scex(_("IMS|Qq#q#Q")));
1230 fl_setpup_shortcut(SubInsertSpecial, 38, scex(_("IMS|Mm#m#M")));
1232 int InsertMenu = fl_defpup(FL_ObjWin(ob),
1236 "|Import ASCII File%m"
1237 "|Insert LyX File...%l"
1242 "|Special Character%m%l"
1245 "|Cross-Reference..."
1246 "|Citation Reference..."
1248 "|Index entry of last word"),
1254 fl_setpup_shortcut(InsertMenu, 1, scex(_("IM|gG#g#G")));
1255 fl_setpup_shortcut(InsertMenu, 2, scex(_("IM|bB#b#B")));
1256 fl_setpup_shortcut(InsertMenu, 3, scex(_("IM|cC#c#C")));
1257 fl_setpup_shortcut(InsertMenu, 4, scex(_("IM|Aa#a#A")));
1258 fl_setpup_shortcut(InsertMenu, 5, scex(_("IM|Xx#x#X")));
1259 fl_setpup_shortcut(InsertMenu, 6, scex(_("IM|Ff#f#F")));
1260 fl_setpup_shortcut(InsertMenu, 7, scex(_("IM|Mm#m#M")));
1261 fl_setpup_shortcut(InsertMenu, 8, scex(_("IM|oO#o#O")));
1262 fl_setpup_shortcut(InsertMenu, 9, scex(_("IM|Tt#t#T")));
1263 fl_setpup_shortcut(InsertMenu, 10, scex(_("IM|Ss#s#S")));
1264 fl_setpup_shortcut(InsertMenu, 11, scex(_("IM|Nn#n#N")));
1265 fl_setpup_shortcut(InsertMenu, 12, scex(_("IM|Ll#l#L")));
1266 fl_setpup_shortcut(InsertMenu, 13, scex(_("IM|rR#r#R")));
1267 fl_setpup_shortcut(InsertMenu, 14, scex(_("IM|iI#i#I")));
1268 fl_setpup_shortcut(InsertMenu, 15, scex(_("IM|dD#d#D")));
1269 fl_setpup_shortcut(InsertMenu, 16, scex(_("IM|wW#w#W")));
1273 /* for linuxdoc sgml */
1275 fl_addtopup(InsertMenu, _("|URL..."));
1276 fl_setpup_shortcut(InsertMenu, 17, scex(_("IM|Uu#u#U")));
1280 if (tmpbuffer->isReadonly()) {
1281 for (int ii = 1; ii <= 16; ii++)
1282 fl_setpup_mode(InsertMenu, ii, FL_PUP_GREY);
1286 fl_setpup_mode(InsertMenu, 17, FL_PUP_GREY);
1293 men->_view->getForm()->x + ob->x,
1294 men->_view->getForm()->y + ob->y + ob->h + 10);
1296 int choice = fl_dopup(InsertMenu);
1299 // set the pseudo menu-button back
1300 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1301 fl_redraw_object(ob);
1303 if (men->currentView()->available()){
1304 men->currentView()->getScreen()->HideCursor();
1306 case 1: tmpfunc->Dispatch(LFUN_FIGURE); break;
1307 case 2: tmpfunc->Dispatch(LFUN_TABLE); break;
1308 case 3: tmpfunc->Dispatch(LFUN_CHILDINSERT); break;
1309 case 4: // Insert ASCII file submenu
1311 case 5: tmpfunc->Dispatch(LFUN_FILE_INSERT); break;
1312 case 41: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "line"); break;
1313 case 42: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "paragraph"); break;
1317 case 6: tmpfunc->Dispatch(LFUN_FOOTMELT); break
1319 case 7: tmpfunc->Dispatch(LFUN_MARGINMELT); break;
1321 case 8: // Float sub-menu
1323 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "figure");
1326 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "table");
1329 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-fig");
1332 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-tab");
1335 tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "algorithm");
1338 case 9: // Table/List submenu
1340 case 21: tmpfunc->Dispatch(LFUN_TOC_INSERT); break;
1341 case 22: tmpfunc->Dispatch(LFUN_LOF_INSERT); break;
1342 case 23: tmpfunc->Dispatch(LFUN_LOT_INSERT); break;
1343 case 24: tmpfunc->Dispatch(LFUN_LOA_INSERT); break;
1344 case 25: tmpfunc->Dispatch(LFUN_INDEX_PRINT); break;
1345 case 26: tmpfunc->Dispatch(LFUN_INSERT_BIBTEX); break;
1347 case 10: // Special Character submenu
1349 case 31: tmpfunc->Dispatch(LFUN_HFILL); break;
1350 case 32: tmpfunc->Dispatch(LFUN_HYPHENATION); break;
1351 case 33: tmpfunc->Dispatch(LFUN_PROTECTEDSPACE); break;
1352 case 34: tmpfunc->Dispatch(LFUN_BREAKLINE); break;
1353 case 35: tmpfunc->Dispatch(LFUN_LDOTS); break;
1354 case 36: tmpfunc->Dispatch(LFUN_END_OF_SENTENCE); break;
1355 case 37: tmpfunc->Dispatch(LFUN_QUOTE); break;
1356 case 38: tmpfunc->Dispatch(LFUN_MENU_SEPARATOR); break;
1358 case 11: tmpfunc->Dispatch(LFUN_INSERT_NOTE); break;
1359 case 12: tmpfunc->Dispatch(LFUN_INSERT_LABEL); break;
1360 case 13: tmpfunc->Dispatch(LFUN_INSERT_REF); break;
1361 case 14: tmpfunc->Dispatch(LFUN_INSERT_CITATION); break;
1362 case 15: tmpfunc->Dispatch(LFUN_INDEX_INSERT); break;
1363 case 16: tmpfunc->Dispatch(LFUN_INDEX_INSERT_LAST); break;
1364 case 17: tmpfunc->Dispatch(LFUN_URL); break;
1367 fl_freepup(InsertMenu);
1368 fl_freepup(SubInsertAscii);
1369 fl_freepup(SubInsertTableList);
1370 fl_freepup(SubInsertFloatList);
1371 fl_freepup(SubInsertSpecial);
1375 void Menus::ShowMathMenu(FL_OBJECT *ob, long)
1377 extern void math_insert_symbol(char const* s);
1379 Menus *men = (Menus*) ob->u_ldata;
1381 // set the pseudo menu-button
1382 fl_set_object_boxtype(ob, FL_UP_BOX);
1383 fl_set_button(ob, 0);
1384 fl_redraw_object(ob);
1386 Buffer *tmpbuffer = men->_view->currentBuffer();
1387 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1389 int MathMenu = fl_defpup(FL_ObjWin(ob),
1400 fl_setpup_shortcut(MathMenu, 1, scex(_("MM|Ff#f#F")));
1401 fl_setpup_shortcut(MathMenu, 2, scex(_("MM|Ss#s#S")));
1402 fl_setpup_shortcut(MathMenu, 3, scex(_("MM|Ee#e#E")));
1403 fl_setpup_shortcut(MathMenu, 4, scex(_("MM|xX#x#X")));
1404 fl_setpup_shortcut(MathMenu, 5, scex(_("MM|uU#u#U")));
1405 fl_setpup_shortcut(MathMenu, 6, scex(_("MM|Ii#i#I")));
1406 fl_setpup_shortcut(MathMenu, 7, scex(_("MM|Mm#m#M")));
1407 fl_setpup_shortcut(MathMenu, 8, scex(_("MM|Dd#d#D")));
1408 fl_setpup_shortcut(MathMenu, 9, scex(_("MM|Pp#p#P")));
1410 if (tmpbuffer->isReadonly())
1411 for (int ii = 1; ii <= 9; ii++)
1412 fl_setpup_mode(MathMenu, ii, FL_PUP_GREY);
1416 men->_view->getForm()->x + ob->x,
1417 men->_view->getForm()->y + ob->y + ob->h + 10);
1418 int choice = fl_dopup(MathMenu);
1421 // set the pseudo menu-button back
1422 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1423 fl_redraw_object(ob);
1425 if (men->currentView()->available()) {
1428 tmpfunc->Dispatch(LFUN_INSERT_MATH, "frac");
1431 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sqrt");
1433 case 3: /* Exponent */
1434 tmpfunc->Dispatch(LFUN_INSERT_MATH, "^");
1437 tmpfunc->Dispatch(LFUN_INSERT_MATH, "_");
1440 tmpfunc->Dispatch(LFUN_INSERT_MATH, "sum");
1443 tmpfunc->Dispatch(LFUN_INSERT_MATH, "int");
1446 tmpfunc->Dispatch(LFUN_MATH_MODE);
1449 tmpfunc->Dispatch(LFUN_MATH_DISPLAY);
1452 show_symbols_form(tmpfunc);
1455 tmpbuffer->update(0);
1457 fl_freepup(MathMenu);
1461 void Menus::ShowOptionsMenu(FL_OBJECT *ob, long)
1463 Menus *men = (Menus*) ob->u_ldata;
1465 // set the pseudo menu-button
1466 fl_set_object_boxtype(ob, FL_UP_BOX);
1467 fl_set_button(ob, 0);
1468 fl_redraw_object(ob);
1470 //Buffer *tmpbuffer = men->_view->currentBuffer();
1471 LyXFunc *tmpfunc = men->_view->getLyXFunc();
1473 int OptionsMenu = fl_defpup(FL_ObjWin(ob),
1475 "|Spellchecker Options..."
1480 fl_setpup_shortcut(OptionsMenu, 1, scex(_("OM|Ff#f#F")));
1481 fl_setpup_shortcut(OptionsMenu, 2, scex(_("OM|Ss#s#S")));
1482 fl_setpup_shortcut(OptionsMenu, 3, scex(_("OM|Kk#k#K")));
1483 fl_setpup_shortcut(OptionsMenu, 4, scex(_("OM|Ll#l#L")));
1484 fl_setpup_shortcut(OptionsMenu, 5, scex(_("OM|Rr#r#R")));
1486 if(lyxrc->isp_command == "none")
1487 fl_setpup_mode(OptionsMenu, 2, FL_PUP_GREY);
1490 men->_view->getForm()->x + ob->x,
1491 men->_view->getForm()->y + ob->y + ob->h + 10);
1492 int choice = fl_dopup(OptionsMenu);
1495 // set the pseudo menu-button back
1496 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1497 fl_redraw_object(ob);
1499 case 1: men->ScreenOptions(); break;
1500 case 2: SpellCheckerOptions(); break;
1501 case 3: men->_view->getIntl()->MenuKeymap(); break;
1502 case 4: LaTeXOptions(); break;
1503 case 5: tmpfunc->Dispatch(LFUN_RECONFIGURE); break;
1506 fl_freepup(OptionsMenu);
1510 void Menus::ShowBufferMenu(FL_OBJECT *ob, long)
1512 Menus *men = (Menus*) ob->u_ldata;
1514 // set the pseudo menu-button
1515 fl_set_object_boxtype(ob, FL_UP_BOX);
1516 fl_set_button(ob, 0);
1517 fl_redraw_object(ob);
1519 int BufferMenu = fl_newpup(FL_ObjWin(ob));
1520 bufferlist.makePup(BufferMenu);
1523 men->_view->getForm()->x + ob->x,
1524 men->_view->getForm()->y + ob->y + ob->h + 10);
1525 int choice = fl_dopup(BufferMenu);
1528 // set the pseudo menu-button back
1529 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1530 fl_redraw_object(ob);
1531 if (choice > 0) men->handleBufferMenu(choice);
1533 fl_freepup(BufferMenu);
1538 char const *doc_files [] = {"Intro", "Tutorial",
1539 "UserGuide", "Extended",
1540 "Customization", "Reference",
1541 "BUGS", "LaTeXConfig"};
1543 void Menus::ShowHelpMenu(FL_OBJECT *ob, long)
1545 Menus *men = (Menus*) ob->u_ldata;
1547 // set the pseudo menu-button
1548 fl_set_object_boxtype(ob, FL_UP_BOX);
1549 fl_set_button(ob, 0);
1550 fl_redraw_object(ob);
1552 int HelpMenu = fl_defpup(FL_ObjWin(ob),
1556 "|Extended Features"
1560 "|LaTeX Configuration%l"
1561 "|Copyright and Warranty..."
1565 fl_setpup_shortcut(HelpMenu, 1, scex(_("HM|Ii#I#i")));
1566 fl_setpup_shortcut(HelpMenu, 2, scex(_("HM|Tt#T#t")));
1567 fl_setpup_shortcut(HelpMenu, 3, scex(_("HM|Uu#U#u")));
1568 fl_setpup_shortcut(HelpMenu, 4, scex(_("HM|xX#x#X")));
1569 fl_setpup_shortcut(HelpMenu, 5, scex(_("HM|Cc#C#c")));
1570 fl_setpup_shortcut(HelpMenu, 6, scex(_("HM|Rr#R#r")));
1571 fl_setpup_shortcut(HelpMenu, 7, scex(_("HM|Kk#K#k")));
1572 fl_setpup_shortcut(HelpMenu, 8, scex(_("HM|Ll#L#l")));
1573 fl_setpup_shortcut(HelpMenu, 9, scex(_("HM|oO#o#O")));
1574 fl_setpup_shortcut(HelpMenu, 10, scex(_("HM|eE#e#E")));
1575 fl_setpup_shortcut(HelpMenu, 11, scex(_("HM|Vv#v#V")));
1578 men->_view->getForm()->x + ob->x,
1579 men->_view->getForm()->y + ob->y + ob->h + 10);
1580 int choice = fl_dopup(HelpMenu);
1583 // set the pseudo menu-button back
1584 fl_set_object_boxtype(ob, FL_FLAT_BOX);
1585 fl_redraw_object(ob);
1588 case 1: case 2: case 3: case 4: case 5:
1589 case 6: case 7: case 8:
1591 men->MenuDocu(doc_files[choice - 1]);
1594 case 9: ShowCopyright(); break;
1595 case 10: ShowCredits(); break;
1598 fl_show_message((string(_("LyX Version ")) + LYX_VERSION
1599 + _(" of ") + LYX_RELEASE).c_str(),
1600 (_("Library directory: ")
1601 + MakeDisplayPath(system_lyxdir)).c_str(),
1602 (_("User directory: ")
1603 + MakeDisplayPath(user_lyxdir)).c_str());
1607 fl_freepup(HelpMenu);
1611 void Menus::MenuDocu(string const &docname)
1613 string fname = i18nLibFileSearch("doc", docname, "lyx");
1614 _view->getMiniBuffer()->Set(_("Opening help file"),
1615 MakeDisplayPath(fname),"...");
1616 currentView()->setBuffer(bufferlist.loadLyXFile(fname,false));
1618 if (docname == "Reference")
1619 _view->getLyXFunc()->Dispatch(LFUN_TOCVIEW);
1623 void Menus::handleBufferMenu(int choice)
1625 currentView()->setBuffer(bufferlist.getBuffer(choice));