diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/AdjustWorkingSetFilterAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/AdjustWorkingSetFilterAction.java deleted file mode 100644 index 256192f8803..00000000000 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/AdjustWorkingSetFilterAction.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.eclipse.cdt.internal.ui.cview; - -import org.eclipse.jface.action.Action; - -/** - * @author ThomasF - * - * Set a manager with a specific filter type/working set - */ -public class AdjustWorkingSetFilterAction extends Action { - CWorkingSetFilter fFilter; - String fName; - - public AdjustWorkingSetFilterAction(String name, String setName, CWorkingSetFilter filter) { - super(name); - fName = setName; - fFilter = filter; - } - - public void run() { - if(fFilter == null) { - return; - } - - fFilter.setWorkingSetName(fName); - } -} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CView.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CView.java index 514f039e185..211f0d1f10f 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CView.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CView.java @@ -43,9 +43,7 @@ import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; -import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; -import org.eclipse.jface.action.GroupMarker; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; @@ -94,6 +92,7 @@ import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.IWorkingSetManager; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.ResourceWorkingSetFilter; import org.eclipse.ui.actions.AddBookmarkAction; import org.eclipse.ui.actions.BuildAction; import org.eclipse.ui.actions.CloseResourceAction; @@ -108,6 +107,7 @@ import org.eclipse.ui.actions.OpenSystemEditorAction; import org.eclipse.ui.actions.OpenWithMenu; import org.eclipse.ui.actions.RefreshAction; import org.eclipse.ui.actions.RenameResourceAction; +import org.eclipse.ui.actions.WorkingSetFilterActionGroup; import org.eclipse.ui.dialogs.PropertyDialogAction; import org.eclipse.ui.part.ISetSelectionTarget; import org.eclipse.ui.part.PluginTransfer; @@ -154,8 +154,7 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge ForwardAction forwardAction; GoIntoAction goIntoAction; UpAction upAction; - NewWorkingSetFilterAction wsFilterAction; - AdjustWorkingSetFilterAction wsClearFilterAction; + WorkingSetFilterActionGroup wsFilterActionGroup; FrameList frameList; CViewFrameSource frameSource; @@ -166,7 +165,8 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge CLibFilter clibFilter = new CLibFilter (); ShowLibrariesAction clibFilterAction; - CWorkingSetFilter workingSetFilter = new CWorkingSetFilter (); + ResourceWorkingSetFilter workingSetFilter = new ResourceWorkingSetFilter(); + ActionContributionItem adjustWorkingSetContributions [] = new ActionContributionItem[5]; // Collapsing @@ -201,40 +201,34 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge }; private IPropertyChangeListener workingSetListener = new IPropertyChangeListener() { + private void doViewerUpdate() { + viewer.getControl().setRedraw(false); + viewer.refresh(); + viewer.getControl().setRedraw(true); + } + public void propertyChange(PropertyChangeEvent ev) { String prop = ev.getProperty(); if(prop == null) { return; } - if(prop.equals(CWorkingSetFilter.WORKING_SET_ACTIVE_CHANGED)) { - updateWorkingSetMenu(); - viewer.getControl().setRedraw(false); - viewer.refresh(); - viewer.getControl().setRedraw(true); - } else if(prop.equals(IWorkingSetManager.CHANGE_WORKING_SET_ADD)) { - updateWorkingSetMenu(); - } else if(prop.equals(IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE)) { - updateWorkingSetMenu(); + if(prop.equals(WorkingSetFilterActionGroup.CHANGE_WORKING_SET)) { + workingSetFilter.setWorkingSet((IWorkingSet)ev.getNewValue()); + doViewerUpdate(); } else if(prop.equals(IWorkingSetManager.CHANGE_WORKING_SET_CONTENT_CHANGE)){ - if(ev.getOldValue() instanceof IWorkingSet) { - String name = ((IWorkingSet)(ev.getOldValue())).getName(); - String wsName = workingSetFilter.getWorkingSetName(); - if(wsName != null && name.equals(wsName)) { - viewer.getControl().setRedraw(false); - viewer.refresh(); - viewer.getControl().setRedraw(true); + if(ev.getOldValue() instanceof IWorkingSet && workingSetFilter.getWorkingSet() != null) { + if(workingSetFilter.getWorkingSet().equals(ev.getOldValue())) { + doViewerUpdate(); } } } else if(prop.equals(IWorkingSetManager.CHANGE_WORKING_SET_REMOVE)) { - if(ev.getOldValue() instanceof IWorkingSet) { - String name = ((IWorkingSet)(ev.getOldValue())).getName(); - String wsName = workingSetFilter.getWorkingSetName(); - if(wsName != null && name.equals(wsName)) { - workingSetFilter.setWorkingSetName(null); + if(ev.getOldValue() instanceof IWorkingSet && workingSetFilter.getWorkingSet() != null) { + if(workingSetFilter.getWorkingSet().equals(ev.getOldValue())) { + workingSetFilter.setWorkingSet(null); + doViewerUpdate(); } } - updateWorkingSetMenu(); } } }; @@ -422,10 +416,6 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge CUIPlugin.getDefault().getProblemMarkerManager().addListener(viewer); CUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this); - IWorkingSetManager wsmanager = getViewSite().getWorkbenchWindow().getWorkbench().getWorkingSetManager(); - workingSetFilter.setWorkingSetManager(wsmanager); - - // FIXME: Add Drag and Drop support. initFrameList(); initRefreshKey(); @@ -455,8 +445,8 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge makeActions(); //Add the property changes after all of the UI work has been done. + IWorkingSetManager wsmanager = getViewSite().getWorkbenchWindow().getWorkbench().getWorkingSetManager(); wsmanager.addPropertyChangeListener(workingSetListener); - workingSetFilter.addChangeListener(workingSetListener); viewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { @@ -559,13 +549,13 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge return patternFilter; } - /** - * Returns the working set filter for this view. - * @return the working set filter - */ - CWorkingSetFilter getWorkingSetFilter() { - return workingSetFilter; - } +// /** +// * Returns the working set filter for this view. +// * @return the working set filter +// */ +// CWorkingSetFilter getWorkingSetFilter() { +// return workingSetFilter; +// } TreeViewer getViewer () { return viewer; @@ -601,8 +591,7 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge patternFilterAction = new FilterSelectionAction(shell, this, "Filters..."); clibFilterAction = new ShowLibrariesAction(shell, this, "Show Referenced Libs"); - wsFilterAction = new NewWorkingSetFilterAction(getViewSite().getShell(), this, "Select Working Set..."); - wsClearFilterAction = new AdjustWorkingSetFilterAction("Deselect Working Set", null, workingSetFilter); + wsFilterActionGroup = new WorkingSetFilterActionGroup(getViewSite().getShell(), workingSetListener); goIntoAction = new GoIntoAction(frameList); backAction = new BackAction(frameList); @@ -1039,65 +1028,14 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge toolBar.add(collapseAllAction); actionBars.updateActionBars(); - IMenuManager menu = actionBars.getMenuManager(); - menu.add(wsFilterAction); - menu.add(wsClearFilterAction); + wsFilterActionGroup.fillActionBars(actionBars); - menu.add(new Separator()); - menu.add(new GroupMarker(WORKING_GROUP_MARKER)); - menu.add(new GroupMarker(WORKING_GROUP_MARKER_END)); - menu.add(new Separator()); - - updateWorkingSetMenu(); + IMenuManager menu = actionBars.getMenuManager(); //menu.add (clibFilterAction); menu.add (patternFilterAction); } - void updateWorkingSetMenu() { - IMenuManager menu = getViewSite().getActionBars().getMenuManager(); - - //Remove the previous entries - for(int i = 0; i < adjustWorkingSetContributions.length; i++) { - if(adjustWorkingSetContributions[i] != null) { - menu.remove(adjustWorkingSetContributions[i]); - } - } - - //Find out what we are currently using - String currentWorkingSetName = workingSetFilter.getWorkingSetName(); - - //If we have no working set, then we can't disable it - if(wsClearFilterAction != null) { - wsClearFilterAction.setEnabled((currentWorkingSetName != null)); - } - - IWorkingSetManager manager = getViewSite().getWorkbenchWindow().getWorkbench().getWorkingSetManager(); - IWorkingSet recentsets [] = manager.getWorkingSets(); - for(int i = 0; i < adjustWorkingSetContributions.length; i++) { - if(i < recentsets.length) { - Action action = new AdjustWorkingSetFilterAction(recentsets[i].getName(), - recentsets[i].getName(), - workingSetFilter); - adjustWorkingSetContributions[i] = new ActionContributionItem(action); - if(currentWorkingSetName != null && - currentWorkingSetName.equals(recentsets[i].getName())) { - adjustWorkingSetContributions[i].getAction().setChecked(true); - } - } else { - adjustWorkingSetContributions[i] = null; - } - } - - //Put the new entries in - for(int i = 0; i < adjustWorkingSetContributions.length; i++) { - if(adjustWorkingSetContributions[i] != null) { - menu.appendToGroup(WORKING_GROUP_MARKER, adjustWorkingSetContributions[i]); - } - } - } - - /** * Sets the decorator for the package explorer. * @@ -1200,18 +1138,19 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge } else initFilterFromPreferences(); - - //restore working set - String wsname = memento.getString(TAG_WORKINGSET); - if(wsname != null && workingSetFilter != null) { - IWorkingSet set = getViewSite().getWorkbenchWindow().getWorkbench().getWorkingSetManager().getWorkingSet(wsname); - if(set != null) { - workingSetFilter.setWorkingSetName(wsname); - } - } } void restoreState(IMemento memento) { + //Restore the working set before we re-build the tree + String wsname = memento.getString(TAG_WORKINGSET); + if(wsname != null) { + IWorkingSetManager wsmanager = getViewSite().getWorkbenchWindow().getWorkbench().getWorkingSetManager(); + IWorkingSet set = wsmanager.getWorkingSet(wsname); + wsFilterActionGroup.setWorkingSet(set); + } else { + wsFilterActionGroup.setWorkingSet(null); + } + //ICelement container = CElementFactory.getDefault().getRoot(); CoreModel factory = CoreModel.getDefault(); IMemento childMem = memento.getChild(TAG_EXPANDED); @@ -1268,7 +1207,7 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge position = new Integer(posStr).intValue(); bar.setSelection(position); } catch (NumberFormatException e){} - } + } } public void saveState(IMemento memento) { @@ -1342,9 +1281,12 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge show= "false"; //$NON-NLS-1$ memento.putString(TAG_SHOWLIBRARIES, show); - String wsname = workingSetFilter.getWorkingSetName(); - if(wsname != null) { - memento.putString(TAG_WORKINGSET, wsname); + //Save the working set away + if(workingSetFilter.getWorkingSet() != null) { + String wsname = workingSetFilter.getWorkingSet().getName(); + if(wsname != null) { + memento.putString(TAG_WORKINGSET, wsname); + } } } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CWorkingSetFilter.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CWorkingSetFilter.java deleted file mode 100644 index 088f8751d05..00000000000 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CWorkingSetFilter.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.eclipse.cdt.internal.ui.cview; - -/* - * (c) Copyright QNX Software Systems Ltd. 2002. - * All Rights Reserved. - */ - -import java.util.ArrayList; - -import org.eclipse.cdt.ui.CUIPlugin; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerFilter; -import org.eclipse.ui.IWorkingSet; -import org.eclipse.ui.IWorkingSetManager; - -public class CWorkingSetFilter extends ViewerFilter { - public static final String WORKING_SET_ACTIVE_CHANGED = CUIPlugin.getPluginId() + ".ACTIVE_CHANGED"; - - private IWorkingSetManager fWorkingSetManager; - private IWorkingSet fWorkingSet; - private String fWorkingSetName; - private ArrayList fListeners; - - public CWorkingSetFilter() { - this(null); - } - - public CWorkingSetFilter(IWorkingSetManager manager) { - fWorkingSetManager = manager; - fWorkingSet = null; - fListeners = new ArrayList(1); - } - - public void setWorkingSetManager(IWorkingSetManager manager) { - fWorkingSetManager = manager; - } - - public void setWorkingSetName(String name) { - fWorkingSetName = name; - if(name == null) { - fWorkingSet = null; - notifyChange(); - return; - } - - if(fWorkingSetManager != null) { - fWorkingSet = fWorkingSetManager.getWorkingSet(fWorkingSetName); - } else { - fWorkingSet = null; - } - - notifyChange(); - } - - public String getWorkingSetName() { - return fWorkingSetName; - } - - public void addChangeListener(IPropertyChangeListener listener) { - fListeners.remove(listener); - fListeners.add(listener); - } - - public void removeChangeListener(IPropertyChangeListener listener) { - fListeners.remove(listener); - } - - private void notifyChange() { - PropertyChangeEvent ev = new PropertyChangeEvent(this, WORKING_SET_ACTIVE_CHANGED, null, null); - for(int i = 0; i < fListeners.size(); i++) { - IPropertyChangeListener l = (IPropertyChangeListener)fListeners.get(i); - l.propertyChange(ev); - } - } - - /* (non-Javadoc) - * Method declared on ViewerFilter. - */ - public boolean select(Viewer viewer, Object parentElement, Object element) { - //No filter set, everything allowed - if(fWorkingSet == null) { - return true; - } - - IResource resource = null; - if (element instanceof IResource) { - resource = (IResource) element; - } else if (element instanceof IAdaptable) { - IAdaptable adaptable = (IAdaptable) element; - resource = (IResource) adaptable.getAdapter(IResource.class); - } - - //We only filter projects out (should this be ICProjects?) - if(!(resource instanceof IProject)) { - return true; - } - - //Run our list to see if we are included in this working set - IAdaptable [] adaptables = fWorkingSet.getElements(); - for(int i = 0; i < adaptables.length; i++) { - if(adaptables[i].equals(resource)) { - return true; - } - } - - //Not in the working set, so we aren't shown - return false; - } -} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/NewWorkingSetFilterAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/NewWorkingSetFilterAction.java deleted file mode 100644 index ad78eb08a83..00000000000 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/NewWorkingSetFilterAction.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.eclipse.cdt.internal.ui.cview; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.window.Window; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IWorkingSet; -import org.eclipse.ui.IWorkingSetManager; -import org.eclipse.ui.dialogs.IWorkingSetSelectionDialog; - -/** - * @author ThomasF - * - * This action is specifically designed to invoke the working set selection - * dialog to allow the user to select/edit a working set. - */ -public class NewWorkingSetFilterAction extends Action { - CView cview; - Shell shell; - - public NewWorkingSetFilterAction(Shell shell, CView cview, String label) { - super(label); - this.cview = cview; - this.shell = shell; - } - - public void run() { - if(cview == null || shell == null) { - return; - } - - IWorkingSetManager wsmanager = cview.getViewSite().getWorkbenchWindow().getWorkbench().getWorkingSetManager(); - IWorkingSetSelectionDialog dialog; - dialog = wsmanager.createWorkingSetSelectionDialog(shell, false); - if(dialog.open() == Window.CANCEL) { - return; - } - - IWorkingSet [] selection = dialog.getSelection(); - if(selection.length != 0) { - CWorkingSetFilter filter = cview.getWorkingSetFilter(); - if(filter == null) { - return; - } - - filter.setWorkingSetName(selection[0].getName()); - - TreeViewer viewer= cview.getViewer(); - viewer.getControl().setRedraw(false); - viewer.refresh(); - viewer.getControl().setRedraw(true); - } - } - -}