| ### Eclipse Workspace Patch 1.0 |
| #P org.eclipse.jdt.ui |
| Index: ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java |
| =================================================================== |
| RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java,v |
| retrieving revision 1.9 |
| diff -u -r1.9 ConfigureWorkingSetAction.java |
| --- ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java 18 Nov 2005 14:45:35 -0000 1.9 |
| +++ ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java 8 Dec 2005 20:19:30 -0000 |
| @@ -14,6 +14,8 @@ |
| import java.util.Arrays; |
| import java.util.List; |
| |
| +import org.eclipse.swt.widgets.Shell; |
| + |
| import org.eclipse.jface.action.Action; |
| import org.eclipse.jface.dialogs.IDialogConstants; |
| |
| @@ -21,13 +23,18 @@ |
| import org.eclipse.ui.IWorkingSet; |
| |
| public class ConfigureWorkingSetAction extends Action { |
| - |
| - private final IWorkbenchPartSite fSite; |
| + |
| private WorkingSetModel fWorkingSetModel; |
| + private Shell fShell; |
| |
| public ConfigureWorkingSetAction(IWorkbenchPartSite site) { |
| super(WorkingSetMessages.ConfigureWorkingSetAction_label); |
| - fSite= site; |
| + fShell= site.getShell(); |
| + } |
| + |
| + public ConfigureWorkingSetAction(Shell shell) { |
| + super(WorkingSetMessages.ConfigureWorkingSetAction_label); |
| + fShell= shell; |
| } |
| |
| public void setWorkingSetModel(WorkingSetModel model) { |
| @@ -39,9 +46,10 @@ |
| */ |
| public void run() { |
| List workingSets= new ArrayList(Arrays.asList(fWorkingSetModel.getAllWorkingSets())); |
| + |
| IWorkingSet[] activeWorkingSets= fWorkingSetModel.getActiveWorkingSets(); |
| WorkingSetConfigurationDialog dialog= new WorkingSetConfigurationDialog( |
| - fSite.getShell(), |
| + fShell, |
| (IWorkingSet[])workingSets.toArray(new IWorkingSet[workingSets.size()]), |
| activeWorkingSets); |
| dialog.setSelection(activeWorkingSets); |
| Index: ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java |
| =================================================================== |
| RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java,v |
| retrieving revision 1.8 |
| diff -u -r1.8 ViewActionGroup.java |
| --- ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java 13 Apr 2005 17:35:11 -0000 1.8 |
| +++ ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java 8 Dec 2005 20:19:30 -0000 |
| @@ -45,7 +45,12 @@ |
| |
| public ViewActionGroup(int mode, IPropertyChangeListener changeListener, IWorkbenchPartSite site) { |
| fChangeListener= changeListener; |
| - fFilterActionGroup= new WorkingSetFilterActionGroup(site, changeListener); |
| + if(fChangeListener == null) { |
| + fChangeListener = new IPropertyChangeListener() { |
| + public void propertyChange(PropertyChangeEvent event) {} |
| + }; |
| + } |
| + fFilterActionGroup= new WorkingSetFilterActionGroup(site, fChangeListener); |
| fShowActionGroup= new WorkingSetShowActionGroup(site); |
| fMode= mode; |
| if (showWorkingSets()) |
| @@ -70,16 +75,24 @@ |
| */ |
| public void fillActionBars(IActionBars actionBars) { |
| super.fillActionBars(actionBars); |
| - fMenuManager= actionBars.getMenuManager(); |
| - IMenuManager showMenu= new MenuManager(WorkingSetMessages.ViewActionGroup_show_label); |
| - fillShowMenu(showMenu); |
| - fMenuManager.add(showMenu); |
| - fMenuManager.add(new Separator(IWorkingSetActionGroup.ACTION_GROUP)); |
| + if(fMenuManager == null) { |
| + 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); |
| @@ -116,7 +129,8 @@ |
| } |
| fActiveActionGroup.fillViewMenu(fMenuManager); |
| fMenuManager.updateAll(true); |
| - fChangeListener.propertyChange(event); |
| + if(fChangeListener != null) |
| + fChangeListener.propertyChange(event); |
| } |
| |
| public WorkingSetFilterActionGroup getFilterGroup() { |
| Index: ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java |
| =================================================================== |
| RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java,v |
| retrieving revision 1.13 |
| diff -u -r1.13 WorkingSetModel.java |
| --- ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java 28 Oct 2005 20:59:06 -0000 1.13 |
| +++ ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java 8 Dec 2005 20:19:30 -0000 |
| @@ -1,13 +1,11 @@ |
| -/******************************************************************************* |
| - * Copyright (c) 2000, 2005 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 |
| +/*************************************************************************************************** |
| + * Copyright (c) 2000, 2005 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 |
| - *******************************************************************************/ |
| + * |
| + * Contributors: IBM Corporation - initial API and implementation |
| + **************************************************************************************************/ |
| package org.eclipse.jdt.internal.ui.workingsets; |
| |
| import java.util.ArrayList; |
| @@ -36,12 +34,12 @@ |
| import org.eclipse.ui.PlatformUI; |
| |
| public class WorkingSetModel { |
| - |
| + |
| public static final String CHANGE_WORKING_SET_MODEL_CONTENT= "workingSetModelChanged"; //$NON-NLS-1$ |
| - |
| + |
| public static final IElementComparer COMPARER= new WorkingSetComparar(); |
| - |
| - private static final String TAG_LOCAL_WORKING_SET_MANAGER= "localWorkingSetManager"; //$NON-NLS-1$ |
| + |
| + public static final String TAG_LOCAL_WORKING_SET_MANAGER= "localWorkingSetManager"; //$NON-NLS-1$ |
| private static final String TAG_ACTIVE_WORKING_SET= "activeWorkingSet"; //$NON-NLS-1$ |
| private static final String TAG_WORKING_SET_NAME= "workingSetName"; //$NON-NLS-1$ |
| private static final String TAG_CONFIGURED= "configured"; //$NON-NLS-1$ |
| @@ -53,28 +51,29 @@ |
| private OthersWorkingSetUpdater fOthersWorkingSetUpdater; |
| |
| private ElementMapper fElementMapper= new ElementMapper(); |
| - |
| + |
| private boolean fConfigured; |
| |
| private static class WorkingSetComparar implements IElementComparer { |
| public boolean equals(Object o1, Object o2) { |
| - IWorkingSet w1= o1 instanceof IWorkingSet ? (IWorkingSet)o1 : null; |
| - IWorkingSet w2= o2 instanceof IWorkingSet ? (IWorkingSet)o2 : null; |
| + IWorkingSet w1= o1 instanceof IWorkingSet ? (IWorkingSet) o1 : null; |
| + IWorkingSet w2= o2 instanceof IWorkingSet ? (IWorkingSet) o2 : null; |
| if (w1 == null || w2 == null) |
| return o1.equals(o2); |
| return w1 == w2; |
| } |
| + |
| public int hashCode(Object element) { |
| if (element instanceof IWorkingSet) |
| return System.identityHashCode(element); |
| return element.hashCode(); |
| } |
| } |
| - |
| + |
| private static class ElementMapper { |
| private Map fElementToWorkingSet= new HashMap(); |
| private Map fWorkingSetToElement= new IdentityHashMap(); |
| - |
| + |
| private Map fResourceToWorkingSet= new HashMap(); |
| |
| public void clear() { |
| @@ -82,14 +81,16 @@ |
| fWorkingSetToElement.clear(); |
| fResourceToWorkingSet.clear(); |
| } |
| + |
| public void rebuild(IWorkingSet[] workingSets) { |
| clear(); |
| for (int i= 0; i < workingSets.length; i++) { |
| put(workingSets[i]); |
| } |
| } |
| + |
| public IAdaptable[] remove(IWorkingSet ws) { |
| - IAdaptable[] elements= (IAdaptable[])fWorkingSetToElement.remove(ws); |
| + IAdaptable[] elements= (IAdaptable[]) fWorkingSetToElement.remove(ws); |
| if (elements != null) { |
| for (int i= 0; i < elements.length; i++) { |
| removeElement(elements[i], ws); |
| @@ -97,8 +98,9 @@ |
| } |
| return elements; |
| } |
| + |
| public IAdaptable[] refresh(IWorkingSet ws) { |
| - IAdaptable[] oldElements= (IAdaptable[])fWorkingSetToElement.get(ws); |
| + IAdaptable[] oldElements= (IAdaptable[]) fWorkingSetToElement.get(ws); |
| if (oldElements == null) |
| return null; |
| IAdaptable[] newElements= ws.getElements(); |
| @@ -106,15 +108,16 @@ |
| List toAdd= new ArrayList(Arrays.asList(newElements)); |
| computeDelta(toRemove, toAdd, oldElements, newElements); |
| for (Iterator iter= toAdd.iterator(); iter.hasNext();) { |
| - addElement((IAdaptable)iter.next(), ws); |
| + addElement((IAdaptable) iter.next(), ws); |
| } |
| for (Iterator iter= toRemove.iterator(); iter.hasNext();) { |
| - removeElement((IAdaptable)iter.next(), ws); |
| + removeElement((IAdaptable) iter.next(), ws); |
| } |
| if (toRemove.size() > 0 || toAdd.size() > 0) |
| fWorkingSetToElement.put(ws, newElements); |
| return oldElements; |
| } |
| + |
| private void computeDelta(List toRemove, List toAdd, IAdaptable[] oldElements, IAdaptable[] newElements) { |
| for (int i= 0; i < oldElements.length; i++) { |
| toAdd.remove(oldElements[i]); |
| @@ -122,20 +125,25 @@ |
| for (int i= 0; i < newElements.length; i++) { |
| toRemove.remove(newElements[i]); |
| } |
| - |
| + |
| } |
| + |
| public IWorkingSet getFirstWorkingSet(Object element) { |
| - return (IWorkingSet)getFirstElement(fElementToWorkingSet, element); |
| + return (IWorkingSet) getFirstElement(fElementToWorkingSet, element); |
| } |
| + |
| public List getAllWorkingSets(Object element) { |
| return getAllElements(fElementToWorkingSet, element); |
| } |
| + |
| public IWorkingSet getFirstWorkingSetForResource(IResource resource) { |
| - return (IWorkingSet)getFirstElement(fResourceToWorkingSet, resource); |
| + return (IWorkingSet) getFirstElement(fResourceToWorkingSet, resource); |
| } |
| + |
| public List getAllWorkingSetsForResource(IResource resource) { |
| return getAllElements(fResourceToWorkingSet, resource); |
| } |
| + |
| private void put(IWorkingSet ws) { |
| if (fWorkingSetToElement.containsKey(ws)) |
| return; |
| @@ -145,20 +153,23 @@ |
| addElement(elements[i], ws); |
| } |
| } |
| + |
| private void addElement(IAdaptable element, IWorkingSet ws) { |
| addToMap(fElementToWorkingSet, element, ws); |
| - IResource resource= (IResource)element.getAdapter(IResource.class); |
| + IResource resource= (IResource) element.getAdapter(IResource.class); |
| if (resource != null) { |
| addToMap(fResourceToWorkingSet, resource, ws); |
| } |
| } |
| + |
| private void removeElement(IAdaptable element, IWorkingSet ws) { |
| removeFromMap(fElementToWorkingSet, element, ws); |
| - IResource resource= (IResource)element.getAdapter(IResource.class); |
| + IResource resource= (IResource) element.getAdapter(IResource.class); |
| if (resource != null) { |
| removeFromMap(fResourceToWorkingSet, resource, ws); |
| } |
| } |
| + |
| private void addToMap(Map map, IAdaptable key, IWorkingSet value) { |
| Object obj= map.get(key); |
| if (obj == null) { |
| @@ -169,21 +180,22 @@ |
| l.add(value); |
| map.put(key, l); |
| } else if (obj instanceof List) { |
| - ((List)obj).add(value); |
| + ((List) obj).add(value); |
| } |
| } |
| + |
| private void removeFromMap(Map map, IAdaptable key, IWorkingSet value) { |
| Object current= map.get(key); |
| if (current == null) { |
| return; |
| } else if (current instanceof List) { |
| - List list= (List)current; |
| + List list= (List) current; |
| list.remove(value); |
| switch (list.size()) { |
| - case 0: |
| + case 0 : |
| map.remove(key); |
| break; |
| - case 1: |
| + case 1 : |
| map.put(key, list.get(0)); |
| break; |
| } |
| @@ -191,16 +203,18 @@ |
| map.remove(key); |
| } |
| } |
| + |
| private Object getFirstElement(Map map, Object key) { |
| Object obj= map.get(key); |
| - if (obj instanceof List) |
| - return ((List)obj).get(0); |
| + if (obj instanceof List) |
| + return ((List) obj).get(0); |
| return obj; |
| } |
| + |
| private List getAllElements(Map map, Object key) { |
| Object obj= map.get(key); |
| if (obj instanceof List) |
| - return (List)obj; |
| + return (List) obj; |
| if (obj == null) |
| return Collections.EMPTY_LIST; |
| List result= new ArrayList(1); |
| @@ -208,27 +222,27 @@ |
| return result; |
| } |
| } |
| - |
| + |
| public WorkingSetModel() { |
| fLocalWorkingSetManager= PlatformUI.getWorkbench().createLocalWorkingSetManager(); |
| addListenersToWorkingSetManagers(); |
| - fActiveWorkingSets= new ArrayList(2); |
| - |
| - IWorkingSet others= fLocalWorkingSetManager.createWorkingSet(WorkingSetMessages.WorkingSetModel_others_name, new IAdaptable[0]); |
| - others.setId(OthersWorkingSetUpdater.ID); |
| - fLocalWorkingSetManager.addWorkingSet(others); |
| - fActiveWorkingSets.add(others); |
| - |
| - fOthersWorkingSetUpdater.init(this); |
| - fElementMapper.rebuild(getActiveWorkingSets()); |
| + fActiveWorkingSets= new ArrayList(2); |
| + |
| + IWorkingSet others= fLocalWorkingSetManager.createWorkingSet(WorkingSetMessages.WorkingSetModel_others_name, new IAdaptable[0]); |
| + others.setId(OthersWorkingSetUpdater.ID); |
| + fLocalWorkingSetManager.addWorkingSet(others); |
| + fActiveWorkingSets.add(others); |
| + |
| + fOthersWorkingSetUpdater.init(this); |
| + fElementMapper.rebuild(getActiveWorkingSets()); |
| } |
| - |
| + |
| public WorkingSetModel(IMemento memento) { |
| restoreState(memento); |
| fOthersWorkingSetUpdater.init(this); |
| - fElementMapper.rebuild(getActiveWorkingSets()); |
| + fElementMapper.rebuild(getActiveWorkingSets()); |
| } |
| - |
| + |
| private void addListenersToWorkingSetManagers() { |
| fListeners= new ListenerList(); |
| fWorkingSetManagerListener= new IPropertyChangeListener() { |
| @@ -239,7 +253,7 @@ |
| PlatformUI.getWorkbench().getWorkingSetManager().addPropertyChangeListener(fWorkingSetManagerListener); |
| fLocalWorkingSetManager.addPropertyChangeListener(fWorkingSetManagerListener); |
| } |
| - |
| + |
| public void dispose() { |
| if (fWorkingSetManagerListener != null) { |
| PlatformUI.getWorkbench().getWorkingSetManager().removePropertyChangeListener(fWorkingSetManagerListener); |
| @@ -248,118 +262,119 @@ |
| fWorkingSetManagerListener= null; |
| } |
| } |
| - |
| - //---- model relationships --------------------------------------- |
| - |
| + |
| + // ---- model relationships --------------------------------------- |
| + |
| public IAdaptable[] getChildren(IWorkingSet workingSet) { |
| - return workingSet.getElements(); |
| - } |
| - |
| - public Object getParent(Object element) { |
| - if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element)) |
| - return this; |
| - return fElementMapper.getFirstWorkingSet(element); |
| - } |
| - |
| - public Object[] getAllParents(Object element) { |
| - if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element)) |
| - return new Object[] {this}; |
| - return fElementMapper.getAllWorkingSets(element).toArray(); |
| - } |
| - |
| - public Object[] addWorkingSets(Object[] elements) { |
| - List result= null; |
| - for (int i= 0; i < elements.length; i++) { |
| - Object element= elements[i]; |
| - List sets= null; |
| + return workingSet.getElements(); |
| + } |
| + |
| + public Object getParent(Object element) { |
| + if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element)) |
| + return this; |
| + return fElementMapper.getFirstWorkingSet(element); |
| + } |
| + |
| + public Object[] getAllParents(Object element) { |
| + if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element)) |
| + return new Object[]{this}; |
| + return fElementMapper.getAllWorkingSets(element).toArray(); |
| + } |
| + |
| + public Object[] addWorkingSets(Object[] elements) { |
| + List result= null; |
| + for (int i= 0; i < elements.length; i++) { |
| + Object element= elements[i]; |
| + List sets= null; |
| if (element instanceof IResource) { |
| - sets= fElementMapper.getAllWorkingSetsForResource((IResource)element); |
| - } else { |
| - sets= fElementMapper.getAllWorkingSets(element); |
| - } |
| + sets= fElementMapper.getAllWorkingSetsForResource((IResource) element); |
| + } else { |
| + sets= fElementMapper.getAllWorkingSets(element); |
| + } |
| if (sets != null && sets.size() > 0) { |
| if (result == null) |
| result= new ArrayList(Arrays.asList(elements)); |
| result.addAll(sets); |
| } |
| } |
| - if (result == null) |
| - return elements; |
| - return result.toArray(); |
| - } |
| - |
| - public boolean needsConfiguration() { |
| - return !fConfigured && fActiveWorkingSets.size() == 1 && |
| - OthersWorkingSetUpdater.ID.equals(((IWorkingSet)fActiveWorkingSets.get(0)).getId()); |
| - } |
| - |
| - public void configured() { |
| - fConfigured= true; |
| - } |
| - |
| - //---- working set management ----------------------------------- |
| - |
| + if (result == null) |
| + return elements; |
| + return result.toArray(); |
| + } |
| + |
| + public boolean needsConfiguration() { |
| + return !fConfigured && fActiveWorkingSets.size() == 1 && OthersWorkingSetUpdater.ID.equals(((IWorkingSet) fActiveWorkingSets.get(0)).getId()); |
| + } |
| + |
| + public void configured() { |
| + fConfigured= true; |
| + } |
| + |
| + // ---- working set management ----------------------------------- |
| + |
| /** |
| - * Adds a property change listener. |
| - * |
| - * @param listener the property change listener to add |
| - */ |
| - public void addPropertyChangeListener(IPropertyChangeListener listener) { |
| - fListeners.add(listener); |
| - } |
| - |
| - /** |
| - * Removes the property change listener. |
| - * |
| - * @param listener the property change listener to remove |
| - */ |
| - public void removePropertyChangeListener(IPropertyChangeListener listener) { |
| - fListeners.remove(listener); |
| - } |
| - |
| - public IWorkingSet[] getActiveWorkingSets() { |
| - return (IWorkingSet[])fActiveWorkingSets.toArray(new IWorkingSet[fActiveWorkingSets.size()]); |
| - } |
| - |
| - public IWorkingSet[] getAllWorkingSets() { |
| - List result= new ArrayList(); |
| - result.addAll(fActiveWorkingSets); |
| - IWorkingSet[] locals= fLocalWorkingSetManager.getWorkingSets(); |
| - for (int i= 0; i < locals.length; i++) { |
| + * Adds a property change listener. |
| + * |
| + * @param listener |
| + * the property change listener to add |
| + */ |
| + public void addPropertyChangeListener(IPropertyChangeListener listener) { |
| + fListeners.add(listener); |
| + } |
| + |
| + /** |
| + * Removes the property change listener. |
| + * |
| + * @param listener |
| + * the property change listener to remove |
| + */ |
| + public void removePropertyChangeListener(IPropertyChangeListener listener) { |
| + fListeners.remove(listener); |
| + } |
| + |
| + public IWorkingSet[] getActiveWorkingSets() { |
| + return (IWorkingSet[]) fActiveWorkingSets.toArray(new IWorkingSet[fActiveWorkingSets.size()]); |
| + } |
| + |
| + public IWorkingSet[] getAllWorkingSets() { |
| + List result= new ArrayList(); |
| + result.addAll(fActiveWorkingSets); |
| + IWorkingSet[] locals= fLocalWorkingSetManager.getWorkingSets(); |
| + for (int i= 0; i < locals.length; i++) { |
| if (!result.contains(locals[i])) |
| result.add(locals[i]); |
| } |
| - IWorkingSet[] globals= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets(); |
| - for (int i= 0; i < globals.length; i++) { |
| + IWorkingSet[] globals= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets(); |
| + for (int i= 0; i < globals.length; i++) { |
| if (!result.contains(globals[i])) |
| result.add(globals[i]); |
| } |
| - return (IWorkingSet[])result.toArray(new IWorkingSet[result.size()]); |
| - } |
| - |
| - public void setActiveWorkingSets(IWorkingSet[] workingSets) { |
| - fActiveWorkingSets= new ArrayList(Arrays.asList(workingSets)); |
| - fElementMapper.rebuild(getActiveWorkingSets()); |
| - fOthersWorkingSetUpdater.updateElements(); |
| - fireEvent(new PropertyChangeEvent(this, CHANGE_WORKING_SET_MODEL_CONTENT, null, null)); |
| - } |
| - |
| + return (IWorkingSet[]) result.toArray(new IWorkingSet[result.size()]); |
| + } |
| + |
| + public void setActiveWorkingSets(IWorkingSet[] workingSets) { |
| + fActiveWorkingSets= new ArrayList(Arrays.asList(workingSets)); |
| + fElementMapper.rebuild(getActiveWorkingSets()); |
| + fOthersWorkingSetUpdater.updateElements(); |
| + fireEvent(new PropertyChangeEvent(this, CHANGE_WORKING_SET_MODEL_CONTENT, null, null)); |
| + } |
| + |
| public void saveState(IMemento memento) { |
| memento.putString(TAG_CONFIGURED, Boolean.toString(fConfigured)); |
| fLocalWorkingSetManager.saveState(memento.createChild(TAG_LOCAL_WORKING_SET_MANAGER)); |
| for (Iterator iter= fActiveWorkingSets.iterator(); iter.hasNext();) { |
| IMemento active= memento.createChild(TAG_ACTIVE_WORKING_SET); |
| - IWorkingSet workingSet= (IWorkingSet)iter.next(); |
| + IWorkingSet workingSet= (IWorkingSet) iter.next(); |
| active.putString(TAG_WORKING_SET_NAME, workingSet.getName()); |
| } |
| } |
| - |
| + |
| private void restoreState(IMemento memento) { |
| String configured= memento.getString(TAG_CONFIGURED); |
| if (configured != null) |
| fConfigured= Boolean.valueOf(configured).booleanValue(); |
| fLocalWorkingSetManager= PlatformUI.getWorkbench().createLocalWorkingSetManager(); |
| - addListenersToWorkingSetManagers(); |
| + addListenersToWorkingSetManagers(); |
| fLocalWorkingSetManager.restoreState(memento.getChild(TAG_LOCAL_WORKING_SET_MANAGER)); |
| IWorkingSet history= getHistoryWorkingSet(); |
| if (history != null) { |
| @@ -380,54 +395,54 @@ |
| } |
| } |
| } |
| - private void workingSetManagerChanged(PropertyChangeEvent event) { |
| + |
| + private void workingSetManagerChanged(PropertyChangeEvent event) { |
| String property= event.getProperty(); |
| - if (IWorkingSetManager.CHANGE_WORKING_SET_UPDATER_INSTALLED.equals(property) && event.getSource() == fLocalWorkingSetManager) { |
| - IWorkingSetUpdater updater= (IWorkingSetUpdater)event.getNewValue(); |
| + if (IWorkingSetManager.CHANGE_WORKING_SET_UPDATER_INSTALLED.equals(property) && event.getSource() == fLocalWorkingSetManager) { |
| + IWorkingSetUpdater updater= (IWorkingSetUpdater) event.getNewValue(); |
| if (updater instanceof OthersWorkingSetUpdater) { |
| - fOthersWorkingSetUpdater= (OthersWorkingSetUpdater)updater; |
| + fOthersWorkingSetUpdater= (OthersWorkingSetUpdater) updater; |
| } |
| return; |
| } |
| - // don't handle working sets not managed by the model |
| - if (!isAffected(event)) |
| - return; |
| - |
| + // don't handle working sets not managed by the model |
| + if (!isAffected(event)) |
| + return; |
| + |
| if (IWorkingSetManager.CHANGE_WORKING_SET_CONTENT_CHANGE.equals(property)) { |
| - IWorkingSet workingSet= (IWorkingSet)event.getNewValue(); |
| + IWorkingSet workingSet= (IWorkingSet) event.getNewValue(); |
| IAdaptable[] elements= fElementMapper.refresh(workingSet); |
| if (elements != null) { |
| fireEvent(event); |
| } |
| } else if (IWorkingSetManager.CHANGE_WORKING_SET_REMOVE.equals(property)) { |
| - IWorkingSet workingSet= (IWorkingSet)event.getOldValue(); |
| + IWorkingSet workingSet= (IWorkingSet) event.getOldValue(); |
| List elements= new ArrayList(fActiveWorkingSets); |
| elements.remove(workingSet); |
| - setActiveWorkingSets((IWorkingSet[])elements.toArray(new IWorkingSet[elements.size()])); |
| - } else if (IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE.equals(property)) { |
| + setActiveWorkingSets((IWorkingSet[]) elements.toArray(new IWorkingSet[elements.size()])); |
| + } else if (IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE.equals(property)) { |
| fireEvent(event); |
| } |
| } |
| - |
| - private void fireEvent(PropertyChangeEvent event) { |
| - Object[] listeners= fListeners.getListeners(); |
| - for (int i= 0; i < listeners.length; i++) { |
| - ((IPropertyChangeListener)listeners[i]).propertyChange(event); |
| - } |
| - } |
| - |
| - private boolean isAffected(PropertyChangeEvent event) { |
| - if (fActiveWorkingSets == null) |
| - return false; |
| - Object oldValue= event.getOldValue(); |
| - Object newValue= event.getNewValue(); |
| - if ((oldValue != null && fActiveWorkingSets.contains(oldValue)) |
| - || (newValue != null && fActiveWorkingSets.contains(newValue))) { |
| - return true; |
| - } |
| - return false; |
| - } |
| - |
| + |
| + private void fireEvent(PropertyChangeEvent event) { |
| + Object[] listeners= fListeners.getListeners(); |
| + for (int i= 0; i < listeners.length; i++) { |
| + ((IPropertyChangeListener) listeners[i]).propertyChange(event); |
| + } |
| + } |
| + |
| + private boolean isAffected(PropertyChangeEvent event) { |
| + if (fActiveWorkingSets == null) |
| + return false; |
| + Object oldValue= event.getOldValue(); |
| + Object newValue= event.getNewValue(); |
| + if ((oldValue != null && fActiveWorkingSets.contains(oldValue)) || (newValue != null && fActiveWorkingSets.contains(newValue))) { |
| + return true; |
| + } |
| + return false; |
| + } |
| + |
| private IWorkingSet getHistoryWorkingSet() { |
| IWorkingSet[] workingSets= fLocalWorkingSetManager.getWorkingSets(); |
| for (int i= 0; i < workingSets.length; i++) { |
| Index: ui/org/eclipse/jdt/ui/StandardJavaElementContentProvider.java |
| =================================================================== |
| RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/StandardJavaElementContentProvider.java,v |
| retrieving revision 1.27 |
| diff -u -r1.27 StandardJavaElementContentProvider.java |
| --- ui/org/eclipse/jdt/ui/StandardJavaElementContentProvider.java 17 Jun 2005 15:51:56 -0000 1.27 |
| +++ ui/org/eclipse/jdt/ui/StandardJavaElementContentProvider.java 8 Dec 2005 20:19:30 -0000 |
| @@ -13,16 +13,28 @@ |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| +import org.eclipse.core.runtime.CoreException; |
| + |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IFolder; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| -import org.eclipse.core.runtime.CoreException; |
| |
| import org.eclipse.jface.viewers.ITreeContentProvider; |
| import org.eclipse.jface.viewers.Viewer; |
| |
| -import org.eclipse.jdt.core.*; |
| +import org.eclipse.jdt.core.IClassFile; |
| +import org.eclipse.jdt.core.ICompilationUnit; |
| +import org.eclipse.jdt.core.IJavaElement; |
| +import org.eclipse.jdt.core.IJavaElementDelta; |
| +import org.eclipse.jdt.core.IJavaModel; |
| +import org.eclipse.jdt.core.IJavaProject; |
| +import org.eclipse.jdt.core.IPackageFragment; |
| +import org.eclipse.jdt.core.IPackageFragmentRoot; |
| +import org.eclipse.jdt.core.IParent; |
| +import org.eclipse.jdt.core.ISourceReference; |
| +import org.eclipse.jdt.core.JavaCore; |
| +import org.eclipse.jdt.core.JavaModelException; |
| |
| /** |
| * A base content provider for Java elements. It provides access to the |
| @@ -51,11 +63,15 @@ |
| * |
| * @since 2.0 |
| */ |
| -public class StandardJavaElementContentProvider implements ITreeContentProvider, IWorkingCopyProvider { |
| +public class StandardJavaElementContentProvider implements ITreeContentProvider, IWorkingCopyProvider { |
| + |
| + public static final int SHOW_MEMBERS= 1<<1; |
| + public static final int SHOW_RESOURCES= 1<<2; |
| |
| protected static final Object[] NO_CHILDREN= new Object[0]; |
| protected boolean fProvideMembers; |
| protected boolean fProvideWorkingCopy; |
| + protected boolean fIncludeResources; |
| |
| /** |
| * Creates a new content provider. The content provider does not |
| @@ -81,9 +97,22 @@ |
| * @param provideMembers if <code>true</code> members below compilation units |
| * and class files are provided. |
| */ |
| - public StandardJavaElementContentProvider(boolean provideMembers) { |
| - fProvideMembers= provideMembers; |
| - fProvideWorkingCopy= provideMembers; |
| + public StandardJavaElementContentProvider(boolean provideMembers) { |
| + this( (provideMembers ? SHOW_MEMBERS : 0) | SHOW_RESOURCES); |
| + } |
| + |
| + |
| + |
| + /** |
| + * Creates a new <code>StandardJavaElementContentProvider</code>. |
| + * |
| + * @param provideMembers if <code>true</code> members below compilation units |
| + * and class files are provided. |
| + */ |
| + public StandardJavaElementContentProvider(int options) { |
| + fProvideMembers= (options & SHOW_MEMBERS) != 0; |
| + fIncludeResources = (options & SHOW_RESOURCES) != 0; |
| + fProvideWorkingCopy= fProvideMembers; |
| } |
| |
| /** |
| @@ -155,7 +184,7 @@ |
| /* (non-Javadoc) |
| * Method declared on ITreeContentProvider. |
| */ |
| - public Object[] getChildren(Object element) { |
| + public Object[] getChildren(Object element) { |
| if (!exists(element)) |
| return NO_CHILDREN; |
| |
| @@ -172,8 +201,10 @@ |
| if (element instanceof IPackageFragment) |
| return getPackageContents((IPackageFragment)element); |
| |
| - if (element instanceof IFolder) |
| - return getResources((IFolder)element); |
| + if (element instanceof IFolder) { |
| + return (fIncludeResources) ? getResources((IFolder)element) : NO_CHILDREN; |
| + |
| + } |
| |
| if (getProvideMembers() && element instanceof ISourceReference && element instanceof IParent) { |
| return ((IParent)element).getChildren(); |
| @@ -233,12 +264,15 @@ |
| |
| private Object[] getPackageFragments(IPackageFragmentRoot root) throws JavaModelException { |
| IJavaElement[] fragments= root.getChildren(); |
| - Object[] nonJavaResources= root.getNonJavaResources(); |
| - if (nonJavaResources == null) |
| + if(fIncludeResources) { |
| + Object[] nonJavaResources= root.getNonJavaResources(); |
| + if (nonJavaResources == null) |
| + return fragments; |
| + return concatenate(fragments, nonJavaResources); |
| + } else |
| return fragments; |
| - return concatenate(fragments, nonJavaResources); |
| - } |
| - |
| + } |
| + |
| /** |
| * Note: This method is for internal use only. Clients should not call this method. |
| */ |
| @@ -261,7 +295,7 @@ |
| list.add(root); |
| } |
| } |
| - return concatenate(list.toArray(), project.getNonJavaResources()); |
| + return (fIncludeResources) ? concatenate(list.toArray(), project.getNonJavaResources()) : list.toArray(); |
| } |
| |
| /** |
| Index: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java |
| =================================================================== |
| RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java,v |
| retrieving revision 1.49 |
| diff -u -r1.49 PackageExplorerContentProvider.java |
| --- ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java 10 Aug 2005 10:53:37 -0000 1.49 |
| +++ ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java 8 Dec 2005 20:19:30 -0000 |
| @@ -84,7 +84,22 @@ |
| super(provideMembers); |
| fPart= part; |
| } |
| + |
| |
| + /** |
| + * Creates a new content provider for Java elements. |
| + */ |
| + public PackageExplorerContentProvider(boolean provideMembers) { |
| + super(provideMembers); |
| + } |
| + |
| + /** |
| + * Creates a new content provider for Java elements. |
| + */ |
| + public PackageExplorerContentProvider(int options) { |
| + super(options); |
| + } |
| + |
| /* package */ PackageFragmentProvider getPackageFragmentProvider() { |
| return fPackageFragmentProvider; |
| } |
| @@ -136,8 +151,9 @@ |
| int type= -1; |
| if (element instanceof IJavaElement) |
| type= ((IJavaElement)element).getElementType(); |
| - return (!fIsFlatLayout && (type == IJavaElement.PACKAGE_FRAGMENT || type == IJavaElement.PACKAGE_FRAGMENT_ROOT || type == IJavaElement.JAVA_PROJECT)); |
| + return (fIsFlatLayout && (type == IJavaElement.PACKAGE_FRAGMENT || type == IJavaElement.PACKAGE_FRAGMENT_ROOT || type == IJavaElement.JAVA_PROJECT)); |
| } |
| + |
| |
| public Object[] getChildren(Object parentElement) { |
| Object[] children= NO_CHILDREN; |
| @@ -148,12 +164,16 @@ |
| if (parentElement instanceof ClassPathContainer) |
| return getContainerPackageFragmentRoots((ClassPathContainer)parentElement); |
| |
| - if (parentElement instanceof IProject) |
| - return ((IProject)parentElement).members(); |
| + if (parentElement instanceof IProject) { |
| + if(fIncludeResources) |
| + return ((IProject)parentElement).members(); |
| + else |
| + return NO_CHILDREN; |
| + } |
| |
| if (needsToDelegateGetChildren(parentElement)) { |
| - Object[] packageFragments= fPackageFragmentProvider.getChildren(parentElement); |
| - children= getWithParentsResources(packageFragments, parentElement); |
| + Object[] packageFragments= fPackageFragmentProvider.getChildren(parentElement); |
| + children= getWithParentsResources(packageFragments, parentElement); |
| } else { |
| children= super.getChildren(parentElement); |
| } |
| @@ -169,6 +189,7 @@ |
| return NO_CHILDREN; |
| } |
| } |
| + |
| |
| private Object[] rootsAndContainers(IJavaProject project, Object[] roots) throws JavaModelException { |
| List result= new ArrayList(roots.length); |
| @@ -246,7 +267,7 @@ |
| int type= -1; |
| if (element instanceof IJavaElement) |
| type= ((IJavaElement)element).getElementType(); |
| - return (!fIsFlatLayout && type == IJavaElement.PACKAGE_FRAGMENT); |
| + return (fIsFlatLayout && type == IJavaElement.PACKAGE_FRAGMENT); |
| } |
| |
| /** |
| @@ -303,7 +324,7 @@ |
| return; |
| } |
| |
| - if (!fIsFlatLayout && elementType == IJavaElement.PACKAGE_FRAGMENT) { |
| + if (fIsFlatLayout && elementType == IJavaElement.PACKAGE_FRAGMENT) { |
| fPackageFragmentProvider.processDelta(delta); |
| if (processResourceDeltas(delta.getResourceDeltas(), element)) |
| return; |
| @@ -560,6 +581,10 @@ |
| public void setIsFlatLayout(boolean state) { |
| fIsFlatLayout= state; |
| } |
| + |
| + protected final boolean isFlatLayout() { |
| + return fIsFlatLayout; |
| + } |
| /** |
| * Process resource deltas. |
| * |
| Index: ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java |
| =================================================================== |
| RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java,v |
| retrieving revision 1.10 |
| diff -u -r1.10 WorkingSetAwareContentProvider.java |
| --- ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java 28 Oct 2005 20:59:06 -0000 1.10 |
| +++ ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java 8 Dec 2005 20:19:30 -0000 |
| @@ -54,6 +54,17 @@ |
| fWorkingSetModel.addPropertyChangeListener(fListener); |
| } |
| |
| + public WorkingSetAwareContentProvider(boolean provideMembers, WorkingSetModel model) { |
| + super(provideMembers); |
| + fWorkingSetModel= model; |
| + fListener= new IPropertyChangeListener() { |
| + public void propertyChange(PropertyChangeEvent event) { |
| + workingSetModelChanged(event); |
| + } |
| + }; |
| + fWorkingSetModel.addPropertyChangeListener(fListener); |
| + } |
| + |
| /** |
| * {@inheritDoc} |
| */ |
| Index: META-INF/MANIFEST.MF |
| =================================================================== |
| RCS file: /home/eclipse/org.eclipse.jdt.ui/META-INF/MANIFEST.MF,v |
| retrieving revision 1.12 |
| diff -u -r1.12 MANIFEST.MF |
| --- META-INF/MANIFEST.MF 25 Nov 2005 10:26:31 -0000 1.12 |
| +++ META-INF/MANIFEST.MF 8 Dec 2005 20:19:29 -0000 |
| @@ -99,8 +99,7 @@ |
| org.eclipse.jdt.ui.text.java, |
| org.eclipse.jdt.ui.text.java.hover, |
| org.eclipse.jdt.ui.wizards |
| -Require-Bundle: |
| - org.eclipse.ui, |
| +Require-Bundle: org.eclipse.ui, |
| org.eclipse.ui.console, |
| org.eclipse.help, |
| org.eclipse.core.expressions, |
| @@ -121,6 +120,7 @@ |
| org.eclipse.core.runtime.compatibility, |
| org.eclipse.ltk.core.refactoring, |
| org.eclipse.ltk.ui.refactoring, |
| - org.eclipse.ui.forms |
| -Eclipse-LazyStart: true |
| + org.eclipse.ui.forms, |
| + org.eclipse.ui.navigator |
| +Eclipse-LazyStart: true |
| Plugin-Class: org.eclipse.jdt.internal.ui.JavaPlugin |
| Index: plugin.xml |
| =================================================================== |
| RCS file: /home/eclipse/org.eclipse.jdt.ui/plugin.xml,v |
| retrieving revision 1.577 |
| diff -u -r1.577 plugin.xml |
| --- plugin.xml 25 Nov 2005 11:21:01 -0000 1.577 |
| +++ plugin.xml 8 Dec 2005 20:19:29 -0000 |
| @@ -4677,4 +4677,62 @@ |
| streamMergerId="org.eclipse.jdt.ui.refactoring.model.JavaFileStreamMerger"/> |
| </extension> |
| |
| + |
| + <!-- ADDITIONS BELOW THIS LINE --> |
| + |
| + <extension |
| + point="org.eclipse.ui.navigator.viewer"> |
| + <viewerContentBinding |
| + viewerId="org.eclipse.ui.navigator.resourceContent"> |
| + <includes> |
| + <contentExtension pattern="org.eclipse.jdt.java.navigator" /> |
| + </includes> |
| + </viewerContentBinding> |
| + </extension> |
| + |
| + <extension |
| + point="org.eclipse.ui.navigator.navigatorContent"> |
| + <navigatorContent |
| + contentProvider="org.eclipse.jdt.internal.ui.packageview.PreferenceAwareContentProvider" |
| + id="org.eclipse.jdt.java.navigator" |
| + labelProvider="org.eclipse.jdt.internal.ui.packageview.PreferenceAwareLabelProvider" |
| + name="JDT Extension" |
| + priority="high"> |
| + <enablement> |
| + <or> |
| + <adapt |
| + type="org.eclipse.core.resources.IProject" > |
| + <test |
| + property="org.eclipse.ui.navigator.resources.projectNature" |
| + value="org.eclipse.jdt.core.javanature" /> |
| + </adapt> |
| + <instanceof |
| + value="org.eclipse.jdt.core.IJavaProject" /> |
| + <instanceof |
| + value="org.eclipse.jdt.core.IJavaElement" /> |
| + <instanceof |
| + value="org.eclipse.jdt.internal.core.JarEntryFile" /> |
| + <instanceof |
| + value="org.eclipse.jdt.core.IClassFile" /> |
| + <instanceof |
| + value="org.eclipse.jdt.internal.ui.packageview.ClassPathContainer" /> |
| + <instanceof |
| + value="org.eclipse.core.resources.IFolder" /> |
| + <instanceof |
| + value="org.eclipse.core.resources.IFile" /> |
| + <instanceof |
| + value="org.eclipse.jdt.internal.ui.workingsets.WorkingSetModel" /> |
| + </or> |
| + </enablement> |
| + <actionProvider |
| + class="org.eclipse.jdt.internal.ui.packageview.PackageExplorerActionProvider"> |
| + <enablement> |
| + <adapt |
| + type="org.eclipse.jdt.core.IJavaElement" /> |
| + </enablement> |
| + </actionProvider> |
| + <duplicateContentFilter viewerFilter="org.eclipse.jdt.internal.ui.packageview.JavaResourceDuplicationFilter"/> |
| + </navigatorContent> |
| + </extension> |
| + |
| </plugin> |
| \ No newline at end of file |
| Index: ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java |
| =================================================================== |
| RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java,v |
| retrieving revision 1.7 |
| diff -u -r1.7 MultiActionGroup.java |
| --- ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java 17 Jun 2005 15:51:51 -0000 1.7 |
| +++ ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java 8 Dec 2005 20:19:30 -0000 |
| @@ -37,6 +37,8 @@ |
| */ |
| public class MultiActionGroup extends ActionGroup { |
| |
| + public IAction[] NO_ACTIONS = new IAction[0]; |
| + |
| private IAction[] fActions; |
| |
| private int fCurrentSelection; |
| @@ -57,6 +59,28 @@ |
| fCurrentSelection= currentSelection; |
| fActions= actions; |
| } |
| + |
| + /** |
| + * Creates a new action group with a given set of actions. |
| + * |
| + * @param actions the actions for this multi group |
| + * @param currentSelection decides which action is selected in the menu on start up. |
| + * Denotes the location in the actions array of the current |
| + * selected state. It cannot be null. |
| + */ |
| + public MultiActionGroup(int currentSelection) { |
| + super(); |
| + |
| + fCurrentSelection= currentSelection; |
| + fActions= NO_ACTIONS; |
| + } |
| + |
| + protected final void setActions(IAction[] actions) { |
| + if(actions != null) |
| + fActions = actions; |
| + else |
| + fActions = NO_ACTIONS; |
| + } |
| |
| /** |
| * Add the actions to the given menu manager. |
| Index: ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java |
| =================================================================== |
| RCS file: ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java |
| diff -N ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java |
| --- /dev/null 1 Jan 1970 00:00:00 -0000 |
| +++ ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java 1 Jan 1970 00:00:00 -0000 |
| @@ -0,0 +1,134 @@ |
| +/******************************************************************************* |
| + * Copyright (c) 2000, 2005 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.jdt.internal.ui.packageview; |
| + |
| +import org.eclipse.jface.action.Action; |
| +import org.eclipse.jface.action.IAction; |
| +import org.eclipse.jface.action.IMenuManager; |
| +import org.eclipse.jface.action.MenuManager; |
| +import org.eclipse.jface.action.Separator; |
| +import org.eclipse.jface.viewers.StructuredViewer; |
| + |
| +import org.eclipse.ui.IActionBars; |
| +import org.eclipse.ui.IWorkbenchActionConstants; |
| +import org.eclipse.ui.PlatformUI; |
| +import org.eclipse.ui.navigator.IExtensionStateModel; |
| + |
| +import org.eclipse.jdt.internal.ui.IJavaHelpContextIds; |
| +import org.eclipse.jdt.internal.ui.JavaPluginImages; |
| +import org.eclipse.jdt.internal.ui.actions.MultiActionGroup; |
| +import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values; |
| + |
| +/** |
| + * Adds view menus to switch between flat and hierarchical layout. |
| + * |
| + * @since 2.1 |
| + */ |
| +public class CommonLayoutActionGroup extends MultiActionGroup { |
| + |
| + private boolean fHasContributedToViewMenu = false; |
| + private IAction fHierarchicalLayout = null; |
| + private IAction fFlatLayoutAction = null; |
| + |
| + private IExtensionStateModel fStateModel; |
| + |
| + public CommonLayoutActionGroup(StructuredViewer aStructuredViewer, IExtensionStateModel aStateModel) { |
| + super(aStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT) ? 0 : 1); |
| + IAction[] actions = createActions(aStructuredViewer, aStateModel); |
| + setActions(actions); |
| + fStateModel = aStateModel; |
| + } |
| + |
| + /* (non-Javadoc) |
| + * @see ActionGroup#fillActionBars(IActionBars) |
| + */ |
| + public void fillActionBars(IActionBars actionBars) { |
| + super.fillActionBars(actionBars); |
| + if(!fHasContributedToViewMenu) { |
| + synchronized(this) { |
| + if(!fHasContributedToViewMenu) { |
| + fHasContributedToViewMenu = true; |
| + contributeToViewMenu(actionBars.getMenuManager()); |
| + } |
| + } |
| + } |
| + } |
| + |
| + private void contributeToViewMenu(IMenuManager viewMenu) { |
| + viewMenu.add(new Separator()); |
| + |
| + // Create layout sub menu |
| + |
| + IMenuManager layoutSubMenu= new MenuManager(PackagesMessages.LayoutActionGroup_label); |
| + final String layoutGroupName= "layout"; //$NON-NLS-1$ |
| + Separator marker= new Separator(layoutGroupName); |
| + |
| + viewMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); |
| + viewMenu.add(marker); |
| + viewMenu.appendToGroup(layoutGroupName, layoutSubMenu); |
| + viewMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end"));//$NON-NLS-1$ |
| + addActions(layoutSubMenu); |
| + } |
| + |
| + |
| + private IAction[] createActions(StructuredViewer aStructuredViewer, IExtensionStateModel aStateModel) { |
| + |
| + fFlatLayoutAction= new CommonLayoutAction(aStructuredViewer, aStateModel, true); |
| + fFlatLayoutAction.setText(PackagesMessages.LayoutActionGroup_flatLayoutAction_label); |
| + JavaPluginImages.setLocalImageDescriptors(fFlatLayoutAction, "flatLayout.gif"); //$NON-NLS-1$ |
| + |
| + fHierarchicalLayout= new CommonLayoutAction(aStructuredViewer, aStateModel, false); |
| + fHierarchicalLayout.setText(PackagesMessages.LayoutActionGroup_hierarchicalLayoutAction_label); |
| + JavaPluginImages.setLocalImageDescriptors(fHierarchicalLayout, "hierarchicalLayout.gif"); //$NON-NLS-1$ |
| + |
| + fHierarchicalLayout.setChecked(!aStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT)); |
| + fFlatLayoutAction.setChecked(aStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT)); |
| + |
| + return new IAction[]{fFlatLayoutAction, fHierarchicalLayout}; |
| + } |
| + |
| + public void setFlatLayout(boolean flatLayout) { |
| + fHierarchicalLayout.setChecked(!flatLayout); |
| + fFlatLayoutAction.setChecked(flatLayout); |
| + } |
| + |
| +} |
| + |
| +class CommonLayoutAction extends Action implements IAction { |
| + |
| + private final boolean fIsFlatLayout; |
| + private IExtensionStateModel fStateModel; |
| + private StructuredViewer fStructuredViewer; |
| + |
| + public CommonLayoutAction(StructuredViewer aStructuredViewer, IExtensionStateModel aStateModel, boolean flat) { |
| + super("", AS_RADIO_BUTTON); //$NON-NLS-1$ |
| + fStateModel = aStateModel; |
| + fStructuredViewer = aStructuredViewer; |
| + fIsFlatLayout= flat; |
| + if (fIsFlatLayout) |
| + PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.LAYOUT_FLAT_ACTION); |
| + else |
| + PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.LAYOUT_HIERARCHICAL_ACTION); |
| + } |
| + |
| + /* |
| + * @see org.eclipse.jface.action.IAction#run() |
| + */ |
| + public void run() { |
| + if (fStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT) != fIsFlatLayout) { |
| + fStateModel.setBooleanProperty(Values.IS_LAYOUT_FLAT, fIsFlatLayout); |
| + |
| + fStructuredViewer.getControl().setRedraw(false); |
| + fStructuredViewer.refresh(); |
| + fStructuredViewer.getControl().setRedraw(true); |
| + } |
| + } |
| +} |
| Index: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java |
| =================================================================== |
| RCS file: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java |
| diff -N ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java |
| --- /dev/null 1 Jan 1970 00:00:00 -0000 |
| +++ ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java 1 Jan 1970 00:00:00 -0000 |
| @@ -0,0 +1,198 @@ |
| +/*************************************************************************************************** |
| + * Copyright (c) 2003, 2004 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.jdt.internal.ui.packageview; |
| + |
| +import org.eclipse.core.resources.IContainer; |
| +import org.eclipse.core.resources.IProject; |
| +import org.eclipse.core.resources.IWorkspaceRoot; |
| + |
| +import org.eclipse.jface.preference.IPreferenceStore; |
| +import org.eclipse.jface.util.IPropertyChangeListener; |
| +import org.eclipse.jface.util.PropertyChangeEvent; |
| +import org.eclipse.jface.viewers.StructuredViewer; |
| +import org.eclipse.jface.viewers.Viewer; |
| + |
| +import org.eclipse.ui.IMemento; |
| +import org.eclipse.ui.navigator.ICommonContentProvider; |
| +import org.eclipse.ui.navigator.IExtensionStateModel; |
| + |
| +import org.eclipse.jdt.core.IJavaElement; |
| +import org.eclipse.jdt.core.IJavaProject; |
| +import org.eclipse.jdt.core.JavaCore; |
| + |
| +import org.eclipse.jdt.ui.PreferenceConstants; |
| +import org.eclipse.jdt.ui.StandardJavaElementContentProvider; |
| + |
| +import org.eclipse.jdt.internal.ui.JavaPlugin; |
| +import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values; |
| + |
| +public class PreferenceAwareContentProvider implements ICommonContentProvider { |
| + |
| + public static final String JDT_EXTENSION_ID = "org.eclipse.jdt.java.navigator"; //$NON-NLS-1$ |
| + |
| + private static final Object[] NO_CHILDREN= new Object[0]; |
| + |
| + private PackageExplorerContentProvider fDelegateContentProvider; |
| + private WorkingSetAwareContentProvider fWorkingSetContentProvider; |
| + |
| + private IMemento fMemento; |
| + |
| + private IExtensionStateModel fStateModel; |
| + private final Cache fCache= new Cache(); |
| + |
| + private WorkingSetModelManager fManager; |
| + |
| + |
| + class Cache { |
| + public Viewer fViewer; |
| + public Object fOldInput; |
| + public Object fNewInput; |
| + |
| + public void setValues(Viewer viewer, Object oldInput, Object newInput) { |
| + fViewer= viewer; |
| + fOldInput= oldInput; |
| + fNewInput= newInput; |
| + } |
| + |
| + } |
| + |
| + public PreferenceAwareContentProvider() { |
| + } |
| + |
| + public void init(IExtensionStateModel aStateModel, IMemento aMemento) { |
| + fStateModel= aStateModel; |
| + fManager= new WorkingSetModelManager(fStateModel, this); |
| + // expose the manager for the action provider |
| + fStateModel.setProperty(WorkingSetModelManager.INSTANCE_KEY, fManager); |
| + restoreState(aMemento); |
| + fStateModel.addPropertyChangeListener(new IPropertyChangeListener() { |
| + public void propertyChange(PropertyChangeEvent event) { |
| + if (Values.IS_LAYOUT_FLAT.equals(event.getProperty())) { |
| + if (event.getNewValue() != null) { |
| + boolean newValue= ((Boolean) event.getNewValue()).booleanValue() ? true : false; |
| + fDelegateContentProvider.setIsFlatLayout(newValue); |
| + } |
| + } |
| + |
| + } |
| + }); |
| + setProviders(); |
| + } |
| + |
| + |
| + public void setProviders() { |
| + fDelegateContentProvider= createContentProvider(); |
| + fDelegateContentProvider.inputChanged(fCache.fViewer, fCache.fOldInput, fCache.fNewInput); |
| + fDelegateContentProvider.setIsFlatLayout(fStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT)); |
| + |
| + } |
| + |
| + public void dispose() { |
| + fDelegateContentProvider.dispose(); |
| + } |
| + |
| + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { |
| + fCache.setValues(viewer, oldInput, newInput); |
| + fDelegateContentProvider.inputChanged(viewer, oldInput, findInputElement(newInput)); |
| + fManager.setViewer((StructuredViewer) viewer); |
| + } |
| + |
| + public Object[] getElements(Object inputElement) { |
| + |
| + if (inputElement instanceof IWorkspaceRoot) { |
| + Object root= null; |
| + if (fManager.showProjects()) |
| + root= JavaCore.create((IWorkspaceRoot) inputElement); |
| + else |
| + root= fManager.getWorkingSetModel(); |
| + return fDelegateContentProvider.getElements(root); |
| + |
| + } else if (inputElement instanceof IContainer) { |
| + IJavaElement element= JavaCore.create((IContainer) inputElement); |
| + if (element != null && element.exists()) |
| + return fDelegateContentProvider.getElements(inputElement); |
| + return NO_CHILDREN; |
| + } |
| + |
| + return fDelegateContentProvider.getElements(inputElement); |
| + } |
| + |
| + public Object[] getChildren(Object parentElement) { |
| + if(parentElement instanceof IProject) |
| + return fDelegateContentProvider.getChildren(JavaCore.create((IProject)parentElement)); |
| + return fDelegateContentProvider.getChildren(parentElement); |
| + } |
| + |
| + public Object getParent(Object element) { |
| + Object parent = fDelegateContentProvider.getParent(element); |
| + if(parent instanceof IJavaProject) |
| + return ((IJavaProject)parent).getProject(); |
| + return parent; |
| + } |
| + |
| + public boolean hasChildren(Object element) { |
| + return fDelegateContentProvider.hasChildren(element); |
| + } |
| + |
| + /** |
| + * This method should only be called inside this class and from test cases. |
| + */ |
| + public PackageExplorerContentProvider createContentProvider() { |
| + IPreferenceStore store= PreferenceConstants.getPreferenceStore(); |
| + boolean showCUChildren= store.getBoolean(PreferenceConstants.SHOW_CU_CHILDREN); |
| + if (fManager.showProjects()) { |
| + int options = showCUChildren ? StandardJavaElementContentProvider.SHOW_MEMBERS : 0; |
| + return new PackageExplorerContentProvider(options); |
| + } |
| + else |
| + return new WorkingSetAwareContentProvider(showCUChildren, fManager.getWorkingSetModel()); |
| + } |
| + |
| + /* package */PackageFragmentProvider getPackageFragmentProvider() { |
| + return fDelegateContentProvider.getPackageFragmentProvider(); |
| + } |
| + |
| + private Object findInputElement(Object newInput) { |
| + if (fManager.showWorkingSets()) { |
| + return fManager.getWorkingSetModel(); |
| + } else { |
| + if (newInput instanceof IWorkspaceRoot) { |
| + return JavaCore.create((IWorkspaceRoot) newInput); |
| + } else if (newInput instanceof IContainer) { |
| + IJavaElement element= JavaCore.create((IContainer) newInput); |
| + if (element != null && element.exists()) |
| + return element; |
| + return newInput; |
| + } |
| + // 1GERPRT: ITPJUI:ALL - Packages View is empty when shown in Type |
| + // Hierarchy Perspective |
| + // we can't handle the input |
| + // fall back to show the workspace |
| + return JavaCore.create(JavaPlugin.getWorkspace().getRoot()); |
| + } |
| + } |
| + |
| + public void restoreState(IMemento aMemento) { |
| + fMemento= aMemento; |
| + fManager.restoreState(fMemento); |
| + |
| + } |
| + |
| + public void saveState(IMemento aMemento) { |
| + |
| + } |
| + |
| + |
| + |
| + |
| + public PackageExplorerContentProvider getDelegateContentProvider() { |
| + return fDelegateContentProvider; |
| + } |
| + |
| +} |
| Index: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java |
| =================================================================== |
| RCS file: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java |
| diff -N ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java |
| --- /dev/null 1 Jan 1970 00:00:00 -0000 |
| +++ ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java 1 Jan 1970 00:00:00 -0000 |
| @@ -0,0 +1,91 @@ |
| +/*************************************************************************************************** |
| + * Copyright (c) 2003, 2004 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.jdt.internal.ui.packageview; |
| + |
| +import org.eclipse.jface.action.IMenuManager; |
| +import org.eclipse.jface.preference.IPreferenceStore; |
| +import org.eclipse.jface.viewers.StructuredViewer; |
| + |
| +import org.eclipse.ui.IActionBars; |
| +import org.eclipse.ui.IMemento; |
| +import org.eclipse.ui.IViewPart; |
| +import org.eclipse.ui.navigator.ICommonActionProvider; |
| +import org.eclipse.ui.navigator.IExtensionStateModel; |
| +import org.eclipse.ui.navigator.INavigatorContentService; |
| +import org.eclipse.ui.navigator.internal.actions.CommonActionProvider; |
| + |
| +import org.eclipse.jdt.ui.actions.CCPActionGroup; |
| + |
| +import org.eclipse.jdt.internal.ui.JavaPlugin; |
| +import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values; |
| +import org.eclipse.jdt.internal.ui.workingsets.ViewActionGroup; |
| + |
| +public class PackageExplorerActionProvider extends CommonActionProvider implements ICommonActionProvider { |
| + |
| + private ViewActionGroup fViewActionGroup; |
| + private CommonLayoutActionGroup fLayoutActionGroup; |
| + private boolean fHasFilledViewMenu = false; |
| + private IExtensionStateModel fStateModel; |
| + |
| + private CCPActionGroup ccpGroup; |
| + |
| + public boolean fillActionBars(IActionBars theActionBars) { |
| + if(!fHasFilledViewMenu) { |
| + fViewActionGroup.fillActionBars(theActionBars); |
| + fLayoutActionGroup.fillActionBars(theActionBars); |
| + fHasFilledViewMenu = true; |
| + return true; |
| + } |
| + return false; |
| + } |
| + |
| + public boolean fillContextMenu(IMenuManager aMenu) { |
| + |
| + ccpGroup.fillContextMenu(aMenu); |
| + return true; |
| + } |
| + |
| + public void init(final String anExtensionId, final IViewPart aViewPart, final INavigatorContentService aContentService, final StructuredViewer aStructuredViewer) { |
| + |
| + fStateModel= aContentService.findStateModel(anExtensionId); |
| + WorkingSetModelManager workingSetModelManager= (WorkingSetModelManager) fStateModel.getProperty(WorkingSetModelManager.INSTANCE_KEY); |
| + fViewActionGroup= new ViewActionGroup(ViewActionGroup.SHOW_PROJECTS, workingSetModelManager, aViewPart.getSite()); |
| + |
| + fLayoutActionGroup= new CommonLayoutActionGroup(aStructuredViewer, fStateModel); |
| + |
| + ccpGroup = new CCPActionGroup(aViewPart); |
| + } |
| + |
| + public void restoreState(IMemento aMemento) { |
| + super.restoreState(aMemento); |
| + restoreLayoutState(aMemento); |
| + } |
| + |
| + private void restoreLayoutState(IMemento memento) { |
| + boolean isCurrentLayoutFlat= true; |
| + Integer state= null; |
| + if (memento != null) |
| + state= memento.getInteger(MementoFlags.TAG_LAYOUT); |
| + |
| + // If no memento try an restore from preference store |
| + if (state == null) { |
| + IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore(); |
| + state= new Integer(store.getInt(MementoFlags.TAG_LAYOUT)); |
| + } |
| + |
| + if (state.intValue() == MementoFlags.FLAT_LAYOUT) |
| + isCurrentLayoutFlat= true; |
| + else if (state.intValue() == MementoFlags.HIERARCHICAL_LAYOUT) |
| + isCurrentLayoutFlat= false; |
| + |
| + fStateModel.setBooleanProperty(Values.IS_LAYOUT_FLAT, isCurrentLayoutFlat); |
| + fLayoutActionGroup.setFlatLayout(isCurrentLayoutFlat); |
| + } |
| + |
| +} |
| Index: ui/org/eclipse/jdt/internal/ui/packageview/MementoFlags.java |
| =================================================================== |
| RCS file: ui/org/eclipse/jdt/internal/ui/packageview/MementoFlags.java |
| diff -N ui/org/eclipse/jdt/internal/ui/packageview/MementoFlags.java |
| --- /dev/null 1 Jan 1970 00:00:00 -0000 |
| +++ ui/org/eclipse/jdt/internal/ui/packageview/MementoFlags.java 1 Jan 1970 00:00:00 -0000 |
| @@ -0,0 +1,43 @@ |
| +/******************************************************************************* |
| + * Copyright (c) 2003, 2004 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.jdt.internal.ui.packageview; |
| + |
| +public interface MementoFlags { |
| + |
| + int HIERARCHICAL_LAYOUT = 0x1; |
| + |
| + int FLAT_LAYOUT = 0x2; |
| + |
| + // Persistance tags. |
| + String TAG_SELECTION = "selection"; //$NON-NLS-1$ |
| + |
| + String TAG_EXPANDED = "expanded"; //$NON-NLS-1$ |
| + |
| + String TAG_ELEMENT = "element"; //$NON-NLS-1$ |
| + |
| + String TAG_PATH = "path"; //$NON-NLS-1$ |
| + |
| + String TAG_VERTICAL_POSITION = "verticalPosition"; //$NON-NLS-1$ |
| + |
| + String TAG_HORIZONTAL_POSITION = "horizontalPosition"; //$NON-NLS-1$ |
| + |
| + String TAG_FILTERS = "filters"; //$NON-NLS-1$ |
| + |
| + String TAG_FILTER = "filter"; //$NON-NLS-1$ |
| + |
| + String TAG_LAYOUT = "layout"; //$NON-NLS-1$ |
| + |
| + String TAG_CURRENT_FRAME = "currentFramge"; //$NON-NLS-1$ |
| + |
| + String TAG_ROOT_MODE = "rootMode"; //$NON-NLS-1$ |
| + |
| + String SETTING_MEMENTO = "memento"; //$NON-NLS-1$ |
| +} |
| Index: ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetModelManager.java |
| =================================================================== |
| RCS file: ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetModelManager.java |
| diff -N ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetModelManager.java |
| --- /dev/null 1 Jan 1970 00:00:00 -0000 |
| +++ ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetModelManager.java 1 Jan 1970 00:00:00 -0000 |
| @@ -0,0 +1,201 @@ |
| +/*************************************************************************************************** |
| + * Copyright (c) 2003, 2004 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.jdt.internal.ui.packageview; |
| + |
| +import org.eclipse.core.runtime.ISafeRunnable; |
| +import org.eclipse.core.runtime.Platform; |
| + |
| +import org.eclipse.core.resources.ResourcesPlugin; |
| + |
| +import org.eclipse.swt.widgets.Shell; |
| + |
| +import org.eclipse.jface.util.IPropertyChangeListener; |
| +import org.eclipse.jface.util.PropertyChangeEvent; |
| +import org.eclipse.jface.viewers.StructuredViewer; |
| + |
| +import org.eclipse.ui.IMemento; |
| +import org.eclipse.ui.IWorkingSet; |
| +import org.eclipse.ui.IWorkingSetManager; |
| +import org.eclipse.ui.PlatformUI; |
| +import org.eclipse.ui.navigator.IExtensionStateModel; |
| + |
| + |
| +import org.eclipse.jdt.core.JavaCore; |
| + |
| +import org.eclipse.jdt.internal.ui.workingsets.ConfigureWorkingSetAction; |
| +import org.eclipse.jdt.internal.ui.workingsets.ViewActionGroup; |
| +import org.eclipse.jdt.internal.ui.workingsets.WorkingSetModel; |
| + |
| +public class WorkingSetModelManager implements IPropertyChangeListener { |
| + |
| + public static final int SHOW_PROJECTS= ViewActionGroup.SHOW_PROJECTS; |
| + public static final int SHOW_WORKING_SETS= ViewActionGroup.SHOW_WORKING_SETS; |
| + public static final String MODE_CHANGED= ViewActionGroup.class.getName() + ".mode_changed"; //$NON-NLS-1$ |
| + |
| + public static final String INSTANCE_KEY= WorkingSetModelManager.class.getName(); |
| + |
| + private IExtensionStateModel fStateModel; |
| + private WorkingSetModel fWorkingSetModel; |
| + private StructuredViewer fViewer; |
| + |
| + private IMemento fMemento; |
| + private PreferenceAwareContentProvider fProvider; |
| + |
| + public WorkingSetModelManager(IExtensionStateModel stateModel, PreferenceAwareContentProvider provider) { |
| + fStateModel= stateModel; |
| + fProvider = provider; |
| + } |
| + |
| + public void setViewer(StructuredViewer viewer) { |
| + fViewer= viewer; |
| + } |
| + |
| + /** |
| + * |
| + */ |
| + private void handleRootModeChanged(int newMode) { |
| + rootModeChanged(newMode); |
| + Object oldInput= null; |
| + Object newInput= null; |
| + if (showProjects()) { |
| + oldInput= getWorkingSetModel(); |
| + newInput= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()); |
| + } else if (showWorkingSets()) { |
| + oldInput= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()); |
| + newInput= getWorkingSetModel(); |
| + } |
| + // JDTPORT The Common Navigator does not support Tree Frames yet |
| + // if (oldInput != null && newInput != null) { |
| + // Frame frame; |
| + // for (int i= 0; (frame= fFrameList.getFrame(i)) != null; i++) { |
| + // if (frame instanceof TreeFrame) { |
| + // TreeFrame treeFrame= (TreeFrame)frame; |
| + // if (oldInput.equals(treeFrame.getInput())) |
| + // treeFrame.setInput(newInput); |
| + // } |
| + // } |
| + // } |
| + } |
| + |
| + public void propertyChange(PropertyChangeEvent event) { |
| + if (ViewActionGroup.MODE_CHANGED.equals(event.getProperty())) { |
| + handleRootModeChanged(((Integer) event.getNewValue()).intValue()); |
| + } else { |
| + updateTitle(event); |
| + |
| + String property= event.getProperty(); |
| + if (IWorkingSetManager.CHANGE_WORKING_SET_CONTENT_CHANGE.equals(property)) { |
| + refreshViewer(); |
| + } |
| + } |
| + |
| + } |
| + |
| + private void refreshViewer() { |
| + if (fViewer != null) { |
| + fViewer.getControl().setRedraw(false); |
| + fViewer.refresh(); |
| + fViewer.getControl().setRedraw(true); |
| + } |
| + } |
| + |
| + /** |
| + * @param event |
| + */ |
| + private void updateTitle(PropertyChangeEvent event) { |
| + IWorkingSet workingSet= (IWorkingSet) event.getNewValue(); |
| + |
| + String workingSetName= null; |
| + if (workingSet != null) |
| + workingSetName= workingSet.getName(); |
| + // JDTPORT |
| + // fPart.setWorkingSetName(workingSetName); |
| + // fPart.updateTitle(); |
| + } |
| + |
| + public boolean showProjects() { |
| + return fStateModel.getIntProperty(IExtensionStateConstants.ROOT_MODE) == SHOW_PROJECTS; |
| + } |
| + |
| + public boolean showWorkingSets() { |
| + return fStateModel.getIntProperty(IExtensionStateConstants.ROOT_MODE) == SHOW_WORKING_SETS; |
| + } |
| + |
| + public void rootModeChanged(int newMode) { |
| + boolean isRootInputChange = getRootMode() != newMode; |
| + setRootMode(newMode); |
| + if (showWorkingSets() && fWorkingSetModel == null) { |
| + createWorkingSetModel(); |
| + // JDTPORT |
| + // if (fActionSet != null) { |
| + // fActionSet.getWorkingSetActionGroup().setWorkingSetModel(fWorkingSetModel); |
| + // } |
| + |
| + if (isRootInputChange && fWorkingSetModel.needsConfiguration()) { |
| + Shell shell= (fViewer != null) ? fViewer.getControl().getShell() : PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); |
| + |
| + ConfigureWorkingSetAction action= new ConfigureWorkingSetAction(shell); |
| + action.setWorkingSetModel(fWorkingSetModel); |
| + action.run(); |
| + fWorkingSetModel.configured(); |
| + } |
| + } |
| + if(isRootInputChange) { |
| + fProvider.setProviders(); |
| + refreshViewer(); |
| + } |
| + } |
| + |
| + |
| + public void createWorkingSetModel() { |
| + if (fWorkingSetModel == null) { |
| + Platform.run(new ISafeRunnable() { |
| + public void run() throws Exception { |
| + boolean createRestoredModel = fMemento != null && fMemento.getChild(WorkingSetModel.TAG_LOCAL_WORKING_SET_MANAGER) != null; |
| + fWorkingSetModel= createRestoredModel ? new WorkingSetModel(fMemento) : new WorkingSetModel(); |
| + fStateModel.setProperty(IExtensionStateConstants.WORKING_SET_MODEL_KEY, fWorkingSetModel); |
| + } |
| + |
| + public void handleException(Throwable exception) { |
| + fWorkingSetModel= new WorkingSetModel(); |
| + } |
| + }); |
| + } |
| + } |
| + |
| + public WorkingSetModel getWorkingSetModel() { |
| + return fWorkingSetModel; |
| + } |
| + |
| + public void restoreState(IMemento aMemento) { |
| + fMemento= aMemento; |
| + restoreRootMode(); |
| + if (showWorkingSets()) { |
| + createWorkingSetModel(); |
| + } |
| + |
| + } |
| + |
| + public int getRootMode() { |
| + return fStateModel.getIntProperty(IExtensionStateConstants.ROOT_MODE); |
| + } |
| + |
| + protected void setRootMode(int aRootMode) { |
| + fStateModel.setIntProperty(IExtensionStateConstants.ROOT_MODE, aRootMode); |
| + } |
| + |
| + private void restoreRootMode() { |
| + int rootMode= SHOW_PROJECTS; |
| + if (fMemento != null) { |
| + Integer value= fMemento.getInteger(MementoFlags.TAG_ROOT_MODE); |
| + rootMode= value != null ? ((value.intValue() == SHOW_PROJECTS) ? SHOW_PROJECTS : SHOW_WORKING_SETS) : SHOW_PROJECTS; |
| + } |
| + setRootMode(rootMode); |
| + } |
| +} |
| Index: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java |
| =================================================================== |
| RCS file: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java |
| diff -N ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java |
| --- /dev/null 1 Jan 1970 00:00:00 -0000 |
| +++ ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java 1 Jan 1970 00:00:00 -0000 |
| @@ -0,0 +1,189 @@ |
| +/*************************************************************************************************** |
| + * Copyright (c) 2000, 2004 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.jdt.internal.ui.packageview; |
| + |
| +import org.eclipse.core.resources.IContainer; |
| +import org.eclipse.core.resources.IResource; |
| + |
| +import org.eclipse.swt.graphics.Color; |
| +import org.eclipse.swt.graphics.Image; |
| + |
| +import org.eclipse.jface.util.IPropertyChangeListener; |
| +import org.eclipse.jface.util.PropertyChangeEvent; |
| +import org.eclipse.jface.viewers.ILabelDecorator; |
| +import org.eclipse.jface.viewers.ILabelProviderListener; |
| +import org.eclipse.jface.viewers.ITreeContentProvider; |
| + |
| +import org.eclipse.ui.IMemento; |
| +import org.eclipse.ui.navigator.ICommonLabelProvider; |
| +import org.eclipse.ui.navigator.IExtensionStateModel; |
| + |
| + |
| +import org.eclipse.jdt.core.IJavaElement; |
| + |
| +import org.eclipse.jdt.ui.JavaElementLabels; |
| + |
| +import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values; |
| +import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider; |
| +import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider; |
| + |
| +/** |
| + * Provides the labels for the Package Explorer. |
| + * <p> |
| + * It provides labels for the packages in hierarchical layout and in all other cases delegates it to |
| + * its super class. |
| + * </p> |
| + * |
| + * @since 2.1 |
| + */ |
| +public class PreferenceAwareLabelProvider implements ICommonLabelProvider { |
| + |
| + private final long LABEL_FLAGS= JavaElementLabels.DEFAULT_QUALIFIED | JavaElementLabels.ROOT_POST_QUALIFIED | JavaElementLabels.APPEND_ROOT_PATH | JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_PARAMETER_NAMES | JavaElementLabels.M_APP_RETURNTYPE | JavaElementLabels.M_EXCEPTIONS | JavaElementLabels.F_APP_TYPE_SIGNATURE | JavaElementLabels.T_TYPE_PARAMETERS; |
| + |
| + private PackageExplorerLabelProvider delegeteLabelProvider; |
| + |
| + private PackageExplorerContentProvider fContentProvider; |
| + |
| + private IExtensionStateModel fStateModel; |
| + |
| + private WorkingSetModelManager fManager; |
| + |
| + public PreferenceAwareLabelProvider() { |
| + |
| + } |
| + |
| + public void init(IExtensionStateModel aStateModel, ITreeContentProvider contentProvider) { |
| + fStateModel= aStateModel; |
| + |
| + fManager= (WorkingSetModelManager) fStateModel.getProperty(IExtensionStateConstants.WORKINGSET_MODEL_MANAGER_KEY); |
| + |
| + fContentProvider= ((PreferenceAwareContentProvider) contentProvider).getDelegateContentProvider(); |
| + delegeteLabelProvider= createLabelProvider(); |
| + |
| + delegeteLabelProvider.setIsFlatLayout(fStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT)); |
| + fStateModel.addPropertyChangeListener(new IPropertyChangeListener() { |
| + public void propertyChange(PropertyChangeEvent event) { |
| + if (Values.IS_LAYOUT_FLAT.equals(event.getProperty())) { |
| + if (event.getNewValue() != null) { |
| + boolean newValue= ((Boolean) event.getNewValue()).booleanValue() ? true : false; |
| + delegeteLabelProvider.setIsFlatLayout(newValue); |
| + } |
| + } |
| + |
| + } |
| + }); |
| + } |
| + |
| + public String getDescription(Object anElement) { |
| + return formatMessage(anElement); |
| + } |
| + |
| + |
| + /* package */boolean showProjects() { |
| + return fManager.showProjects(); |
| + } |
| + |
| + /* package */boolean showWorkingSets() { |
| + return fManager.showWorkingSets(); |
| + } |
| + |
| + private PackageExplorerLabelProvider createLabelProvider() { |
| + if (showProjects()) |
| + return new PackageExplorerLabelProvider(AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | JavaElementLabels.P_COMPRESSED, AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS | JavaElementImageProvider.SMALL_ICONS, fContentProvider); |
| + else |
| + return new WorkingSetAwareLabelProvider(AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | JavaElementLabels.P_COMPRESSED, AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS | JavaElementImageProvider.SMALL_ICONS, fContentProvider); |
| + } |
| + |
| + public void dispose() { |
| + delegeteLabelProvider.dispose(); |
| + } |
| + |
| + public void propertyChange(PropertyChangeEvent event) { |
| + delegeteLabelProvider.propertyChange(event); |
| + } |
| + |
| + public void addLabelDecorator(ILabelDecorator decorator) { |
| + delegeteLabelProvider.addLabelDecorator(decorator); |
| + } |
| + |
| + public void addListener(ILabelProviderListener listener) { |
| + delegeteLabelProvider.addListener(listener); |
| + } |
| + |
| + public Color getBackground(Object element) { |
| + return delegeteLabelProvider.getBackground(element); |
| + } |
| + |
| + public Color getForeground(Object element) { |
| + return delegeteLabelProvider.getForeground(element); |
| + } |
| + |
| + public Image getImage(Object element) { |
| + return delegeteLabelProvider.getImage(element); |
| + } |
| + |
| + public boolean isLabelProperty(Object element, String property) { |
| + return delegeteLabelProvider.isLabelProperty(element, property); |
| + } |
| + |
| + public void removeListener(ILabelProviderListener listener) { |
| + delegeteLabelProvider.removeListener(listener); |
| + } |
| + |
| + public boolean equals(Object obj) { |
| + return delegeteLabelProvider.equals(obj); |
| + } |
| + |
| + public int hashCode() { |
| + return delegeteLabelProvider.hashCode(); |
| + } |
| + |
| + public String toString() { |
| + return delegeteLabelProvider.toString(); |
| + } |
| + |
| + public String getText(Object element) { |
| + return delegeteLabelProvider.getText(element); |
| + } |
| + |
| + public void setIsFlatLayout(boolean state) { |
| + delegeteLabelProvider.setIsFlatLayout(state); |
| + } |
| + |
| + // Taken from StatusBarUpdater |
| + |
| + protected String formatMessage(Object element) { |
| + if (element instanceof IJavaElement) { |
| + return formatJavaElementMessage((IJavaElement) element); |
| + } else if (element instanceof IResource) { |
| + return formatResourceMessage((IResource) element); |
| + } |
| + return ""; //$NON-NLS-1$ |
| + } |
| + |
| + private String formatJavaElementMessage(IJavaElement element) { |
| + return JavaElementLabels.getElementLabel(element, LABEL_FLAGS); |
| + } |
| + |
| + private String formatResourceMessage(IResource element) { |
| + IContainer parent= element.getParent(); |
| + if (parent != null && parent.getType() != IResource.ROOT) |
| + return element.getName() + JavaElementLabels.CONCAT_STRING + parent.getFullPath().makeRelative().toString(); |
| + else |
| + return element.getName(); |
| + } |
| + |
| + public void restoreState(IMemento aMemento) { |
| + |
| + } |
| + |
| + public void saveState(IMemento aMemento) { |
| + |
| + } |
| +} |
| Index: ui/org/eclipse/jdt/internal/ui/packageview/JavaResourceDuplicationFilter.java |
| =================================================================== |
| RCS file: ui/org/eclipse/jdt/internal/ui/packageview/JavaResourceDuplicationFilter.java |
| diff -N ui/org/eclipse/jdt/internal/ui/packageview/JavaResourceDuplicationFilter.java |
| --- /dev/null 1 Jan 1970 00:00:00 -0000 |
| +++ ui/org/eclipse/jdt/internal/ui/packageview/JavaResourceDuplicationFilter.java 1 Jan 1970 00:00:00 -0000 |
| @@ -0,0 +1,34 @@ |
| +/******************************************************************************* |
| + * Copyright (c) 2003, 2004 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.jdt.internal.ui.packageview; |
| + |
| +import org.eclipse.core.resources.IFile; |
| +import org.eclipse.core.resources.IFolder; |
| +import org.eclipse.core.resources.IResource; |
| + |
| +import org.eclipse.ui.navigator.CommonViewer; |
| +import org.eclipse.ui.navigator.INavigatorExtensionFilter; |
| +import org.eclipse.ui.navigator.internal.filters.NavigatorExtensionFilter; |
| + |
| +import org.eclipse.jdt.core.JavaCore; |
| + |
| +public class JavaResourceDuplicationFilter extends NavigatorExtensionFilter implements INavigatorExtensionFilter { |
| + |
| + public boolean select(CommonViewer aViewer, Object aParentElement, |
| + Object anElement) { |
| + if (anElement instanceof IFile || anElement instanceof IFolder) { |
| + IResource res = (IResource) anElement; |
| + return "class".equals(res.getFileExtension()) || !(JavaCore.create(res) != null); //$NON-NLS-1$ |
| + } |
| + return true; |
| + } |
| + |
| +} |
| Index: ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java |
| =================================================================== |
| RCS file: ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java |
| diff -N ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java |
| --- /dev/null 1 Jan 1970 00:00:00 -0000 |
| +++ ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java 1 Jan 1970 00:00:00 -0000 |
| @@ -0,0 +1,28 @@ |
| +/*************************************************************************************************** |
| + * Copyright (c) 2003, 2004 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.jdt.internal.ui.packageview; |
| + |
| +import org.eclipse.jdt.internal.ui.workingsets.ViewActionGroup; |
| + |
| +public interface IExtensionStateConstants { |
| + |
| + String WORKING_SET_MODEL_KEY= "workingSetModel"; //$NON-NLS-1$ |
| + String ROOT_MODE= "rootMode"; //$NON-NLS-1$ |
| + String WORKINGSET_MODEL_MANAGER_KEY = WorkingSetModelManager.INSTANCE_KEY; |
| + |
| + interface Values { |
| + |
| + String IS_LAYOUT_FLAT= "isLayoutFlat"; //$NON-NLS-1$ |
| + |
| + int SHOW_PROJECTS= ViewActionGroup.SHOW_PROJECTS; |
| + int SHOW_WORKING_SETS= ViewActionGroup.SHOW_WORKING_SETS; |
| + |
| + } |
| + |
| +} |