From e4bc471605f467823d4fa96b6fb196e344abba2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Iv=C3=A1n=20L=C3=B3pez=20Gonz=C3=A1lez?= Date: Wed, 30 Sep 2020 09:37:14 +0100 Subject: [PATCH] Allow to show or hide menu items --- src/NCMenuBar.cc | 12 ++++++++++++ src/NCMenuBar.h | 7 +++++++ src/NCPopupMenu.cc | 3 +++ 3 files changed, 22 insertions(+) diff --git a/src/NCMenuBar.cc b/src/NCMenuBar.cc index 1a190d19..0f930ee7 100644 --- a/src/NCMenuBar.cc +++ b/src/NCMenuBar.cc @@ -111,6 +111,9 @@ NCMenuBar::rebuildMenuTree() if ( ! item->isMenu() ) YUI_THROW( YUIException( "NCMenuBar: Only menus allowed on toplevel. ") ); + if ( ! item->isVisible() ) + continue; + Menu * menu = new Menu(); menu->item = item; menu->position = wpos( 0, width ); @@ -189,6 +192,15 @@ NCMenuBar::setItemEnabled( YMenuItem * item, bool enabled ) } +void +NCMenuBar::setItemVisible( YMenuItem * item, bool visible ) +{ + YMenuWidget::setItemVisible( item, visible ); + rebuildMenuTree(); + wRedraw(); +} + + void NCMenuBar::activateItem( YMenuItem * item ) { diff --git a/src/NCMenuBar.h b/src/NCMenuBar.h index b1badddd..afae3763 100644 --- a/src/NCMenuBar.h +++ b/src/NCMenuBar.h @@ -57,6 +57,13 @@ class NCMenuBar: public YMenuBar, public NCWidget **/ virtual void setItemEnabled( YMenuItem * item, bool enabled ); + /** + * show or hide an item. + * + * Reimplemented from YMenuWidget. + **/ + virtual void setItemVisible( YMenuItem * item, bool visible ); + /** * Support for the Rest API for UI testing: * diff --git a/src/NCPopupMenu.cc b/src/NCPopupMenu.cc index 1e3f4dbe..f90ac691 100644 --- a/src/NCPopupMenu.cc +++ b/src/NCPopupMenu.cc @@ -59,6 +59,9 @@ NCPopupMenu::NCPopupMenu( const wpos & at, YItemIterator begin, YItemIterator en YMenuItem * menuItem = dynamic_cast( *it ); YUI_CHECK_PTR( menuItem ); + if ( ! menuItem->isVisible() ) + continue; + row[0] = menuItem->label(); row[1] = menuItem->hasChildren() ? "..." : "";