mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-01 06:05:24 +02:00
Support for Working set.
This commit is contained in:
parent
80ecfd2b0a
commit
505e2b59e1
5 changed files with 366 additions and 6 deletions
|
@ -1,3 +1,22 @@
|
||||||
|
2003-02-20 Alain Magloire
|
||||||
|
|
||||||
|
This patch provides the UI controls and filters to use the working set
|
||||||
|
concept and apply it to the CView. The UI mimics the behaviour of what is
|
||||||
|
used by the Java packages view (rather than incorporating it as a part of
|
||||||
|
the Filters... dialog as was done in the Navigator). I didn't create a
|
||||||
|
specific C/C++ Working Set type since I figured that for C and C++
|
||||||
|
projects which might include other projects it wasn't required.
|
||||||
|
This can be re-examined at a later date if required.
|
||||||
|
|
||||||
|
* src/org/eclipse/cdt/internal/ui/cview/CView.java:
|
||||||
|
Listener of the property change for Working sets.
|
||||||
|
* src/org/eclipse/cdt/internal/ui/cview/AdjustWorkingSetFilterAction.java:
|
||||||
|
New file.
|
||||||
|
* src/org/eclipse/cdt/internal/ui/cview/CWorkingSetFilter.java:
|
||||||
|
New file.
|
||||||
|
* src/org/eclipse/cdt/internal/ui/cview/NewWorkingSetFilterAction.java:
|
||||||
|
New file.
|
||||||
|
|
||||||
2003-02 -20 David Inglis
|
2003-02 -20 David Inglis
|
||||||
|
|
||||||
* src/org/eclipse/cdt/internal/ui/editor/CEditorActionContributor.java
|
* src/org/eclipse/cdt/internal/ui/editor/CEditorActionContributor.java
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -40,6 +40,9 @@ import org.eclipse.core.resources.IncrementalProjectBuilder;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.Path;
|
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.IMenuListener;
|
||||||
import org.eclipse.jface.action.IMenuManager;
|
import org.eclipse.jface.action.IMenuManager;
|
||||||
import org.eclipse.jface.action.IToolBarManager;
|
import org.eclipse.jface.action.IToolBarManager;
|
||||||
|
@ -85,6 +88,8 @@ import org.eclipse.ui.IViewSite;
|
||||||
import org.eclipse.ui.IWorkbenchActionConstants;
|
import org.eclipse.ui.IWorkbenchActionConstants;
|
||||||
import org.eclipse.ui.IWorkbenchPage;
|
import org.eclipse.ui.IWorkbenchPage;
|
||||||
import org.eclipse.ui.IWorkbenchPart;
|
import org.eclipse.ui.IWorkbenchPart;
|
||||||
|
import org.eclipse.ui.IWorkingSet;
|
||||||
|
import org.eclipse.ui.IWorkingSetManager;
|
||||||
import org.eclipse.ui.PartInitException;
|
import org.eclipse.ui.PartInitException;
|
||||||
import org.eclipse.ui.PlatformUI;
|
import org.eclipse.ui.PlatformUI;
|
||||||
import org.eclipse.ui.actions.AddBookmarkAction;
|
import org.eclipse.ui.actions.AddBookmarkAction;
|
||||||
|
@ -147,6 +152,9 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge
|
||||||
ForwardAction forwardAction;
|
ForwardAction forwardAction;
|
||||||
GoIntoAction goIntoAction;
|
GoIntoAction goIntoAction;
|
||||||
UpAction upAction;
|
UpAction upAction;
|
||||||
|
NewWorkingSetFilterAction wsFilterAction;
|
||||||
|
AdjustWorkingSetFilterAction wsClearFilterAction;
|
||||||
|
|
||||||
FrameList frameList;
|
FrameList frameList;
|
||||||
CViewFrameSource frameSource;
|
CViewFrameSource frameSource;
|
||||||
|
|
||||||
|
@ -156,6 +164,8 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge
|
||||||
CLibFilter clibFilter = new CLibFilter ();
|
CLibFilter clibFilter = new CLibFilter ();
|
||||||
ShowLibrariesAction clibFilterAction;
|
ShowLibrariesAction clibFilterAction;
|
||||||
|
|
||||||
|
CWorkingSetFilter workingSetFilter = new CWorkingSetFilter ();
|
||||||
|
ActionContributionItem adjustWorkingSetContributions [] = new ActionContributionItem[5];
|
||||||
|
|
||||||
// Persistance tags.
|
// Persistance tags.
|
||||||
static final String TAG_SELECTION= "selection"; //$NON-NLS-1$
|
static final String TAG_SELECTION= "selection"; //$NON-NLS-1$
|
||||||
|
@ -167,6 +177,11 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge
|
||||||
static final String TAG_FILTERS = "filters"; //$NON-NLS-1$
|
static final String TAG_FILTERS = "filters"; //$NON-NLS-1$
|
||||||
static final String TAG_FILTER = "filter"; //$NON-NLS-1$
|
static final String TAG_FILTER = "filter"; //$NON-NLS-1$
|
||||||
static final String TAG_SHOWLIBRARIES = "showLibraries"; //$NON-NLS-1$
|
static final String TAG_SHOWLIBRARIES = "showLibraries"; //$NON-NLS-1$
|
||||||
|
static final String TAG_WORKINGSET = "workingSet"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
//Menu tags
|
||||||
|
final String WORKING_GROUP_MARKER = "workingSetGroup";
|
||||||
|
final String WORKING_GROUP_MARKER_END = "end-workingSetGroup";
|
||||||
|
|
||||||
private IPartListener partListener = new IPartListener() {
|
private IPartListener partListener = new IPartListener() {
|
||||||
public void partActivated(IWorkbenchPart part) {
|
public void partActivated(IWorkbenchPart part) {
|
||||||
|
@ -179,8 +194,46 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge
|
||||||
public void partDeactivated(IWorkbenchPart part) {}
|
public void partDeactivated(IWorkbenchPart part) {}
|
||||||
public void partOpened(IWorkbenchPart part) {}
|
public void partOpened(IWorkbenchPart part) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private IPropertyChangeListener workingSetListener = new IPropertyChangeListener() {
|
||||||
|
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();
|
||||||
|
} 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateWorkingSetMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
public CView() {
|
public CView() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
@ -375,12 +428,17 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge
|
||||||
CUIPlugin.getDefault().getProblemMarkerManager().addListener(viewer);
|
CUIPlugin.getDefault().getProblemMarkerManager().addListener(viewer);
|
||||||
CUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);
|
CUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);
|
||||||
|
|
||||||
|
IWorkingSetManager wsmanager = getViewSite().getWorkbenchWindow().getWorkbench().getWorkingSetManager();
|
||||||
|
workingSetFilter.setWorkingSetManager(wsmanager);
|
||||||
|
|
||||||
|
|
||||||
// FIXME: Add Drag and Drop support.
|
// FIXME: Add Drag and Drop support.
|
||||||
initFrameList();
|
initFrameList();
|
||||||
initRefreshKey();
|
initRefreshKey();
|
||||||
updateTitle();
|
updateTitle();
|
||||||
initDragAndDrop();
|
initDragAndDrop();
|
||||||
viewer.addFilter(patternFilter);
|
viewer.addFilter(patternFilter);
|
||||||
|
viewer.addFilter(workingSetFilter);
|
||||||
//viewer.addFilter(clibFilter);
|
//viewer.addFilter(clibFilter);
|
||||||
viewer.setSorter(new CViewSorter ());
|
viewer.setSorter(new CViewSorter ());
|
||||||
// FIXME: Add different Sorting.
|
// FIXME: Add different Sorting.
|
||||||
|
@ -402,6 +460,10 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge
|
||||||
// Make the Actions for the Context Menu
|
// Make the Actions for the Context Menu
|
||||||
makeActions();
|
makeActions();
|
||||||
|
|
||||||
|
//Add the property changes after all of the UI work has been done.
|
||||||
|
wsmanager.addPropertyChangeListener(workingSetListener);
|
||||||
|
workingSetFilter.addChangeListener(workingSetListener);
|
||||||
|
|
||||||
viewer.addDoubleClickListener(new IDoubleClickListener() {
|
viewer.addDoubleClickListener(new IDoubleClickListener() {
|
||||||
public void doubleClick(DoubleClickEvent event) {
|
public void doubleClick(DoubleClickEvent event) {
|
||||||
handleDoubleClick(event);
|
handleDoubleClick(event);
|
||||||
|
@ -447,6 +509,10 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge
|
||||||
IWorkspace workspace = CUIPlugin.getWorkspace();
|
IWorkspace workspace = CUIPlugin.getWorkspace();
|
||||||
workspace.removeResourceChangeListener(closeProjectAction);
|
workspace.removeResourceChangeListener(closeProjectAction);
|
||||||
workspace.removeResourceChangeListener(openProjectAction);
|
workspace.removeResourceChangeListener(openProjectAction);
|
||||||
|
|
||||||
|
IWorkingSetManager wsmanager = getViewSite().getWorkbenchWindow().getWorkbench().getWorkingSetManager();
|
||||||
|
wsmanager.removePropertyChangeListener(workingSetListener);
|
||||||
|
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -478,14 +544,21 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge
|
||||||
return clibFilter;
|
return clibFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the pattern filter for this view.
|
* Returns the pattern filter for this view.
|
||||||
* @return the pattern filter
|
* @return the pattern filter
|
||||||
*/
|
*/
|
||||||
CPatternFilter getPatternFilter() {
|
CPatternFilter getPatternFilter() {
|
||||||
return patternFilter;
|
return patternFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the working set filter for this view.
|
||||||
|
* @return the working set filter
|
||||||
|
*/
|
||||||
|
CWorkingSetFilter getWorkingSetFilter() {
|
||||||
|
return workingSetFilter;
|
||||||
|
}
|
||||||
|
|
||||||
TreeViewer getViewer () {
|
TreeViewer getViewer () {
|
||||||
return viewer;
|
return viewer;
|
||||||
|
@ -522,6 +595,9 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge
|
||||||
patternFilterAction = new FilterSelectionAction(shell, this, "Filters...");
|
patternFilterAction = new FilterSelectionAction(shell, this, "Filters...");
|
||||||
clibFilterAction = new ShowLibrariesAction(shell, this, "Show Referenced Libs");
|
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);
|
||||||
|
|
||||||
goIntoAction = new GoIntoAction(frameList);
|
goIntoAction = new GoIntoAction(frameList);
|
||||||
backAction = new BackAction(frameList);
|
backAction = new BackAction(frameList);
|
||||||
forwardAction = new ForwardAction(frameList);
|
forwardAction = new ForwardAction(frameList);
|
||||||
|
@ -955,9 +1031,63 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge
|
||||||
actionBars.updateActionBars();
|
actionBars.updateActionBars();
|
||||||
|
|
||||||
IMenuManager menu = actionBars.getMenuManager();
|
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 (clibFilterAction);
|
||||||
menu.add (patternFilterAction);
|
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.
|
* Sets the decorator for the package explorer.
|
||||||
|
@ -1058,6 +1188,15 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
initFilterFromPreferences();
|
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) {
|
void restoreState(IMemento memento) {
|
||||||
|
@ -1177,11 +1316,17 @@ public class CView extends ViewPart implements IMenuListener, ISetSelectionTarge
|
||||||
child.putString(TAG_ELEMENT,filters[i]);
|
child.putString(TAG_ELEMENT,filters[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//save library filter
|
//save library filter
|
||||||
boolean showLibraries= getLibraryFilter().getShowLibraries();
|
boolean showLibraries= getLibraryFilter().getShowLibraries();
|
||||||
String show= "true"; //$NON-NLS-1$
|
String show= "true"; //$NON-NLS-1$
|
||||||
if (!showLibraries)
|
if (!showLibraries)
|
||||||
show= "false"; //$NON-NLS-1$
|
show= "false"; //$NON-NLS-1$
|
||||||
memento.putString(TAG_SHOWLIBRARIES, show);
|
memento.putString(TAG_SHOWLIBRARIES, show);
|
||||||
|
|
||||||
|
String wsname = workingSetFilter.getWorkingSetName();
|
||||||
|
if(wsname != null) {
|
||||||
|
memento.putString(TAG_WORKINGSET, wsname);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue