| /******************************************************************************* |
| * 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; |
| } |
| |
| } |