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..."
This commit is contained in:
Guillaume Munch 2015-08-31 03:43:30 +01:00
parent 12de677fcc
commit c02f6bd8a7
3 changed files with 42 additions and 18 deletions

View File

@ -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"));

View File

@ -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.

View File

@ -96,6 +96,8 @@ private:
///
std::string floattype_;
///
bool is_subfloat_;
///
std::string type_;
///
docstring custom_label_;