/*******************************************************************************
* Copyright (c) 2000, 2007 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
*
*******************************************************************************/
package org.eclipse.php.internal.ui.actions;
import org.eclipse.dltk.internal.ui.workingsets.IWorkingSetActionGroup;
import org.eclipse.dltk.internal.ui.workingsets.WorkingSetMessages;
import org.eclipse.dltk.internal.ui.workingsets.WorkingSetModel;
import org.eclipse.dltk.ui.IContextMenuConstants;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.php.internal.ui.workingset.ConfigureWorkingSetAssignementAction;
import org.eclipse.php.internal.ui.workingset.PHPWorkingSetFilterActionGroup;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.actions.ActionGroup;
/**
* An action group to provide access to the working sets.
*/
public class ViewActionGroup extends org.eclipse.dltk.internal.ui.workingsets.ViewActionGroup {
private static final Integer INT_SHOW_PROJECTS = Integer.valueOf(SHOW_PROJECTS);
private static final Integer INT_SHOW_WORKING_SETS = Integer.valueOf(SHOW_WORKING_SETS);
private IPropertyChangeListener fChangeListener;
private int fMode;
private IMenuManager fMenuManager;
private IWorkingSetActionGroup fActiveActionGroup;
private WorkingSetShowActionGroup fShowActionGroup;
private final ConfigureWorkingSetAssignementAction fWorkingSetAssignementAction;
private final IWorkbenchPartSite fSite;
private PHPWorkingSetFilterActionGroup fFilterActionGroup;
public ViewActionGroup(int mode, IPropertyChangeListener changeListener, IWorkbenchPartSite site) {
super(mode, changeListener, site);
fChangeListener = changeListener;
if (fChangeListener == null) {
fChangeListener = new IPropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
}
};
}
fFilterActionGroup = new PHPWorkingSetFilterActionGroup(site, fChangeListener);
fShowActionGroup = new WorkingSetShowActionGroup(site);
fWorkingSetAssignementAction = new ConfigureWorkingSetAssignementAction(site);
site.getSelectionProvider().addSelectionChangedListener(fWorkingSetAssignementAction);
fSite = site;
fMode = mode;
if (showWorkingSets())
fActiveActionGroup = fShowActionGroup;
else
fActiveActionGroup = fFilterActionGroup;
}
@Override
public void dispose() {
fFilterActionGroup.dispose();
fShowActionGroup.dispose();
fSite.getSelectionProvider().removeSelectionChangedListener(fWorkingSetAssignementAction);
fChangeListener = null;
super.dispose();
}
@Override
public void setWorkingSetModel(WorkingSetModel model) {
fShowActionGroup.setWorkingSetMode(model);
fWorkingSetAssignementAction.setWorkingSetModel(model);
}
@Override
public void fillContextMenu(IMenuManager menu) {
if (fWorkingSetAssignementAction.isEnabled()) {
menu.appendToGroup(IContextMenuConstants.GROUP_BUILD, fWorkingSetAssignementAction);
}
super.fillContextMenu(menu);
}
/**
* {@inheritDoc}
*/
@Override
public void fillActionBars(IActionBars actionBars) {
// super.fillActionBars(actionBars);
fMenuManager = actionBars.getMenuManager();
fillViewMenu(fMenuManager);
if (fActiveActionGroup == null)
fActiveActionGroup = fFilterActionGroup;
((ActionGroup) fActiveActionGroup).fillActionBars(actionBars);
}
private void fillViewMenu(IMenuManager menu) {
IMenuManager showMenu = new MenuManager(WorkingSetMessages.ViewActionGroup_show_label);
fillShowMenu(showMenu);
menu.add(showMenu);
menu.add(new Separator(IWorkingSetActionGroup.ACTION_GROUP));
}
private void fillShowMenu(IMenuManager menu) {
ViewAction projects = new ViewAction(this, SHOW_PROJECTS);
projects.setText(WorkingSetMessages.ViewActionGroup_projects_label);
menu.add(projects);
ViewAction workingSets = new ViewAction(this, SHOW_WORKING_SETS);
workingSets.setText(WorkingSetMessages.ViewActionGroup_workingSets_label);
menu.add(workingSets);
if (fMode == SHOW_PROJECTS) {
projects.setChecked(true);
} else {
workingSets.setChecked(true);
}
}
@Override
public void fillFilters(StructuredViewer viewer) {
ViewerFilter workingSetFilter = fFilterActionGroup.getWorkingSetFilter();
if (showProjects()) {
viewer.addFilter(workingSetFilter);
} else if (showWorkingSets()) {
viewer.removeFilter(workingSetFilter);
}
}
@Override
public void setMode(int mode) {
fMode = mode;
fActiveActionGroup.cleanViewMenu(fMenuManager);
PropertyChangeEvent event;
if (mode == SHOW_PROJECTS) {
fActiveActionGroup = fFilterActionGroup;
event = new PropertyChangeEvent(this, MODE_CHANGED, INT_SHOW_WORKING_SETS, INT_SHOW_PROJECTS);
} else {
fActiveActionGroup = fShowActionGroup;
event = new PropertyChangeEvent(this, MODE_CHANGED, INT_SHOW_PROJECTS, INT_SHOW_WORKING_SETS);
}
fActiveActionGroup.fillViewMenu(fMenuManager);
fMenuManager.updateAll(true);
if (fChangeListener != null)
fChangeListener.propertyChange(event);
}
@Override
public PHPWorkingSetFilterActionGroup getFilterGroup() {
return fFilterActionGroup;
}
@Override
public void restoreState(IMemento memento) {
fFilterActionGroup.restoreState(memento);
}
@Override
public void saveState(IMemento memento) {
fFilterActionGroup.saveState(memento);
}
private boolean showProjects() {
return fMode == SHOW_PROJECTS;
}
private boolean showWorkingSets() {
return fMode == SHOW_WORKING_SETS;
}
}