///******************************************************************************* // * Copyright (c) 2000, 2006 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.search.internal.ui; // //import java.util.Arrays; //import java.util.HashSet; //import java.util.Set; // //import org.eclipse.core.runtime.Assert; //import org.eclipse.core.runtime.IStatus; //import org.eclipse.core.runtime.Status; // //import org.eclipse.swt.SWT; //import org.eclipse.swt.accessibility.AccessibleAdapter; //import org.eclipse.swt.accessibility.AccessibleEvent; //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.Group; //import org.eclipse.swt.widgets.Text; // //import org.eclipse.jface.dialogs.IDialogSettings; //import org.eclipse.jface.viewers.ISelection; //import org.eclipse.jface.viewers.IStructuredSelection; //import org.eclipse.jface.window.Window; // //import org.eclipse.ui.IWorkbenchPage; //import org.eclipse.ui.IWorkingSet; //import org.eclipse.ui.IWorkingSetManager; //import org.eclipse.ui.PlatformUI; //import org.eclipse.ui.dialogs.IWorkingSetSelectionDialog; // //import org.eclipse.search.ui.ISearchPageContainer; //import org.eclipse.search.ui.NewSearchUI; // //import org.eclipse.search.internal.ui.util.PixelConverter; //import org.eclipse.search.internal.ui.util.SWTUtil; // //public class ScopePart { // // // Settings store // private static final String DIALOG_SETTINGS_KEY= "SearchDialog.ScopePart"; //$NON-NLS-1$ // private static final String STORE_SCOPE= "scope"; //$NON-NLS-1$ // private static final String STORE_LRU_WORKING_SET_NAME= "lastUsedWorkingSetName"; //$NON-NLS-1$ // private static final String STORE_LRU_WORKING_SET_NAMES= "lastUsedWorkingSetNames"; //$NON-NLS-1$ // // private IDialogSettings fSettingsStore; // private Group fPart; // // // Scope radio buttons // private Button fUseWorkspace; // private Button fUseSelection; // private Button fUseProject; // private Button fUseWorkingSet; // // private int fScope; // private boolean fCanSearchEnclosingProjects; // private Text fWorkingSetText; // private IWorkingSet[] fWorkingSets; // // // Reference to its search page container (can be null) // private SearchDialog fSearchDialog; // // /** // * Returns a new scope part with workspace as initial scope. // * The part is not yet created. // * @param searchDialog The parent container // * @param searchEnclosingProjects If true, add the 'search enclosing project' radio button // */ // public ScopePart(SearchDialog searchDialog, boolean searchEnclosingProjects) { // fSearchDialog= searchDialog; // fCanSearchEnclosingProjects= searchEnclosingProjects; // // fSettingsStore= SearchPlugin.getDefault().getDialogSettingsSection(DIALOG_SETTINGS_KEY); // fScope= getStoredScope(fSettingsStore, searchEnclosingProjects); // // fWorkingSets= getStoredWorkingSets(); // } // // private static int getStoredScope(IDialogSettings settingsStore, boolean canSearchEnclosingProjects) { // int scope; // try { // scope= settingsStore.getInt(STORE_SCOPE); // } catch (NumberFormatException ex) { // scope= ISearchPageContainer.WORKSPACE_SCOPE; // } // if (scope != ISearchPageContainer.WORKING_SET_SCOPE // && scope != ISearchPageContainer.SELECTION_SCOPE // && scope != ISearchPageContainer.SELECTED_PROJECTS_SCOPE // && scope != ISearchPageContainer.WORKSPACE_SCOPE) // scope= ISearchPageContainer.WORKSPACE_SCOPE; // // if (!canSearchEnclosingProjects && scope == ISearchPageContainer.SELECTED_PROJECTS_SCOPE) // scope= ISearchPageContainer.WORKSPACE_SCOPE; // // return scope; // } // // private IWorkingSet getWorkingSet(IWorkingSetManager workingSetManager, String storedName) { // if (storedName.length() == 0) { // IWorkbenchPage page= fSearchDialog.getWorkbenchWindow().getActivePage(); // if (page != null) { // return page.getAggregateWorkingSet(); // } // return null; // } // return workingSetManager.getWorkingSet(storedName); // } // // // private IWorkingSet[] getStoredWorkingSets() { // String[] lruWorkingSetNames= fSettingsStore.getArray(STORE_LRU_WORKING_SET_NAMES); // // IWorkingSetManager workingSetManager= PlatformUI.getWorkbench().getWorkingSetManager(); // if (lruWorkingSetNames != null) { // Set existingWorkingSets= new HashSet(lruWorkingSetNames.length); // for (int i= 0; i < lruWorkingSetNames.length; i++) { // IWorkingSet workingSet= getWorkingSet(workingSetManager, lruWorkingSetNames[i]); // if (workingSet != null) { // existingWorkingSets.add(workingSet); // } // } // if (!existingWorkingSets.isEmpty()) { // return (IWorkingSet[]) existingWorkingSets.toArray(new IWorkingSet[existingWorkingSets.size()]); // } // } else { // // Backward compatibility // String workingSetName= fSettingsStore.get(STORE_LRU_WORKING_SET_NAME); // if (workingSetName != null) { // IWorkingSet workingSet= getWorkingSet(workingSetManager, workingSetName); // if (workingSet != null) { // return new IWorkingSet[] { workingSet }; // } // } // } // return null; // } // // // /** // * Returns the scope selected in this part // * // * @return the selected scope // */ // public int getSelectedScope() { // return fScope; // } // // /** // * Sets the selected scope. // * This method must only be called on a created part. // * // * @param scope the scope to be selected in this part // */ // public void setSelectedScope(int scope) { // Assert.isLegal(scope >= 0 && scope <= 3); // Assert.isNotNull(fUseWorkspace); // Assert.isNotNull(fUseSelection); // Assert.isNotNull(fUseWorkingSet); // Assert.isNotNull(fUseProject); // // if (scope == ISearchPageContainer.SELECTED_PROJECTS_SCOPE) { // if (!fCanSearchEnclosingProjects) { // SearchPlugin.log(new Status(IStatus.WARNING, NewSearchUI.PLUGIN_ID, IStatus.WARNING, "Enclosing projects scope set on search page that does not support it", null)); //$NON-NLS-1$ // scope= ISearchPageContainer.WORKSPACE_SCOPE; // } else if (!fUseProject.isEnabled()) { // scope= ISearchPageContainer.WORKSPACE_SCOPE; // } // } else if (scope == ISearchPageContainer.SELECTION_SCOPE) { // if (!fUseSelection.isEnabled()) { // scope= ISearchPageContainer.WORKSPACE_SCOPE; // } // } // fScope= scope; // // fUseWorkspace.setSelection(scope == ISearchPageContainer.WORKSPACE_SCOPE); // fUseSelection.setSelection(scope == ISearchPageContainer.SELECTION_SCOPE); // fUseProject.setSelection(scope == ISearchPageContainer.SELECTED_PROJECTS_SCOPE); // fUseWorkingSet.setSelection(scope == ISearchPageContainer.WORKING_SET_SCOPE); // // updateSearchPageContainerActionPerformedEnablement(); // fSettingsStore.put(STORE_SCOPE, scope); // // } // // private void updateSearchPageContainerActionPerformedEnablement() { // fSearchDialog.notifyScopeSelectionChanged(); // } // // /** // * Returns the selected working set of this part. // * // * @return the selected working set or null // * - if the scope is not WORKING_SET_SCOPE // * - if there is no working set selected // */ // public IWorkingSet[] getSelectedWorkingSets() { // if (getSelectedScope() == ISearchPageContainer.WORKING_SET_SCOPE) // return fWorkingSets; // return null; // } // // /** // * Sets the selected working set for this part. // * This method must only be called on a created part. // * // * @param workingSets the working set to be selected // */ // public void setSelectedWorkingSets(IWorkingSet[] workingSets) { // Assert.isNotNull(workingSets); // setSelectedScope(ISearchPageContainer.WORKING_SET_SCOPE); // fWorkingSets= null; // Set existingWorkingSets= new HashSet(workingSets.length); // for (int i= 0; i < workingSets.length; i++) { // String name= workingSets[i].getName(); // IWorkingSet workingSet= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSet(name); // if (workingSet != null) // existingWorkingSets.add(workingSet); // } // if (!existingWorkingSets.isEmpty()) // fWorkingSets= (IWorkingSet[]) existingWorkingSets.toArray(new IWorkingSet[existingWorkingSets.size()]); // // saveState(); // // if (fWorkingSetText != null) // fWorkingSetText.setText(toString(fWorkingSets)); // } // // /** // * Saves the last recently used working sets, // * if any. // */ // private void saveState() { // if (fWorkingSets != null && fWorkingSets.length > 0) { // String[] existingWorkingSetNames= new String[fWorkingSets.length]; // for (int i= 0; i < fWorkingSets.length; i++) { // IWorkingSet curr= fWorkingSets[i]; // // use empty name for aggregateWS // existingWorkingSetNames[i]= curr.isAggregateWorkingSet() ? "" : curr.getName(); //$NON-NLS-1$ // } // fSettingsStore.put(STORE_LRU_WORKING_SET_NAMES, existingWorkingSetNames); // } // } // // /** // * Creates this scope part. // * // * @param parent a widget which will be the parent of the new instance (cannot be null) // * @return Returns the created part control // */ // public Composite createPart(Composite parent) { // fPart= new Group(parent, SWT.NONE); // fPart.setText(SearchMessages.ScopePart_group_text); // // GridLayout layout= new GridLayout(); // layout.numColumns= 4; // fPart.setLayout(layout); // fPart.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // // fUseWorkspace= new Button(fPart, SWT.RADIO); // fUseWorkspace.setData(new Integer(ISearchPageContainer.WORKSPACE_SCOPE)); // fUseWorkspace.setText(SearchMessages.ScopePart_workspaceScope_text); // // fUseSelection= new Button(fPart, SWT.RADIO); // fUseSelection.setData(new Integer(ISearchPageContainer.SELECTION_SCOPE)); // fUseSelection.setText(SearchMessages.ScopePart_selectedResourcesScope_text); // // boolean canSearchInSelection= canSearchInSelection(); // fUseSelection.setEnabled(canSearchInSelection); // // GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); // gd.horizontalIndent= 8; // fUseSelection.setLayoutData(gd); // // fUseProject= new Button(fPart, SWT.RADIO); // fUseProject.setData(new Integer(ISearchPageContainer.SELECTED_PROJECTS_SCOPE)); // fUseProject.setText(SearchMessages.ScopePart_enclosingProjectsScope_text); // fUseProject.setEnabled(fSearchDialog.getEnclosingProjectNames().length > 0); // // gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); // gd.horizontalSpan= 2; // gd.horizontalIndent= 8; // fUseProject.setLayoutData(gd); // if (!fCanSearchEnclosingProjects) // fUseProject.setVisible(false); // // fUseWorkingSet= new Button(fPart, SWT.RADIO); // fUseWorkingSet.setData(new Integer(ISearchPageContainer.WORKING_SET_SCOPE)); // fUseWorkingSet.setText(SearchMessages.ScopePart_workingSetScope_text); // fWorkingSetText= new Text(fPart, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY); // fWorkingSetText.getAccessible().addAccessibleListener(new AccessibleAdapter() { // public void getName(AccessibleEvent e) { // e.result= SearchMessages.ScopePart_workingSetText_accessible_label; // } // }); // // Button chooseWorkingSet= new Button(fPart, SWT.PUSH); // chooseWorkingSet.setLayoutData(new GridData()); // chooseWorkingSet.setText(SearchMessages.ScopePart_workingSetChooseButton_text); // SWTUtil.setButtonDimensionHint(chooseWorkingSet); // chooseWorkingSet.addSelectionListener(new SelectionAdapter() { // public void widgetSelected(SelectionEvent e) { // if (handleChooseWorkingSet()) { // setSelectedScope(ISearchPageContainer.WORKING_SET_SCOPE); // } // } // }); // gd= new GridData(GridData.FILL_HORIZONTAL); // gd.horizontalIndent= 8; // gd.horizontalSpan= 2; // gd.widthHint= new PixelConverter(fWorkingSetText).convertWidthInCharsToPixels(30); // fWorkingSetText.setLayoutData(gd); // // // Add scope change listeners // SelectionAdapter scopeChangedLister= new SelectionAdapter() { // public void widgetSelected(SelectionEvent e) { // handleScopeChanged(e); // } // }; // fUseWorkspace.addSelectionListener(scopeChangedLister); // fUseSelection.addSelectionListener(scopeChangedLister); // fUseProject.addSelectionListener(scopeChangedLister); // fUseWorkingSet.addSelectionListener(scopeChangedLister); // // // Set initial scope // setSelectedScope(fScope); // // // Set initial working set // if (fWorkingSets != null) // fWorkingSetText.setText(toString(fWorkingSets)); // // return fPart; // } // // // private boolean canSearchInSelection() { // ISelection selection= fSearchDialog.getSelection(); // return selection instanceof IStructuredSelection && !selection.isEmpty(); // } // // private void handleScopeChanged(SelectionEvent e) { // Object source= e.getSource(); // if (source instanceof Button) { // Button button= (Button) source; // if (button.getSelection()) // setSelectedScope(((Integer) button.getData()).intValue()); // } // } // // private boolean handleChooseWorkingSet() { // IWorkingSetManager workingSetManager= PlatformUI.getWorkbench().getWorkingSetManager(); // IWorkingSetSelectionDialog dialog= workingSetManager.createWorkingSetSelectionDialog(fUseSelection.getShell(), true); // // if (fWorkingSets != null) // dialog.setSelection(fWorkingSets); // if (dialog.open() == Window.OK) { // Object[] result= dialog.getSelection(); // if (result.length > 0) { // setSelectedWorkingSets((IWorkingSet[]) result); // return true; // } // fWorkingSetText.setText(""); //$NON-NLS-1$ // fWorkingSets= null; // if (fScope == ISearchPageContainer.WORKING_SET_SCOPE) // setSelectedScope(ISearchPageContainer.WORKSPACE_SCOPE); // return false; // } // if (fWorkingSets != null) { // // test if selected working set has been removed // int i= 0; // while (i < fWorkingSets.length) { // IWorkingSet workingSet= fWorkingSets[i]; // if (!workingSet.isAggregateWorkingSet() && workingSetManager.getWorkingSet(workingSet.getName()) == null) // break; // i++; // } // if (i < fWorkingSets.length) { // fWorkingSetText.setText(""); //$NON-NLS-1$ // fWorkingSets= null; // updateSearchPageContainerActionPerformedEnablement(); // } // } // return false; // } // // void setVisible(boolean state) { // fPart.setVisible(state); // } // // public static String toString(IWorkingSet[] workingSets) { // String result= ""; //$NON-NLS-1$ // if (workingSets != null && workingSets.length > 0) { // Arrays.sort(workingSets, new WorkingSetComparator()); // boolean firstFound= false; // for (int i= 0; i < workingSets.length; i++) { // String workingSetName= workingSets[i].getLabel(); // if (firstFound) // result= Messages.format(SearchMessages.ScopePart_workingSetConcatenation, new String[] { result, workingSetName }); // else { // result= workingSetName; // firstFound= true; // } // } // } // return result; // } //}