From 9e44cd672a3dad6f6ce967c7b24e3d1c28d9d784 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Fri, 19 Aug 2016 14:01:00 +0200 Subject: [PATCH] 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. (cherry picked from commit e7a33cacf171ee41609d6fe31e19eff6df1691bf and made compatible with C++98) --- src/frontends/qt4/Menus.cpp | 43 ++++++++++++++++--------------------- status.22x | 3 +++ 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/frontends/qt4/Menus.cpp b/src/frontends/qt4/Menus.cpp index ea32aace5b..a3acbb11e4 100644 --- a/src/frontends/qt4/Menus.cpp +++ b/src/frontends/qt4/Menus.cpp @@ -1617,47 +1617,42 @@ void MenuDefinition::expandCaptions(Buffer const * buf, bool switchcap) if (!buf) return; - vector caps; DocumentClass const & dc = buf->params().documentClass(); + typedef vector< pair > Caps; + Caps caps; TextClass::InsetLayouts::const_iterator lit = dc.insetLayouts().begin(); TextClass::InsetLayouts::const_iterator len = dc.insetLayouts().end(); for (; lit != len; ++lit) { - if (prefixIs(lit->first, from_ascii("Caption:"))) - caps.push_back(lit->first); + docstring instype; + docstring const type = split(lit->first, instype, ':'); + 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)) return; if (caps.size() == 1) { - docstring dummy; - docstring const type = split(*caps.begin(), dummy, ':'); - add(MenuItem(MenuItem::Command, qt_("Caption"), - FuncRequest(LFUN_CAPTION_INSERT, translateIfPossible(type)))); + add(MenuItem(MenuItem::Command, qt_("Caption"), caps.front().second)); return; } MenuDefinition captions; - - vector::const_iterator cit = caps.begin(); - vector::const_iterator end = caps.end(); - - for (int ii = 1; cit != end; ++cit, ++ii) { - docstring dummy; - docstring const type = split(*cit, dummy, ':'); + Caps::const_iterator cit = caps.begin(); + Caps::const_iterator end = caps.end(); + for ( ; cit != end; ++cit) { + docstring const type = cit->first; docstring const trtype = translateIfPossible(type); docstring const cmitem = bformat(_("Caption (%1$s)"), trtype); - // make menu item optional, otherwise we would also see - // forbidden caption types if (switchcap) - addWithStatusCheck(MenuItem(MenuItem::Command, toqstr(cmitem), - FuncRequest(LFUN_INSET_MODIFY, - from_ascii("changetype ") - + type), QString(), true)); + add(MenuItem(MenuItem::Command, toqstr(cmitem), cit->second)); else - captions.addWithStatusCheck(MenuItem(MenuItem::Command, - toqstr(trtype), - FuncRequest(LFUN_CAPTION_INSERT, - type), QString(), true)); + captions.add(MenuItem(MenuItem::Command, toqstr(trtype), cit->second)); } if (!captions.empty()) { MenuItem item(MenuItem::Submenu, qt_("Caption")); diff --git a/status.22x b/status.22x index 1ad21c346a..b27f6d7710 100644 --- a/status.22x +++ b/status.22x @@ -27,6 +27,9 @@ What's new - Names containing @ are now recognised by the syntax highlighter in the preamble. +- Replace Insert>Caption submenu by a normal entry when there is only one + caption type. + * DOCUMENTATION AND LOCALIZATION