X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FMenuBackend.C;h=294599d1cf3e0042c23799418b6aea525c7b3c9b;hb=37e82a546392d43f787826b85481a11f2a27af15;hp=7eb3166240c89da740ae6fb440557141c30e2617;hpb=0d43ba149a41e8860dde316ccbd4336d6b0bbdfa;p=lyx.git diff --git a/src/MenuBackend.C b/src/MenuBackend.C index 7eb3166240..294599d1cf 100644 --- a/src/MenuBackend.C +++ b/src/MenuBackend.C @@ -105,7 +105,9 @@ MenuItem::MenuItem(Kind kind, string const & label, MenuItem::MenuItem(Kind kind, string const & label, FuncRequest const & func, bool optional) : kind_(kind), label_(label), func_(func), optional_(optional) -{} +{ + func_.origin = FuncRequest::UI; +} MenuItem::~MenuItem() @@ -137,13 +139,13 @@ string const MenuItem::binding() const // Get the keys bound to this action, but keep only the // first one later - string bindings = toplevel_keymap->findbinding(func_); + kb_keymap::Bindings bindings = toplevel_keymap->findbindings(func_); - if (!bindings.empty()) { - return bindings.substr(1, bindings.find(']') - 1); + if (bindings.size()) { + return bindings.begin()->print(); } else { lyxerr[Debug::KBMAP] - << "No bindings for " + << "No binding for " << lyxaction.getActionName(func_.action) << '(' << func_.argument << ')' << endl; return string(); @@ -357,6 +359,20 @@ Menu & Menu::read(LyXLex & lex) } +MenuItem const & Menu::operator[](size_type i) const +{ + return items_[i]; +} + + +bool Menu::hasFunc(FuncRequest const & func) const +{ + return find_if(begin(), end(), + bind(std::equal_to(), + bind(&MenuItem::func, _1), + func)) != end(); +} + void Menu::checkShortcuts() const { // This is a quadratic algorithm, but we do not care because @@ -383,6 +399,13 @@ void Menu::checkShortcuts() const } +void MenuBackend::specialMenu(string const &name) +{ + if (hasMenu(name)) + specialmenu_ = &getMenu(name); +} + + namespace { class compare_format { @@ -775,8 +798,14 @@ void MenuBackend::expand(Menu const & frommenu, Menu & tomenu, } break; - default: + case MenuItem::Separator: tomenu.add(*cit, view); + break; + + case MenuItem::Command: + if (!specialmenu_ + || !specialmenu_->hasFunc(cit->func())) + tomenu.add(*cit, view); } } @@ -790,27 +819,6 @@ void MenuBackend::expand(Menu const & frommenu, Menu & tomenu, } -bool Menu::hasSubmenu(string const & name) const -{ -#if 1 - return find_if(begin(), end(), - bind(std::equal_to(), - bind(&MenuItem::submenuname, _1), - name)) != end(); -#else - // I would have prefered this, but I am not sure if it - // makes a difference. (Lgb) - return find_if( - make_transform_iterator(begin(), - bind(&MenuItem::submenuname, _1)), - make_transform_iterator(end(), - bind(&MenuItem::submenuname, _1)), - name - ).base() != end(); -#endif -} - - void MenuBackend::read(LyXLex & lex) { enum Menutags {