#endif
#include <config.h>
+#include "support/LAssert.h"
#include "MenuBackend.h"
#include "lyxlex.h"
#include "LyXAction.h"
// 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:
lyxerr << "MenuItem(): LyX command `"
<< command << "' does not exist." << endl;
}
+ if (optional_)
+ lyxerr[Debug::GUI] << "Optional item "
+ << command << endl;
break;
case Submenu:
submenu_ = command;
}
}
-void Menu::add(MenuItem const & i)
+
+Menu & Menu::add(MenuItem const & i)
{
items_.push_back(i);
+ return *this;
}
md_documents,
md_endmenu,
md_lastfiles,
+ md_optitem,
md_submenu,
md_separator,
md_last
{ "end", md_endmenu },
{ "item", md_item },
{ "lastfiles", md_lastfiles },
+ { "optitem", md_optitem },
{ "separator", md_separator },
{ "submenu", md_submenu }
};
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:
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;
}
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 }
if (lyxerr.debugging(Debug::PARSER))
lex.printTable(lyxerr);
- string mlabel, mname;
bool quit = false;
while (lex.IsOK() && !quit) {
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");
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)) {
}
}
-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)
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)