From 08069f07e2621c8b485b2c6575e3594f801ea769 Mon Sep 17 00:00:00 2001 From: Dani Megert Date: Wed, 10 Oct 2001 10:22:56 +0000 Subject: First cut: 1GDU9JE: ITPJUI:ALL - DCR: Add "Search Scope" capability --- .../org/eclipse/search/internal/ui/ScopePart.java | 72 +++--- .../eclipse/search/internal/ui/SearchPlugin.java | 26 +-- .../internal/ui/util/ListContentProvider.java | 41 ++++ .../search/internal/workingsets/WorkingSet.java | 95 ++++++++ .../internal/workingsets/WorkingSetDialog.java | 115 ++++++++++ .../workingsets/WorkingSetSelectionDialog.java | 255 +++++++++++++++++++++ .../search/org/eclipse/search/ui/SearchUI.java | 3 +- 7 files changed, 545 insertions(+), 62 deletions(-) create mode 100644 org.eclipse.search/search/org/eclipse/search/internal/ui/util/ListContentProvider.java create mode 100644 org.eclipse.search/search/org/eclipse/search/internal/workingsets/WorkingSet.java create mode 100644 org.eclipse.search/search/org/eclipse/search/internal/workingsets/WorkingSetDialog.java create mode 100644 org.eclipse.search/search/org/eclipse/search/internal/workingsets/WorkingSetSelectionDialog.java diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/ScopePart.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/ScopePart.java index 8909367b2a4..a563171b992 100644 --- a/org.eclipse.search/search/org/eclipse/search/internal/ui/ScopePart.java +++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/ScopePart.java @@ -15,10 +15,12 @@ import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.SelectionDialog; +import java.util.Arrays; import org.eclipse.core.resources.IResource; import org.eclipse.jface.util.Assert; import org.eclipse.search.internal.ui.util.SWTUtil; +import org.eclipse.search.internal.workingsets.WorkingSet; import org.eclipse.search.ui.IWorkingSet; import org.eclipse.search.ui.SearchUI; @@ -36,8 +38,8 @@ public class ScopePart { private int fScope; - private Text fWorkingSet; - private IWorkingSet fWorkingSetValue; + private Text fWorkingSetText; + private IWorkingSet fWorkingSet; /** * Returns a new scope part with workspace as initial scope. @@ -69,7 +71,7 @@ public class ScopePart { public ScopePart(IWorkingSet workingSet) { Assert.isNotNull(workingSet); fScope= WORKING_SET_SCOPE; - fWorkingSetValue= workingSet; + fWorkingSet= workingSet; } /** @@ -108,27 +110,21 @@ public class ScopePart { fUseWorkspace.setSelection(false); fUseSelection.setSelection(false); fUseWorkingSet.setSelection(true); + fUseWorkingSet.setEnabled(true); break; } } /** - * Returns the selected working of this part. + * Returns the selected working set of this part. * - * @return the selected working set or null if the scope is not WORKING_SET_SCOPE + * @return the selected working set or null + * - if the scope is not WORKING_SET_SCOPE + * - if there is no working set selected */ public IWorkingSet getSelectedWorkingSet() { - if (getSelectedScope() == WORKING_SET_SCOPE) { - return new IWorkingSet() { - public String getName() { - return "This is a Test Scope"; //$NON-NLS-1$ - } - - public IResource[] getResources() { - return new IResource[0]; - } - }; - } + if (getSelectedScope() == WORKING_SET_SCOPE) + return fWorkingSet; else return null; } @@ -140,10 +136,11 @@ public class ScopePart { * @param workingSet the working set to be selected */ public void setSelectedWorkingSet(IWorkingSet workingSet) { - Assert.isNotNull(fWorkingSet); + Assert.isNotNull(workingSet); setSelectedScope(WORKING_SET_SCOPE); -// fWorkingSet= workingSet; - fWorkingSetValue= workingSet; + fWorkingSet= workingSet; + if (fWorkingSetText != null) + fWorkingSetText.setText(workingSet.getName()); } /** @@ -175,7 +172,8 @@ public class ScopePart { fUseWorkingSet= new Button(group, SWT.RADIO); fUseWorkingSet.setData(new Integer(WORKING_SET_SCOPE)); fUseWorkingSet.setText(SearchMessages.getString("ScopePart.workingSetScope.text")); //$NON-NLS-1$ - fWorkingSet= new Text(group, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY); + fUseWorkingSet.setEnabled(getSelectedWorkingSet() != null); + fWorkingSetText= new Text(group, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY); Button chooseWorkingSet= new Button(group, SWT.PUSH); chooseWorkingSet.setLayoutData(new GridData()); chooseWorkingSet.setText(SearchMessages.getString("ScopePart.workingSetChooseButton.text")); //$NON-NLS-1$ @@ -183,17 +181,14 @@ public class ScopePart { chooseWorkingSet.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (handleChooseWorkingSet()) { - fUseWorkspace.setSelection(false); - fUseSelection.setSelection(false); - fUseWorkingSet.setSelection(true); - fScope= WORKING_SET_SCOPE; + setSelectedScope(WORKING_SET_SCOPE); } } }); gd= new GridData(GridData.FILL_HORIZONTAL); gd.horizontalIndent= 8; - gd.widthHint= SWTUtil.convertWidthInCharsToPixels(30, fWorkingSet); - fWorkingSet.setLayoutData(gd); + gd.widthHint= SWTUtil.convertWidthInCharsToPixels(30, fWorkingSetText); + fWorkingSetText.setLayoutData(gd); // Add scope change listeners SelectionAdapter scopeChangedLister= new SelectionAdapter() { @@ -209,15 +204,9 @@ public class ScopePart { setSelectedScope(fScope); // Set initial working set - if (fWorkingSetValue != null) - fWorkingSet.setText(fWorkingSetValue.getName()); + if (fWorkingSet != null) + fWorkingSetText.setText(fWorkingSet.getName()); - - // disable working sets - not available yet - fUseWorkingSet.setVisible(false); - fWorkingSet.setVisible(false); - chooseWorkingSet.setVisible(false); - return group; } @@ -232,7 +221,18 @@ public class ScopePart { private boolean handleChooseWorkingSet() { SelectionDialog dialog= SearchUI.createWorkingSetDialog(fUseSelection.getShell()); - System.out.println("Choose working set. Scope is: " + fScope); //$NON-NLS-1$ - return true; + if (fWorkingSet != null) + dialog.setInitialSelections(new IWorkingSet[] {fWorkingSet}); + if (dialog.open() == dialog.OK) { + setSelectedWorkingSet((IWorkingSet)dialog.getResult()[0]); + return true; + } else { + // test if selected working set has been removed + if (!Arrays.asList(WorkingSet.getWorkingSets()).contains(fWorkingSet)) { + fWorkingSetText.setText(""); + fWorkingSet= null; + } + } + return false; } } diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPlugin.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPlugin.java index eefe2a6234d..41c632fc98f 100644 --- a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPlugin.java +++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPlugin.java @@ -25,14 +25,12 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.jface.action.GroupMarker; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.Separator; -import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.util.Assert; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; -import org.eclipse.ui.dialogs.SelectionDialog; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.eclipse.search.internal.ui.util.ExceptionHandler; @@ -49,7 +47,7 @@ public class SearchPlugin extends AbstractUIPlugin { public static final String SORTER_EXTENSION_POINT= "searchResultSorters"; //$NON-NLS-1$ private static SearchPlugin fgSearchPlugin; - + private List fPageDescriptors; private List fSorterDescriptors; @@ -270,26 +268,4 @@ public class SearchPlugin extends AbstractUIPlugin { menu.add(new Separator(IContextMenuConstants.GROUP_VIEWER_SETUP)); menu.add(new Separator(IContextMenuConstants.GROUP_PROPERTIES)); } - - /** - * Creates a selection dialog that lists all working sets and allows to - * add and edit working sets. - * The caller is responsible for opening the dialog with Window.open, - * and subsequently extracting the selected working sets (of type - * IWorkingSet) via SelectionDialog.getResult. - *

- * This method is for internal use only due to issue below. Once - * the issues is solved there will be an official API. - *

- *

- * [Issue: Working set must be provided by platform.] - *

- * - * @param parent the parent shell of the dialog to be created - * @return a new selection dialog or null if none available - */ - public static SelectionDialog createWorkingSetDialog(Shell parent) { - MessageDialog.openInformation(getActiveWorkbenchShell(), "Working Set Dialog", "The working set dialog will come soon!"); //$NON-NLS-1$ //$NON-NLS-2$ - return null; - } } diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/util/ListContentProvider.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/util/ListContentProvider.java new file mode 100644 index 00000000000..c1e5f6a729c --- /dev/null +++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/util/ListContentProvider.java @@ -0,0 +1,41 @@ +/* + * (c) Copyright IBM Corp. 2000, 2001. + * All Rights Reserved. + */ +package org.eclipse.search.internal.ui.util; + +import java.util.List; + +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.Viewer; + +/** + * A specialized content provider to show a list of editor parts. + */ +public class ListContentProvider implements IStructuredContentProvider { + List fContents; + + public ListContentProvider() { + } + + public Object[] getElements(Object input) { + if (fContents != null && fContents == input) + return fContents.toArray(); + return new Object[0]; + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + if (newInput instanceof List) + fContents= (List)newInput; + else + fContents= null; + // we use a fixed set. + } + + public void dispose() { + } + + public boolean isDeleted(Object o) { + return fContents != null && !fContents.contains(o); + } +} \ No newline at end of file diff --git a/org.eclipse.search/search/org/eclipse/search/internal/workingsets/WorkingSet.java b/org.eclipse.search/search/org/eclipse/search/internal/workingsets/WorkingSet.java new file mode 100644 index 00000000000..c7505fff544 --- /dev/null +++ b/org.eclipse.search/search/org/eclipse/search/internal/workingsets/WorkingSet.java @@ -0,0 +1,95 @@ +package org.eclipse.search.internal.workingsets; + +import java.util.HashSet; +import java.util.Set; + +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.IPath; + +import org.eclipse.jface.util.Assert; + +import org.eclipse.search.ui.IWorkingSet; + + +public class WorkingSet implements IWorkingSet { + + private static Set fgWorkingSets= new HashSet(5); + + String fName; + Set fElements; // of IResources + + WorkingSet(String name, Object[] elements) { + setName(name); + setResources(elements); + } + + void setResources(Object[] elements) { + Assert.isNotNull(elements, "IPath array must not be null"); + fElements= new HashSet(elements.length); + for (int i= 0; i < elements.length; i++) { + Assert.isTrue(elements[i] instanceof IResource); + Assert.isTrue(!fElements.contains(elements[i]), "elements must only contain each element once"); + fElements.add(elements[i]); + } + } + + void setPaths(IPath[] elements) { + Assert.isNotNull(elements, "IPath array must not be null"); + fElements= new HashSet(elements.length); + for (int i= 0; i < elements.length; i++) { + Assert.isTrue(!fElements.contains(elements[i]), "elements must only contain each element once"); + fElements.add(elements[i]); + } + } + + /* + * @see IWorkingSet#getName() + */ + public String getName() { + return fName; + } + + void setName(String name) { + Assert.isNotNull(name, "name must not be null"); + fName= name; + } + + /* + * @see IWorkingSet#getResources() + */ + public IResource[] getResources() { + return (IResource[])fElements.toArray(new IResource[fElements.size()]); + } + + public boolean equals (Object o) { + return (o instanceof IWorkingSet) && ((IWorkingSet)o).getName().equals(getName()); + } + + public int hashCode() { + return fName.hashCode(); + } + + /** + * Returns the workbench from which this plugin has been loaded. + */ + public static IWorkingSet[] getWorkingSets() { + return (IWorkingSet[])fgWorkingSets.toArray(new IWorkingSet[fgWorkingSets.size()]); + } + + /** + * Removes the working set from the workspace. + * This is a NOP if the working set does not exist in the workspace. + */ + static void remove(IWorkingSet workingSet) { + fgWorkingSets.remove(workingSet); + } + + /** + * Adds the working set to the workspace. + * The working set must not exist yet. + */ + static void add(IWorkingSet workingSet) { + Assert.isTrue(!fgWorkingSets.contains(workingSet), "working set already registered"); + fgWorkingSets.add(workingSet); + } +} \ No newline at end of file diff --git a/org.eclipse.search/search/org/eclipse/search/internal/workingsets/WorkingSetDialog.java b/org.eclipse.search/search/org/eclipse/search/internal/workingsets/WorkingSetDialog.java new file mode 100644 index 00000000000..c74852e5315 --- /dev/null +++ b/org.eclipse.search/search/org/eclipse/search/internal/workingsets/WorkingSetDialog.java @@ -0,0 +1,115 @@ +package org.eclipse.search.internal.workingsets; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MouseAdapter; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.MouseListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Shell; + +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.IPath; +import org.eclipse.jface.dialogs.IInputValidator; +import org.eclipse.jface.dialogs.InputDialog; + +import org.eclipse.jface.util.Assert; +import org.eclipse.jface.viewers.CheckboxTreeViewer; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.model.WorkbenchContentProvider; +import org.eclipse.ui.model.WorkbenchLabelProvider; + +import org.eclipse.search.internal.ui.SearchPlugin; +import org.eclipse.search.ui.IWorkingSet; +import org.eclipse.search.internal.ui.util.*; + + +public class WorkingSetDialog extends InputDialog { + + private static class WorkingSetNameInputValidator implements IInputValidator { + + String fInitalName; + + public WorkingSetNameInputValidator(String initialName) { + Assert.isNotNull(initialName, "initial name must not be null"); + fInitalName= initialName; + } + + public String isValid(String newText) { + if (newText == null ||newText.equals("")) + return "The name must not be empty."; + IWorkingSet[] workingSets= WorkingSet.getWorkingSets(); + if (newText.equals(fInitalName)) + return null; + for (int i= 0; i < workingSets.length; i++) { + if (newText.equals(workingSets[i].getName())) + return "A workspace with that name already exists."; + } + return null; + } + } + + // Widgets constants + private final static int SIZING_SELECTION_WIDGET_WIDTH= 300; + private final static int SIZING_SELECTION_WIDGET_HEIGHT= 300; + + private IWorkingSet fWorkingSet; + private CheckboxTreeViewer fTree; + + public WorkingSetDialog(Shell parentShell) { + this(parentShell, ""); + } + + public WorkingSetDialog(Shell parentShell, IWorkingSet workingSet) { + this(parentShell, workingSet.getName()); + fWorkingSet= workingSet; + } + + private WorkingSetDialog(Shell parentShell, String initialSelection) { + super(parentShell, "Working Set", "Define the working set name:", initialSelection, new WorkingSetNameInputValidator(initialSelection)); + } + + /* + * Overrides method from Dialog. + */ + protected Control createDialogArea(Composite parent) { + // page group + Composite composite= (Composite)super.createDialogArea(parent); + + fTree= new CheckboxTreeViewer(composite); + fTree.setContentProvider(new WorkbenchContentProvider()); + fTree.setLabelProvider(new WorkbenchLabelProvider()); + fTree.setInput(SearchPlugin.getWorkspace().getRoot()); + + GridData gd= new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL); + gd.heightHint= SIZING_SELECTION_WIDGET_HEIGHT; + fTree.getControl().setLayoutData(gd); + + if (fWorkingSet != null) + fTree.setCheckedElements(fWorkingSet.getResources()); + + return composite; + } + + /* + * Overrides method from Dialog + */ + protected void okPressed() { + if (fWorkingSet == null) + fWorkingSet= new WorkingSet(getText().getText(), fTree.getCheckedElements()); + else { + if (fWorkingSet instanceof WorkingSet) { + ((WorkingSet)fWorkingSet).setName(getText().getText()); + ((WorkingSet)fWorkingSet).setResources(fTree.getCheckedElements()); + } + } + + super.okPressed(); + } + + public IWorkingSet getWorkingSet() { + return fWorkingSet; + } +} diff --git a/org.eclipse.search/search/org/eclipse/search/internal/workingsets/WorkingSetSelectionDialog.java b/org.eclipse.search/search/org/eclipse/search/internal/workingsets/WorkingSetSelectionDialog.java new file mode 100644 index 00000000000..c43689f0ca0 --- /dev/null +++ b/org.eclipse.search/search/org/eclipse/search/internal/workingsets/WorkingSetSelectionDialog.java @@ -0,0 +1,255 @@ +/* + * (c) Copyright IBM Corp. 2000, 2001. + * All Rights Reserved. + */ +package org.eclipse.search.internal.workingsets; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Shell; + +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.util.Assert; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TableViewer; + +import org.eclipse.ui.dialogs.SelectionDialog; + +import org.eclipse.search.internal.ui.util.ListContentProvider; +import org.eclipse.search.ui.IWorkingSet; + +public class WorkingSetSelectionDialog extends SelectionDialog { + + private static class WorkingSetLabelProvider extends LabelProvider { + public String getText(Object workingSet) { + Assert.isTrue(workingSet instanceof IWorkingSet); + return ((IWorkingSet)workingSet).getName(); + } + +// public Image getImage(Object workingSet) { +// return null; +// } + } + + // sizing constants + private final static int SIZING_SELECTION_WIDGET_HEIGHT= 250; + private final static int SIZING_SELECTION_WIDGET_WIDTH= 300; + + // Providers for populating this dialog + private ILabelProvider fLabelProvider; + private IStructuredContentProvider fContentProvider; + + // The visual selection widget group + private TableViewer fListViewer; + + // Modify buttons + private Button fNewButton; + private Button fDetailsButton; + private Button fRemoveButton; + + private IWorkingSet fResult; + + /** + * Creates a working set selection dialog. + * + * @param parentShell the parent shell + */ + public WorkingSetSelectionDialog(Shell parentShell) { + super(parentShell); + setTitle("Working Sets"); //$NON-NLS-1$ + fContentProvider= new ListContentProvider(); + fLabelProvider= new WorkingSetLabelProvider(); + setMessage("Select a working set."); //$NON-NLS-1$ + + } + + /** + * Add the modify buttons to the dialog. + */ + private void addModifyButtons(Composite composite) { + + Composite buttonComposite= new Composite(composite, SWT.RIGHT); + GridLayout layout= new GridLayout(); + layout.numColumns= 2; + buttonComposite.setLayout(layout); + GridData data = + new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.GRAB_HORIZONTAL); + data.grabExcessHorizontalSpace= true; + composite.setData(data); + + int id= IDialogConstants.CLIENT_ID + 1; + fNewButton= createButton(buttonComposite, id++, "New...", false); + fNewButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + WorkingSetDialog dlg= new WorkingSetDialog(getShell()); + if (dlg.open() == dlg.OK) { + fListViewer.add(dlg.getWorkingSet()); + fListViewer.setSelection(new StructuredSelection(dlg.getWorkingSet()), true); + WorkingSet.add(dlg.getWorkingSet()); + } + } + }); + + fDetailsButton= createButton(buttonComposite, id++, "Details...", false); + fDetailsButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + WorkingSetDialog dlg= new WorkingSetDialog(getShell(), getWorkingSet()); + if (dlg.open() == dlg.OK) + fListViewer.update(dlg.getWorkingSet(), null); + } + }); + + fRemoveButton= createButton(buttonComposite, id++, "Remove", false); + fRemoveButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + removeSelectedWorkingSets(); + } + }); + } + + /** + * Visually checks the previously-specified elements in this dialog's list + * viewer. + */ + private void checkInitialSelections() { + fListViewer.setSelection(new StructuredSelection(getInitialSelections()), true); + } + + /* + * Overrides method from Window. + */ + protected void configureShell(Shell shell) { + super.configureShell(shell); + // XXX: Needs help +// WorkbenchHelp.setHelp(shell, new Object[] {IHelpContextIds.LIST_SELECTION_DIALOG}); + } + + /* + * Overrides method from Dialog. + */ + protected Control createDialogArea(Composite parent) { + // page group + Composite composite= (Composite)super.createDialogArea(parent); + + createMessageArea(composite); + + fListViewer= new TableViewer(composite, SWT.BORDER | SWT.MULTI); + GridData data= new GridData(GridData.FILL_BOTH); + data.heightHint= SIZING_SELECTION_WIDGET_HEIGHT; + data.widthHint= SIZING_SELECTION_WIDGET_WIDTH; + fListViewer.getTable().setLayoutData(data); + + fListViewer.setLabelProvider(fLabelProvider); + fListViewer.setContentProvider(fContentProvider); + + fListViewer.addSelectionChangedListener(new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + handleSelectionChanged(); + } + }); + + fListViewer.addDoubleClickListener(new IDoubleClickListener() { + public void doubleClick(DoubleClickEvent event) { + okPressed(); + } + }); + + addModifyButtons(composite); + initializeViewer(); + + return composite; + } + + protected Control createContents(Composite parent) { + Control control= super.createContents(parent); + if (getInitialSelections() != null && !getInitialSelections().isEmpty()) + checkInitialSelections(); + updateButtonAvailability(); + + return control; + } + + /** + * Initializes this dialog's viewer after it has been laid out. + */ + private void initializeViewer() { + fListViewer.setInput(Arrays.asList(WorkingSet.getWorkingSets())); + } + + /* + * Overrides method from Dialog + */ + protected void okPressed() { + List result= new ArrayList(1); + fResult= getSelectedWorkingSet(); + if (fResult != null) + result.add(fResult); + setResult(result); + super.okPressed(); + } + + private void handleSelectionChanged() { + updateButtonAvailability(); + fResult= getSelectedWorkingSet(); + } + + private void updateButtonAvailability() { + ISelection selection= fListViewer.getSelection(); + boolean hasSelection= selection != null && !selection.isEmpty(); + fRemoveButton.setEnabled(hasSelection); + boolean hasSingleSelection= hasSelection; + if (hasSelection && selection instanceof IStructuredSelection) + hasSingleSelection= ((IStructuredSelection)selection).size() == 1; + fDetailsButton.setEnabled(hasSingleSelection); + getOkButton().setEnabled(hasSingleSelection); + } + + private void removeSelectedWorkingSets() { + List result= new ArrayList(1); + ISelection selection= fListViewer.getSelection(); + if (selection instanceof IStructuredSelection) { + Iterator iter= ((IStructuredSelection)selection).iterator(); + while (iter.hasNext()) + WorkingSet.remove(((IWorkingSet)iter.next())); + fListViewer.remove(((IStructuredSelection)selection).toArray()); + } + } + + /** + * Returns the selected working set, or null if + * the selection was canceled. + * + * @return the selected IWorkingSet or null if Cancel was pressed + */ + public IWorkingSet getWorkingSet() { + return fResult; + } + + + private IWorkingSet getSelectedWorkingSet() { + ISelection selection= fListViewer.getSelection(); + if (selection instanceof IStructuredSelection) + return (IWorkingSet)((IStructuredSelection)selection).getFirstElement(); + return null; + } +} diff --git a/org.eclipse.search/search/org/eclipse/search/ui/SearchUI.java b/org.eclipse.search/search/org/eclipse/search/ui/SearchUI.java index b093d1642ec..aef466a97f0 100644 --- a/org.eclipse.search/search/org/eclipse/search/ui/SearchUI.java +++ b/org.eclipse.search/search/org/eclipse/search/ui/SearchUI.java @@ -13,6 +13,7 @@ import org.eclipse.ui.dialogs.SelectionDialog; import org.eclipse.search.internal.ui.SearchPlugin; import org.eclipse.search.internal.ui.SearchPluginImages; +import org.eclipse.search.internal.workingsets.WorkingSetSelectionDialog; /** * The central class for access to the Search Plug-in's User Interface. @@ -114,7 +115,7 @@ public final class SearchUI { * @return a new selection dialog or null if none available */ public static SelectionDialog createWorkingSetDialog(Shell parent) { - return SearchPlugin.createWorkingSetDialog(parent); + return new WorkingSetSelectionDialog(parent); } /** -- cgit v1.2.3