| ### 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 Feb 2006 00:46:03 -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 Feb 2006 00:46:03 -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.14 |
| diff -u -r1.14 WorkingSetModel.java |
| --- ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java 26 Jan 2006 14:54:03 -0000 1.14 |
| +++ ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java 8 Feb 2006 00:46:03 -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(ListenerList.IDENTITY); |
| 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/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.50 |
| diff -u -r1.50 PackageExplorerContentProvider.java |
| --- ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java 11 Jan 2006 15:49:15 -0000 1.50 |
| +++ ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java 8 Feb 2006 00:46:03 -0000 |
| @@ -76,14 +76,22 @@ |
| private PackageFragmentProvider fPackageFragmentProvider= new PackageFragmentProvider(); |
| |
| private int fPendingChanges; |
| - PackageExplorerPart fPart; |
| + //PackageExplorerPart fPart; |
| + |
| + /** |
| + * Creates a new content provider for Java elements. |
| + */ |
| + public PackageExplorerContentProvider(boolean provideMembers) { |
| + super(provideMembers); |
| + //fPart= part; |
| + } |
| |
| /** |
| * Creates a new content provider for Java elements. |
| */ |
| public PackageExplorerContentProvider(PackageExplorerPart part, boolean provideMembers) { |
| super(provideMembers); |
| - fPart= part; |
| + //fPart= part; |
| } |
| |
| /* package */ PackageFragmentProvider getPackageFragmentProvider() { |
| @@ -620,7 +628,7 @@ |
| }); |
| } |
| |
| - private void postAdd(final Object parent, final Object element) { |
| + /* package */ void postAdd(final Object parent, final Object element) { |
| postRunnable(new Runnable() { |
| public void run() { |
| Control ctrl= fViewer.getControl(); |
| @@ -647,7 +655,14 @@ |
| private void postProjectStateChanged(final Object root) { |
| postRunnable(new Runnable() { |
| public void run() { |
| - fPart.projectStateChanged(root); |
| + //fPart.projectStateChanged(root); |
| + Control ctrl= fViewer.getControl(); |
| + if (ctrl != null && !ctrl.isDisposed()) { |
| + fViewer.refresh(root, true); |
| + // trigger a syntetic selection change so that action refresh their |
| + // enable state. |
| + fViewer.setSelection(fViewer.getSelection()); |
| + } |
| } |
| }); |
| } |
| Index: plugin.xml |
| =================================================================== |
| RCS file: /home/eclipse/org.eclipse.jdt.ui/plugin.xml,v |
| retrieving revision 1.617 |
| diff -u -r1.617 plugin.xml |
| --- plugin.xml 5 Feb 2006 18:11:23 -0000 1.617 |
| +++ plugin.xml 8 Feb 2006 00:46:02 -0000 |
| @@ -5047,4 +5047,97 @@ |
| </objectContribution> |
| </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.ui.javaContent" /> |
| + </includes> |
| + </viewerContentBinding> |
| + </extension> |
| + |
| + <extension |
| + point="org.eclipse.ui.navigator.navigatorContent"> |
| + <navigatorContent |
| + activeByDefault="true" |
| + contentProvider="org.eclipse.jdt.internal.ui.packageview.PreferenceAwareContentProvider" |
| + icon="$nl$/icons/full/obj16/java_model.gif" |
| + id="org.eclipse.jdt.java.ui.javaContent" |
| + labelProvider="org.eclipse.jdt.internal.ui.packageview.PreferenceAwareLabelProvider" |
| + name="Java Elements" |
| + priority="high"> |
| + <triggerPoints> |
| + <or> |
| + <adapt |
| + type="org.eclipse.core.resources.IProject" > |
| + <test |
| + property="org.eclipse.core.resources.projectNature" |
| + value="org.eclipse.jdt.core.javanature" /> |
| + </adapt> |
| + <instanceof |
| + value="org.eclipse.core.resources.IWorkspaceRoot" /> |
| + |
| + <instanceof |
| + value="org.eclipse.core.resources.IFolder" /> |
| + <instanceof |
| + value="org.eclipse.core.resources.IFile" /> |
| + <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.jdt.internal.ui.workingsets.WorkingSetModel" /> |
| + --> |
| + </or> |
| + </triggerPoints> |
| + <possibleChildren> |
| + <or> |
| + <adapt |
| + type="org.eclipse.core.resources.IProject" > |
| + </adapt> |
| + <instanceof |
| + value="org.eclipse.core.resources.IWorkspaceRoot" /> |
| + <instanceof |
| + value="org.eclipse.core.resources.IFolder" /> |
| + <instanceof |
| + value="org.eclipse.core.resources.IFile" /> |
| + <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" /> |
| + </or> |
| + </possibleChildren> |
| + <actionProvider |
| + class="org.eclipse.jdt.internal.ui.packageview.PackageExplorerActionProvider"> |
| + <enablement> |
| + <adapt |
| + type="org.eclipse.jdt.core.IJavaElement" /> |
| + </enablement> |
| + </actionProvider> |
| + <override |
| + policy="InvokeAlwaysRegardlessOfSuppressedExt" |
| + suppressedExtensionId="org.eclipse.ui.navigator.resourceContent"/> |
| + <commonSorter |
| + class="org.eclipse.jdt.ui.JavaElementSorter" |
| + id="org.eclipse.jdt.ui.javaElementSorter"/> |
| + </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 Feb 2006 00:46:02 -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,32 @@ |
| 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; |
| + } |
| + |
| + /** |
| + * |
| + * @param actions the actions for this multi group |
| + */ |
| + 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,131 @@ |
| +/******************************************************************************* |
| + * 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; |
| + |
| + public CommonLayoutActionGroup(StructuredViewer structuredViewer, IExtensionStateModel stateModel) { |
| + super(stateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT) ? 0 : 1); |
| + IAction[] actions = createActions(structuredViewer, stateModel); |
| + setActions(actions); |
| + } |
| + |
| + /* (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 structuredViewer, IExtensionStateModel stateModel) { |
| + |
| + fFlatLayoutAction= new CommonLayoutAction(structuredViewer, stateModel, true); |
| + fFlatLayoutAction.setText(PackagesMessages.LayoutActionGroup_flatLayoutAction_label); |
| + JavaPluginImages.setLocalImageDescriptors(fFlatLayoutAction, "flatLayout.gif"); //$NON-NLS-1$ |
| + |
| + fHierarchicalLayout= new CommonLayoutAction(structuredViewer, stateModel, false); |
| + fHierarchicalLayout.setText(PackagesMessages.LayoutActionGroup_hierarchicalLayoutAction_label); |
| + JavaPluginImages.setLocalImageDescriptors(fHierarchicalLayout, "hierarchicalLayout.gif"); //$NON-NLS-1$ |
| + |
| + fHierarchicalLayout.setChecked(!stateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT)); |
| + fFlatLayoutAction.setChecked(stateModel.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 structuredViewer, IExtensionStateModel stateModel, boolean flat) { |
| + super("", AS_RADIO_BUTTON); //$NON-NLS-1$ |
| + fStateModel = stateModel; |
| + fStructuredViewer = structuredViewer; |
| + 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,174 @@ |
| +/*************************************************************************************************** |
| + * 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 java.util.Arrays; |
| +import java.util.HashSet; |
| +import java.util.Iterator; |
| +import java.util.Set; |
| + |
| +import org.eclipse.core.resources.IResource; |
| +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.Viewer; |
| + |
| +import org.eclipse.ui.IMemento; |
| +import org.eclipse.ui.navigator.IExtensionStateModel; |
| +import org.eclipse.ui.navigator.IPipelinedTreeContentProvider; |
| +import org.eclipse.ui.navigator.PipelinedShapeModification; |
| +import org.eclipse.ui.navigator.PipelinedViewerUpdate; |
| + |
| +import org.eclipse.jdt.core.IJavaElement; |
| +import org.eclipse.jdt.core.IJavaModel; |
| +import org.eclipse.jdt.core.JavaCore; |
| + |
| +import org.eclipse.jdt.ui.PreferenceConstants; |
| + |
| +import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values; |
| + |
| +public class PreferenceAwareContentProvider extends |
| + PackageExplorerContentProvider implements IPipelinedTreeContentProvider { |
| + |
| + public PreferenceAwareContentProvider() { |
| + super(false); |
| + } |
| + |
| + public PreferenceAwareContentProvider(boolean provideMembers) { |
| + super(provideMembers); |
| + } |
| + |
| + public static final String JDT_EXTENSION_ID = "org.eclipse.jdt.ui.javaContent"; //$NON-NLS-1$ |
| + |
| + private IExtensionStateModel fStateModel; |
| + |
| + public void init(IExtensionStateModel stateModel, IMemento memento) { |
| + fStateModel = stateModel; |
| + // fManager = new WorkingSetModelManager(fStateModel, this); |
| + // expose the manager for the action provider |
| + // fStateModel.setProperty(WorkingSetModelManager.INSTANCE_KEY, |
| + // fManager); |
| + restoreState(memento); |
| + 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; |
| + setIsFlatLayout(newValue); |
| + } |
| + } |
| + |
| + } |
| + }); |
| + |
| + IPreferenceStore store = PreferenceConstants.getPreferenceStore(); |
| + boolean showCUChildren = store |
| + .getBoolean(PreferenceConstants.SHOW_CU_CHILDREN); |
| + setProvideMembers(showCUChildren); |
| + } |
| + |
| + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { |
| + super.inputChanged(viewer, oldInput, findInputElement(newInput)); |
| + } |
| + |
| + public Object[] getElements(Object inputElement) { |
| + if (inputElement instanceof IWorkspaceRoot) |
| + return super.getElements(JavaCore |
| + .create((IWorkspaceRoot) inputElement)); |
| + return super.getElements(inputElement); |
| + } |
| + |
| + private Object findInputElement(Object newInput) { |
| + if (newInput instanceof IWorkspaceRoot) { |
| + return JavaCore.create((IWorkspaceRoot) newInput); |
| + } |
| + return newInput; |
| + } |
| + |
| + public void restoreState(IMemento memento) { |
| + |
| + } |
| + |
| + public void saveState(IMemento memento) { |
| + |
| + } |
| + |
| + public void getPipelinedChildren(Object parent, Set currentChildren) { |
| + Object[] children = getChildren(parent); |
| + for (Iterator iter = currentChildren.iterator(); iter.hasNext();) |
| + if (iter.next() instanceof IResource) |
| + iter.remove(); |
| + currentChildren.addAll(Arrays.asList(children)); |
| + } |
| + |
| + public void getPipelinedElements(Object input, Set currentElements) { |
| + Object[] children = getElements(input); |
| + |
| + for (Iterator iter = currentElements.iterator(); iter.hasNext();) |
| + if (iter.next() instanceof IResource) |
| + iter.remove(); |
| + |
| + currentElements.addAll(Arrays.asList(children)); |
| + } |
| + |
| + public Object getPipelinedParent(Object object, Object suggestedParent) { |
| + return getParent(object); |
| + } |
| + |
| + public PipelinedShapeModification interceptAdd( |
| + PipelinedShapeModification anAddModification) { |
| + // TODO Auto-generated method stub |
| + return null; |
| + } |
| + |
| + public PipelinedShapeModification interceptRemove( |
| + PipelinedShapeModification aRemoveModification) { |
| + // TODO Auto-generated method stub |
| + return null; |
| + } |
| + |
| + public boolean interceptRefresh( |
| + PipelinedViewerUpdate aRefreshSynchronization) { |
| + IJavaElement javaElement; |
| + Set interceptedElements = new HashSet(); |
| + for (Iterator iter = aRefreshSynchronization.getRefreshTargets() |
| + .iterator(); iter.hasNext();) { |
| + Object element = iter.next(); |
| + if (element instanceof IResource) { |
| + if ((javaElement = JavaCore.create((IResource) element)) != null && javaElement.exists()) { |
| + iter.remove(); |
| + interceptedElements.add(javaElement); |
| + } |
| + } |
| + } |
| + if (interceptedElements.size() > 0) { |
| + aRefreshSynchronization.getRefreshTargets().addAll( |
| + interceptedElements); |
| + return true; |
| + } |
| + return false; |
| + |
| + } |
| + |
| + public boolean interceptUpdate(PipelinedViewerUpdate anUpdateSynchronization) { |
| + // TODO Auto-generated method stub |
| + return false; |
| + } |
| + |
| + /* package */void postAdd(final Object parent, final Object element) { |
| + if (parent instanceof IJavaModel) |
| + super.postAdd(((IJavaModel) parent).getWorkspace(), element); |
| + else |
| + super.postAdd(parent, element); |
| + } |
| + |
| +} |
| 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,126 @@ |
| +/*************************************************************************************************** |
| + * 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.CommonActionProvider; |
| +import org.eclipse.ui.navigator.CommonActionProviderConfig; |
| +import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite; |
| +import org.eclipse.ui.navigator.IExtensionStateModel; |
| +import org.eclipse.ui.navigator.INavigatorContentService; |
| + |
| +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 { |
| + |
| + private static final int HIERARCHICAL_LAYOUT = 0x1; |
| + |
| + private static final int FLAT_LAYOUT = 0x2; |
| + |
| + private static final String TAG_LAYOUT = "layout"; //$NON-NLS-1$ |
| + |
| + private ViewActionGroup fViewActionGroup; |
| + |
| + private CommonLayoutActionGroup fLayoutActionGroup; |
| + |
| + private boolean fHasFilledViewMenu = false; |
| + |
| + private IExtensionStateModel fStateModel; |
| + |
| + private CCPActionGroup fCCPGroup; |
| + |
| + public void fillActionBars(IActionBars actionBars) { |
| + if (!fHasFilledViewMenu) { |
| + if(fViewActionGroup != null) |
| + fViewActionGroup.fillActionBars(actionBars); |
| + fLayoutActionGroup.fillActionBars(actionBars); |
| + fHasFilledViewMenu = true; |
| + } |
| + |
| + } |
| + |
| + public void fillContextMenu(IMenuManager menu) { |
| + |
| + if(fCCPGroup != null) |
| + fCCPGroup.fillContextMenu(menu); |
| + |
| + } |
| + |
| + public void init(CommonActionProviderConfig config) { |
| + |
| + ICommonViewerWorkbenchSite workbenchSite = null; |
| + if (config.getViewSite() instanceof ICommonViewerWorkbenchSite) |
| + workbenchSite = (ICommonViewerWorkbenchSite) config.getViewSite(); |
| + |
| + fStateModel = config.getExtensionStateModel(); |
| +// WorkingSetModelManager workingSetModelManager = (WorkingSetModelManager) fStateModel |
| +// .getProperty(WorkingSetModelManager.INSTANCE_KEY); |
| + |
| + fLayoutActionGroup = new CommonLayoutActionGroup(config |
| + .getStructuredViewer(), fStateModel); |
| + |
| + if (workbenchSite != null) { |
| +// fViewActionGroup = new ViewActionGroup( |
| +// ViewActionGroup.SHOW_PROJECTS, /*workingSetModelManager,*/ |
| +// workbenchSite.getSite()); |
| + if (workbenchSite.getPart() != null |
| + && workbenchSite.getPart() instanceof IViewPart) { |
| + fCCPGroup = new CCPActionGroup((IViewPart) workbenchSite |
| + .getPart()); |
| + } |
| + |
| + } |
| + |
| + } |
| + |
| + public void init(final String extensionId, final IViewPart viewPart, |
| + final INavigatorContentService contentService, |
| + final StructuredViewer structuredViewer) { |
| + |
| + } |
| + |
| + public void restoreState(IMemento memento) { |
| + super.restoreState(memento); |
| + restoreLayoutState(memento); |
| + } |
| + |
| + private void restoreLayoutState(IMemento memento) { |
| + boolean isCurrentLayoutFlat = true; |
| + Integer state = null; |
| + if (memento != null) |
| + state = memento.getInteger(TAG_LAYOUT); |
| + |
| + // If no memento try an restore from preference store |
| + if (state == null) { |
| + IPreferenceStore store = JavaPlugin.getDefault() |
| + .getPreferenceStore(); |
| + state = new Integer(store.getInt(TAG_LAYOUT)); |
| + } |
| + |
| + if (state.intValue() == FLAT_LAYOUT) |
| + isCurrentLayoutFlat = true; |
| + else if (state.intValue() == HIERARCHICAL_LAYOUT) |
| + isCurrentLayoutFlat = false; |
| + |
| + fStateModel.setBooleanProperty(Values.IS_LAYOUT_FLAT, |
| + isCurrentLayoutFlat); |
| + fLayoutActionGroup.setFlatLayout(isCurrentLayoutFlat); |
| + } |
| + |
| +} |
| 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,191 @@ |
| +/*************************************************************************************************** |
| + * 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; |
| + |
| + public PreferenceAwareLabelProvider() { |
| + |
| + } |
| + |
| + public void init(IExtensionStateModel aStateModel, |
| + ITreeContentProvider contentProvider) { |
| + fStateModel = aStateModel; |
| + |
| + fContentProvider = (PackageExplorerContentProvider) contentProvider; |
| + 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); |
| + } |
| + |
| + private PackageExplorerLabelProvider createLabelProvider() { |
| + |
| + return new PackageExplorerLabelProvider( |
| + 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/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,23 @@ |
| +/*************************************************************************************************** |
| + * 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 IExtensionStateConstants { |
| + |
| + String ROOT_MODE= "rootMode"; //$NON-NLS-1$ |
| + |
| + interface Values { |
| + |
| + String IS_LAYOUT_FLAT= "isLayoutFlat"; //$NON-NLS-1$ |
| + |
| + |
| + } |
| + |
| +} |