const_iterator end() const { return items_.end(); }
///
void cat(MenuDefinition const & other);
const_iterator end() const { return items_.end(); }
///
void cat(MenuDefinition const & other);
+ ///
+ void catSub(docstring const & name);
// search for func in this menu iteratively, and put menu
// names in a stack.
// search for func in this menu iteratively, and put menu
// names in a stack.
+void MenuDefinition::catSub(docstring const & name)
+{
+ add(MenuItem(MenuItem::Submenu,
+ qt_("More..."), toqstr(name), QString(), false));
+}
+
void MenuDefinition::cat(MenuDefinition const & other)
{
const_iterator et = other.end();
void MenuDefinition::cat(MenuDefinition const & other)
{
const_iterator et = other.end();
- fromLyxMenu.cat(d->getMenu(toqstr(menu_name)));
+ MenuDefinition cat_menu = d->getMenu(toqstr(menu_name));
+ //FIXME: 50 is a wild guess. We should take into account here
+ //the expansion of menu items, disabled optional items etc.
+ bool const in_sub_menu = fromLyxMenu.size() > 0
+ && fromLyxMenu.size() + cat_menu.size() > 50 ;
+ if (in_sub_menu)
+ fromLyxMenu.catSub(menu_name);
+ else
+ fromLyxMenu.cat(cat_menu);
fromLyxMenu.add(MenuItem(MenuItem::Separator));
}
fromLyxMenu.add(MenuItem(MenuItem::Separator));
}