blob: a1f60953f4f88d6f68c18524c88c02a7c67c1db9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 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.jdt.internal.ui.callhierarchy;
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.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.TrayDialog;
import org.eclipse.ui.PlatformUI;
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.search.JavaSearchScopeFactory;
import org.eclipse.jdt.internal.ui.search.SearchMessages;
/**
* Class to show the Search In dialog.
*
* @since 3.7
*/
class SearchInDialog extends TrayDialog {
private Button[] fIncludeMasks;
private IDialogSettings fSettings;
private int fIncludeMask;
private boolean fIncludeMaskChanged= false;
/**
* Section ID for the SearchInDialog class.
*/
private static final String DIALOG_SETTINGS_SECTION= "SearchInDialog"; //$NON-NLS-1$
private static final String SEARCH_IN_SOURCES= "SearchInSources"; //$NON-NLS-1$
private static final String SEARCH_IN_PROJECTS= "SearchInProjects"; //$NON-NLS-1$
private static final String SEARCH_IN_APPLIBS= "SearchInAppLibs"; //$NON-NLS-1$
private static final String SEARCH_IN_JRE= "SearchInJRE"; //$NON-NLS-1$
private String[] fKeys= new String[] { SEARCH_IN_SOURCES, SEARCH_IN_PROJECTS, SEARCH_IN_JRE, SEARCH_IN_APPLIBS };
public SearchInDialog(Shell parentShell) {
super(parentShell);
fSettings= JavaPlugin.getDefault().getDialogSettings().getSection(DIALOG_SETTINGS_SECTION);
if (fSettings == null) {
fSettings= JavaPlugin.getDefault().getDialogSettings().addNewSection(DIALOG_SETTINGS_SECTION);
fSettings.put(SEARCH_IN_SOURCES, true);
fSettings.put(SEARCH_IN_PROJECTS, true);
fSettings.put(SEARCH_IN_JRE, true);
fSettings.put(SEARCH_IN_APPLIBS, true);
}
fIncludeMask= getInt(fKeys);
}
/**
* Returns the integer value of the strings.
*
* @param str the array of strings
* @return the integer value of the strings
*/
private int getInt(String[] str) {
boolean value;
int mask= 0;
int val= 0;
for (int i= 0; i < str.length; i++) {
value= fSettings.getBoolean(str[i]);
if (value) {
switch (i) {
case 0:
val= JavaSearchScopeFactory.SOURCES;
break;
case 1:
val= JavaSearchScopeFactory.PROJECTS;
break;
case 2:
val= JavaSearchScopeFactory.JRE;
break;
case 3:
val= JavaSearchScopeFactory.LIBS;
}
mask|= val;
}
}
return mask;
}
/* (non-Javadoc)
* Method declared on Window.
*/
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(CallHierarchyMessages.SearchInDialog_title);
PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.CALL_HIERARCHY_SEARCH_IN_DIALOG);
}
/**
* {@inheritDoc}
*/
@Override
protected boolean isResizable() {
return true;
}
/* (non-Javadoc)
* Method declared on Dialog.
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite composite= (Composite) super.createDialogArea(parent);
Control includeMask= createIncludeMask(composite);
includeMask.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
return composite;
}
/**
* Creates the search in options.
*
* @param parent the parent composite
* @return the group control
*/
private Control createIncludeMask(Composite parent) {
Group result= new Group(parent, SWT.NONE);
result.setText(SearchMessages.SearchPage_searchIn_label);
result.setLayout(new GridLayout(4, false));
fIncludeMasks= new Button[] {
createButton(result, SWT.CHECK, SearchMessages.SearchPage_searchIn_sources, JavaSearchScopeFactory.SOURCES, fSettings.getBoolean(SEARCH_IN_SOURCES)),
createButton(result, SWT.CHECK, SearchMessages.SearchPage_searchIn_projects, JavaSearchScopeFactory.PROJECTS, fSettings.getBoolean(SEARCH_IN_PROJECTS)),
createButton(result, SWT.CHECK, SearchMessages.SearchPage_searchIn_jre, JavaSearchScopeFactory.JRE, fSettings.getBoolean(SEARCH_IN_JRE)),
createButton(result, SWT.CHECK, SearchMessages.SearchPage_searchIn_libraries, JavaSearchScopeFactory.LIBS, fSettings.getBoolean(SEARCH_IN_APPLIBS)),
};
SelectionAdapter listener= new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateOKStatus();
}
};
for (int i= 0; i < fIncludeMasks.length; i++) {
fIncludeMasks[i].addSelectionListener(listener);
}
return result;
}
/**
* Updates the enablement of OK button.
*/
protected void updateOKStatus() {
boolean isValidMask= getIncludeMask() != 0;
getButton(OK).setEnabled(isValidMask);
}
/**
* Returns the include mask.
*
* @return the include mask
*/
int getIncludeMask() {
if (fIncludeMasks == null || fIncludeMasks[0].isDisposed())
return fIncludeMask;
int mask= 0;
for (int i= 0; i < fIncludeMasks.length; i++) {
Button button= fIncludeMasks[i];
if (button.getSelection()) {
mask|= getIntData(button);
}
}
return mask;
}
/**
* Returns the value of the given button.
*
* @param button the button for which to fetch value
* @return the value of the button
*/
private int getIntData(Button button) {
return ((Integer)button.getData()).intValue();
}
/**
* Creates and returns the button.
*
* @param parent the parent composite
* @param style the style of control to construct
* @param text the text for the button
* @param data the widget data
* @param isSelected the new selection state
* @return the button created
*/
private Button createButton(Composite parent, int style, String text, int data, boolean isSelected) {
Button button= new Button(parent, style);
button.setText(text);
button.setData(new Integer(data));
button.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
button.setSelection(isSelected);
return button;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
*/
@Override
protected void okPressed() {
int mask= getIncludeMask();
if (mask != fIncludeMask) {
fIncludeMask= mask;
for (int i= 0; i < fIncludeMasks.length; i++) {
fSettings.put(fKeys[i], fIncludeMasks[i].getSelection());
}
fIncludeMaskChanged= true;
} else {
fIncludeMaskChanged= false;
}
super.okPressed();
}
/**
* Indicates whether the include mask has changed.
*
* @return the includeMaskChanged <code>true</code> if the include mask has changed,
* <code>false</code> otherwise
*/
public boolean isIncludeMaskChanged() {
return fIncludeMaskChanged;
}
}