1 /* This file is part of
2 * ======================================================
4 * LyX, The Document Processor
6 * Copyright 1995 Matthias Ettrich
7 * Copyright 1995-2000 The LyX Team.
10 * ====================================================== */
13 #pragma implementation
17 #include "MenuBackend.h"
19 #include "LyXAction.h"
22 extern LyXAction lyxaction;
26 // This is the global menu definition
27 MenuBackend menubackend;
30 MenuItem::MenuItem(Kind kind, string const & label, string const & command)
31 : kind_(kind), label_(label)
39 action_ = lyxaction.LookupFunc(command);
41 if (action_ == LFUN_UNKNOWN_ACTION) {
42 lyxerr << "MenuItem(): LyX command `"
43 << command << "' does not exist." << endl;
53 Menu & Menu::add(MenuItem const & i)
60 void Menu::read(LyXLex & lex)
72 struct keyword_item menutags[md_last-1] = {
73 { "documents", md_documents },
74 { "end", md_endmenu },
76 { "lastfiles", md_lastfiles },
77 { "separator", md_separator },
78 { "submenu", md_submenu }
81 lex.pushTable(menutags, md_last - 1);
82 if (lyxerr.debugging(Debug::PARSER))
83 lex.printTable(lyxerr);
87 while (lex.IsOK() && !quit) {
91 string name = lex.GetString();
93 string command = lex.GetString();
94 add(MenuItem(MenuItem::Command, name, command));
98 add(MenuItem(MenuItem::Separator));
101 add(MenuItem(MenuItem::Lastfiles));
104 add(MenuItem(MenuItem::Documents));
108 string mlabel = lex.GetString();
110 string mname = lex.GetString();
111 add(MenuItem(MenuItem::Submenu, mlabel, mname));
118 lex.printError("menubar::read: "
119 "Unknown menu tag: `$$Token'");
127 void MenuBackend::read(LyXLex & lex)
136 struct keyword_item menutags[md_last - 1] = {
137 { "end", md_endmenuset },
139 { "menubar", md_menubar }
143 if (compare_no_case(lex.GetString(), "menuset"))
144 lyxerr << "Menubackend::read: ERROR wrong token:`"
145 << lex.GetString() << '\'' << endl;
147 lex.pushTable(menutags, md_last - 1);
148 if (lyxerr.debugging(Debug::PARSER))
149 lex.printTable(lyxerr);
153 while (lex.IsOK() && !quit) {
157 string name = lex.GetString();
158 Menu menu(name, false);
165 string name = lex.GetString();
166 Menu menubar(name, true);
175 lex.printError("menubackend::read: "
176 "Unknown menu tag: `$$Token'");
184 void MenuBackend::defaults()
188 lyxerr[Debug::GUI] << "MenuBackend::defaults: using default values"
193 .add(MenuItem(MenuItem::Command, "New...|N", "buffer-new"))
194 .add(MenuItem(MenuItem::Command, "Open...|O", "buffer-open"))
195 .add(MenuItem(MenuItem::Submenu, "Import|I", "import"))
196 .add(MenuItem(MenuItem::Command, "Quit|Q", "lyx-quit"))
197 .add(MenuItem(MenuItem::Separator))
198 .add(MenuItem(MenuItem::Lastfiles));
201 Menu import("import");
203 .add(MenuItem(MenuItem::Command,
204 "LaTeX...|L", "buffer-import latex"))
205 .add(MenuItem(MenuItem::Command,
206 "LinuxDoc...|L", "buffer-import linuxdoc"));
211 .add(MenuItem(MenuItem::Command, "Cut", "cut"))
212 .add(MenuItem(MenuItem::Command, "Copy", "copy"))
213 .add(MenuItem(MenuItem::Command, "Paste", "paste"))
214 .add(MenuItem(MenuItem::Command, "Emphasize", "font-emph"));
217 Menu documents("documents");
218 documents.add(MenuItem(MenuItem::Documents));
221 Menu main("main", true);
223 .add(MenuItem(MenuItem::Submenu, "File|F", "file"))
224 .add(MenuItem(MenuItem::Submenu, "Edit|E", "edit"))
225 .add(MenuItem(MenuItem::Submenu,
226 "Documents|D", "documents"));
229 Menu main_nobuffer("main_nobuffer", true);
230 main_nobuffer.add(MenuItem(MenuItem::Submenu, "File|F", "file"));
233 if (lyxerr.debugging(Debug::GUI)) {
234 for(const_iterator cit = begin();
235 cit != end() ; ++cit)
236 lyxerr << "Menu name: " << cit->name()
237 << ", Menubar: " << cit->menubar()
243 void MenuBackend::add(Menu const & menu)
245 menulist_.push_back(menu);
249 bool MenuBackend::hasMenu(string const & name) const
251 for (const_iterator cit = begin(); cit != end(); ++cit) {
252 if ((*cit).name() == name)
259 Menu const & MenuBackend::getMenu(string const & name) const
261 for (const_iterator cit = begin(); cit != end(); ++cit) {
262 if ((*cit).name() == name)
265 Assert(false); // we actually require the name to exist.
266 return menulist_.front();