From c02f6bd8a7953a2d72f58a8c4204415e40b5aa74 Mon Sep 17 00:00:00 2001 From: Guillaume Munch Date: Mon, 31 Aug 2015 03:43:30 +0100 Subject: [PATCH] Do not show subfigures in the menu (bug #9759) * More consistent behavour (no 30 elements limit) * Subfloats are given depth 1 * Only show depth 0 * Always show "Open outliner..." --- src/frontends/qt4/Menus.cpp | 50 ++++++++++++++++++++++++++----------- src/insets/InsetCaption.cpp | 8 +++--- src/insets/InsetCaption.h | 2 ++ 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/frontends/qt4/Menus.cpp b/src/frontends/qt4/Menus.cpp index d0b5d91bcb..b8b8c31004 100644 --- a/src/frontends/qt4/Menus.cpp +++ b/src/frontends/qt4/Menus.cpp @@ -1312,27 +1312,49 @@ void MenuDefinition::expandToc(Buffer const * buf) continue; MenuDefinition submenu; - if (cit->second.size() >= 30) { - FuncRequest f(LFUN_DIALOG_SHOW, "toc " + cit->first); - submenu.add(MenuItem(MenuItem::Command, qt_("Open Navigator..."), f)); - } else { + if (floatlist.typeExist(cit->first)) { TocIterator ccit = cit->second.begin(); TocIterator eend = cit->second.end(); for (; ccit != eend; ++ccit) { - submenu.add(MenuItem(MenuItem::Command, - limitStringLength(ccit->str()) + '|', - FuncRequest(ccit->action()))); + if (0 == ccit->depth()) {// omit subfloats + submenu.add(MenuItem(MenuItem::Command, + limitStringLength(ccit->str()) + '|', + FuncRequest(ccit->action()))); + } } - } - MenuItem item(MenuItem::Submenu, guiName(cit->first, buf->params())); - item.setSubmenu(submenu); - if (floatlist.typeExist(cit->first) || cit->first == "child") { - // Those two types deserve to be in the main menu. + FuncRequest f(LFUN_DIALOG_SHOW, "toc " + cit->first); + submenu.add(MenuItem(MenuItem::Separator)); + submenu.add(MenuItem(MenuItem::Command, qt_("Open Navigator..."), f)); + MenuItem item(MenuItem::Submenu, guiName(cit->first, buf->params())); + // deserves to be in the main menu. item.setSubmenu(submenu); add(item); - } else - other_lists.add(item); + } else { + if (cit->second.size() >= 30) { + // FIXME: the behaviour of the interface should not change + // arbitrarily. Each type should be audited to see if the list + // can be optimised like for floats above. + FuncRequest f(LFUN_DIALOG_SHOW, "toc " + cit->first); + submenu.add(MenuItem(MenuItem::Command, qt_("Open Navigator..."), f)); + } else { + TocIterator ccit = cit->second.begin(); + TocIterator eend = cit->second.end(); + for (; ccit != eend; ++ccit) { + submenu.add(MenuItem(MenuItem::Command, + limitStringLength(ccit->str()) + '|', + FuncRequest(ccit->action()))); + } + } + + MenuItem item(MenuItem::Submenu, guiName(cit->first, buf->params())); + item.setSubmenu(submenu); + if (cit->first == "child") { + // deserves to be in the main menu. + add(item); + } else + other_lists.add(item); + } } if (!other_lists.empty()) { MenuItem item(MenuItem::Submenu, qt_("Other Lists")); diff --git a/src/insets/InsetCaption.cpp b/src/insets/InsetCaption.cpp index 2465e7a727..b83246920c 100644 --- a/src/insets/InsetCaption.cpp +++ b/src/insets/InsetCaption.cpp @@ -102,7 +102,7 @@ void InsetCaption::addToToc(DocIterator const & cpit, bool output_active) const docstring str = full_label_; int length = output_active ? INT_MAX : TOC_ENTRY_LENGTH; text().forOutliner(str, length); - toc.push_back(TocItem(pit, 0, str, output_active)); + toc.push_back(TocItem(pit, is_subfloat_ ? 1 : 0, str, output_active)); // Proceed with the rest of the inset. InsetText::addToToc(cpit, output_active); @@ -379,7 +379,7 @@ void InsetCaption::updateBuffer(ParIterator const & it, UpdateType utype) else name = master.B_(tclass.floats().getType(type).name()); docstring counter = from_utf8(type); - if (cnts.isSubfloat()) { + if ((is_subfloat_ = cnts.isSubfloat())) { // only standard captions allowed in subfloats type_ = "Standard"; counter = "sub-" + from_utf8(type); @@ -402,9 +402,9 @@ void InsetCaption::updateBuffer(ParIterator const & it, UpdateType utype) sec += bformat(from_ascii("(%1$s)"), labelstring); } if (!sec.empty()) - full_label_ = bformat(from_ascii("%1$s %2$s:"), name, sec); + full_label_ = bformat(from_ascii("%1$s %2$s: "), name, sec); else - full_label_ = bformat(from_ascii("%1$s #:"), name); + full_label_ = bformat(from_ascii("%1$s #: "), name); } // Do the real work now. diff --git a/src/insets/InsetCaption.h b/src/insets/InsetCaption.h index 26b3b26041..97f2691629 100644 --- a/src/insets/InsetCaption.h +++ b/src/insets/InsetCaption.h @@ -96,6 +96,8 @@ private: /// std::string floattype_; /// + bool is_subfloat_; + /// std::string type_; /// docstring custom_label_;