]> git.lyx.org Git - lyx.git/blobdiff - src/MenuBackend.C
Fix small bug in reading \set_color in lyxrc
[lyx.git] / src / MenuBackend.C
index c95866a0d6eec03cd9053197b2ea146a0ff3caeb..d7dd0f618731f1d1b0071246f4429114a44b846e 100644 (file)
@@ -14,6 +14,7 @@
 #endif
 
 #include <config.h>
+#include "support/LAssert.h"
 #include "MenuBackend.h"
 #include "lyxlex.h"
 #include "LyXAction.h"
@@ -26,13 +27,10 @@ using std::endl;
 // This is the global menu definition
 MenuBackend menubackend;
 
-MenuItem::MenuItem(MenuItem const & m) 
-  : kind_(m.kind_), label_(m.label_), action_(m.action_), submenu_(m.submenu_) 
-{}
 
-
-MenuItem::MenuItem(Kind kind, string const & label, string const & command
-  : kind_(kind), label_(label) 
+MenuItem::MenuItem(Kind kind, string const & label, 
+                  string const & command, bool optional
+       : kind_(kind), label_(label), optional_(optional)
 {
        switch(kind) {
        case Separator:
@@ -46,6 +44,9 @@ MenuItem::MenuItem(Kind kind, string const & label, string const & command)
                        lyxerr << "MenuItem(): LyX command `"
                               << command << "' does not exist." << endl; 
                }
+               if (optional_)
+                       lyxerr[Debug::GUI] << "Optional item " 
+                                          << command << endl; 
                break;
        case Submenu:
                submenu_ = command;
@@ -53,9 +54,11 @@ MenuItem::MenuItem(Kind kind, string const & label, string const & command)
        }
 }
 
-void Menu::add(MenuItem const & i)
+
+Menu & Menu::add(MenuItem const & i)
 {
        items_.push_back(i);
+       return *this;
 }
 
 
@@ -66,6 +69,7 @@ void Menu::read(LyXLex & lex)
                md_documents,
                md_endmenu,
                md_lastfiles,
+               md_optitem,
                md_submenu,
                md_separator,
                md_last
@@ -76,6 +80,7 @@ void Menu::read(LyXLex & lex)
                { "end", md_endmenu },
                { "item", md_item },
                { "lastfiles", md_lastfiles },
+               { "optitem", md_optitem }, 
                { "separator", md_separator },
                { "submenu", md_submenu }
        };
@@ -84,17 +89,22 @@ void Menu::read(LyXLex & lex)
        if (lyxerr.debugging(Debug::PARSER))
                lex.printTable(lyxerr);
 
-       string mlabel, mname;
        bool quit = false;
+       bool optional = false;
 
        while (lex.IsOK() && !quit) {
                switch(lex.lex()) {
+               case md_optitem:
+                       optional = true;
+                       // fallback to md_item
                case md_item: {
                        lex.next();
                        string name = lex.GetString();
                        lex.next();
                        string command = lex.GetString();
-                       add(MenuItem(MenuItem::Command, name, command));
+                       add(MenuItem(MenuItem::Command, name, 
+                                    command, optional));
+                       optional = false;
                        break;
                }
                case md_separator:
@@ -108,9 +118,9 @@ void Menu::read(LyXLex & lex)
                        break;
                case md_submenu: {
                        lex.next();
-                       mlabel = lex.GetString();
+                       string mlabel = lex.GetString();
                        lex.next();
-                       mname = lex.GetString();
+                       string mname = lex.GetString();
                        add(MenuItem(MenuItem::Submenu, mlabel, mname));
                        break;
                }
@@ -136,7 +146,7 @@ void MenuBackend::read(LyXLex & lex)
                md_last
        };
 
-       struct keyword_item menutags[md_last-1] = {
+       struct keyword_item menutags[md_last - 1] = {
                { "end", md_endmenuset },
                { "menu", md_menu },
                { "menubar", md_menubar }
@@ -151,7 +161,6 @@ void MenuBackend::read(LyXLex & lex)
        if (lyxerr.debugging(Debug::PARSER))
                lex.printTable(lyxerr);
 
-       string mlabel, mname;
        bool quit = false;
 
        while (lex.IsOK() && !quit) {
@@ -184,43 +193,38 @@ void MenuBackend::read(LyXLex & lex)
        lex.popTable();
 }
 
+
 void MenuBackend::defaults()
 {
-       if (menulist_.size() > 0)
-               menulist_.clear();
+       menulist_.clear();
 
        lyxerr[Debug::GUI] << "MenuBackend::defaults: using default values" 
                           << endl;
 
        Menu file("file");
-       file.add(MenuItem(MenuItem::Command,
-                         "New...|N", "buffer-new"));
-       file.add(MenuItem(MenuItem::Command,
-                         "Open...|O", "buffer-open"));
-       file.add(MenuItem(MenuItem::Submenu,
-                         "Import|I", "import"));
-       file.add(MenuItem(MenuItem::Command,
-                         "Quit|Q", "lyx-quit"));
-       file.add(MenuItem(MenuItem::Separator));
-       file.add(MenuItem(MenuItem::Lastfiles));
+       file
+               .add(MenuItem(MenuItem::Command, "New...|N", "buffer-new"))
+               .add(MenuItem(MenuItem::Command, "Open...|O", "buffer-open"))
+               .add(MenuItem(MenuItem::Submenu, "Import|I", "import"))
+               .add(MenuItem(MenuItem::Command, "Quit|Q", "lyx-quit"))
+               .add(MenuItem(MenuItem::Separator))
+               .add(MenuItem(MenuItem::Lastfiles));
        add(file);
 
        Menu import("import");
-       import.add(MenuItem(MenuItem::Command,
-                           "LaTeX...|L", "buffer-import latex"));
-       import.add(MenuItem(MenuItem::Command,
-                           "LinuxDoc...|L", "buffer-import linuxdoc"));
+       import
+               .add(MenuItem(MenuItem::Command,
+                             "LaTeX...|L", "buffer-import latex"))
+               .add(MenuItem(MenuItem::Command,
+                             "LinuxDoc...|L", "buffer-import linuxdoc"));
        add(import);
  
        Menu edit("edit");
-       edit.add(MenuItem(MenuItem::Command,
-                         "Cut", "cut"));
-       edit.add(MenuItem(MenuItem::Command,
-                         "Copy", "copy"));
-       edit.add(MenuItem(MenuItem::Command,
-                         "Paste", "paste"));
-       edit.add(MenuItem(MenuItem::Command,
-                         "Emphasize", "font-emph"));
+       edit
+               .add(MenuItem(MenuItem::Command, "Cut", "cut"))
+               .add(MenuItem(MenuItem::Command, "Copy", "copy"))
+               .add(MenuItem(MenuItem::Command, "Paste", "paste"))
+               .add(MenuItem(MenuItem::Command, "Emphasize", "font-emph"));
        add(edit);
 
        Menu documents("documents");
@@ -228,15 +232,15 @@ void MenuBackend::defaults()
        add(documents);
 
        Menu main("main", true);
-       main.add(MenuItem(MenuItem::Submenu, "File|F", "file"));
-       main.add(MenuItem(MenuItem::Submenu, "Edit|E", "edit"));
-       main.add(MenuItem(MenuItem::Submenu, 
-                         "Documents|D", "documents"));
+       main
+               .add(MenuItem(MenuItem::Submenu, "File|F", "file"))
+               .add(MenuItem(MenuItem::Submenu, "Edit|E", "edit"))
+               .add(MenuItem(MenuItem::Submenu, 
+                             "Documents|D", "documents"));
        add(main);
 
        Menu main_nobuffer("main_nobuffer", true);
-       main_nobuffer.add(MenuItem(MenuItem::Submenu, 
-                                  "File|F", "file"));
+       main_nobuffer.add(MenuItem(MenuItem::Submenu, "File|F", "file"));
        add(main_nobuffer);
 
        if (lyxerr.debugging(Debug::GUI)) {
@@ -248,12 +252,14 @@ void MenuBackend::defaults()
        }
 }
 
-void MenuBackend::add(Menu const &menu)
+
+void MenuBackend::add(Menu const & menu)
 {
        menulist_.push_back(menu);
 }
 
-bool MenuBackend::hasMenu(string const &name) const
+
+bool MenuBackend::hasMenu(string const & name) const
 {
        for (const_iterator cit = begin(); cit != end(); ++cit) {
                if ((*cit).name() == name)
@@ -262,7 +268,8 @@ bool MenuBackend::hasMenu(string const &name) const
        return false;
 }
 
-Menu const & MenuBackend::getMenu(string const &name) const
+
+Menu const & MenuBackend::getMenu(string const & name) const
 {
        for (const_iterator cit = begin(); cit != end(); ++cit) {
                if ((*cit).name() == name)