blob: c3a20f129f8af8b293e4da2c2efef21270301ee3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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.actions;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.events.MenuAdapter;
import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
import org.eclipse.ui.IWorkbenchWindowPulldownDelegate2;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.activities.WorkbenchActivityHelper;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.registry.WorkingSetRegistry;
/**
* Baseclass for working set pulldown actions.
*
* @since 3.3
*/
public abstract class AbstractWorkingSetPulldownDelegate implements
IWorkbenchWindowActionDelegate, IWorkbenchWindowPulldownDelegate2 {
private Menu menubarMenu;
private Menu toolbarMenu;
private ISelection selection;
private IWorkbenchWindow window;
/**
*
*/
public AbstractWorkingSetPulldownDelegate() {
super();
}
public void dispose() {
if (menubarMenu != null) {
menubarMenu.dispose();
menubarMenu = null;
}
if (toolbarMenu != null) {
toolbarMenu.dispose();
toolbarMenu = null;
}
}
public Menu getMenu(Control parent) {
if (toolbarMenu != null) {
toolbarMenu.dispose();
}
toolbarMenu = new Menu(parent);
initMenu(toolbarMenu);
return toolbarMenu;
}
public Menu getMenu(Menu parent) {
if (menubarMenu != null) {
menubarMenu.dispose();
}
menubarMenu = new Menu(parent);
initMenu(menubarMenu);
return menubarMenu;
}
/**
* Creates the menu for the action
*/
private void initMenu(Menu menu) {
menu.addMenuListener(new MenuAdapter() {
public void menuShown(MenuEvent e) {
Menu m = (Menu) e.widget;
MenuItem[] items = m.getItems();
for (int i = 0; i < items.length; i++) {
items[i].dispose();
}
fillMenu(m);
}
});
}
/**
* @param m
*/
protected abstract void fillMenu(Menu m);
/**
* Split the working sets known by the manager into arrays based on their
* defining page Id.
*
* @return an array of arrays
*/
protected IWorkingSet[][] splitSets() {
IWorkingSet[] allSets = getWindow().getWorkbench().getWorkingSetManager()
.getWorkingSets();
Map map = new HashMap();
WorkingSetRegistry registry = WorkbenchPlugin.getDefault()
.getWorkingSetRegistry();
for (int i = 0; i < allSets.length; i++) {
String setType = allSets[i].getId();
if (WorkbenchActivityHelper.filterItem(registry
.getWorkingSetDescriptor(setType))) {
continue;
}
List setsOfType = (List) map.get(setType);
if (setsOfType == null) {
setsOfType = new ArrayList();
map.put(setType, setsOfType);
}
setsOfType.add(allSets[i]);
}
IWorkingSet[][] typedSets = new IWorkingSet[map.keySet().size()][];
int i = 0;
for (Iterator iter = map.keySet().iterator(); iter.hasNext();) {
List setsOfType = (List) map.get(iter.next());
typedSets[i] = new IWorkingSet[setsOfType.size()];
setsOfType.toArray(typedSets[i++]);
}
return typedSets;
}
public void init(IWorkbenchWindow window) {
this.window = window;
}
protected IWorkbenchWindow getWindow() {
return window;
}
public void selectionChanged(IAction action, ISelection selection) {
this.selection = selection;
}
protected ISelection getSelection() {
return selection;
}
}