]> git.lyx.org Git - lyx.git/blobdiff - src/menus.C
citation patch from Angus
[lyx.git] / src / menus.C
index 81d4362aefc2211d2fcd661e64d981adec456daf..a34dbdce2656d8eb97eb4e5462ecef7dbbc4e7a8 100644 (file)
 #include "insets/insetref.h"
 #include "insets/insettabular.h"
 #include "tabular.h"
+#include "exporter.h"
 
 #include "frontends/Dialogs.h"
 
 using std::vector;
+using std::pair;
 using std::endl;
 using std::max;
 using std::min;
 using std::sort;
 
-extern FD_form_screen * fd_form_screen;
 extern BufferList bufferlist;
 
 // I would really prefere to see most or all of these 'extern's disappear.
@@ -68,7 +69,6 @@ extern BufferList bufferlist;
 
 extern void MenuLayoutSave();
 extern void ShowCredits();
-extern void show_symbols_form(LyXFunc *);
 
 // A bunch of wrappers
 
@@ -456,37 +456,6 @@ void Menus::create_menus(int air)
 }
 
 
-void Menus::ScreenOptions()
-{
-       static int ow = -1, oh;
-
-       // this is not very nice....
-       fl_set_input(fd_form_screen->input_roman, 
-                    lyxrc.roman_font_name.c_str());
-       fl_set_input(fd_form_screen->input_sans, 
-                    lyxrc.sans_font_name.c_str());
-       fl_set_input(fd_form_screen->input_typewriter,
-                    lyxrc.typewriter_font_name.c_str());
-       fl_set_input(fd_form_screen->input_font_norm, 
-                    lyxrc.font_norm.c_str());
-       char tmpstring[10];
-       sprintf(tmpstring, "%d", lyxrc.zoom);
-       fl_set_input(fd_form_screen->intinput_size, tmpstring);
-       if (fd_form_screen->form_screen->visible) {
-               fl_raise_form(fd_form_screen->form_screen);
-       } else {
-               fl_show_form(fd_form_screen->form_screen,
-                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
-                            _("Screen Options"));
-               if (ow < 0) {
-                       ow = fd_form_screen->form_screen->w;
-                       oh = fd_form_screen->form_screen->h;
-               }
-               fl_set_form_minsize(fd_form_screen->form_screen, ow, oh);
-       }
-}
-
-
 //
 // Here comes all the menu callbacks.
 //
@@ -532,9 +501,22 @@ void Menus::ShowFileMenu(FL_OBJECT * ob, long)
        fl_setpup_shortcut(SubFileImport, 34, scex(_("FIM|Dd#d#D")));
 
        // Export sub-menu
-
+#ifdef NEW_EXPORT
+       int SubFileExport = fl_defpup(FL_ObjWin(ob),
+                                     _("Export%t"));
+       vector<pair<string,string> > formats =
+               Exporter::GetExportableFormats(tmpbuffer);
+       for (vector<pair<string,string> >::size_type i = 0;
+            i < formats.size(); ++i) {
+               string entry = _("as ")
+                       + formats[i].second
+                       + "%x" + tostr(1000+i);
+               fl_addtopup(SubFileExport, entry.c_str());
+       }
+#else
        // remember to make this handle linuxdoc too.
        // and now docbook also.
+
        int SubFileExport = 0;
        if (!LinuxDoc && !DocBook)
                SubFileExport= fl_defpup(FL_ObjWin(ob),
@@ -561,7 +543,6 @@ void Menus::ShowFileMenu(FL_OBJECT * ob, long)
                                           "|as PostScript...%x42"
                                           "|as Ascii Text...%x43"
                                           "|as HTML...%x44"));
-
        fl_setpup_shortcut(SubFileExport, 40, scex(_("FEX|Ll#l#L")));
        fl_setpup_shortcut(SubFileExport, 41, scex(_("FEX|Dd#d#D")));
        fl_setpup_shortcut(SubFileExport, 42, scex(_("FEX|Pp#p#P")));
@@ -571,6 +552,7 @@ void Menus::ShowFileMenu(FL_OBJECT * ob, long)
        if (!LinuxDoc && !DocBook) {
                fl_setpup_shortcut(SubFileExport, 45, scex(_("FEX|mM#m#M")));
        }
+#endif
        
        int FileMenu = fl_defpup(FL_ObjWin(ob),
                                 _("New..."
@@ -638,6 +620,7 @@ void Menus::ShowFileMenu(FL_OBJECT * ob, long)
        if ( lyxrc.linuxdoc_to_lyx_command == "none")
                fl_setpup_mode(SubFileImport, 34, FL_PUP_GREY);
 
+#ifndef NEW_EXPORT
        if (!hasLaTeX) {
                // Disable export dvi and export postscript
                fl_setpup_mode(SubFileExport, 41, FL_PUP_GREY);
@@ -650,6 +633,7 @@ void Menus::ShowFileMenu(FL_OBJECT * ob, long)
                // Disable export HTML
                fl_setpup_mode(SubFileExport, 44, FL_PUP_GREY);
        }
+#endif
 
        // xgettext:no-c-format
        fl_addtopup(FileMenu, _("|Import%m"), SubFileImport);
@@ -693,10 +677,17 @@ void Menus::ShowFileMenu(FL_OBJECT * ob, long)
        case  5: tmpfunc->Dispatch(LFUN_MENUWRITE); break;
        case  6: tmpfunc->Dispatch(LFUN_MENUWRITEAS); break;
        case  7: tmpfunc->Dispatch(LFUN_MENURELOAD); break;
+#ifdef NEW_EXPORT
+       case 8: tmpfunc->Dispatch(LFUN_PREVIEW, "dvi"); break;
+       case 9: tmpfunc->Dispatch(LFUN_PREVIEW, "ps"); break;
+       case 10: tmpfunc->Dispatch(LFUN_UPDATE, "dvi"); break;
+       case 11: tmpfunc->Dispatch(LFUN_UPDATE, "ps"); break;
+#else
        case  8: tmpfunc->Dispatch(LFUN_PREVIEW); break;
        case  9: tmpfunc->Dispatch(LFUN_PREVIEWPS); break;
        case 10: tmpfunc->Dispatch(LFUN_RUNLATEX); break;
        case 11: tmpfunc->Dispatch(LFUN_RUNDVIPS); break;
+#endif
        case 12: tmpfunc->Dispatch(LFUN_BUILDPROG); break;
        case 13: tmpfunc->Dispatch(LFUN_MENUPRINT); break;
        case 14: tmpfunc->Dispatch(LFUN_FAX); break;
@@ -711,6 +702,20 @@ void Menus::ShowFileMenu(FL_OBJECT * ob, long)
                break;
        case 34: tmpfunc->Dispatch(LFUN_IMPORT, "linuxdoc");
                break;
+#ifdef NEW_EXPORT
+       case 18:
+               tmpfunc->Dispatch(LFUN_QUIT);
+               break;
+       default:
+               if (choice >= 1000)
+                       tmpfunc->Dispatch(LFUN_EXPORT,
+                                         formats[choice-1000].first.c_str());
+               else
+                       men->currentView()
+                               ->buffer(bufferlist
+                                        .loadLyXFile((*lastfiles)[choice - 18]));
+               break;
+#else
        case 16: // export menu
        case 40:
                if (!LinuxDoc && !DocBook)
@@ -726,13 +731,7 @@ void Menus::ShowFileMenu(FL_OBJECT * ob, long)
                break;
        case 43: tmpfunc->Dispatch(LFUN_EXPORT, "ascii");
                break;
-       case 44:
-               if (!LinuxDoc && !DocBook)
-                       tmpfunc->Dispatch(LFUN_EXPORT, "html");
-               else if(LinuxDoc)
-                       tmpfunc->Dispatch(LFUN_EXPORT, "html-linuxdoc");
-               else
-                       tmpfunc->Dispatch(LFUN_EXPORT, "html-docbook");
+       case 44: tmpfunc->Dispatch(LFUN_EXPORT, "html");
                break;
        case 45: tmpfunc->Dispatch(LFUN_EXPORT, "custom"); 
                break;
@@ -744,6 +743,7 @@ void Menus::ShowFileMenu(FL_OBJECT * ob, long)
                        ->buffer(bufferlist
                                 .loadLyXFile((*lastfiles)[choice - 18]));
                break;
+#endif
        }
        fl_freepup(SubFileImport);
        fl_freepup(SubFileExport);
@@ -909,6 +909,7 @@ void Menus::ShowEditMenu(FL_OBJECT * ob, long)
 
        // Table submenu
        int SubEditTable = fl_newpup(FL_ObjWin(ob));
+#ifndef NEW_TABULAR
        if (men->currentView()->available() && 
            men->currentView()->text->cursor.par()->table &&
            !tmpbuffer->isReadonly()){
@@ -1005,7 +1006,9 @@ void Menus::ShowEditMenu(FL_OBJECT * ob, long)
                // xgettext:no-c-format
                fl_addtopup(SubEditTable, _("|Delete Table%x43"));
                fl_setpup_shortcut(SubEditTable, 43, scex(_("EMT|Dd#d#D")));
-       } else if (men->currentView()->the_locking_inset &&
+       } else
+#endif
+               if (men->currentView()->the_locking_inset &&
                   (men->currentView()->the_locking_inset->LyxCode() ==
                    Inset::TABULAR_CODE) &&
                   !tmpbuffer->isReadonly()) {
@@ -1229,7 +1232,7 @@ void Menus::ShowEditMenu(FL_OBJECT * ob, long)
        case 26: men->currentView()->allFloats(0, 1); break;
        case 27: tmpfunc->Dispatch(LFUN_REMOVEERRORS); break;
 #endif
-       case 31: tmpfunc->Dispatch(LFUN_TABLE); break;
+       case 31: tmpfunc->Dispatch(LFUN_DIALOG_TABULAR_INSERT); break;
                // this is really temporary. We need new function in keybind.C
                // These should set the minibuffer, too.
        case 32: case 33: case 34:
@@ -1250,11 +1253,14 @@ void Menus::ShowEditMenu(FL_OBJECT * ob, long)
                                    static_cast<InsetTabular *>
                                       (men->currentView()->the_locking_inset);
                                inset->TabularFeatures(men->currentView(), choice - 32);
-                       } else {
+                       }
+#ifndef NEW_TABULAR
+                       else {
                                men->currentView()->text->
                                        TableFeatures(men->currentView(), choice - 32);
                                men->currentView()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                        }
+#endif
                }
                break;
                // version control sub-menu
@@ -1556,19 +1562,19 @@ void Menus::ShowRefsMenu(FL_OBJECT * ob, long)
        fl_redraw_object(ob);
 
        if (choice == 7)
-               men->_view->getLyXFunc()->Dispatch(LFUN_REFBACK);
+               men->_view->getLyXFunc()->Dispatch(LFUN_REF_BACK);
        else if (choice >= BIG_NUM) {
                int type = (choice / BIG_NUM) - 1;
                int num = choice % BIG_NUM;
                if (type >= 5)
-                       men->_view->getLyXFunc()->Dispatch(LFUN_REFGOTO,
+                       men->_view->getLyXFunc()->Dispatch(LFUN_REF_GOTO,
                                                           label_list[num].c_str());
                else {
-                       static string const commands[5]
-                               = { "\\ref", "\\pageref", "\\vref", "\\vpageref",
-                                   "\\prettyref"};
-                       string t = commands[type] + "{" + label_list[num] + "}";
-                       men->currentView()->insertInset(new InsetRef(t, buffer));
+                       static string const cmdname[5]
+                               = { "ref", "pageref", "vref", "vpageref", "prettyref"};
+                       InsetCommandParams p( cmdname[type] );
+                       p.setContents( label_list[num] );
+                       men->currentView()->insertInset(new InsetRef(p));
                }
        }
 
@@ -1632,11 +1638,12 @@ void Menus::ShowLayoutMenu(FL_OBJECT * ob, long)
                fl_setpup_mode(LayoutMenu, 9, FL_PUP_CHECK);
        if (font.latex() == LyXFont::ON)
                fl_setpup_mode(LayoutMenu, 10, FL_PUP_CHECK);
-          
+
        // Grey out unavailable entries
+#ifndef NEW_TABULAR
        if (!men->currentView()->text->cursor.par()->table)
                fl_setpup_mode(LayoutMenu, 5, FL_PUP_GREY);
-
+#endif
        if (tmpbuffer->isReadonly()) {
                fl_setpup_mode(LayoutMenu, 1, FL_PUP_GREY);
                fl_setpup_mode(LayoutMenu, 6, FL_PUP_GREY);
@@ -1808,7 +1815,7 @@ void Menus::ShowInsertMenu(FL_OBJECT * ob, long)
                men->currentView()->hideCursor();
                switch (choice) {
                case 1: tmpfunc->Dispatch(LFUN_FIGURE); break;
-               case 2: tmpfunc->Dispatch(LFUN_TABLE); break;
+               case 2: tmpfunc->Dispatch(LFUN_DIALOG_TABULAR_INSERT); break;
                case 3: tmpfunc->Dispatch(LFUN_CHILDINSERT); break;
                case 4: // Insert ASCII file submenu
                        break;
@@ -1820,27 +1827,62 @@ void Menus::ShowInsertMenu(FL_OBJECT * ob, long)
 
                case 6: tmpfunc->Dispatch(LFUN_INSET_EXTERNAL); break;
 
-               case 7: tmpfunc->Dispatch(LFUN_FOOTMELT); break
-                                                                 ;
-               case 8: tmpfunc->Dispatch(LFUN_MARGINMELT); break;
+               case 7:
+#ifndef NEW_INSETS
+                       tmpfunc->Dispatch(LFUN_FOOTMELT); break;
+#else
+                       tmpfunc->Dispatch(LFUN_INSET_FOOTNOTE);
+                       break;
+#endif
+               case 8:
+#ifndef NEW_INSETS
+                       tmpfunc->Dispatch(LFUN_MARGINMELT); break;
+#else
+                       tmpfunc->Dispatch(LFUN_INSET_MARGINAL);
+                       break;
+#endif
   
                case 9: // Float sub-menu
                 case 71:
+#ifndef NEW_INSETS
                        tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "figure");
                        break;
+#else
+                       tmpfunc->Dispatch(LFUN_INSET_FLOAT, "figure");
+                       break;
+#endif
                case 72:
+#ifndef NEW_INSETS
                        tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "table");
                        break;
+#else
+                       tmpfunc->Dispatch(LFUN_INSET_FLOAT, "table");
+                       break;
+#endif
                case 73:
+#ifndef NEW_INSETS
                        tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-fig");
                        break;
+#else
+                       tmpfunc->Dispatch(LFUN_INSET_FLOAT, "figure");
+                       break;
+#endif
                case 74:
+#ifndef NEW_INSETS
                        tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-tab");
                        break;
+#else
+                       tmpfunc->Dispatch(LFUN_INSET_FLOAT, "table");
+                       break;
+#endif
                case 75:
+#ifndef NEW_INSETS
                        tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "algorithm");
                        break;
-
+#else
+                       tmpfunc->Dispatch(LFUN_INSET_FLOAT, "algorithm");
+                       break;
+#endif
                case 10: // Table/List submenu
                        break;
                case 21: tmpfunc->Dispatch(LFUN_TOC_INSERT); break;
@@ -1863,9 +1905,9 @@ void Menus::ShowInsertMenu(FL_OBJECT * ob, long)
 
                case 12: tmpfunc->Dispatch(LFUN_INSERT_NOTE); break;
                case 13: tmpfunc->Dispatch(LFUN_INSERT_LABEL); break;
-               case 14: tmpfunc->Dispatch(LFUN_INSERT_REF); break;
-               case 15: tmpfunc->Dispatch(LFUN_CREATE_CITATION); break;
-               case 16: tmpfunc->Dispatch(LFUN_INDEX_INSERT); break;
+               case 14: tmpfunc->Dispatch(LFUN_REF_INSERT); break;
+               case 15: tmpfunc->Dispatch(LFUN_CITATION_CREATE); break;
+               case 16: tmpfunc->Dispatch(LFUN_INDEX_CREATE); break;
                case 17: tmpfunc->Dispatch(LFUN_INDEX_INSERT_LAST); break;
                case 18: tmpfunc->Dispatch(LFUN_URL); break;
                }
@@ -1955,7 +1997,7 @@ void Menus::ShowMathMenu(FL_OBJECT * ob, long)
                        tmpfunc->Dispatch(LFUN_MATH_DISPLAY);
                        break;
                case 9: /* Panel */
-                       show_symbols_form(tmpfunc);
+                       tmpfunc->Dispatch(LFUN_MATH_PANEL);
                        break;
                }
                men->currentView()->update(BufferView::SELECT|BufferView::FITCUR);
@@ -1977,17 +2019,15 @@ void Menus::ShowOptionsMenu(FL_OBJECT * ob, long)
        LyXFunc * tmpfunc = men->_view->getLyXFunc();
 
        int OptionsMenu = fl_defpup(FL_ObjWin(ob),
-                                   _("Screen Fonts..."
-                                     "|Spellchecker Options..."
+                                   _("|Spellchecker Options..."
                                      "|Keyboard...%l"
                                      "|Reconfigure"
                                      "|Preferences"));
 
-       fl_setpup_shortcut(OptionsMenu, 1, scex(_("OM|Ff#f#F")));
-       fl_setpup_shortcut(OptionsMenu, 2, scex(_("OM|Ss#s#S")));
-       fl_setpup_shortcut(OptionsMenu, 3, scex(_("OM|Kk#k#K")));
-       fl_setpup_shortcut(OptionsMenu, 4, scex(_("OM|Rr#r#R")));
-       fl_setpup_shortcut(OptionsMenu, 5, scex(_("OM|Pp#p#P")));
+       fl_setpup_shortcut(OptionsMenu, 1, scex(_("OM|Ss#s#S")));
+       fl_setpup_shortcut(OptionsMenu, 2, scex(_("OM|Kk#k#K")));
+       fl_setpup_shortcut(OptionsMenu, 3, scex(_("OM|Rr#r#R")));
+       fl_setpup_shortcut(OptionsMenu, 4, scex(_("OM|Pp#p#P")));
 
        if(lyxrc.isp_command == "none") 
                fl_setpup_mode(OptionsMenu, 2, FL_PUP_GREY);
@@ -2002,11 +2042,10 @@ void Menus::ShowOptionsMenu(FL_OBJECT * ob, long)
        fl_set_object_boxtype(ob, FL_FLAT_BOX);
        fl_redraw_object(ob);
        switch (choice){
-       case 1: men->ScreenOptions(); break;
-       case 2: SpellCheckerOptions(); break;      
-       case 3: men->_view->getIntl()->MenuKeymap(); break;
-       case 4: tmpfunc->Dispatch(LFUN_RECONFIGURE); break;
-       case 5: men->_view->getDialogs()->showPreferences(); break;
+       case 1: SpellCheckerOptions(); break;      
+       case 2: men->_view->getIntl()->MenuKeymap(); break;
+       case 3: tmpfunc->Dispatch(LFUN_RECONFIGURE); break;
+       case 4: men->_view->getDialogs()->showPreferences(); break;
        default: break;
        }   
        fl_freepup(OptionsMenu);