#include "LyX.h" // for lastfiles
#include "LyXFunc.h"
#include "Paragraph.h"
+#include "ParIterator.h"
#include "Session.h"
#include "TextClass.h"
#include "TocBackend.h"
-#include "ToolbarBackend.h"
+#include "Toolbars.h"
#include "insets/Inset.h"
#include "insets/InsetCitation.h"
+#include "insets/InsetGraphics.h"
#include "support/lassert.h"
#include "support/convert.h"
#include "support/debug.h"
+#include "support/docstring_list.h"
#include "support/filetools.h"
#include "support/gettext.h"
#include "support/lstrings.h"
#include <boost/shared_ptr.hpp>
#include <algorithm>
-#include <ostream>
#include <vector>
using namespace std;
/** Available branches in document */
Branches,
/** Available citation styles for a given citation */
- CiteStyles
+ CiteStyles,
+ /** Available graphics groups */
+ GraphicsGroups
};
explicit MenuItem(Kind kind) : kind_(kind), optional_(false) {}
// search for func in this menu iteratively, and put menu
// names in a stack.
- bool searchMenu(FuncRequest const & func, std::vector<docstring> & names)
+ bool searchMenu(FuncRequest const & func, docstring_list & names)
const;
///
bool hasFunc(FuncRequest const &) const;
void expandToolbars();
void expandBranches(Buffer const * buf);
void expandCiteStyles(BufferView const *);
+ void expandGraphicsGroups(BufferView const *);
///
ItemList items_;
///
}
if (enabled || !i.optional()) {
items_.push_back(i);
- items_.back().status().enabled(enabled);
+ items_.back().status().setEnabled(enabled);
}
}
else
md_floatlistinsert,
md_floatinsert,
md_pasterecent,
- md_toolbars
+ md_toolbars,
+ md_graphicsgroups
};
LexerKeyword menutags[] = {
{ "exportformats", md_exportformats },
{ "floatinsert", md_floatinsert },
{ "floatlistinsert", md_floatlistinsert },
+ { "graphicsgroups", md_graphicsgroups },
{ "importformats", md_importformats },
{ "item", md_item },
{ "lastfiles", md_lastfiles },
add(MenuItem(MenuItem::CiteStyles));
break;
+ case md_graphicsgroups:
+ add(MenuItem(MenuItem::GraphicsGroups));
+ break;
+
case md_optsubmenu:
optional = true;
// fallback to md_submenu
LYXERR0("Menu warning: menu entry \""
<< it1->label()
<< "\" does not contain shortcut `"
- << shortcut << "'." << endl);
+ << shortcut << "'.");
for (const_iterator it2 = begin(); it2 != it1 ; ++it2) {
if (!it2->shortcut().compare(shortcut, Qt::CaseInsensitive)) {
LYXERR0("Menu warning: menu entries "
<< '"' << it1->fulllabel()
<< "\" and \"" << it2->fulllabel()
- << "\" share the same shortcut."
- << endl);
+ << "\" share the same shortcut.");
}
}
}
}
-bool MenuDefinition::searchMenu(FuncRequest const & func, vector<docstring> & names) const
+bool MenuDefinition::searchMenu(FuncRequest const & func, docstring_list & names) const
{
const_iterator m = begin();
const_iterator m_end = end();
}
+void MenuDefinition::expandGraphicsGroups(BufferView const * bv)
+{
+ if (!bv)
+ return;
+ set<string> grp;
+ graphics::getGraphicsGroups(bv->buffer(), grp);
+ if (grp.empty())
+ return;
+
+ set<string>::const_iterator it = grp.begin();
+ set<string>::const_iterator end = grp.end();
+ add(MenuItem(MenuItem::Command, qt_("No Group"),
+ FuncRequest(LFUN_SET_GRAPHICS_GROUP)));
+ for (; it != end; it++) {
+ addWithStatusCheck(MenuItem(MenuItem::Command, toqstr(*it),
+ FuncRequest(LFUN_SET_GRAPHICS_GROUP, *it)));
+ }
+}
+
void MenuDefinition::expandLastfiles()
{
LastFilesSection::LastFiles const & lf = LyX::cref().session().lastFiles().lastFiles();
for (; fit != end ; ++fit) {
if ((*fit)->dummy())
continue;
- QString label = toqstr((*fit)->prettyname());
- QString const shortcut = toqstr((*fit)->shortcut());
+
+ docstring lab = from_utf8((*fit)->prettyname());
+ docstring scut = from_utf8((*fit)->shortcut());
+ docstring const tmplab = lab;
+
+ if (!scut.empty())
+ lab += char_type('|') + scut;
+ docstring lab_i18n = translateIfPossible(lab);
+ bool const untranslated = (lab == lab_i18n);
+ QString const shortcut = toqstr(split(lab_i18n, lab, '|'));
+ QString label = toqstr(lab);
+ if (untranslated)
+ // this might happen if the shortcut
+ // has been redefined
+ label = toqstr(translateIfPossible(tmplab));
switch (kind) {
case MenuItem::ImportFormats:
- // FIXME: This is a hack, we should rather solve
- // FIXME: bug 2488 instead.
- if ((*fit)->name() == "text")
- label = qt_("Plain Text");
- else if ((*fit)->name() == "textparagraph")
- label = qt_("Plain Text, Join Lines");
label += "...";
break;
case MenuItem::ViewFormats:
LASSERT(false, /**/);
break;
}
- // FIXME: if we had proper support for translating the
- // format names defined in configure.py, there would
- // not be a need to check whether the shortcut is
- // correct. If we add it uncondiitonally, it would
- // create useless warnings on bad shortcuts
- if (!shortcut.isEmpty() && label.contains(shortcut))
+ if (!shortcut.isEmpty())
label += '|' + shortcut;
if (buf)
for (; cit != end; ++cit) {
addWithStatusCheck(MenuItem(MenuItem::Command,
qt_(cit->second.listName()),
- FuncRequest(LFUN_FLOAT_LIST,
+ FuncRequest(LFUN_FLOAT_LIST_INSERT,
cit->second.type())));
}
}
if (cit->first == "tableofcontents")
continue;
- string const & floatName = floatlist.getType(cit->first).listName();
- QString label;
- bool in_other_list = true;
- if (!floatName.empty()) {
- label = qt_(floatName);
- in_other_list = false;
- }
- else if (cit->first == "child") {
- label = qt_("Child Documents");
- in_other_list = false;
- } else if (cit->first == "graphics")
- label = qt_("List of Graphics");
- else if (cit->first == "equation")
- label = qt_("List of Equations");
- else if (cit->first == "index")
- label = qt_("List of Indexes");
- else if (cit->first == "listing") {
- // FIXME: the listing navigate menu causes a crash for unknown
- // reason. See http://bugzilla.lyx.org/show_bug.cgi?id=4613
- // This is a temporary fix:
- //label = qt_("List of Listings");
- continue;
- }
- else if (cit->first == "marginalnote")
- label = qt_("List of Marginal notes");
- else if (cit->first == "note")
- label = qt_("List of Notes");
- else if (cit->first == "footnote")
- label = qt_("List of Footnotes");
- else if (cit->first == "label")
- label = qt_("Labels and References");
- else if (cit->first == "citation")
- label = qt_("List of Citations");
- else
- // This should not happen unless the entry is missing above.
- label = qt_("Other floats: ") + toqstr(cit->first);
-
MenuDefinition submenu;
-
if (cit->second.size() >= 30) {
FuncRequest f(LFUN_DIALOG_SHOW, "toc " + cit->first);
submenu.add(MenuItem(MenuItem::Command, qt_("Open Navigator..."), f));
TocIterator ccit = cit->second.begin();
TocIterator eend = cit->second.end();
for (; ccit != eend; ++ccit) {
- QString const label = limitStringLength(ccit->str());
- submenu.add(MenuItem(MenuItem::Command, label,
+ submenu.add(MenuItem(MenuItem::Command,
+ limitStringLength(ccit->str()),
FuncRequest(ccit->action())));
}
}
- MenuItem item(MenuItem::Submenu, label);
+ MenuItem item(MenuItem::Submenu, guiName(cit->first, buf->params()));
item.setSubmenu(submenu);
- if (in_other_list)
- other_lists.add(item);
- else {
+ if (floatlist.typeExist(cit->first) || cit->first == "child") {
+ // Those two types deserve to be in the main menu.
item.setSubmenu(submenu);
add(item);
- }
+ } else
+ other_lists.add(item);
}
if (!other_lists.empty()) {
MenuItem item(MenuItem::Submenu, qt_("Other Lists"));
add(item);
}
-
// Handle normal TOC
cit = toc_list.find("tableofcontents");
if (cit == end) {
addWithStatusCheck(MenuItem(MenuItem::Command,
qt_("No Table of contents"),
FuncRequest()));
- } else {
+ } else
expandToc2(cit->second, 0, cit->second.size(), 0);
- }
}
void MenuDefinition::expandPasteRecent()
{
- vector<docstring> const sel = cap::availableSelections();
+ docstring_list const sel = cap::availableSelections();
- vector<docstring>::const_iterator cit = sel.begin();
- vector<docstring>::const_iterator end = sel.end();
+ docstring_list::const_iterator cit = sel.begin();
+ docstring_list::const_iterator end = sel.end();
for (unsigned int index = 0; cit != end; ++cit, ++index) {
add(MenuItem(MenuItem::Command, toqstr(*cit),
void MenuDefinition::expandToolbars()
{
- //
+ MenuDefinition other_lists;
// extracts the toolbars from the backend
- ToolbarBackend::Toolbars::const_iterator cit = toolbarbackend.begin();
- ToolbarBackend::Toolbars::const_iterator end = toolbarbackend.end();
-
+ Toolbars::Infos::const_iterator cit = guiApp->toolbars().begin();
+ Toolbars::Infos::const_iterator end = guiApp->toolbars().end();
for (; cit != end; ++cit) {
- QString label = qt_(cit->gui_name);
- // frontends are not supposed to turn on/off toolbars,
- // if they cannot update ToolbarBackend::flags. That
- // is to say, ToolbarsBackend::flags should reflect
- // the true state of toolbars.
- //
- // menu is displayed as
- // on/off review
- // and
- // review (auto)
- // in the case of auto.
- if (cit->flags & ToolbarInfo::AUTO)
- label += qt_(" (auto)");
- add(MenuItem(MenuItem::Command, label,
- FuncRequest(LFUN_TOOLBAR_TOGGLE, cit->name + " allowauto")));
+ MenuItem const item(MenuItem::Command, qt_(cit->gui_name),
+ FuncRequest(LFUN_TOOLBAR_TOGGLE, cit->name));
+ if (guiApp->toolbars().isMainToolbar(cit->name))
+ add(item);
+ else
+ other_lists.add(item);
+ }
+
+ if (!other_lists.empty()) {
+ MenuItem item(MenuItem::Submenu, qt_("Other Toolbars"));
+ item.setSubmenu(other_lists);
+ add(item);
}
}
key = qstring_to_ucs4(toqstr(key).split(',')[0]);
vector<CiteStyle> citeStyleList = citeStyles(buf->params().citeEngine());
- vector<docstring> citeStrings =
+ docstring_list citeStrings =
buf->masterBibInfo().getCiteStrings(key, bv->buffer());
- vector<docstring>::const_iterator cit = citeStrings.begin();
- vector<docstring>::const_iterator end = citeStrings.end();
+ docstring_list::const_iterator cit = citeStrings.begin();
+ docstring_list::const_iterator end = citeStrings.end();
for (int ii = 1; cit != end; ++cit, ++ii) {
docstring label = *cit;
tomenu.expandToc(buf);
break;
+ case MenuItem::GraphicsGroups:
+ tomenu.expandGraphicsGroups(bv);
+ break;
+
case MenuItem::Submenu: {
MenuItem item(*cit);
item.setSubmenu(MenuDefinition(cit->submenuname()));
const_iterator cit = find_if(menulist_.begin(), menulist_.end(),
MenuNamesEqual(name));
if (cit == menulist_.end())
- lyxerr << "No submenu named " << name << endl;
+ LYXERR0("No submenu named " << name);
LASSERT(cit != menulist_.end(), /**/);
return (*cit);
}
iterator it = find_if(menulist_.begin(), menulist_.end(),
MenuNamesEqual(name));
if (it == menulist_.end())
- lyxerr << "No submenu named " << name << endl;
+ LYXERR0("No submenu named " << name);
LASSERT(it != menulist_.end(), /**/);
return (*it);
}
bool Menus::searchMenu(FuncRequest const & func,
- vector<docstring> & names) const
+ docstring_list & names) const
{
MenuDefinition menu;
d->expand(d->menubar_, menu, 0);