/*******************************************************************************
* Copyright (c) 2006, 2016 QNX Software Systems 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:
* Doug Schaefer (QNX) - Initial API and implementation
* Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.search;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.PatternSyntaxException;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.DialogPage;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.search.ui.ISearchPage;
import org.eclipse.search.ui.ISearchPageContainer;
import org.eclipse.search.ui.NewSearchUI;
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.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PlatformUI;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICContainer;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.ISourceReference;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.parser.Keywords;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
import org.eclipse.cdt.internal.ui.util.Messages;
import org.eclipse.cdt.internal.ui.util.RowLayouter;
/**
* @author Doug Schaefer
*/
public class CSearchPage extends DialogPage implements ISearchPage {
public static final String EXTENSION_ID = CUIPlugin.PLUGIN_ID + ".pdomSearchPage"; //$NON-NLS-1$
//Dialog store id constants
private final static String PAGE_NAME = "PDOMSearchPage"; //$NON-NLS-1$
private final static String STORE_CASE_SENSITIVE = "caseSensitive"; //$NON-NLS-1$
private final static String STORE_PREVIOUS_PATTERNS = "previousPatterns"; //$NON-NLS-1$
private final static String STORE_SEARCH_FLAGS = "searchFlags"; //$NON-NLS-1$
/** Preference key for external marker enablement */
public final static String EXTERNALMATCH_ENABLED = "externMatchEnable"; //$NON-NLS-1$
/** Preference key for external marker visibilty */
public final static String EXTERNALMATCH_VISIBLE = "externMatchVisible"; //$NON-NLS-1$
private static final String[] searchForText= {
CSearchMessages.CSearchPage_searchFor_classStruct,
CSearchMessages.CSearchPage_searchFor_function,
CSearchMessages.CSearchPage_searchFor_variable,
CSearchMessages.CSearchPage_searchFor_union,
CSearchMessages.CSearchPage_searchFor_method,
CSearchMessages.CSearchPage_searchFor_field,
CSearchMessages.CSearchPage_searchFor_enum,
CSearchMessages.CSearchPage_searchFor_enumr,
CSearchMessages.CSearchPage_searchFor_namespace,
CSearchMessages.CSearchPage_searchFor_typedef,
CSearchMessages.CSearchPage_searchFor_macro,
CSearchMessages.CSearchPage_searchFor_any
};
// These must be in the same order as the Text
private static final Integer[] searchForData = {
CSearchPatternQuery.FIND_CLASS_STRUCT,
CSearchPatternQuery.FIND_FUNCTION,
CSearchPatternQuery.FIND_VARIABLE,
CSearchPatternQuery.FIND_UNION,
CSearchPatternQuery.FIND_METHOD,
CSearchPatternQuery.FIND_FIELD,
CSearchPatternQuery.FIND_ENUM,
CSearchPatternQuery.FIND_ENUMERATOR,
CSearchPatternQuery.FIND_NAMESPACE,
CSearchPatternQuery.FIND_TYPEDEF,
CSearchPatternQuery.FIND_MACRO,
CSearchPatternQuery.FIND_ALL_TYPES
};
// the index of FIND_ALL_TYPES
private static final int searchAllButtonIndex = searchForData.length - 1;
private static String[] limitToText = {
CSearchMessages.CSearchPage_limitTo_declarations,
CSearchMessages.CSearchPage_limitTo_definitions,
CSearchMessages.CSearchPage_limitTo_references,
CSearchMessages.CSearchPage_limitTo_allOccurrences
};
// Must be in the same order as the text
private static Integer[] limitToData = {
CSearchQuery.FIND_DECLARATIONS,
CSearchQuery.FIND_DEFINITIONS,
CSearchQuery.FIND_REFERENCES,
CSearchQuery.FIND_ALL_OCCURRENCES,
};
// The index of FIND_ALL_OCCURANCES
private static final int limitToAllButtonIndex = limitToData.length - 1;
private Combo patternCombo;
private String[] previousPatterns;
private Button caseSensitiveButton;
private Button[] searchForButtons;
private Button[] limitToButtons;
private boolean firstTime = true;
private IStructuredSelection structuredSelection;
private ITextSelection textSelection;
private ISearchPageContainer pageContainer;
private IStatusLineManager fLineManager;
private static ICProject getProject(String name) {
return CoreModel.getDefault().create(ResourcesPlugin.getWorkspace().getRoot().getProject(name));
}
private ICElement getElement(Object obj) {
if (obj instanceof IResource) {
return CoreModel.getDefault().create((IResource) obj);
}
if (obj instanceof ICElement) {
ICElement elem= (ICElement) obj;
if (elem instanceof ISourceReference)
return ((ISourceReference) elem).getTranslationUnit();
if (elem instanceof ITranslationUnit || elem instanceof ICContainer || elem instanceof ICProject)
return elem;
return elem.getCProject();
}
return null;
}
@Override
public boolean performAction() {
fLineManager.setErrorMessage(null);
boolean isCaseSensitive = caseSensitiveButton.getSelection();
// get the pattern and turn it into a regular expression
String patternStr = patternCombo.getText();
// Get search flags
int searchFlags = 0;
if (searchForButtons[searchAllButtonIndex].getSelection()) {
searchFlags |= CSearchPatternQuery.FIND_ALL_TYPES;
} else {
for (int i = 0; i < searchForButtons.length; ++i) {
if (searchForButtons[i].getSelection())
searchFlags |= ((Integer) searchForButtons[i].getData()).intValue();
}
}
for (int i = 0; i < limitToButtons.length; ++i) {
if (limitToButtons[i].getSelection())
searchFlags |= ((Integer) limitToButtons[i].getData()).intValue();
}
// get the list of elements for the scope
Set<ICElement> elements = new HashSet<ICElement>();
String scopeDescription = ""; //$NON-NLS-1$
switch (getContainer().getSelectedScope()) {
case ISearchPageContainer.SELECTED_PROJECTS_SCOPE:
final String[] prjNames = getContainer().getSelectedProjectNames();
scopeDescription= CSearchMessages.ProjectScope;
int ip= 0;
for (String prjName: prjNames) {
ICProject project = getProject(prjName);
if (project != null) {
elements.add(project);
switch(ip++) {
case 0:
scopeDescription+= " '" + prjName + "'"; //$NON-NLS-1$//$NON-NLS-2$
break;
case 1:
scopeDescription= scopeDescription + ", '" + prjName + "'"; //$NON-NLS-1$ //$NON-NLS-2$
break;
case 2:
scopeDescription+= ", ..."; //$NON-NLS-1$
break;
default:
break;
}
}
}
break;
case ISearchPageContainer.SELECTION_SCOPE:
if (structuredSelection != null) {
scopeDescription = CSearchMessages.SelectionScope;
int ie= 0;
for (Object sel : structuredSelection.toList()) {
ICElement elem= getElement(sel);
if (elem != null) {
elements.add(elem);
switch(ie++) {
case 0:
scopeDescription= " '" + elem.toString() + "'"; //$NON-NLS-1$//$NON-NLS-2$
break;
case 1:
scopeDescription= scopeDescription + ", '" + elem.toString() + "'"; //$NON-NLS-1$ //$NON-NLS-2$
break;
case 2:
scopeDescription+= ", ..."; //$NON-NLS-1$
break;
default:
break;
}
}
}
break;
}
break;
case ISearchPageContainer.WORKSPACE_SCOPE:
scopeDescription = CSearchMessages.WorkspaceScope;
// Don't add anything
break;
case ISearchPageContainer.WORKING_SET_SCOPE:
IWorkingSet[] workingSets= getContainer().getSelectedWorkingSets();
scopeDescription = Messages.format(CSearchMessages.WorkingSetScope, CSearchUtil.toString(workingSets));
for (int i = 0; i < workingSets.length; ++i) {
IAdaptable[] wsElements = workingSets[i].getElements();
for (int j = 0; j < wsElements.length; ++j) {
ICElement elem = getElement(wsElements[j]);
if (elem != null)
elements.add(elem);
}
}
break;
}
ICElement[] scope = elements.isEmpty() ?
null : elements.toArray(new ICElement[elements.size()]);
try {
CSearchPatternQuery job = new CSearchPatternQuery(scope, scopeDescription, patternStr,
isCaseSensitive, searchFlags);
NewSearchUI.activateSearchResultView();
NewSearchUI.runQueryInBackground(job);
} catch (PatternSyntaxException e) {
fLineManager.setErrorMessage(CSearchMessages.PDOMSearch_query_pattern_error);
return false;
}
// Save our settings
IDialogSettings settings = getDialogSettings();
settings.put(STORE_CASE_SENSITIVE, isCaseSensitive);
if (previousPatterns == null) {
previousPatterns = new String[] { patternStr };
} else {
// Add only if we don't have it already
boolean addit = true;
for (int i = 0; i < previousPatterns.length; ++i) {
if (patternStr.equals(previousPatterns[i])) {
addit = false;
break;
}
}
if (addit) {
// Insert it into the beginning of the list
String[] newPatterns = new String[previousPatterns.length + 1];
System.arraycopy(previousPatterns, 0, newPatterns, 1, previousPatterns.length);
newPatterns[0] = patternStr;
previousPatterns = newPatterns;
}
}
settings.put(STORE_PREVIOUS_PATTERNS, previousPatterns);
settings.put(STORE_SEARCH_FLAGS, searchFlags);
return true;
}
@Override
public void createControl(Composite parent) {
initializeDialogUnits(parent);
GridData gd;
Composite result = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
layout.horizontalSpacing = 10;
result.setLayout(layout);
result.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
RowLayouter layouter = new RowLayouter(layout.numColumns);
gd = new GridData();
gd.horizontalAlignment = GridData.FILL;
gd.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_FILL;
layouter.setDefaultGridData(gd, 0);
layouter.setDefaultGridData(gd, 1);
layouter.setDefaultSpan();
layouter.perform(createExpression(result));
layouter.perform(createSearchFor(result), createLimitTo(result), -1);
createNote(result);
setControl(result);
fLineManager = getStatusLineManager();
Dialog.applyDialogFont(result);
PlatformUI.getWorkbench().getHelpSystem().setHelp(result, ICHelpContextIds.C_SEARCH_PAGE);
}
private void createNote(Composite result) {
// Create a note that tells the user that this search only processes the active code (not grayed out in editor)
GridData gd;
String noteTitle= CSearchMessages.CSearchPage_label_note;
String noteMessage= CSearchMessages.CSearchPage_label_activeCodeRemark;
Composite noteControl= createNoteComposite(JFaceResources.getDialogFont(), result, noteTitle, noteMessage);
gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gd.horizontalSpan= 2;
noteControl.setLayoutData(gd);
}
/**
* Creates a composite with a highlighted Note entry and a message text.
* This is designed to take up the full width of the page.<br>
* This method has been copied from class {@link PreferencePage}
*
* @param font the font to use
* @param composite the parent composite
* @param title the title of the note
* @param message the message for the note
* @return the composite for the note
*/
protected Composite createNoteComposite(Font font, Composite composite,
String title, String message) {
Composite messageComposite = new Composite(composite, SWT.NONE);
GridLayout messageLayout = new GridLayout();
messageLayout.numColumns = 2;
messageLayout.marginWidth = 0;
messageLayout.marginHeight = 0;
messageComposite.setLayout(messageLayout);
messageComposite.setLayoutData(new GridData(
GridData.HORIZONTAL_ALIGN_FILL));
messageComposite.setFont(font);
final Label noteLabel = new Label(messageComposite, SWT.BOLD);
noteLabel.setText(title);
noteLabel.setFont(JFaceResources.getFontRegistry().getBold(
JFaceResources.DIALOG_FONT));
noteLabel
.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
Label messageLabel = new Label(messageComposite, SWT.WRAP);
messageLabel.setText(message);
messageLabel.setFont(font);
return messageComposite;
}
private IStatusLineManager getStatusLineManager(){
IWorkbenchWindow wbWindow= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (wbWindow != null) {
IWorkbenchPage page= wbWindow.getActivePage();
if (page != null) {
IWorkbenchPartSite workbenchSite = page.getActivePart().getSite();
if (workbenchSite instanceof IViewSite){
return ((IViewSite) workbenchSite).getActionBars().getStatusLineManager();
} else if (workbenchSite instanceof IEditorSite){
return ((IEditorSite) workbenchSite).getActionBars().getStatusLineManager();
}
}
}
return null;
}
private Control createExpression(Composite parent) {
Composite result = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
result.setLayout(layout);
GridData gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
gd.horizontalSpan = 2;
gd.horizontalIndent = 0;
result.setLayoutData(gd);
// Pattern text + info
Label label = new Label(result, SWT.LEFT);
label.setText(CSearchMessages.CSearchPage_expression_label);
gd = new GridData(GridData.BEGINNING);
gd.horizontalSpan = 2;
label.setLayoutData(gd);
// Pattern combo
patternCombo = new Combo(result, SWT.SINGLE | SWT.BORDER);
patternCombo.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent event) {
final String text = patternCombo.getText();
final char[] newChars= event.text.toCharArray();
final StringBuilder result= new StringBuilder(newChars.length);
boolean relax= prefix(text, event.start, result).contains(Keywords.OPERATOR);
for (final char c : newChars) {
switch (c) {
case '_':
case ':': // scope operator
case '?': case '*': // wild cards
case '\\': // escaping wild-cards
result.append(c);
break;
case ' ':
if (prefix(text, event.start, result).endsWith(Keywords.OPERATOR)) {
relax= true;
result.append(c);
}
break;
case '&': case '|': case '+': case '-':
case '!': case '=': case '>': case '<':
case '%': case '^': case '(': case ')':
case '[': case ']':
if (prefix(text, event.start, result).endsWith(Keywords.OPERATOR)) {
relax= true;
}
if (relax)
result.append(c);
break;
case '~':
default:
if (Character.isLetterOrDigit(c)) {
result.append(c);
}
break;
}
event.text= result.toString();
}
}
private String prefix(String text, int len, StringBuilder rest) {
StringBuilder result= new StringBuilder(len + rest.length());
result.append(text, 0, len);
result.append(rest);
return result.toString();
}
});
patternCombo.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
setPerformActionEnabled();
}
});
gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
gd.horizontalIndent = -gd.horizontalIndent;
patternCombo.setLayoutData(gd);
// Ignore case checkbox
caseSensitiveButton= new Button(result, SWT.CHECK);
caseSensitiveButton.setText(CSearchMessages.CSearchPage_expression_caseSensitive);
gd= new GridData();
caseSensitiveButton.setLayoutData(gd);
caseSensitiveButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// isCaseSensitive = caseSensitiveButton.getSelection();
setPerformActionEnabled();
}
});
return result;
}
private Control createLimitTo(Composite parent) {
Group result = new Group(parent, SWT.NONE);
result.setText(CSearchMessages.CSearchPage_limitTo_label);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
result.setLayout(layout);
Listener limitToListener = new Listener() {
@Override
public void handleEvent(Event event) {
Button me = (Button)event.widget;
if (me == limitToButtons[limitToAllButtonIndex]) {
if (me.getSelection()) {
for (int i = 0; i < limitToButtons.length; ++i) {
if (i != limitToAllButtonIndex) {
limitToButtons[i].setSelection(true);
limitToButtons[i].setEnabled(false);
}
}
} else {
for (int i = 0; i < limitToButtons.length; ++i) {
if (i != limitToAllButtonIndex) {
limitToButtons[i].setSelection(false);
limitToButtons[i].setEnabled(true);
}
}
}
}
setPerformActionEnabled();
}
};
limitToButtons = new Button[limitToText.length];
for(int i = 0; i < limitToText.length; i++){
Button button = new Button(result, SWT.CHECK);
button.setText(limitToText[i]);
button.setData(limitToData[i]);
button.addListener(SWT.Selection, limitToListener);
limitToButtons[i] = button;
}
return result;
}
private Control createSearchFor(Composite parent) {
Group result= new Group(parent, SWT.NONE);
result.setText(CSearchMessages.CSearchPage_searchFor_label);
GridLayout layout= new GridLayout();
layout.numColumns= 3;
result.setLayout(layout);
SelectionAdapter searchForSelectionAdapter = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
Button me = (Button)event.widget;
if (me == searchForButtons[searchAllButtonIndex]) {
if (me.getSelection()) {
for (int i = 0; i < searchForButtons.length; ++i) {
if (i != searchAllButtonIndex) {
searchForButtons[i].setSelection(true);
searchForButtons[i].setEnabled(false);
}
}
} else {
for (int i = 0; i < searchForButtons.length; ++i) {
if (i != searchAllButtonIndex) {
searchForButtons[i].setSelection(false);
searchForButtons[i].setEnabled(true);
}
}
}
}
setPerformActionEnabled();
}
};
searchForButtons= new Button[searchForText.length];
for (int i= 0; i < searchForText.length; i++) {
Button button= new Button(result, SWT.CHECK);
button.setText(searchForText[i]);
button.setData(searchForData[i]);
button.addSelectionListener(searchForSelectionAdapter);
searchForButtons[i]= button;
}
return result;
}
@Override
public void setContainer(ISearchPageContainer container) {
pageContainer = container;
}
private ISearchPageContainer getContainer() {
return pageContainer;
}
private void setPerformActionEnabled() {
// Need a text string to search
if (this.patternCombo.getText().length() == 0) {
getContainer().setPerformActionEnabled(false);
return;
}
// Need a type
boolean any = false;
for (int i = 0; i < this.searchForButtons.length; ++i) {
if (this.searchForButtons[i].getSelection()) {
any = true;
break;
}
}
if (!any) {
getContainer().setPerformActionEnabled(false);
return;
}
// Set limit to
any = false;
for (int i = 0; i < this.limitToButtons.length; ++i) {
if (this.limitToButtons[i].getSelection()) {
any = true;
break;
}
}
if (!any) {
getContainer().setPerformActionEnabled(false);
return;
}
getContainer().setPerformActionEnabled(true);
}
private IDialogSettings getDialogSettings() {
IDialogSettings settings = CUIPlugin.getDefault().getDialogSettings();
IDialogSettings searchSettings = settings.getSection(PAGE_NAME);
if (searchSettings == null)
searchSettings = settings.addNewSection(PAGE_NAME);
return searchSettings;
}
@Override
public void setVisible(boolean visible) {
if (visible) {
if (firstTime) {
firstTime= false;
IDialogSettings settings = getDialogSettings();
int searchFlags = CSearchPatternQuery.FIND_ALL_TYPES | CSearchQuery.FIND_ALL_OCCURRENCES;
try {
searchFlags = settings.getInt(STORE_SEARCH_FLAGS);
} catch (NumberFormatException e) {
// was uninitialized, assume the defaults
}
previousPatterns = settings.getArray(STORE_PREVIOUS_PATTERNS);
if (previousPatterns != null)
patternCombo.setItems(previousPatterns);
patternCombo.setVisibleItemCount(15);
// Initialize the selection
ISelection selection = getContainer().getSelection();
if (selection instanceof IStructuredSelection) {
structuredSelection = (IStructuredSelection)selection;
Object obj = structuredSelection.getFirstElement();
if (obj instanceof ICElement) {
ICElement element = (ICElement)obj;
patternCombo.setText(element.getElementName());
// Clear the type flags so we can set them correctly for what we have selected
searchFlags = searchFlags & ~CSearchPatternQuery.FIND_ALL_TYPES;
switch (element.getElementType()) {
case ICElement.C_CLASS:
case ICElement.C_STRUCT:
searchFlags |= CSearchPatternQuery.FIND_CLASS_STRUCT;
break;
case ICElement.C_FUNCTION:
searchFlags |= CSearchPatternQuery.FIND_FUNCTION;
break;
case ICElement.C_VARIABLE:
searchFlags |= CSearchPatternQuery.FIND_VARIABLE;
break;
case ICElement.C_UNION:
searchFlags |= CSearchPatternQuery.FIND_UNION;
break;
case ICElement.C_METHOD:
searchFlags |= CSearchPatternQuery.FIND_METHOD;
break;
case ICElement.C_FIELD:
searchFlags |= CSearchPatternQuery.FIND_FIELD;
break;
case ICElement.C_ENUMERATION:
searchFlags |= CSearchPatternQuery.FIND_ENUM;
break;
case ICElement.C_ENUMERATOR:
searchFlags |= CSearchPatternQuery.FIND_ENUMERATOR;
break;
case ICElement.C_NAMESPACE:
searchFlags |= CSearchPatternQuery.FIND_NAMESPACE;
break;
case ICElement.C_TYPEDEF:
searchFlags |= CSearchPatternQuery.FIND_TYPEDEF;
break;
case ICElement.C_MACRO:
searchFlags |= CSearchPatternQuery.FIND_MACRO;
break;
default:
// Not sure, set to all
searchFlags |= CSearchPatternQuery.FIND_ALL_TYPES;
patternCombo.setText(""); //$NON-NLS-1$
}
}
} else if (selection instanceof ITextSelection) {
textSelection = (ITextSelection)selection;
patternCombo.setText(textSelection.getText());
// TODO it might be good to do a selection parse to ensure that
// the selection is valid.
}
if (patternCombo.getText().trim().length() == 0 && previousPatterns != null && previousPatterns.length > 0) {
patternCombo.setText(previousPatterns[0]);
}
caseSensitiveButton.setSelection(settings.getBoolean(STORE_CASE_SENSITIVE));
if ((searchFlags & CSearchPatternQuery.FIND_ALL_TYPES) == CSearchPatternQuery.FIND_ALL_TYPES) {
searchForButtons[searchAllButtonIndex].setSelection(true);
for (int i = 0; i < searchForButtons.length; ++i) {
if (i != searchAllButtonIndex) {
searchForButtons[i].setSelection(true);
searchForButtons[i].setEnabled(false);
}
}
} else {
searchForButtons[searchAllButtonIndex].setSelection(false);
for (int i = 0; i < searchForButtons.length; ++i) {
if (i != searchAllButtonIndex) {
searchForButtons[i].setSelection(
(searchFlags & ((Integer)searchForButtons[i].getData()).intValue()) != 0);
}
}
}
if ((searchFlags & CSearchQuery.FIND_ALL_OCCURRENCES) == CSearchQuery.FIND_ALL_OCCURRENCES) {
limitToButtons[limitToAllButtonIndex].setSelection(true);
for (int i = 0; i < limitToButtons.length; ++i) {
if (i != limitToAllButtonIndex) {
limitToButtons[i].setSelection(true);
limitToButtons[i].setEnabled(false);
}
}
} else {
limitToButtons[limitToAllButtonIndex].setSelection(false);
for (int i = 0; i < limitToButtons.length - 1; ++i) {
limitToButtons[i].setSelection(
(searchFlags & ((Integer)limitToButtons[i].getData()).intValue()) != 0);
}
}
}
patternCombo.setFocus();
setPerformActionEnabled();
}
super.setVisible(visible);
}
}