Simplify menus when there is only one caption type

This removes the submenu indirection in Insert and the type changer in
contextual menu. Interestingly, the code was there, but it did not
work at all.
This commit is contained in:
Jean-Marc Lasgouttes 2016-08-19 14:01:00 +02:00
parent 3c9d5d3cda
commit e7a33cacf1

View File

@ -1613,47 +1613,37 @@ void MenuDefinition::expandCaptions(Buffer const * buf, bool switchcap)
if (!buf) if (!buf)
return; return;
vector<docstring> caps;
DocumentClass const & dc = buf->params().documentClass(); DocumentClass const & dc = buf->params().documentClass();
TextClass::InsetLayouts::const_iterator lit = dc.insetLayouts().begin(); vector< pair<docstring, FuncRequest> > caps;
TextClass::InsetLayouts::const_iterator len = dc.insetLayouts().end(); for (pair<docstring, InsetLayout> const & il : dc.insetLayouts()) {
for (; lit != len; ++lit) { docstring instype;
if (prefixIs(lit->first, from_ascii("Caption:"))) docstring const type = split(il.first, instype, ':');
caps.push_back(lit->first); if (instype == "Caption") {
// skip forbidden caption types
FuncRequest const cmd = switchcap
? FuncRequest(LFUN_INSET_MODIFY, from_ascii("changetype ") + type)
: FuncRequest(LFUN_CAPTION_INSERT, type);
if (getStatus(cmd).enabled())
caps.push_back(make_pair(type, cmd));
}
} }
if (caps.empty() || (switchcap && caps.size() == 1)) if (caps.empty() || (switchcap && caps.size() == 1))
return; return;
if (caps.size() == 1) { if (caps.size() == 1) {
docstring dummy; add(MenuItem(MenuItem::Command, qt_("Caption"), caps.front().second));
docstring const type = split(*caps.begin(), dummy, ':');
add(MenuItem(MenuItem::Command, qt_("Caption"),
FuncRequest(LFUN_CAPTION_INSERT, translateIfPossible(type))));
return; return;
} }
MenuDefinition captions; MenuDefinition captions;
for (pair<docstring, FuncRequest> const & cap : caps) {
vector<docstring>::const_iterator cit = caps.begin(); docstring const type = cap.first;
vector<docstring>::const_iterator end = caps.end();
for (int ii = 1; cit != end; ++cit, ++ii) {
docstring dummy;
docstring const type = split(*cit, dummy, ':');
docstring const trtype = translateIfPossible(type); docstring const trtype = translateIfPossible(type);
docstring const cmitem = bformat(_("Caption (%1$s)"), trtype); docstring const cmitem = bformat(_("Caption (%1$s)"), trtype);
// make menu item optional, otherwise we would also see
// forbidden caption types
if (switchcap) if (switchcap)
addWithStatusCheck(MenuItem(MenuItem::Command, toqstr(cmitem), add(MenuItem(MenuItem::Command, toqstr(cmitem), cap.second));
FuncRequest(LFUN_INSET_MODIFY,
from_ascii("changetype ")
+ type), QString(), true));
else else
captions.addWithStatusCheck(MenuItem(MenuItem::Command, captions.add(MenuItem(MenuItem::Command, toqstr(trtype), cap.second));
toqstr(trtype),
FuncRequest(LFUN_CAPTION_INSERT,
type), QString(), true));
} }
if (!captions.empty()) { if (!captions.empty()) {
MenuItem item(MenuItem::Submenu, qt_("Caption")); MenuItem item(MenuItem::Submenu, qt_("Caption"));