/*******************************************************************************
* Copyright (c) 2000, 2009 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
* Matt Chapman, mpchapman@gmail.com - 89977 Make JDT .java agnostic
*******************************************************************************/
package org.eclipse.wst.jsdt.internal.ui.wizards.buildpaths.newsourcepage;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.ui.PlatformUI;
import org.eclipse.wst.jsdt.internal.corext.buildpath.IBuildpathModifierListener;
import org.eclipse.wst.jsdt.internal.ui.actions.CompositeActionGroup;
import org.eclipse.wst.jsdt.internal.ui.util.ViewerPane;
/**
* Action group for the dialog package explorer shown on the second page
* of the new java project wizard.
*/
public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
private DialogPackageExplorer fDialogPackageExplorer;
private final AddFolderToBuildpathAction fAddFolderToBuildpathAction;
private final RemoveFromBuildpathAction fRemoveFromBuildpathAction;
private final ExcludeFromBuildpathAction fExcludeFromBuildpathAction;
private final IncludeToBuildpathAction fIncludeToBuildpathAction;
private final EditFilterAction fEditFilterAction;
private final ClasspathModifierDropDownAction fDropDownAction;
private final CreateLinkedSourceFolderAction fCreateLinkedSourceFolderAction;
private final CreateSourceFolderAction fCreateSourceFolderAction;
private final ResetAllAction fResetAllAction;
/**
* Constructor which creates the operations and based on this
* operations the actions.
*
* @param provider a information provider to pass necessary information
* to the operations
* @param context
* @param dialogPackageExplorer the package explorer for which to contribute the actions to
* @param page the page showing the package explorer
*/
public DialogPackageExplorerActionGroup(HintTextGroup provider, IRunnableContext context, DialogPackageExplorer dialogPackageExplorer, final NewSourceContainerWorkbookPage page) {
super();
fDialogPackageExplorer= dialogPackageExplorer;
if (context == null)
context= PlatformUI.getWorkbench().getProgressService();
fAddFolderToBuildpathAction= new AddFolderToBuildpathAction(context, fDialogPackageExplorer) {
public void run() {
super.run();
}
};
fDialogPackageExplorer.addSelectionChangedListener(fAddFolderToBuildpathAction);
fRemoveFromBuildpathAction= new RemoveFromBuildpathAction(context, fDialogPackageExplorer) {
public void run() {
super.run();
}
};
fDialogPackageExplorer.addSelectionChangedListener(fRemoveFromBuildpathAction);
fExcludeFromBuildpathAction= new ExcludeFromBuildpathAction(context, fDialogPackageExplorer) {
public void run() {
super.run();
}
};
fDialogPackageExplorer.addSelectionChangedListener(fExcludeFromBuildpathAction);
fIncludeToBuildpathAction= new IncludeToBuildpathAction(context, fDialogPackageExplorer) {
public void run() {
super.run();
}
};
fDialogPackageExplorer.addSelectionChangedListener(fIncludeToBuildpathAction);
fEditFilterAction= new EditFilterAction(context, fDialogPackageExplorer) {
public void run() {
super.run();
}
};
fDialogPackageExplorer.addSelectionChangedListener(fEditFilterAction);
fDropDownAction= new ClasspathModifierDropDownAction();
fDropDownAction.addAction(fEditFilterAction);
fDialogPackageExplorer.addPostSelectionChangedListener(fDropDownAction);
fCreateLinkedSourceFolderAction= new CreateLinkedSourceFolderAction2(provider, context, fDialogPackageExplorer) {
public void run() {
super.run();
}
/**
* {@inheritDoc}
*/
protected List getSelectedElements() {
ArrayList result= new ArrayList();
result.add(page.getJavaScriptProject());
return result;
}
/**
* {@inheritDoc}
*/
protected boolean canHandle(IStructuredSelection selection) {
return true;
}
};
fCreateSourceFolderAction= new CreateSourceFolderAction2(provider, context, fDialogPackageExplorer) {
public void run() {
super.run();
}
/**
* {@inheritDoc}
*/
protected List getSelectedElements() {
ArrayList result= new ArrayList();
result.add(page.getJavaScriptProject());
return result;
}
/**
* {@inheritDoc}
*/
protected boolean canHandle(IStructuredSelection selection) {
return true;
}
};
fResetAllAction= new ResetAllAction(provider, context, fDialogPackageExplorer);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.internal.ui.actions.CompositeActionGroup#dispose()
*/
public void dispose() {
super.dispose();
fDialogPackageExplorer.removeSelectionChangedListener(fAddFolderToBuildpathAction);
fDialogPackageExplorer.removeSelectionChangedListener(fRemoveFromBuildpathAction);
fDialogPackageExplorer.removeSelectionChangedListener(fExcludeFromBuildpathAction);
fDialogPackageExplorer.removeSelectionChangedListener(fIncludeToBuildpathAction);
fDialogPackageExplorer.removeSelectionChangedListener(fEditFilterAction);
fDialogPackageExplorer.removePostSelectionChangedListener(fDropDownAction);
fDialogPackageExplorer= null;
}
public void addBuildpathModifierListener(IBuildpathModifierListener listener) {
fAddFolderToBuildpathAction.addBuildpathModifierListener(listener);
fRemoveFromBuildpathAction.addBuildpathModifierListener(listener);
fExcludeFromBuildpathAction.addBuildpathModifierListener(listener);
fIncludeToBuildpathAction.addBuildpathModifierListener(listener);
fEditFilterAction.addBuildpathModifierListener(listener);
fCreateLinkedSourceFolderAction.addBuildpathModifierListener(listener);
fCreateSourceFolderAction.addBuildpathModifierListener(listener);
}
public void removeBuildpathModifierListener(IBuildpathModifierListener listener) {
fAddFolderToBuildpathAction.removeBuildpathModifierListener(listener);
fRemoveFromBuildpathAction.removeBuildpathModifierListener(listener);
fExcludeFromBuildpathAction.removeBuildpathModifierListener(listener);
fIncludeToBuildpathAction.removeBuildpathModifierListener(listener);
fEditFilterAction.removeBuildpathModifierListener(listener);
fCreateLinkedSourceFolderAction.removeBuildpathModifierListener(listener);
fCreateSourceFolderAction.removeBuildpathModifierListener(listener);
}
/**
* Create a toolbar manager for a given
* <code>ViewerPane</code>
*
* @param pane the pane to create the <code>
* ToolBarManager</code> for.
* @return the created <code>ToolBarManager</code>
*/
public ToolBarManager createLeftToolBarManager(ViewerPane pane) {
ToolBarManager tbm= pane.getToolBarManager();
tbm.add(fAddFolderToBuildpathAction);
tbm.add(fRemoveFromBuildpathAction);
tbm.add(new Separator());
tbm.add(fExcludeFromBuildpathAction);
tbm.add(fIncludeToBuildpathAction);
tbm.add(new Separator());
tbm.add(fDropDownAction);
tbm.update(true);
return tbm;
}
/**
* Create a toolbar manager for a given
* <code>ViewerPane</code>
*
* @param pane the pane to create the help toolbar for
* @return the created <code>ToolBarManager</code>
*/
public ToolBarManager createLeftToolBar(ViewerPane pane) {
ToolBar tb= new ToolBar(pane, SWT.FLAT);
pane.setTopRight(tb);
ToolBarManager tbm= new ToolBarManager(tb);
tbm.add(fCreateLinkedSourceFolderAction);
tbm.add(fCreateSourceFolderAction);
tbm.add(fResetAllAction);
tbm.add(new HelpAction());
tbm.update(true);
return tbm;
}
/**
* Fill the context menu with the available actions
*
* @param menu the menu to be filled up with actions
*/
public void fillContextMenu(IMenuManager menu) {
if (fAddFolderToBuildpathAction.isEnabled())
menu.add(fAddFolderToBuildpathAction);
if (fRemoveFromBuildpathAction.isEnabled())
menu.add(fRemoveFromBuildpathAction);
if (fExcludeFromBuildpathAction.isEnabled())
menu.add(fExcludeFromBuildpathAction);
if (fIncludeToBuildpathAction.isEnabled())
menu.add(fIncludeToBuildpathAction);
if (fEditFilterAction.isEnabled())
menu.add(fEditFilterAction);
if (fCreateLinkedSourceFolderAction.isEnabled())
menu.add(fCreateLinkedSourceFolderAction);
if (fCreateSourceFolderAction.isEnabled())
menu.add(fCreateSourceFolderAction);
super.fillContextMenu(menu);
}
public BuildpathModifierAction[] getHintTextGroupActions() {
List result= new ArrayList();
if (fCreateSourceFolderAction.isEnabled())
result.add(fCreateSourceFolderAction);
if (fCreateLinkedSourceFolderAction.isEnabled())
result.add(fCreateLinkedSourceFolderAction);
if (fEditFilterAction.isEnabled())
result.add(fEditFilterAction);
if (fExcludeFromBuildpathAction.isEnabled())
result.add(fExcludeFromBuildpathAction);
if (fIncludeToBuildpathAction.isEnabled())
result.add(fIncludeToBuildpathAction);
if (fAddFolderToBuildpathAction.isEnabled())
result.add(fAddFolderToBuildpathAction);
if (fRemoveFromBuildpathAction.isEnabled())
result.add(fRemoveFromBuildpathAction);
return (BuildpathModifierAction[])result.toArray(new BuildpathModifierAction[result.size()]);
}
public ResetAllAction getResetAllAction() {
return fResetAllAction;
}
}