3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Jean-Marc Lasgouttes
9 * Full author contact details are available in file CREDITS.
15 #include "FuncRequest.h"
17 #include "LyXAction.h"
18 #include "qt_helpers.h"
20 #include "support/debug.h"
21 #include "support/gettext.h"
22 #include "support/lstrings.h"
24 #include <boost/bind.hpp>
29 using namespace lyx::support;
39 /////////////////////////////////////////////////////////////////////////
43 /////////////////////////////////////////////////////////////////////////
45 ToolbarItem::ToolbarItem(Type type, FuncRequest const & func, docstring const & label)
46 : type_(type), func_(func), label_(label)
51 ToolbarItem::ToolbarItem(Type type, string const & name, docstring const & label)
52 : type_(type), label_(label), name_(name)
57 void ToolbarInfo::add(ToolbarItem const & item)
59 items.push_back(item);
60 items.back().func_.origin = FuncRequest::TOOLBAR;
64 ToolbarInfo & ToolbarInfo::read(Lexer & lex)
78 struct LexerKeyword toolTags[] = {
79 { "end", TO_ENDTOOLBAR },
80 { "iconpalette", TO_ICONPALETTE },
81 { "item", TO_COMMAND },
82 { "layouts", TO_LAYOUTS },
83 { "minibuffer", TO_MINIBUFFER },
84 { "popupmenu", TO_POPUPMENU },
85 { "separator", TO_SEPARATOR },
86 { "stickypopupmenu", TO_STICKYPOPUPMENU },
87 { "tableinsert", TO_TABLEINSERT }
91 if (compare_ascii_no_case(lex.getString(), "toolbar")) {
92 LYXERR0("ToolbarInfo::read: ERROR wrong token:`"
93 << lex.getString() << '\'');
97 name = lex.getString();
100 gui_name = _(lex.getString());
102 // FIXME what to do here?
104 LYXERR0("ToolbarInfo::read: Malformed toolbar "
105 "description " << lex.getString());
111 lex.pushTable(toolTags);
113 if (lyxerr.debugging(Debug::PARSER))
114 lex.printTable(lyxerr);
116 while (lex.isOK() && !quit) {
119 if (lex.next(true)) {
120 docstring const tooltip = translateIfPossible(lex.getDocString());
122 string const func_arg = lex.getString();
123 LYXERR(Debug::PARSER, "ToolbarInfo::read TO_COMMAND func: `"
124 << func_arg << '\'');
127 lyxaction.lookupFunc(func_arg);
128 add(ToolbarItem(ToolbarItem::COMMAND, func, tooltip));
133 add(ToolbarItem(ToolbarItem::MINIBUFFER,
134 FuncRequest(FuncCode(ToolbarItem::MINIBUFFER))));
138 add(ToolbarItem(ToolbarItem::SEPARATOR,
139 FuncRequest(FuncCode(ToolbarItem::SEPARATOR))));
143 if (lex.next(true)) {
144 string const name = lex.getString();
146 docstring const label = lex.getDocString();
147 add(ToolbarItem(ToolbarItem::POPUPMENU, name, label));
151 case TO_STICKYPOPUPMENU:
152 if (lex.next(true)) {
153 string const name = lex.getString();
155 docstring const label = lex.getDocString();
156 add(ToolbarItem(ToolbarItem::STICKYPOPUPMENU, name, label));
161 if (lex.next(true)) {
162 string const name = lex.getString();
164 docstring const label = lex.getDocString();
165 add(ToolbarItem(ToolbarItem::ICONPALETTE, name, label));
170 add(ToolbarItem(ToolbarItem::LAYOUTS,
171 FuncRequest(FuncCode(ToolbarItem::LAYOUTS))));
175 if (lex.next(true)) {
176 docstring const tooltip = lex.getDocString();
177 add(ToolbarItem(ToolbarItem::TABLEINSERT,
178 FuncRequest(FuncCode(ToolbarItem::TABLEINSERT)), tooltip));
187 lex.printError("ToolbarInfo::read: "
188 "Unknown toolbar tag: `$$Token'");
199 /////////////////////////////////////////////////////////////////////////
203 /////////////////////////////////////////////////////////////////////////
205 void Toolbars::reset()
207 toolbar_info_.clear();
208 toolbar_visibility_.clear();
212 void Toolbars::readToolbars(Lexer & lex)
219 struct LexerKeyword toolTags[] = {
220 { "end", TO_ENDTOOLBARSET },
221 { "toolbar", TO_TOOLBAR }
225 if (compare_ascii_no_case(lex.getString(), "toolbarset")) {
226 LYXERR0("Toolbars::readToolbars: ERROR wrong token:`"
227 << lex.getString() << '\'');
230 lex.pushTable(toolTags);
232 if (lyxerr.debugging(Debug::PARSER))
233 lex.printTable(lyxerr);
236 while (lex.isOK() && !quit) {
241 toolbar_info_.push_back(tbinfo);
244 case TO_ENDTOOLBARSET:
248 lex.printError("Toolbars::readToolbars: "
249 "Unknown toolbar tag: `$$Token'");
258 void Toolbars::readToolbarSettings(Lexer & lex)
261 if (compare_ascii_no_case(lex.getString(), "toolbars")) {
262 LYXERR0("Toolbars::readToolbarSettings: ERROR wrong token:`"
263 << lex.getString() << '\'');
269 string name = lex.getString();
272 if (!compare_ascii_no_case(name, "end"))
276 string flagstr = lex.getString();
278 vector<string> flags = getVectorFromString(flagstr);
280 vector<string>::const_iterator cit = flags.begin();
281 vector<string>::const_iterator end = flags.end();
283 for (; cit != end; ++cit) {
284 Visibility flag = ON;
285 if (!compare_ascii_no_case(*cit, "off"))
287 else if (!compare_ascii_no_case(*cit, "on"))
289 else if (!compare_ascii_no_case(*cit, "math"))
291 else if (!compare_ascii_no_case(*cit, "table"))
293 else if (!compare_ascii_no_case(*cit, "mathmacrotemplate"))
294 flag = MATHMACROTEMPLATE;
295 else if (!compare_ascii_no_case(*cit, "review"))
297 else if (!compare_ascii_no_case(*cit, "top"))
299 else if (!compare_ascii_no_case(*cit, "bottom"))
301 else if (!compare_ascii_no_case(*cit, "left"))
303 else if (!compare_ascii_no_case(*cit, "right"))
305 else if (!compare_ascii_no_case(*cit, "auto"))
309 "Toolbars::readToolbarSettings: unrecognised token:`"
315 toolbar_visibility_[name] = visibility;
317 if (visibility >= MATH) {
318 if (ToolbarInfo const * ti = info(name))
319 const_cast<ToolbarInfo *>(ti)->gui_name +=
320 " (" + _("auto") + ")";
326 ToolbarInfo const * Toolbars::info(std::string const & name) const
328 Infos::const_iterator end = toolbar_info_.end();
329 for (Infos::const_iterator it = toolbar_info_.begin(); it != end; ++it)
330 if (it->name == name)
336 int Toolbars::defaultVisibility(std::string const & name) const
338 map<string, int>::const_iterator it = toolbar_visibility_.find(name);
339 if (it != toolbar_visibility_.end())
345 bool Toolbars::isMainToolbar(std::string const & name) const
347 return toolbar_visibility_.find(name) != toolbar_visibility_.end();
351 } // namespace frontend