Fix bug #7224. This allows two different floats to declare the same

ListCommand without our writing it to the menu twice. There's a minor
annoyance, which is that we always take the list name from the first
declaration of the Float, but it's not clear whether this is a real
issue.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37424 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2011-02-02 17:11:56 +00:00
parent 5dcac0b5c5
commit 32ab2ff2b7
2 changed files with 16 additions and 4 deletions

View File

@ -221,6 +221,7 @@ Float
NumberWithin none
Style plain
ListName "List of Tables"
ListCommand listoftables
NeedsFloatPkg false
End
@ -232,6 +233,7 @@ Float
NumberWithin none
Style plain
ListName "List of Figures"
ListCommand listoffigures
NeedsFloatPkg false
End

View File

@ -1094,11 +1094,21 @@ void MenuDefinition::expandFloatListInsert(Buffer const * buf)
FloatList const & floats = buf->params().documentClass().floats();
FloatList::const_iterator cit = floats.begin();
FloatList::const_iterator end = floats.end();
set<string> seen;
for (; cit != end; ++cit) {
addWithStatusCheck(MenuItem(MenuItem::Command,
qt_(cit->second.listName()),
FuncRequest(LFUN_FLOAT_LIST_INSERT,
cit->second.floattype())));
// Different floats could declare the same ListCommand. We only
// want it on the list once, though.
string const & list_cmd = cit->second.listCommand();
// This form of insert returns an iterator pointing to the newly
// inserted element OR the existing element with that value, and
// a bool indicating whether we inserted a new element. So we can
// see if one is there and insert it if not all at once.
pair<set<string>::iterator, bool> ret = seen.insert(list_cmd);
if (!ret.second)
continue;
string const & list_name = cit->second.listName();
addWithStatusCheck(MenuItem(MenuItem::Command, qt_(list_name),
FuncRequest(LFUN_FLOAT_LIST_INSERT, cit->second.floattype())));
}
}