blob: 4bf7d8dca576d85c2a9ff832f250280f0c337f49 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 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.wst.common.ui.internal.search.dialogs;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.window.Window;
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.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.IWorkingSetSelectionDialog;
import org.eclipse.wst.common.core.search.scope.ProjectSearchScope;
import org.eclipse.wst.common.core.search.scope.SearchScope;
import org.eclipse.wst.common.core.search.scope.WorkingSetSearchScope;
import org.eclipse.wst.common.core.search.scope.WorkspaceSearchScope;
import org.eclipse.wst.common.ui.internal.Messages;
public class ScopedComponentSearchListDialog extends ComponentSearchListDialog
{
protected final static String DEFAULT_NAME_FIELD_TITLE = Messages._UI_LABEL_COMPONENT_NAME;
protected final static String DEFAULT_LIST_TITLE = Messages._UI_LABEL_MATCHING_COMPONENTS;
public static final String SCOPE_SPECIFIED_FILE = Messages._UI_LABEL_SPECIFIED_FILE;
public static final String SCOPE_ENCLOSING_PROJECT = Messages._UI_LABEL_ENCLOSING_PROJECT;
public static final String SCOPE_WORKSPACE = Messages._UI_LABEL_WORKSPACE;
public static final String SCOPE_CURRENT_RESOURCE = Messages._UI_LABEL_CURRENT_RESOURCE;
public static final String SCOPE_WORKING_SETS = Messages._UI_LABEL_WORKING_SETS;
private String currentSearchScope = SCOPE_CURRENT_RESOURCE;
protected Button chooseButton;
protected Button[] radioButton = new Button[4];
protected String filterLabel;
protected String listTitle;
protected IResource currentResource;
protected Composite selectWorkingSetsGroup;
protected Text workingSetsText;
protected static String valueForWorkingSetsText;
// working sets currently chosen by the user
private static IWorkingSet[] workingSets;
public ScopedComponentSearchListDialog(Shell shell, String dialogTitle, ComponentSearchListDialogConfiguration configuration)
{
super(shell, dialogTitle, configuration);
}
public void setFilterLabel(String filterLabel)
{
this.filterLabel = filterLabel;
}
public void setListTitle(String listTitle)
{
this.listTitle = listTitle;
}
protected Control createDialogArea(Composite parent)
{
//super.setFilterLabel(filterLabel != null ? filterLabel : DEFAULT_NAME_FIELD_TITLE);
//setListLabelText(listTitle != null ? listTitle : DEFAULT_LIST_TITLE);
super.createDialogArea(parent);
// We use the Composite topComposite to create additional widgets
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
bottomComposite.setLayout(layout);
Group group = new Group(bottomComposite, SWT.NONE);
GridLayout gridLayout = new GridLayout(3, false);
// gridLayout.marginWidth = 0;
// gridLayout.marginLeft = 2;
group.setLayout(gridLayout);
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
group.setText(Messages._UI_LABEL_SEARCH_SCOPE);
ScopeChangeListener scopeChangeListener = new ScopeChangeListener();
radioButton[0] = new Button(group, SWT.RADIO);
radioButton[0].setText(SCOPE_WORKSPACE);
radioButton[1] = new Button(group, SWT.RADIO);
radioButton[1].setText(SCOPE_ENCLOSING_PROJECT);
radioButton[2] = new Button(group, SWT.RADIO);
radioButton[2].setText(SCOPE_CURRENT_RESOURCE);
radioButton[3] = new Button(group, SWT.RADIO);
radioButton[3].setText(SCOPE_WORKING_SETS);
for (int i = 0; i < radioButton.length; i++)
{
if (radioButton[i].getText().equals(currentSearchScope))
{
radioButton[i].setSelection(true);
}
radioButton[i].addSelectionListener(scopeChangeListener);
}
selectWorkingSetsGroup = new Composite(group, SWT.NONE);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
selectWorkingSetsGroup.setLayoutData(gd);
GridLayout workingSetGroupLayout = new GridLayout(2, false);
workingSetGroupLayout.marginWidth = 0;
workingSetGroupLayout.marginHeight = 0;
selectWorkingSetsGroup.setLayout(workingSetGroupLayout);
workingSetsText = new Text(selectWorkingSetsGroup, SWT.BORDER | SWT.READ_ONLY);
workingSetsText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
if (valueForWorkingSetsText != null )
workingSetsText.setText(valueForWorkingSetsText);
chooseButton = new Button(selectWorkingSetsGroup, SWT.NONE);
chooseButton.setText(Messages._UI_LABEL_CHOOSE);
chooseButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Shell shell = getShell();
IWorkingSetSelectionDialog dialog = PlatformUI.getWorkbench().getWorkingSetManager().createWorkingSetSelectionDialog(shell, true);
if ( dialog.open() == Window.OK){
workingSets = dialog.getSelection();
valueForWorkingSetsText = "";
for (int i = 0; i < workingSets.length; i++){
valueForWorkingSetsText += workingSets[i].getLabel();
// if not the last item, we add a comma
if ( i != workingSets.length - 1)
valueForWorkingSetsText += ", ";
}
workingSetsText.setText(valueForWorkingSetsText);
}
// Set working sets radio button enabled, disable other buttons
radioButton[2].setSelection(false);
radioButton[1].setSelection(false);
radioButton[0].setSelection(false);
radioButton[3].setSelection(true);
scopeChangeHandler(radioButton[3]);
}
});
return parent;
} /*
* Returns the selected search scope.
*/
public String getSearchScope()
{
return currentSearchScope;
}
private void scopeChangeHandler(Button b) {
if ((b.getStyle() & SWT.RADIO) != 0)
{
currentSearchScope = b.getText();
// TODO (cs) need to do some work to make the default search scope
// more well defined, currently the default behaviour is to pass a null
// argument in to populateMasterComponentList but we should provide
// getters/setters to allow the default to be controlled
SearchScope scope = null;
if (currentSearchScope == SCOPE_ENCLOSING_PROJECT &&
currentResource != null) {
scope = new ProjectSearchScope(currentResource.getFullPath());
}
else if (currentSearchScope == SCOPE_WORKSPACE){
scope = new WorkspaceSearchScope();
}
else if (currentSearchScope == SCOPE_WORKING_SETS){
// Constructs the working sets scope from the working sets the user
// selected
WorkingSetSearchScope workingSetsScope = new WorkingSetSearchScope();
for (int i = 0; i < workingSets.length; i++){
workingSetsScope.addAWorkingSetToScope(workingSets[i].getElements());
}
scope = workingSetsScope;
}
populateMasterComponentList(scope);
refreshTableViewer(getProcessedFilterString());
// Select the first matching component. Though we should be
// smarter here
// and determine if there was a selection before the scope
// switch (and if
// the component is still available.
Table table = componentTableViewer.getTable();
TableItem items[] = table.getItems();
if (items.length > 0)
{
TableItem select[] = new TableItem[1];
select[0] = items[0];
table.setSelection(select);
}
updateCanFinish();
}
}
private class ScopeChangeListener extends SelectionAdapter
{
public void widgetSelected(SelectionEvent e)
{
if (e.widget instanceof Button)
{
Button b = (Button) e.widget;
if (b.getSelection())
{
scopeChangeHandler(b);
}
}
}
}
public IResource getCurrentResource()
{
return currentResource;
}
public void setCurrentResource(IResource currentResource)
{
this.currentResource = currentResource;
}
}