diff options
author | Claudio Guglielmo | 2018-03-09 16:27:01 +0000 |
---|---|---|
committer | Claudio Guglielmo | 2018-03-09 16:27:01 +0000 |
commit | 2781a6353aba919bf3545689065904c60a080071 (patch) | |
tree | ea464b1500f4c889731a4ec1f12bbccdd764bb20 | |
parent | a3440a8a6d349564429cedadee98de501424bf6d (diff) | |
download | org.eclipse.scout.rt-features/cguglielmo/tile_menu.tar.gz org.eclipse.scout.rt-features/cguglielmo/tile_menu.tar.xz org.eclipse.scout.rt-features/cguglielmo/tile_menu.zip |
TileAccordion: simplify menu handlingfeatures/cguglielmo/tile_menu
2 files changed, 24 insertions, 3 deletions
diff --git a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/action/menu/MenuUtility.java b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/action/menu/MenuUtility.java index 5dd6dc1e5e..ea9c14ab86 100644 --- a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/action/menu/MenuUtility.java +++ b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/action/menu/MenuUtility.java @@ -29,6 +29,7 @@ import org.eclipse.scout.rt.client.ui.basic.planner.Activity; import org.eclipse.scout.rt.client.ui.basic.planner.Resource; import org.eclipse.scout.rt.client.ui.basic.table.ITableRow; import org.eclipse.scout.rt.client.ui.basic.tree.ITreeNode; +import org.eclipse.scout.rt.client.ui.desktop.outline.OutlineMenuWrapper; import org.eclipse.scout.rt.client.ui.tile.ITile; import org.eclipse.scout.rt.client.ui.tile.ITileGrid; import org.eclipse.scout.rt.platform.util.CollectionUtility; @@ -213,7 +214,9 @@ public final class MenuUtility { } /** - * Updates the visibility of every single menu (including child menus) according to the given acceptedMenuTypes. + * Updates the visibility of every single menu (including child menus) according to the given acceptedMenuTypes. If + * one of the given menu is an {@link OutlineMenuWrapper}, the visibility will be changed on the original menu, + * because the wrapper won't delegate the change. * * @param filter * (optional) menus are filtered with this predicate before visibility is updated @@ -224,10 +227,16 @@ public final class MenuUtility { if (filter != null && !filter.test(menu)) { return; } + if (menu.isSeparator()) { + return; + } - if (!menu.isSeparator()) { - menu.setVisible(activeFilter.test(menu)); + // The visibility can only be changed on the original menu + if (menu instanceof OutlineMenuWrapper) { + menu = ((OutlineMenuWrapper) menu).getOriginalMenu(); } + + menu.setVisible(activeFilter.test(menu)); }, IMenu.class); } } diff --git a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/outline/OutlineMenuWrapper.java b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/outline/OutlineMenuWrapper.java index 22ca7859a8..d971adb67b 100644 --- a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/outline/OutlineMenuWrapper.java +++ b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/outline/OutlineMenuWrapper.java @@ -160,6 +160,18 @@ public class OutlineMenuWrapper extends AbstractWidget implements IMenu, IReadOn return m_wrappedMenu; } + /** + * @return the original menu which has been wrapped even if the wrapped menu was wrapped again. Will never be of type + * {@link OutlineMenuWrapper}. + */ + public IMenu getOriginalMenu() { + IMenu originalMenu = m_wrappedMenu; + while (originalMenu instanceof OutlineMenuWrapper) { + originalMenu = ((OutlineMenuWrapper) originalMenu).getWrappedMenu(); + } + return originalMenu; + } + @Override public Object getOwnerValue() { return m_wrappedMenu.getOwnerValue(); |