/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.ui.internal.actions; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.ui.actions.CompoundContributionItem; import org.eclipse.ui.menus.CommandContributionItem; import org.eclipse.ui.menus.CommandContributionItemParameter; import org.eclipse.ui.menus.IWorkbenchContribution; import org.eclipse.ui.services.IServiceLocator; import org.xmind.core.marker.IMarker; import org.xmind.core.marker.IMarkerGroup; import org.xmind.core.marker.IMarkerSheet; import org.xmind.ui.commands.MindMapCommandConstants; import org.xmind.ui.mindmap.MindMapUI; import org.xmind.ui.util.MarkerImageDescriptor; public class AllMarkersMenu extends CompoundContributionItem implements IWorkbenchContribution { private IServiceLocator serviceLocator; public void initialize(IServiceLocator serviceLocator) { this.serviceLocator = serviceLocator; } @Override protected IContributionItem[] getContributionItems() { List<IContributionItem> items = new ArrayList<IContributionItem>(); if (serviceLocator != null) { fillItems(items, MindMapUI.getResourceManager().getSystemMarkerSheet()); } return items.toArray(new IContributionItem[items.size()]); } private void fillItems(List<IContributionItem> items, IMarkerSheet markerSheet) { for (final IMarkerGroup group : markerSheet.getMarkerGroups()) { MenuManager groupMenu = new MenuManager(group.getName(), "#" //$NON-NLS-1$ + group.getId()); if (!group.isHidden()) { fillGroup(group, groupMenu); items.add(groupMenu); } } } private void fillGroup(IMarkerGroup group, IMenuManager groupMenu) { for (IMarker marker : group.getMarkers()) { if (!marker.isHidden()) { groupMenu.add(makeMarkerCommandContributionItem(marker)); } } } private IContributionItem makeMarkerCommandContributionItem( IMarker marker) { CommandContributionItemParameter parameter = new CommandContributionItemParameter( serviceLocator, "addMarker." + marker.getId(), //$NON-NLS-1$ MindMapCommandConstants.ADD_MARKER, CommandContributionItem.STYLE_PUSH); parameter.label = marker.getName(); parameter.icon = MarkerImageDescriptor.createFromMarker(marker); Map<Object, Object> params = new HashMap<Object, Object>(); params.put(MindMapCommandConstants.ADD_MARKER_PARAM_MARKER_ID, marker.getId()); parameter.parameters = params; return new CommandContributionItem(parameter); } }