]> git.lyx.org Git - lyx.git/blobdiff - src/MenuBackend.C
bug 183
[lyx.git] / src / MenuBackend.C
index f7aaa81e460be287a830d3db861ba7a1d1872da2..de6b67c0a181569acd798a36a52a345f21266430 100644 (file)
 #pragma implementation
 #endif
 
+#include <algorithm>
 #include "MenuBackend.h"
 #include "lyxlex.h"
 #include "LyXAction.h"
 #include "debug.h"
 #include "gettext.h"
 #include "lastfiles.h"
+#include "lyx_main.h" // for lastfiles
 #include "bufferlist.h"
 #include "converter.h"
 #include "exporter.h"
@@ -29,9 +31,9 @@
 #include "support/LAssert.h"
 #include "support/filetools.h"
 #include "support/lyxfunctional.h"
+#include "support/lstrings.h"
 
 extern LyXAction lyxaction;
-extern LastFiles * lastfiles; 
 extern BufferList bufferlist;
 
 using std::endl;
@@ -78,6 +80,18 @@ MenuItem::MenuItem(Kind kind, string const & label,
 }
 
 
+string const MenuItem::label() const 
+{ 
+       return token(label_, '|', 0); 
+}
+
+
+string const MenuItem::shortcut() const
+{ 
+       return token(label_, '|', 1); 
+}
+
+
 Menu & Menu::add(MenuItem const & i)
 {
        items_.push_back(i);
@@ -129,16 +143,16 @@ Menu & Menu::read(LyXLex & lex)
        bool quit = false;
        bool optional = false;
 
-       while (lex.IsOK() && !quit) {
+       while (lex.isOK() && !quit) {
                switch (lex.lex()) {
                case md_optitem:
                        optional = true;
                        // fallback to md_item
                case md_item: {
-                       lex.next();
-                       string const name = _(lex.GetString());
-                       lex.next();
-                       string const command = lex.GetString();
+                       lex.next(true);
+                       string const name = _(lex.getString());
+                       lex.next(true);
+                       string const command = lex.getString();
                        add(MenuItem(MenuItem::Command, name, 
                                     command, optional));
                        optional = false;
@@ -186,10 +200,10 @@ Menu & Menu::read(LyXLex & lex)
                        break;
                        
                case md_submenu: {
-                       lex.next();
-                       string mlabel = _(lex.GetString());
-                       lex.next();
-                       string mname = lex.GetString();
+                       lex.next(true);
+                       string const mlabel = _(lex.getString());
+                       lex.next(true);
+                       string const mname = lex.getString();
                        add(MenuItem(MenuItem::Submenu, mlabel, mname));
                        break;
                }
@@ -251,7 +265,7 @@ void Menu::expand(Menu & tomenu, Buffer * buf) const
 {
        for (const_iterator cit = begin();
             cit != end() ; ++cit) {
-               switch ((*cit).kind()) {
+               switch (cit->kind()) {
                case MenuItem::Lastfiles: {
                        int ii = 1;
                        LastFiles::const_iterator lfit = lastfiles->begin();
@@ -305,7 +319,7 @@ void Menu::expand(Menu & tomenu, Buffer * buf) const
                        Formats formats;
                        
                        kb_action action;
-                       switch ((*cit).kind()) {
+                       switch (cit->kind()) {
                        case MenuItem::ImportFormats:
                                formats = Importer::GetImportableFormats();
                                action = LFUN_IMPORT;
@@ -331,7 +345,7 @@ void Menu::expand(Menu & tomenu, Buffer * buf) const
                                if ((*fit)->dummy())
                                        continue;
                                string label = (*fit)->prettyname();
-                               if ((*cit).kind() == MenuItem::ImportFormats)
+                               if (cit->kind() == MenuItem::ImportFormats)
                                        if ((*fit)->name() == "text")
                                                label = _("Ascii text as lines");
                                        else if ((*fit)->name() == "textparagraph")
@@ -355,8 +369,7 @@ void Menu::expand(Menu & tomenu, Buffer * buf) const
                                int const action =  lyxaction
                                        .getPseudoAction(LFUN_FLOAT_LIST,
                                                         cit->second.type());
-                               string label = "List of ";
-                               label += cit->second.name();
+                               string const label = cit->second.name() + _(" List");
                                tomenu.add(MenuItem(MenuItem::Command,
                                                    label, action));
                        }
@@ -368,12 +381,21 @@ void Menu::expand(Menu & tomenu, Buffer * buf) const
                        FloatList::const_iterator cit = floatList.begin();
                        FloatList::const_iterator end = floatList.end();
                        for (; cit != end; ++cit) {
+                               // normal float
                                int const action = lyxaction
                                        .getPseudoAction(LFUN_INSET_FLOAT,
                                                         cit->second.type());
                                string const label = cit->second.name();
                                tomenu.add(MenuItem(MenuItem::Command,
                                                    label, action));
+                               
+                               // and the wide version
+                               int const action2 = lyxaction
+                                       .getPseudoAction(LFUN_INSET_WIDE_FLOAT,
+                                                        cit->second.type());
+                               string const label2 = _("Wide ") + label;
+                               tomenu.add(MenuItem(MenuItem::Command,
+                                                   label2, action2));
                        }
                }
                break;
@@ -412,9 +434,10 @@ void MenuBackend::read(LyXLex & lex)
        };
 
        //consistency check
-       if (compare_no_case(lex.GetString(), "menuset"))
+       if (compare_no_case(lex.getString(), "menuset")) {
                lyxerr << "Menubackend::read: ERROR wrong token:`"
-                      << lex.GetString() << '\'' << endl;
+                      << lex.getString() << '\'' << endl;
+       }
 
        lex.pushTable(menutags, md_last - 1);
        if (lyxerr.debugging(Debug::PARSER))
@@ -423,14 +446,14 @@ void MenuBackend::read(LyXLex & lex)
        bool quit = false;
        bool menubar = false;
 
-       while (lex.IsOK() && !quit) {
+       while (lex.isOK() && !quit) {
                switch (lex.lex()) {
                case md_menubar: 
                        menubar = true;
                        // fallback to md_menu
                case md_menu: {
-                       lex.next();
-                       string name = lex.GetString();
+                       lex.next(true);
+                       string const name = lex.getString();
                        if (hasMenu(name)) {
                                if (getMenu(name).menubar() == menubar) {
                                        getMenu(name).read(lex);