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;
29 MenuItem::MenuItem(MenuItem const & m)
30 : kind_(m.kind_), label_(m.label_), action_(m.action_), submenu_(m.submenu_)
34 MenuItem::MenuItem(Kind kind, string const & label, string const & command)
35 : kind_(kind), label_(label)
43 action_ = lyxaction.LookupFunc(command);
45 if (action_ == LFUN_UNKNOWN_ACTION) {
46 lyxerr << "MenuItem(): LyX command `"
47 << command << "' does not exist." << endl;
56 void Menu::add(MenuItem const & i)
62 void Menu::read(LyXLex & lex)
74 struct keyword_item menutags[md_last-1] = {
75 { "documents", md_documents },
76 { "end", md_endmenu },
78 { "lastfiles", md_lastfiles },
79 { "separator", md_separator },
80 { "submenu", md_submenu }
83 lex.pushTable(menutags, md_last - 1);
84 if (lyxerr.debugging(Debug::PARSER))
85 lex.printTable(lyxerr);
90 while (lex.IsOK() && !quit) {
94 string name = lex.GetString();
96 string command = lex.GetString();
97 add(MenuItem(MenuItem::Command, name, command));
101 add(MenuItem(MenuItem::Separator));
104 add(MenuItem(MenuItem::Lastfiles));
107 add(MenuItem(MenuItem::Documents));
111 mlabel = lex.GetString();
113 mname = lex.GetString();
114 add(MenuItem(MenuItem::Submenu, mlabel, mname));
121 lex.printError("menubar::read: "
122 "Unknown menu tag: `$$Token'");
130 void MenuBackend::read(LyXLex & lex)
139 struct keyword_item menutags[md_last-1] = {
140 { "end", md_endmenuset },
142 { "menubar", md_menubar }
146 if (compare_no_case(lex.GetString(), "menuset"))
147 lyxerr << "Menubackend::read: ERROR wrong token:`"
148 << lex.GetString() << '\'' << endl;
150 lex.pushTable(menutags, md_last - 1);
151 if (lyxerr.debugging(Debug::PARSER))
152 lex.printTable(lyxerr);
154 string mlabel, mname;
157 while (lex.IsOK() && !quit) {
161 string name = lex.GetString();
162 Menu menu(name, false);
169 string name = lex.GetString();
170 Menu menubar(name, true);
179 lex.printError("menubackend::read: "
180 "Unknown menu tag: `$$Token'");
187 void MenuBackend::defaults()
189 if (menulist_.size() > 0)
192 lyxerr[Debug::GUI] << "MenuBackend::defaults: using default values"
196 file.add(MenuItem(MenuItem::Command,
197 "New...|N", "buffer-new"));
198 file.add(MenuItem(MenuItem::Command,
199 "Open...|O", "buffer-open"));
200 file.add(MenuItem(MenuItem::Submenu,
201 "Import|I", "import"));
202 file.add(MenuItem(MenuItem::Command,
203 "Quit|Q", "lyx-quit"));
204 file.add(MenuItem(MenuItem::Separator));
205 file.add(MenuItem(MenuItem::Lastfiles));
208 Menu import("import");
209 import.add(MenuItem(MenuItem::Command,
210 "LaTeX...|L", "buffer-import latex"));
211 import.add(MenuItem(MenuItem::Command,
212 "LinuxDoc...|L", "buffer-import linuxdoc"));
216 edit.add(MenuItem(MenuItem::Command,
218 edit.add(MenuItem(MenuItem::Command,
220 edit.add(MenuItem(MenuItem::Command,
222 edit.add(MenuItem(MenuItem::Command,
223 "Emphasize", "font-emph"));
226 Menu documents("documents");
227 documents.add(MenuItem(MenuItem::Documents));
230 Menu main("main", true);
231 main.add(MenuItem(MenuItem::Submenu, "File|F", "file"));
232 main.add(MenuItem(MenuItem::Submenu, "Edit|E", "edit"));
233 main.add(MenuItem(MenuItem::Submenu,
234 "Documents|D", "documents"));
237 Menu main_nobuffer("main_nobuffer", true);
238 main_nobuffer.add(MenuItem(MenuItem::Submenu,
242 if (lyxerr.debugging(Debug::GUI)) {
243 for(const_iterator cit = begin();
244 cit != end() ; ++cit)
245 lyxerr << "Menu name: " << cit->name()
246 << ", Menubar: " << cit->menubar()
251 void MenuBackend::add(Menu const &menu)
253 menulist_.push_back(menu);
256 bool MenuBackend::hasMenu(string const &name) const
258 for (const_iterator cit = begin(); cit != end(); ++cit) {
259 if ((*cit).name() == name)
265 Menu const & MenuBackend::getMenu(string const &name) const
267 for (const_iterator cit = begin(); cit != end(); ++cit) {
268 if ((*cit).name() == name)
271 Assert(false); // we actually require the name to exist.
272 return menulist_.front();