### Eclipse Workspace Patch 1.0 #P org.eclipse.search Index: search/org/eclipse/search/internal/ui/text/FileSearchQuery.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchQuery.java,v retrieving revision 1.51 diff -u -r1.51 FileSearchQuery.java --- search/org/eclipse/search/internal/ui/text/FileSearchQuery.java 31 Dec 2008 21:13:51 -0000 1.51 +++ search/org/eclipse/search/internal/ui/text/FileSearchQuery.java 17 Jun 2009 13:52:38 -0000 @@ -29,14 +29,13 @@ import org.eclipse.search.internal.core.text.PatternConstructor; import org.eclipse.search.internal.ui.Messages; import org.eclipse.search.internal.ui.SearchMessages; -import org.eclipse.search.ui.ISearchQuery; import org.eclipse.search.ui.ISearchResult; import org.eclipse.search.ui.text.AbstractTextSearchResult; import org.eclipse.search.ui.text.FileTextSearchScope; import org.eclipse.search.ui.text.Match; -public class FileSearchQuery implements ISearchQuery { +public class FileSearchQuery implements IFileSearchQuery { private final static class TextSearchResultCollector extends TextSearchRequestor { @@ -275,4 +274,11 @@ } return fResult; } + + /** + * {@inheritDoc} + */ + public boolean isShowLineMatches() { + return !isFileNameSearch(); + } } Index: search/org/eclipse/search/internal/ui/text/FileTreeContentProvider.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileTreeContentProvider.java,v retrieving revision 1.18 diff -u -r1.18 FileTreeContentProvider.java --- search/org/eclipse/search/internal/ui/text/FileTreeContentProvider.java 11 Sep 2008 16:42:37 -0000 1.18 +++ search/org/eclipse/search/internal/ui/text/FileTreeContentProvider.java 17 Jun 2009 13:52:38 -0000 @@ -71,7 +71,7 @@ private synchronized void initialize(AbstractTextSearchResult result) { fResult= result; fChildrenMap= new HashMap(); - boolean showLineMatches= !((FileSearchQuery) fResult.getQuery()).isFileNameSearch(); + boolean showLineMatches= ((IFileSearchQuery) fResult.getQuery()).isShowLineMatches(); if (result != null) { Object[] elements= result.getElements(); Index: search/org/eclipse/search/internal/ui/text/FileSearchPage.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchPage.java,v retrieving revision 1.53 diff -u -r1.53 FileSearchPage.java --- search/org/eclipse/search/internal/ui/text/FileSearchPage.java 11 Sep 2008 12:00:39 -0000 1.53 +++ search/org/eclipse/search/internal/ui/text/FileSearchPage.java 17 Jun 2009 13:52:38 -0000 @@ -51,6 +51,7 @@ import org.eclipse.search.internal.ui.Messages; import org.eclipse.search.internal.ui.SearchMessages; import org.eclipse.search.ui.IContextMenuConstants; +import org.eclipse.search.ui.ISearchQuery; import org.eclipse.search.ui.ISearchResultViewPart; import org.eclipse.search.ui.text.AbstractTextSearchResult; import org.eclipse.search.ui.text.AbstractTextSearchViewPage; @@ -198,8 +199,8 @@ addSortActions(mgr); fActionGroup.setContext(new ActionContext(getSite().getSelectionProvider().getSelection())); fActionGroup.fillContextMenu(mgr); - FileSearchQuery query= (FileSearchQuery) getInput().getQuery(); - if (query.getSearchString().length() > 0) { + ISearchQuery query= getInput().getQuery(); + if (query instanceof FileSearchQuery && ((FileSearchQuery) query).getSearchString().length() > 0) { IStructuredSelection selection= (IStructuredSelection) getViewer().getSelection(); if (!selection.isEmpty()) { ReplaceAction replaceSelection= new ReplaceAction(getSite().getShell(), (FileSearchResult) getInput(), selection.toArray(), true); @@ -355,7 +356,7 @@ private boolean showLineMatches() { AbstractTextSearchResult input= getInput(); - return getLayout() == FLAG_LAYOUT_TREE && input != null && !((FileSearchQuery) input.getQuery()).isFileNameSearch(); + return getLayout() == FLAG_LAYOUT_TREE && input != null && ((IFileSearchQuery) input.getQuery()).isShowLineMatches(); } } Index: search/org/eclipse/search/internal/ui/text/TextSearchPage.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.search/search/org/eclipse/search/internal/ui/text/TextSearchPage.java,v retrieving revision 1.116 diff -u -r1.116 TextSearchPage.java --- search/org/eclipse/search/internal/ui/text/TextSearchPage.java 26 May 2009 13:18:14 -0000 1.116 +++ search/org/eclipse/search/internal/ui/text/TextSearchPage.java 17 Jun 2009 13:52:38 -0000 @@ -17,7 +17,6 @@ import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.regex.PatternSyntaxException; @@ -38,13 +37,8 @@ import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; - import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.DialogPage; import org.eclipse.jface.dialogs.ErrorDialog; @@ -52,7 +46,6 @@ import org.eclipse.jface.fieldassist.ComboContentAdapter; import org.eclipse.jface.resource.JFaceColors; import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.text.FindReplaceDocumentAdapter; import org.eclipse.jface.text.FindReplaceDocumentAdapterContentProposalProvider; @@ -71,8 +64,8 @@ import org.eclipse.search.internal.ui.ISearchHelpContextIds; import org.eclipse.search.internal.ui.SearchMessages; import org.eclipse.search.internal.ui.SearchPlugin; +import org.eclipse.search.internal.ui.text.FileSearchScopeConfigurationBlock.FileSearchScopeConfigurationBlockListener; import org.eclipse.search.internal.ui.util.FileTypeEditor; -import org.eclipse.search.internal.ui.util.SWTUtil; import org.eclipse.search.ui.IReplacePage; import org.eclipse.search.ui.ISearchPage; import org.eclipse.search.ui.ISearchPageContainer; @@ -103,20 +96,18 @@ private boolean fFirstTime= true; private boolean fIsCaseSensitive; private boolean fIsRegExSearch; - private boolean fSearchDerived; private Combo fPattern; private Button fIsCaseSensitiveCheckbox; - private Combo fExtensions; private Button fIsRegExCheckbox; private CLabel fStatusLabel; - private Button fSearchDerivedCheckbox; private ISearchPageContainer fContainer; - private FileTypeEditor fFileTypeEditor; private ContentAssistCommandAdapter fPatterFieldContentAssist; + private FileSearchScopeConfigurationBlock fScopeConfigurationBlock; + private static class SearchPatternData { public final boolean isCaseSensitive; public final boolean isRegExSearch; @@ -215,11 +206,23 @@ } } + public TextSearchPage() { + fScopeConfigurationBlock= new FileSearchScopeConfigurationBlock(new FileSearchScopeConfigurationBlockListener() { + public void extensionsTextChanged() { + updateOKStatus(); + } + + public void derivedSelectionChanged() { + writeConfiguration(); + } + }); + } + //---- Action Handling ------------------------------------------------ private ISearchQuery newQuery() throws CoreException { SearchPatternData data= getPatternData(); - TextSearchPageInput input= new TextSearchPageInput(data.textPattern, data.isCaseSensitive, data.isRegExSearch, createTextSearchScope()); + TextSearchPageInput input= new TextSearchPageInput(data.textPattern, data.isCaseSensitive, data.isRegExSearch, fScopeConfigurationBlock.createTextSearchScope()); return TextSearchQueryProvider.getPreferred().createQuery(input); } @@ -269,71 +272,6 @@ return fPattern.getText(); } - public FileTextSearchScope createTextSearchScope() { - // Setup search scope - switch (getContainer().getSelectedScope()) { - case ISearchPageContainer.WORKSPACE_SCOPE: - return FileTextSearchScope.newWorkspaceScope(getExtensions(), fSearchDerived); - case ISearchPageContainer.SELECTION_SCOPE: - return getSelectedResourcesScope(); - case ISearchPageContainer.SELECTED_PROJECTS_SCOPE: - return getEnclosingProjectScope(); - case ISearchPageContainer.WORKING_SET_SCOPE: - IWorkingSet[] workingSets= getContainer().getSelectedWorkingSets(); - return FileTextSearchScope.newSearchScope(workingSets, getExtensions(), fSearchDerived); - default: - // unknown scope - return FileTextSearchScope.newWorkspaceScope(getExtensions(), fSearchDerived); - } - } - - private FileTextSearchScope getSelectedResourcesScope() { - HashSet resources= new HashSet(); - ISelection sel= getContainer().getSelection(); - if (sel instanceof IStructuredSelection && !sel.isEmpty()) { - Iterator iter= ((IStructuredSelection) sel).iterator(); - while (iter.hasNext()) { - Object curr= iter.next(); - if (curr instanceof IWorkingSet) { - IWorkingSet workingSet= (IWorkingSet) curr; - if (workingSet.isAggregateWorkingSet() && workingSet.isEmpty()) { - return FileTextSearchScope.newWorkspaceScope(getExtensions(), fSearchDerived); - } - IAdaptable[] elements= workingSet.getElements(); - for (int i= 0; i < elements.length; i++) { - IResource resource= (IResource)elements[i].getAdapter(IResource.class); - if (resource != null && resource.isAccessible()) { - resources.add(resource); - } - } - } else if (curr instanceof IAdaptable) { - IResource resource= (IResource) ((IAdaptable)curr).getAdapter(IResource.class); - if (resource != null && resource.isAccessible()) { - resources.add(resource); - } - } - } - } - IResource[] arr= (IResource[]) resources.toArray(new IResource[resources.size()]); - return FileTextSearchScope.newSearchScope(arr, getExtensions(), fSearchDerived); - } - - private FileTextSearchScope getEnclosingProjectScope() { - String[] enclosingProjectName= getContainer().getSelectedProjectNames(); - if (enclosingProjectName == null) { - return FileTextSearchScope.newWorkspaceScope(getExtensions(), fSearchDerived); - } - - IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot(); - IResource[] res= new IResource[enclosingProjectName.length]; - for (int i= 0; i < res.length; i++) { - res[i]= root.getProject(enclosingProjectName[i]); - } - - return FileTextSearchScope.newSearchScope(res, getExtensions(), fSearchDerived); - } - - private SearchPatternData findInPrevious(String pattern) { for (Iterator iter= fPreviousSearchPatterns.iterator(); iter.hasNext();) { SearchPatternData element= (SearchPatternData) iter.next(); @@ -358,7 +296,7 @@ getPattern(), isCaseSensitive(), fIsRegExCheckbox.getSelection(), - getExtensions(), + fScopeConfigurationBlock.getExtensions(), getContainer().getSelectedScope(), getContainer().getSelectedWorkingSets()); fPreviousSearchPatterns.add(0, match); @@ -385,10 +323,6 @@ return patterns; } - private String[] getExtensions() { - return fFileTypeEditor.getFileTypes(); - } - private boolean isCaseSensitive() { return fIsCaseSensitiveCheckbox.getSelection(); } @@ -402,13 +336,13 @@ fFirstTime= false; // Set item and text here to prevent page from resizing fPattern.setItems(getPreviousSearchPatterns()); - fExtensions.setItems(getPreviousExtensions()); + fScopeConfigurationBlock.setExtensions(getPreviousExtensions()); // if (fExtensions.getItemCount() == 0) { // loadFilePatternDefaults(); // } if (!initializePatternControl()) { fPattern.select(0); - fExtensions.setText("*"); //$NON-NLS-1$ + fScopeConfigurationBlock.setExtensionsText("*"); //$NON-NLS-1$ handleWidgetSelected(); } } @@ -420,7 +354,7 @@ final void updateOKStatus() { boolean regexStatus= validateRegex(); - boolean hasFilePattern= fExtensions.getText().length() > 0; + boolean hasFilePattern= fScopeConfigurationBlock.getExtensionsText().length() > 0; getContainer().setPerformActionEnabled(regexStatus && hasFilePattern); } @@ -443,7 +377,7 @@ data.heightHint= convertHeightInCharsToPixels(1) / 3; separator.setLayoutData(data); - addFileNameControls(result); + fScopeConfigurationBlock.createControl(result); setControl(result); Dialog.applyDialogFont(result); @@ -558,7 +492,7 @@ fIsCaseSensitiveCheckbox.setSelection(patternData.isCaseSensitive); fIsRegExCheckbox.setSelection(patternData.isRegExSearch); fPattern.setText(patternData.textPattern); - fFileTypeEditor.setFileTypes(patternData.fileNamePatterns); + fScopeConfigurationBlock.setFileTypes(patternData.fileNamePatterns); if (patternData.workingSets != null) getContainer().setSelectedWorkingSets(patternData.workingSets); else @@ -576,13 +510,13 @@ fPattern.setText(insertEscapeChars(text)); if (getPreviousExtensions().length > 0) { - fExtensions.setText(getPreviousExtensions()[0]); + fScopeConfigurationBlock.setExtensionsText(getPreviousExtensions()[0]); } else { String extension= getExtensionFromEditor(); if (extension != null) - fExtensions.setText(extension); + fScopeConfigurationBlock.setExtensionsText(extension); else - fExtensions.setText("*"); //$NON-NLS-1$ + fScopeConfigurationBlock.setExtensionsText("*"); //$NON-NLS-1$ } return true; } @@ -634,61 +568,13 @@ return null; } - private void addFileNameControls(Composite group) { - // grid layout with 2 columns - - // Line with label, combo and button - Label label= new Label(group, SWT.LEAD); - label.setText(SearchMessages.SearchPage_fileNamePatterns_text); - label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1)); - label.setFont(group.getFont()); - - fExtensions= new Combo(group, SWT.SINGLE | SWT.BORDER); - fExtensions.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - updateOKStatus(); - } - }); - GridData data= new GridData(GridData.FILL, GridData.FILL, true, false, 1, 1); - data.widthHint= convertWidthInCharsToPixels(50); - fExtensions.setLayoutData(data); - fExtensions.setFont(group.getFont()); - - Button button= new Button(group, SWT.PUSH); - button.setText(SearchMessages.SearchPage_browse); - GridData gridData= new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 1, 1); - gridData.widthHint= SWTUtil.getButtonWidthHint(button); - button.setLayoutData(gridData); - button.setFont(group.getFont()); - - fFileTypeEditor= new FileTypeEditor(fExtensions, button); - - // Text line which explains the special characters - Label description= new Label(group, SWT.LEAD); - description.setText(SearchMessages.SearchPage_fileNamePatterns_hint); - description.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1)); - description.setFont(group.getFont()); - - fSearchDerivedCheckbox= new Button(group, SWT.CHECK); - fSearchDerivedCheckbox.setText(SearchMessages.TextSearchPage_searchDerived_label); - - fSearchDerivedCheckbox.setSelection(fSearchDerived); - fSearchDerivedCheckbox.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - fSearchDerived= fSearchDerivedCheckbox.getSelection(); - writeConfiguration(); - } - }); - fSearchDerivedCheckbox.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1)); - fSearchDerivedCheckbox.setFont(group.getFont()); - } - /** * Sets the search page's container. * @param container the container to set */ public void setContainer(ISearchPageContainer container) { fContainer= container; + fScopeConfigurationBlock.setContainer(container); } private ISearchPageContainer getContainer() { @@ -727,7 +613,7 @@ IDialogSettings s= getDialogSettings(); fIsCaseSensitive= s.getBoolean(STORE_CASE_SENSITIVE); fIsRegExSearch= s.getBoolean(STORE_IS_REG_EX_SEARCH); - fSearchDerived= s.getBoolean(STORE_SEARCH_DERIVED); + fScopeConfigurationBlock.setSearchDerived(s.getBoolean(STORE_SEARCH_DERIVED)); try { int historySize= s.getInt(STORE_HISTORY_SIZE); @@ -752,7 +638,7 @@ IDialogSettings s= getDialogSettings(); s.put(STORE_CASE_SENSITIVE, fIsCaseSensitive); s.put(STORE_IS_REG_EX_SEARCH, fIsRegExSearch); - s.put(STORE_SEARCH_DERIVED, fSearchDerived); + s.put(STORE_SEARCH_DERIVED, fScopeConfigurationBlock.getSearchDerived()); int historySize= Math.min(fPreviousSearchPatterns.size(), HISTORY_SIZE); s.put(STORE_HISTORY_SIZE, historySize); Index: search/org/eclipse/search/internal/ui/text/FileSearchResult.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchResult.java,v retrieving revision 1.11 diff -u -r1.11 FileSearchResult.java --- search/org/eclipse/search/internal/ui/text/FileSearchResult.java 31 Dec 2008 21:13:50 -0000 1.11 +++ search/org/eclipse/search/internal/ui/text/FileSearchResult.java 17 Jun 2009 13:52:38 -0000 @@ -28,9 +28,9 @@ public class FileSearchResult extends AbstractTextSearchResult implements IEditorMatchAdapter, IFileMatchAdapter { private final Match[] EMPTY_ARR= new Match[0]; - private FileSearchQuery fQuery; + private IFileSearchQuery fQuery; - public FileSearchResult(FileSearchQuery job) { + public FileSearchResult(IFileSearchQuery job) { fQuery= job; } public ImageDescriptor getImageDescriptor() { Index: search/org/eclipse/search/internal/ui/SearchMessages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchMessages.properties,v retrieving revision 1.139 diff -u -r1.139 SearchMessages.properties --- search/org/eclipse/search/internal/ui/SearchMessages.properties 26 May 2009 13:18:14 -0000 1.139 +++ search/org/eclipse/search/internal/ui/SearchMessages.properties 17 Jun 2009 13:52:38 -0000 @@ -230,6 +230,15 @@ SelectAllAction_label= Select A&ll SelectAllAction_tooltip= Select All +SpellingSearchPage_spellingEngineDropDown_label=Spelling Engine: +SpellingSearchPage_spellingEnginePreferencePage_link=Configure the spelling engines on the Spelling Preference Page. +SpellingSearchQuery_query_label=Spelling Problems Search +SpellingSearchQuery_result11_label=1 spelling problem in 1 file +SpellingSearchQuery_result1n_label={0} spelling problem in {1} files +SpellingSearchQuery_resultn1_label={0} spelling problems in 1 file +SpellingSearchQuery_resultnn_label={0} spelling problems in {1} files +SpellingSearchResultPage_fixProblemMenu_label=Fix Spelling Problem + RemovePotentialMatchesAction_removePotentialMatch_text= Remove Potential Match RemovePotentialMatchesAction_removePotentialMatch_tooltip= Remove Potential Match RemovePotentialMatchesAction_removePotentialMatches_text= Remove potential Matches Index: search/org/eclipse/search/internal/ui/SearchMessages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchMessages.java,v retrieving revision 1.32 diff -u -r1.32 SearchMessages.java --- search/org/eclipse/search/internal/ui/SearchMessages.java 11 Sep 2008 12:00:38 -0000 1.32 +++ search/org/eclipse/search/internal/ui/SearchMessages.java 17 Jun 2009 13:52:38 -0000 @@ -196,6 +196,17 @@ public static String RemovePotentialMatchesAction_dialog_title; public static String RemovePotentialMatchesAction_dialog_message; public static String OpenWithMenu_label; + + public static String SpellingSearchPage_spellingEngineDropDown_label; + public static String SpellingSearchPage_spellingEnginePreferencePage_link; + public static String SpellingSearchQuery_query_label; + public static String SpellingSearchQuery_result11_label; + public static String SpellingSearchQuery_result1n_label; + public static String SpellingSearchQuery_resultn1_label; + public static String SpellingSearchQuery_resultnn_label; + public static String SpellingSearchResultPage_fixProblemMenu_label; + + static { NLS.initializeMessages(BUNDLE_NAME, SearchMessages.class); } Index: plugin.xml =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.search/plugin.xml,v retrieving revision 1.100 diff -u -r1.100 plugin.xml --- plugin.xml 7 Oct 2008 09:17:29 -0000 1.100 +++ plugin.xml 17 Jun 2009 13:52:38 -0000 @@ -394,4 +394,30 @@ point="org.eclipse.core.runtime.preferences"> + + + + + + + + + + + + + Index: search/org/eclipse/search/internal/ui/spelling/SpellingSearchPage.java =================================================================== RCS file: search/org/eclipse/search/internal/ui/spelling/SpellingSearchPage.java diff -N search/org/eclipse/search/internal/ui/spelling/SpellingSearchPage.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ search/org/eclipse/search/internal/ui/spelling/SpellingSearchPage.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,138 @@ +/******************************************************************************* + * Copyright (c) 2009 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.spelling; + +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.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Link; + +import org.eclipse.jface.dialogs.DialogPage; +import org.eclipse.jface.preference.PreferenceDialog; +import org.eclipse.jface.preference.PreferenceStore; + +import org.eclipse.ui.dialogs.PreferencesUtil; + +import org.eclipse.ui.texteditor.spelling.SpellingEngineDescriptor; +import org.eclipse.ui.texteditor.spelling.SpellingService; + +import org.eclipse.search.internal.ui.SearchMessages; +import org.eclipse.search.internal.ui.text.FileSearchScopeConfigurationBlock; +import org.eclipse.search.internal.ui.text.FileSearchScopeConfigurationBlock.FileSearchScopeConfigurationBlockListener; +import org.eclipse.search.ui.ISearchPage; +import org.eclipse.search.ui.ISearchPageContainer; +import org.eclipse.search.ui.NewSearchUI; + +public class SpellingSearchPage extends DialogPage implements ISearchPage { + + private final SpellingEngineDescriptor[] fSpellingEngines; + + private SpellingEngineDescriptor fSelectedEngine; + private FileSearchScopeConfigurationBlock fScopeConfigurationBlock; + private ISearchPageContainer fContainer; + + public SpellingSearchPage() { + fScopeConfigurationBlock= new FileSearchScopeConfigurationBlock(new FileSearchScopeConfigurationBlockListener() { + public void extensionsTextChanged() { + boolean hasFilePattern= fScopeConfigurationBlock.getExtensionsText().length() > 0; + fContainer.setPerformActionEnabled(hasFilePattern); + } + + public void derivedSelectionChanged() { + } + }); + + SpellingService spellingService= new SpellingService(new PreferenceStore()); + fSpellingEngines= spellingService.getSpellingEngineDescriptors(); + fSelectedEngine= spellingService.getDefaultSpellingEngineDescriptor(); + } + + /** + * {@inheritDoc} + */ + public boolean performAction() { + SpellingSearchQuery query= new SpellingSearchQuery(fScopeConfigurationBlock.createTextSearchScope(), fSelectedEngine.getId()); + NewSearchUI.runQueryInBackground(query); + return true; + } + + /** + * {@inheritDoc} + */ + public void setContainer(ISearchPageContainer container) { + fContainer= container; + fScopeConfigurationBlock.setContainer(container); + } + + /** + * {@inheritDoc} + */ + public void createControl(Composite parent) { + initializeDialogUnits(parent); + + Composite control= new Composite(parent, SWT.NONE); + control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + control.setLayout(new GridLayout(2, false)); + + if (fSpellingEngines.length > 1) { + Label label= new Label(control, SWT.NONE); + label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 2, 1)); + label.setText(SearchMessages.SpellingSearchPage_spellingEngineDropDown_label); + + final Combo combo= new Combo(control, SWT.DROP_DOWN | SWT.READ_ONLY); + combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); + + int index= 0; + String[] items= new String[fSpellingEngines.length]; + for (int i= 0; i < items.length; i++) { + items[i]= fSpellingEngines[i].getLabel(); + if (fSpellingEngines[i] == fSelectedEngine) + index= i; + } + combo.setItems(items); + combo.select(index); + combo.addSelectionListener(new SelectionAdapter() { + /** + * {@inheritDoc} + */ + public void widgetSelected(SelectionEvent e) { + fSelectedEngine= fSpellingEngines[combo.getSelectionIndex()]; + } + }); + } + + fScopeConfigurationBlock.createControl(control); + fScopeConfigurationBlock.setExtensionsText("*"); //$NON-NLS-1$ + + Link link= new Link(control, SWT.NONE); + GridData layoutData= new GridData(SWT.END, SWT.CENTER, false, false, 2, 1); + layoutData.verticalIndent= 15; + link.setLayoutData(layoutData); + link.setText(SearchMessages.SpellingSearchPage_spellingEnginePreferencePage_link); + link.addSelectionListener(new SelectionAdapter() { + /** + * {@inheritDoc} + */ + public void widgetSelected(SelectionEvent e) { + PreferenceDialog dialog= PreferencesUtil.createPreferenceDialogOn(getShell(), "org.eclipse.ui.editors.preferencePages.Spelling", new String[0], null); //$NON-NLS-1$ + dialog.open(); + } + }); + + setControl(control); + } + +} Index: search/org/eclipse/search/internal/ui/spelling/SpellingSearchResult.java =================================================================== RCS file: search/org/eclipse/search/internal/ui/spelling/SpellingSearchResult.java diff -N search/org/eclipse/search/internal/ui/spelling/SpellingSearchResult.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ search/org/eclipse/search/internal/ui/spelling/SpellingSearchResult.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,21 @@ +/******************************************************************************* + * Copyright (c) 2009 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.spelling; + +import org.eclipse.search.internal.ui.text.FileSearchResult; + +public class SpellingSearchResult extends FileSearchResult { + + public SpellingSearchResult(SpellingSearchQuery query) { + super(query); + } + +} Index: search/org/eclipse/search/internal/ui/text/IFileSearchQuery.java =================================================================== RCS file: search/org/eclipse/search/internal/ui/text/IFileSearchQuery.java diff -N search/org/eclipse/search/internal/ui/text/IFileSearchQuery.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ search/org/eclipse/search/internal/ui/text/IFileSearchQuery.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,19 @@ +/******************************************************************************* + * Copyright (c) 2009 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.text; + +import org.eclipse.search.ui.ISearchQuery; + +public interface IFileSearchQuery extends ISearchQuery { + public String getResultLabel(int nMatches); + + public boolean isShowLineMatches(); +} \ No newline at end of file Index: search/org/eclipse/search/internal/ui/spelling/SpellingLineElement.java =================================================================== RCS file: search/org/eclipse/search/internal/ui/spelling/SpellingLineElement.java diff -N search/org/eclipse/search/internal/ui/spelling/SpellingLineElement.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ search/org/eclipse/search/internal/ui/spelling/SpellingLineElement.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2009 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.spelling; + +import org.eclipse.core.resources.IFile; + +import org.eclipse.ui.texteditor.spelling.SpellingProblem; + +import org.eclipse.search.internal.ui.text.LineElement; + +public class SpellingLineElement extends LineElement { + private final SpellingProblem fProblem; + + public SpellingLineElement(IFile parent, int lineNumber, int lineStartOffset, String lineContent, SpellingProblem problem) { + super(parent, lineNumber, lineStartOffset, lineContent); + fProblem= problem; + } + + public SpellingProblem getProblem() { + return fProblem; + } +} Index: search/org/eclipse/search/internal/ui/spelling/SpellingSearchQuery.java =================================================================== RCS file: search/org/eclipse/search/internal/ui/spelling/SpellingSearchQuery.java diff -N search/org/eclipse/search/internal/ui/spelling/SpellingSearchQuery.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ search/org/eclipse/search/internal/ui/spelling/SpellingSearchQuery.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,189 @@ +/******************************************************************************* + * Copyright (c) 2009 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.spelling; + +import java.util.regex.Pattern; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.OperationCanceledException; +import org.eclipse.core.runtime.Status; + +import org.eclipse.core.resources.IFile; + +import org.eclipse.core.filebuffers.FileBuffers; +import org.eclipse.core.filebuffers.ITextFileBuffer; +import org.eclipse.core.filebuffers.ITextFileBufferManager; +import org.eclipse.core.filebuffers.LocationKind; + +import org.eclipse.jface.preference.PreferenceStore; + +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.IDocument; + +import org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector; +import org.eclipse.ui.texteditor.spelling.SpellingContext; +import org.eclipse.ui.texteditor.spelling.SpellingProblem; +import org.eclipse.ui.texteditor.spelling.SpellingService; + +import org.eclipse.search.core.text.TextSearchEngine; +import org.eclipse.search.core.text.TextSearchRequestor; +import org.eclipse.search.internal.ui.Messages; +import org.eclipse.search.internal.ui.SearchMessages; +import org.eclipse.search.internal.ui.SearchPlugin; +import org.eclipse.search.internal.ui.text.IFileSearchQuery; +import org.eclipse.search.internal.ui.text.LineElement; +import org.eclipse.search.internal.ui.text.SearchResultUpdater; +import org.eclipse.search.ui.ISearchResult; +import org.eclipse.search.ui.text.FileTextSearchScope; + +public class SpellingSearchQuery implements IFileSearchQuery { + + private static class SpellingSearchRequestor extends TextSearchRequestor { + + private final SpellingSearchResult fResult; + private SpellingService fSpellingService; + + public SpellingSearchRequestor(SpellingSearchResult result, SpellingService spellingService) { + fResult= result; + fSpellingService= spellingService; + } + + /** + * {@inheritDoc} + */ + public boolean acceptFile(final IFile file) throws CoreException { + ITextFileBufferManager bufferManager= FileBuffers.getTextFileBufferManager(); + bufferManager.connect(file.getFullPath(), LocationKind.IFILE, new NullProgressMonitor()); + try { + ITextFileBuffer buffer= bufferManager.getTextFileBuffer(file.getFullPath(), LocationKind.IFILE); + + SpellingContext context= new SpellingContext(); + context.setContentType(buffer.getContentType()); + + final IDocument document= buffer.getDocument(); + fSpellingService.check(document, context, new ISpellingProblemCollector() { + + public void endCollecting() { + } + + public void beginCollecting() { + } + + public void accept(SpellingProblem problem) { + try { + int lineNumber= document.getLineOfOffset(problem.getOffset()); + int lineStartOffset= document.getLineOffset(lineNumber); + int lineLength= document.getLineLength(lineNumber); + LineElement lineElement= new SpellingLineElement(file, lineNumber, lineStartOffset, document.get(lineStartOffset, lineLength), problem); + fResult.addMatch(new SpellingSearchMatch(file, problem, lineElement)); + } catch (BadLocationException e) { + SearchPlugin.log(e); + } + } + + }, new NullProgressMonitor()); + } finally { + bufferManager.disconnect(file.getFullPath(), LocationKind.IFILE, new NullProgressMonitor()); + } + return true; + } + } + + private final FileTextSearchScope fScope; + + private final String fSpellingEngineId; + private SpellingSearchResult fResult; + + public SpellingSearchQuery(FileTextSearchScope scope, String spellingEngineId) { + fScope= scope; + fSpellingEngineId= spellingEngineId; + } + + /** + * {@inheritDoc} + */ + public ISearchResult getSearchResult() { + if (fResult == null) { + fResult= new SpellingSearchResult(this); + new SearchResultUpdater(fResult); + } + return fResult; + } + + /** + * {@inheritDoc} + */ + public boolean canRerun() { + return true; + } + + /** + * {@inheritDoc} + */ + public boolean canRunInBackground() { + return true; + } + + /** + * {@inheritDoc} + */ + public String getLabel() { + return SearchMessages.SpellingSearchQuery_query_label; + } + + /** + * {@inheritDoc} + */ + public IStatus run(IProgressMonitor monitor) throws OperationCanceledException { + SpellingSearchResult searchResult= (SpellingSearchResult)getSearchResult(); + searchResult.removeAll(); + + PreferenceStore store= new PreferenceStore(); + store.setValue(SpellingService.PREFERENCE_SPELLING_ENABLED, true); + store.setValue(SpellingService.PREFERENCE_SPELLING_ENGINE, fSpellingEngineId); + + SpellingService spellingService= new SpellingService(store); + + TextSearchEngine engine= TextSearchEngine.create(); + engine.search(fScope, new SpellingSearchRequestor(searchResult, spellingService), Pattern.compile(""), monitor); //$NON-NLS-1$ + + return Status.OK_STATUS; + } + + /** + * {@inheritDoc} + */ + public String getResultLabel(int matchesCount) { + int fileCount= fResult.getElements().length; + + Object[] args= new Object[] { new Integer(matchesCount), new Integer(fileCount) }; + if (fileCount == 1 && matchesCount == 1) { + return SearchMessages.SpellingSearchQuery_result11_label; + } else if (fileCount == 1) { + return Messages.format(SearchMessages.SpellingSearchQuery_resultn1_label, args); + } else if (matchesCount == 1) { + return Messages.format(SearchMessages.SpellingSearchQuery_result1n_label, args); + } else { + return Messages.format(SearchMessages.SpellingSearchQuery_resultnn_label, args); + } + } + + /** + * {@inheritDoc} + */ + public boolean isShowLineMatches() { + return true; + } + +} \ No newline at end of file Index: search/org/eclipse/search/internal/ui/spelling/SpellingSearchResultPage.java =================================================================== RCS file: search/org/eclipse/search/internal/ui/spelling/SpellingSearchResultPage.java diff -N search/org/eclipse/search/internal/ui/spelling/SpellingSearchResultPage.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ search/org/eclipse/search/internal/ui/spelling/SpellingSearchResultPage.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,125 @@ +/******************************************************************************* + * Copyright (c) 2009 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.spelling; + +import org.eclipse.swt.graphics.ImageData; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.NullProgressMonitor; + +import org.eclipse.core.resources.IResource; + +import org.eclipse.core.filebuffers.FileBuffers; +import org.eclipse.core.filebuffers.ITextFileBuffer; +import org.eclipse.core.filebuffers.ITextFileBufferManager; +import org.eclipse.core.filebuffers.LocationKind; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; + +import org.eclipse.jface.text.contentassist.ICompletionProposal; + +import org.eclipse.search.internal.ui.SearchMessages; +import org.eclipse.search.internal.ui.SearchPlugin; +import org.eclipse.search.internal.ui.text.FileSearchPage; +import org.eclipse.search.ui.IContextMenuConstants; +import org.eclipse.search.ui.text.AbstractTextSearchResult; +import org.eclipse.search.ui.text.AbstractTextSearchViewPage; +import org.eclipse.search.ui.text.Match; + +public class SpellingSearchResultPage extends FileSearchPage { + + private static final class ResolveSpellingProblemAction extends Action { + + private final SpellingLineElement fElement; + private final ICompletionProposal fProposal; + + private final AbstractTextSearchViewPage fPage; + + public ResolveSpellingProblemAction(SpellingLineElement element, final ICompletionProposal proposal, AbstractTextSearchViewPage page) { + super(proposal.getDisplayString()); + + fElement= element; + fProposal= proposal; + fPage= page; + + setImageDescriptor(new ImageDescriptor() { + public ImageData getImageData() { + return proposal.getImage().getImageData(); + } + }); + } + + /** + * {@inheritDoc} + */ + public void run() { + try { + IResource file= fElement.getParent(); + + ITextFileBufferManager bufferManager= FileBuffers.getTextFileBufferManager(); + bufferManager.connect(file.getFullPath(), LocationKind.IFILE, new NullProgressMonitor()); + try { + ITextFileBuffer buffer= bufferManager.getTextFileBuffer(file.getFullPath(), LocationKind.IFILE); + + fProposal.apply(buffer.getDocument()); + + AbstractTextSearchResult input= fPage.getInput(); + if (input != null) { + Match[] matches= input.getMatches(file); + for (int i= 0; i < matches.length; i++) { + Match match= matches[i]; + if (match instanceof SpellingSearchMatch && ((SpellingSearchMatch)match).getLineElement() == fElement) { + input.removeMatch(match); + } + } + } + } finally { + bufferManager.disconnect(file.getFullPath(), LocationKind.IFILE, new NullProgressMonitor()); + } + } catch (CoreException e) { + SearchPlugin.log(e); + } + } + } + + /** + * {@inheritDoc} + */ + protected void fillContextMenu(IMenuManager mgr) { + super.fillContextMenu(mgr); + + ISelection selection= getSite().getSelectionProvider().getSelection(); + if (selection instanceof IStructuredSelection) { + IStructuredSelection sselection= (IStructuredSelection) selection; + if (sselection.size() == 1 && sselection.getFirstElement() instanceof SpellingLineElement) { + SpellingLineElement element= (SpellingLineElement) sselection.getFirstElement(); + + ICompletionProposal[] proposals= element.getProblem().getProposals(); + + if (proposals.length > 0) { + MenuManager replaceMenu= new MenuManager(SearchMessages.SpellingSearchResultPage_fixProblemMenu_label); + + for (int i= 0; i < proposals.length; i++) { + replaceMenu.add(new ResolveSpellingProblemAction(element, proposals[i], this)); + } + + mgr.appendToGroup(IContextMenuConstants.GROUP_EDIT, replaceMenu); + } + } + } + } + +} Index: search/org/eclipse/search/internal/ui/spelling/SpellingSearchMatch.java =================================================================== RCS file: search/org/eclipse/search/internal/ui/spelling/SpellingSearchMatch.java diff -N search/org/eclipse/search/internal/ui/spelling/SpellingSearchMatch.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ search/org/eclipse/search/internal/ui/spelling/SpellingSearchMatch.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2009 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.spelling; + +import org.eclipse.core.resources.IFile; + +import org.eclipse.ui.texteditor.spelling.SpellingProblem; + +import org.eclipse.search.internal.ui.text.FileMatch; +import org.eclipse.search.internal.ui.text.LineElement; + +public class SpellingSearchMatch extends FileMatch { + + private final SpellingProblem fProblem; + private final IFile fFile; + + public SpellingSearchMatch(IFile file, SpellingProblem problem, LineElement element) { + super(file, problem.getOffset(), problem.getLength(), element); + + fFile= file; + fProblem= problem; + } + + public SpellingProblem getProblem() { + return fProblem; + } + + public IFile getFile() { + return fFile; + } + +} Index: search/org/eclipse/search/internal/ui/text/FileSearchScopeConfigurationBlock.java =================================================================== RCS file: search/org/eclipse/search/internal/ui/text/FileSearchScopeConfigurationBlock.java diff -N search/org/eclipse/search/internal/ui/text/FileSearchScopeConfigurationBlock.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ search/org/eclipse/search/internal/ui/text/FileSearchScopeConfigurationBlock.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,226 @@ +/******************************************************************************* + * Copyright (c) 2009 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.text; + +import java.util.HashSet; +import java.util.Iterator; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; + +import org.eclipse.core.runtime.IAdaptable; + +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; + +import org.eclipse.jface.layout.PixelConverter; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; + +import org.eclipse.ui.IWorkingSet; + +import org.eclipse.search.internal.ui.SearchMessages; +import org.eclipse.search.internal.ui.util.FileTypeEditor; +import org.eclipse.search.internal.ui.util.SWTUtil; +import org.eclipse.search.ui.ISearchPageContainer; +import org.eclipse.search.ui.text.FileTextSearchScope; + +public class FileSearchScopeConfigurationBlock { + + public static abstract class FileSearchScopeConfigurationBlockListener { + public abstract void extensionsTextChanged(); + + public abstract void derivedSelectionChanged(); + } + + private final FileSearchScopeConfigurationBlockListener fListener; + + private ISearchPageContainer fContainer; + private Combo fExtensions; + private Button fSearchDerivedCheckbox; + private FileTypeEditor fFileTypeEditor; + private boolean fSearchDerived; + private Composite fControl; + + public FileSearchScopeConfigurationBlock(FileSearchScopeConfigurationBlockListener listener) { + fListener= listener; + } + + public void setContainer(ISearchPageContainer container) { + fContainer= container; + } + + public String[] getExtensions() { + return fFileTypeEditor.getFileTypes(); + } + + public String getExtensionsText() { + return fExtensions.getText(); + } + + public void setExtensionsText(String text) { + fExtensions.setText(text); + } + + public void setExtensions(String[] extensions) { + fExtensions.setItems(extensions); + } + + public void setSearchDerived(boolean enabled) { + fSearchDerived= enabled; + } + + public boolean getSearchDerived() { + return fSearchDerived; + } + + public void setFileTypes(String[] types) { + fFileTypeEditor.setFileTypes(types); + } + + public void createControl(Composite parent) { + fControl= parent; + + addFileNameControls(parent); + } + + public FileTextSearchScope createTextSearchScope() { + // Setup search scope + switch (getContainer().getSelectedScope()) { + case ISearchPageContainer.WORKSPACE_SCOPE: + return FileTextSearchScope.newWorkspaceScope(getExtensions(), fSearchDerived); + case ISearchPageContainer.SELECTION_SCOPE: + return getSelectedResourcesScope(); + case ISearchPageContainer.SELECTED_PROJECTS_SCOPE: + return getEnclosingProjectScope(); + case ISearchPageContainer.WORKING_SET_SCOPE: + IWorkingSet[] workingSets= getContainer().getSelectedWorkingSets(); + return FileTextSearchScope.newSearchScope(workingSets, getExtensions(), fSearchDerived); + default: + // unknown scope + return FileTextSearchScope.newWorkspaceScope(getExtensions(), fSearchDerived); + } + } + + private FileTextSearchScope getSelectedResourcesScope() { + HashSet resources= new HashSet(); + ISelection sel= getContainer().getSelection(); + if (sel instanceof IStructuredSelection && !sel.isEmpty()) { + Iterator iter= ((IStructuredSelection)sel).iterator(); + while (iter.hasNext()) { + Object curr= iter.next(); + if (curr instanceof IWorkingSet) { + IWorkingSet workingSet= (IWorkingSet)curr; + if (workingSet.isAggregateWorkingSet() && workingSet.isEmpty()) { + return FileTextSearchScope.newWorkspaceScope(getExtensions(), fSearchDerived); + } + IAdaptable[] elements= workingSet.getElements(); + for (int i= 0; i < elements.length; i++) { + IResource resource= (IResource)elements[i].getAdapter(IResource.class); + if (resource != null && resource.isAccessible()) { + resources.add(resource); + } + } + } else if (curr instanceof IAdaptable) { + IResource resource= (IResource)((IAdaptable)curr).getAdapter(IResource.class); + if (resource != null && resource.isAccessible()) { + resources.add(resource); + } + } + } + } + IResource[] arr= (IResource[])resources.toArray(new IResource[resources.size()]); + return FileTextSearchScope.newSearchScope(arr, getExtensions(), fSearchDerived); + } + + private FileTextSearchScope getEnclosingProjectScope() { + String[] enclosingProjectName= getContainer().getSelectedProjectNames(); + if (enclosingProjectName == null) { + return FileTextSearchScope.newWorkspaceScope(getExtensions(), fSearchDerived); + } + + IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot(); + IResource[] res= new IResource[enclosingProjectName.length]; + for (int i= 0; i < res.length; i++) { + res[i]= root.getProject(enclosingProjectName[i]); + } + + return FileTextSearchScope.newSearchScope(res, getExtensions(), fSearchDerived); + } + + + private ISearchPageContainer getContainer() { + return fContainer; + } + + private void addFileNameControls(Composite group) { + // grid layout with 2 columns + + // Line with label, combo and button + Label label= new Label(group, SWT.LEAD); + label.setText(SearchMessages.SearchPage_fileNamePatterns_text); + label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1)); + label.setFont(group.getFont()); + + fExtensions= new Combo(group, SWT.SINGLE | SWT.BORDER); + fExtensions.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + fListener.extensionsTextChanged(); + } + }); + GridData data= new GridData(GridData.FILL, GridData.FILL, true, false, 1, 1); + data.widthHint= convertWidthInCharsToPixels(50); + fExtensions.setLayoutData(data); + fExtensions.setFont(group.getFont()); + + Button button= new Button(group, SWT.PUSH); + button.setText(SearchMessages.SearchPage_browse); + GridData gridData= new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 1, 1); + gridData.widthHint= SWTUtil.getButtonWidthHint(button); + button.setLayoutData(gridData); + button.setFont(group.getFont()); + + fFileTypeEditor= new FileTypeEditor(fExtensions, button); + + // Text line which explains the special characters + Label description= new Label(group, SWT.LEAD); + description.setText(SearchMessages.SearchPage_fileNamePatterns_hint); + description.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1)); + description.setFont(group.getFont()); + + fSearchDerivedCheckbox= new Button(group, SWT.CHECK); + fSearchDerivedCheckbox.setText(SearchMessages.TextSearchPage_searchDerived_label); + + fSearchDerivedCheckbox.setSelection(fSearchDerived); + fSearchDerivedCheckbox.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + fSearchDerived= fSearchDerivedCheckbox.getSelection(); + fListener.derivedSelectionChanged(); + } + }); + fSearchDerivedCheckbox.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1)); + fSearchDerivedCheckbox.setFont(group.getFont()); + } + + private int convertWidthInCharsToPixels(int width) { + return new PixelConverter(fControl).convertWidthInCharsToPixels(width); + } + +}