/******************************************************************************* * Copyright (c) 2014, 2015 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation ******************************************************************************/ package org.eclipse.e4.ui.internal.workbench; import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem; import org.eclipse.e4.ui.model.application.ui.menu.MDirectToolItem; import org.eclipse.e4.ui.model.application.ui.menu.MMenu; import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory; import org.eclipse.e4.ui.model.application.ui.menu.MMenuItem; import org.eclipse.e4.ui.model.application.ui.menu.MMenuSeparator; import org.eclipse.e4.ui.model.application.ui.menu.MToolItem; /** * Utility class that encapsulates the representation of 'opaque' menu and tool bar elements in the * model. */ public class OpaqueElementUtil { /** * A tag value that indicates a menu, menu item, menu separator or tool item is 'opaque' */ private static final String OPAQUE_TAG = "Opaque"; //$NON-NLS-1$ /** * A transient value key for the 'opaque item' */ private static final String OPAQUE_ITEM_KEY = "OpaqueItem"; //$NON-NLS-1$ /** * Remove the 'opaque item' from the UI Element * * @param uiElement * the UI element * @return the removed 'opaque item' or <code>null</code> */ public static Object clearOpaqueItem(MUIElement uiElement) { return uiElement.getTransientData().remove(OPAQUE_ITEM_KEY); } /** * Create an opaque menu * * @return a new opaque menu */ public static MMenu createOpaqueMenu() { final MMenu menu = MMenuFactory.INSTANCE.createMenu(); menu.getTags().add(OPAQUE_TAG); return menu; } /** * Create an opaque menu item * * @return a new opaque menu item. */ public static MMenuItem createOpaqueMenuItem() { final MMenuItem item = MMenuFactory.INSTANCE.createDirectMenuItem(); item.getTags().add(OPAQUE_TAG); return item; } /** * Create an opaque menu separator * * @return a new opaque menu separator */ public static MMenuSeparator createOpaqueMenuSeparator() { final MMenuSeparator separator = MMenuFactory.INSTANCE.createMenuSeparator(); separator.getTags().add(OPAQUE_TAG); return separator; } /** * Create an opaque tool item * * @return a new opaque tool item. */ public static MToolItem createOpaqueToolItem() { final MToolItem item = MMenuFactory.INSTANCE.createDirectToolItem(); item.getTags().add(OPAQUE_TAG); return item; } /** * Get the 'opaque item' associated with the UI Element. * * @param uiElement * a UI element * @return the opaque item or <code>null</code> */ public static Object getOpaqueItem(MUIElement uiElement) { return uiElement.getTransientData().get(OPAQUE_ITEM_KEY); } /** * Tests whether a menu element is an opaque menue * * @param item * @return <code>true</code> if the element is an 'opaque' menu */ public static boolean isOpaqueMenu(MUIElement item) { return item != null && item instanceof MMenu && item.getTags().contains(OPAQUE_TAG); } /** * Tests whether a menu element is an opaque menu item * * @param item * a menu item. * @return <code>true</code> if the menu element is an 'opaque' menu item */ public static boolean isOpaqueMenuItem(MUIElement item) { return item != null && item instanceof MDirectMenuItem && item.getTags().contains(OPAQUE_TAG); } /** * Tests whether a menu element is an opaque menu separator * * @param item * a menu item. * @return <code>true</code> if the menu element is an 'opaque' separator */ public static boolean isOpaqueMenuSeparator(MUIElement item) { return item != null && item instanceof MMenuSeparator && item.getTags().contains(OPAQUE_TAG); } /** * Tests whether a UI element is an 'opaque' tool item * * @param uiElement * a UI element. * @return <code>true</code> if the tool item is 'opaque' */ public static boolean isOpaqueToolItem(MUIElement uiElement) { return uiElement != null && uiElement instanceof MDirectToolItem && uiElement.getTags().contains(OPAQUE_TAG); } /** * Set the 'opaque item' associated with the UI Element. * * @param uiElement * the UI Element. * @param opaqueItem * the opaque item. */ public static void setOpaqueItem(MUIElement uiElement, Object opaqueItem) { uiElement.getTransientData().put(OPAQUE_ITEM_KEY, opaqueItem); } }