/******************************************************************************* * Copyright (c) 2013 RelationWare, Benno Luthiger * 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: * RelationWare, Benno Luthiger ******************************************************************************/ package org.ripla.rap.internal.menu; import java.util.List; import org.eclipse.rap.rwt.RWT; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.osgi.service.useradmin.Authorization; import org.ripla.interfaces.IMenuCommand; import org.ripla.interfaces.IMenuItem; import org.ripla.rap.internal.menu.ExtendibleMenuFactory.IExtMenuItem; import org.ripla.services.IExtendibleMenuContribution; /** * A composite to display a drop down menu for an extendible menu. * * @author Luthiger */ @SuppressWarnings("serial") public class DropDownMenuExt extends DropDownMenu { /** * @param inParent * @param inItemCreator */ public DropDownMenuExt(final Composite inParent, final IMenuItemsCreator inItemCreator) { super(inParent, inItemCreator); } public static IMenuItemsCreator getItemsCreator( final IMenuItem inMenuConfig, final List<IExtMenuItem> inContributions, final SelectionListener inListener, final Authorization inAuthorization) { return new MenuItemsCreatorExt(inMenuConfig, inContributions, inListener, inAuthorization); } // --- protected static class MenuItemsCreatorExt extends MenuItemsCreator implements IMenuItemsCreator { private final IMenuItem menuConfig; private final List<IExtMenuItem> contributions; private final Authorization authorization; protected MenuItemsCreatorExt(final IMenuItem inMenuConfig, final List<IExtMenuItem> inContributions, final SelectionListener inListener, final Authorization inAuthorization) { super(inMenuConfig, inListener, inAuthorization); menuConfig = inMenuConfig; contributions = inContributions; authorization = inAuthorization; } @Override public IMenuCommand create(final Menu inMenu) { IMenuCommand outCmd = null; for (final IExtMenuItem lItemConfig : contributions) { if (lItemConfig.isMarker()) { continue; } final IExtendibleMenuContribution lContribution = lItemConfig .getContribution(); if (!MenuFactory.checkPermissions( lContribution.getPermission(), authorization)) { continue; } final List<IMenuItem> lSubMenuItems = lContribution .getSubMenu(); final int lStyle = lSubMenuItems.isEmpty() ? SWT.PUSH : SWT.CASCADE; final MenuItem lItem = new MenuItem(inMenu, lStyle | SWT.LEFT); lItem.setText(lContribution.getLabel()); lItem.setData(RWT.CUSTOM_VARIANT, "ripla-menu-item"); lItem.addSelectionListener(getListener()); lItem.setData(MenuFactory.KEY_MENU_ACTION, createMenuCommand(lContribution.getControllerName())); if (outCmd == null) { outCmd = createMenuCommand(lContribution .getControllerName()); } // create nested sub menu if (!lSubMenuItems.isEmpty()) { final Menu lSubMenu = new Menu(inMenu); lItem.setMenu(lSubMenu); for (final IMenuItem lSubItem : lSubMenuItems) { createMenuItem(lSubMenu, lSubItem, authorization); } } } return outCmd; } @Override public IMenuItem getMenuConfig() { return menuConfig; } } }