/******************************************************************************* * Copyright (c) 2000, 2006 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.ui.internal; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.action.ContributionItem; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.IWorkingSetManager; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.WorkingSetFilterActionGroup; import org.eclipse.jface.resource.ImageDescriptor; /** * Menu contribution item which shows a working set. * * @since 2.1 */ public class WorkingSetMenuContributionItem extends ContributionItem { private Image image; private int id; private IWorkingSet workingSet; private WorkingSetFilterActionGroup actionGroup; /** * Returns the id of this menu contribution item * * @param id numerical id * @return String string id */ public static String getId(int id) { return WorkingSetMenuContributionItem.class.getName() + "." + id; //$NON-NLS-1$ } /** * Creates a new instance of the receiver. * * @param id sequential id of the new instance * @param actionGroup the action group this contribution item is created in */ public WorkingSetMenuContributionItem(int id, WorkingSetFilterActionGroup actionGroup, IWorkingSet workingSet) { super(getId(id)); Assert.isNotNull(actionGroup); Assert.isNotNull(workingSet); this.id = id; this.actionGroup = actionGroup; this.workingSet = workingSet; } /** * Adds a menu item for the working set. * Overrides method from ContributionItem. * * @see org.eclipse.jface.action.ContributionItem#fill(Menu,int) */ public void fill(Menu menu, int index) { MenuItem mi = new MenuItem(menu, SWT.RADIO, index); mi.setText("&" + id + " " + workingSet.getLabel()); //$NON-NLS-1$ //$NON-NLS-2$ mi.setSelection(workingSet.equals(actionGroup.getWorkingSet())); mi.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IWorkingSetManager manager = PlatformUI.getWorkbench() .getWorkingSetManager(); actionGroup.setWorkingSet(workingSet); manager.addRecentWorkingSet(workingSet); } }); if (image == null) { ImageDescriptor imageDescriptor = workingSet.getImageDescriptor(); if (imageDescriptor != null) image = imageDescriptor.createImage(); } mi.setImage(image); } /** * Overridden to always return true and force dynamic menu building. */ public boolean isDynamic() { return true; } /* * @see org.eclipse.jface.action.ContributionItem#dispose() * @since 3.3 */ public void dispose() { if (image != null && !image.isDisposed()) image.dispose(); image = null; super.dispose(); } }