]> git.lyx.org Git - features.git/commitdiff
Simplify menus when there is only one caption type
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Fri, 19 Aug 2016 12:01:00 +0000 (14:01 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 29 Aug 2016 11:49:50 +0000 (13:49 +0200)
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
status.22x

index ea32aace5b7af5f28f3e480ff5eba460437534e4..a3acbb11e4d1ec6b3eca6f67f765e139e329a3f5 100644 (file)
@@ -1617,47 +1617,42 @@ void MenuDefinition::expandCaptions(Buffer const * buf, bool switchcap)
        if (!buf)
                return;
 
-       vector<docstring> caps;
        DocumentClass const & dc = buf->params().documentClass();
+       typedef vector< pair<docstring, FuncRequest> > 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<docstring>::const_iterator cit = caps.begin();
-       vector<docstring>::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"));
index 1ad21c346a4ca9733305db92eb92b532ed69e740..b27f6d771091dd3bea20f12754354d906338c998 100644 (file)
@@ -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