1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Patch from Thomas Fletcher to reuse the component

of Working set in the platform part of 2.1.
This commit is contained in:
Alain Magloire 2003-06-13 02:35:25 +00:00
parent 4f184d5fef
commit ed9940f5ac
4 changed files with 49 additions and 303 deletions

View file

@ -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);
}
}

View file

@ -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();
wsFilterActionGroup.fillActionBars(actionBars);
IMenuManager menu = actionBars.getMenuManager();
menu.add(wsFilterAction);
menu.add(wsClearFilterAction);
menu.add(new Separator());
menu.add(new GroupMarker(WORKING_GROUP_MARKER));
menu.add(new GroupMarker(WORKING_GROUP_MARKER_END));
menu.add(new Separator());
updateWorkingSetMenu();
//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);
@ -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);
}
}
}
}

View file

@ -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;
}
}

View file

@ -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);
}
}
}