blob: b9cc4e32442e01b30d50cdf50f81032fc63b8fc0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 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.ui.internal.views.markers;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.IWorkingSetSelectionDialog;
import org.eclipse.ui.views.markers.MarkerFieldFilter;
import org.eclipse.ui.views.markers.internal.MarkerMessages;
/**
* ScopeArea is the filter configuration area that handles the scope of the
* filter.
*
* @since 3.4
*
*/
class ScopeArea extends GroupFilterConfigurationArea {
private Button[] buttons;
int scope;
private WorkingSetArea workingSetArea;
private class WorkingSetArea {
Button button;
Button selectButton;
/**
* Creates the working set filter selection widgets.
*
* @param parent
* the parent composite of the working set widgets
*/
WorkingSetArea(Composite parent) {
// radio button has to be part of main radio button group
button = createRadioButton(parent,
MarkerMessages.filtersDialog_noWorkingSet,
MarkerFieldFilterGroup.ON_WORKING_SET);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
button.setLayoutData(data);
// Composite composite = new Composite(parent, SWT.NONE);
// composite.setFont(parent.getFont());
// GridLayout layout = new GridLayout();
// Button radio = new Button(parent, SWT.RADIO);
// layout.marginWidth = radio.computeSize(SWT.DEFAULT,
// SWT.DEFAULT).x;
// layout.marginHeight = 0;
// radio.dispose();
// composite.setLayout(layout);
selectButton = new Button(parent, SWT.PUSH);
selectButton.setText(MarkerMessages.filtersDialog_workingSetSelect);
initializeFontMetrics(parent);
GridData layoutData = new GridData();
layoutData.horizontalIndent = IDialogConstants.INDENT;
int widthHint = Dialog.convertHorizontalDLUsToPixels(getFontMetrics(),IDialogConstants.BUTTON_WIDTH);
Point minSize = selectButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
layoutData.widthHint = Math.max(widthHint, minSize.x);
selectButton.setLayoutData(layoutData);
selectButton.addSelectionListener(new SelectionAdapter() {
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
IWorkingSetSelectionDialog dialog = PlatformUI
.getWorkbench().getWorkingSetManager()
.createWorkingSetSelectionDialog(button.getShell(),
false);
IWorkingSet workingSet = getWorkingSet();
if (workingSet != null) {
dialog.setSelection(new IWorkingSet[] { workingSet });
}
if (dialog.open() == Window.OK) {
IWorkingSet[] result = dialog.getSelection();
if (result != null && result.length > 0) {
setWorkingSet(result[0]);
} else {
setWorkingSet(null);
}
if (getSelection() == false) {
setSelection(true);
}
}
}
});
}
/**
* Returns wether or not a working set filter should be used
*
* @return true=a working set filter should be used false=a working set
* filter should not be used
*/
boolean getSelection() {
return button.getSelection();
}
/**
* Returns the selected working set filter or null if none is selected.
*
* @return the selected working set filter or null if none is selected.
*/
IWorkingSet getWorkingSet() {
return (IWorkingSet) button.getData();
}
/**
* Sets the working set filter selection.
*
* @param selected
* true=a working set filter should be used false=no working
* set filter should be used
*/
void setSelection(boolean selected) {
button.setSelection(selected);
}
/**
* Opens the working set selection dialog.
*/
void selectPressed() {
IWorkingSetSelectionDialog dialog = PlatformUI.getWorkbench()
.getWorkingSetManager().createWorkingSetSelectionDialog(
button.getShell(), false);
IWorkingSet workingSet = getWorkingSet();
if (workingSet != null) {
dialog.setSelection(new IWorkingSet[] { workingSet });
}
if (dialog.open() == Window.OK) {
IWorkingSet[] result = dialog.getSelection();
if (result != null && result.length > 0) {
setWorkingSet(result[0]);
} else {
setWorkingSet(null);
}
if (getSelection() == false) {
setSelection(true);
}
}
}
/**
* Sets the specified working set.
*
* @param workingSet
* the working set
*/
void setWorkingSet(IWorkingSet workingSet) {
button.setData(workingSet);
if (workingSet != null) {
button.setText(NLS.bind(
MarkerMessages.filtersDialog_workingSet, workingSet
.getLabel()));
} else {
button.setText(MarkerMessages.filtersDialog_noWorkingSet);
}
}
void setEnabled(boolean enabled) {
button.setEnabled(enabled);
selectButton.setEnabled(enabled);
}
/**
* Return the radio button for the receiver.
* @return Button
*/
Button getRadioButton() {
return button;
}
}
/**
* Create a new instance of the receiver.
*/
public ScopeArea() {
super();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.provisional.views.markers.FilterConfigurationArea#applyToGroup(org.eclipse.ui.internal.provisional.views.markers.MarkerFieldFilterGroup)
*/
public void applyToGroup(MarkerFieldFilterGroup group) {
group.setScope(scope);
group.setWorkingSet(workingSetArea.getWorkingSet());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.provisional.views.markers.FilterConfigurationArea#createContents(org.eclipse.swt.widgets.Composite)
*/
public void createContents(Composite parent) {
buttons = new Button[5];
buttons[MarkerFieldFilterGroup.ON_ANY] = createRadioButton(parent,
MarkerMessages.filtersDialog_anyResource,
MarkerFieldFilterGroup.ON_ANY);
buttons[MarkerFieldFilterGroup.ON_ANY_IN_SAME_CONTAINER] = createRadioButton(
parent, MarkerMessages.filtersDialog_anyResourceInSameProject,
MarkerFieldFilterGroup.ON_ANY_IN_SAME_CONTAINER);
buttons[MarkerFieldFilterGroup.ON_SELECTED_ONLY] = createRadioButton(
parent, MarkerMessages.filtersDialog_selectedResource,
MarkerFieldFilterGroup.ON_SELECTED_ONLY);
buttons[MarkerFieldFilterGroup.ON_SELECTED_AND_CHILDREN] = createRadioButton(
parent, MarkerMessages.filtersDialog_selectedAndChildren,
MarkerFieldFilterGroup.ON_SELECTED_AND_CHILDREN);
workingSetArea = new WorkingSetArea(parent);
buttons[MarkerFieldFilterGroup.ON_WORKING_SET] = workingSetArea.getRadioButton();
}
/**
* Creates a radio button with the given parent and text.
*
* @param parent
* the parent composite
* @param text
* the text for the check box
* @return the radio box button
*/
protected Button createRadioButton(Composite parent, String text,
final int value) {
Button button = new Button(parent, SWT.RADIO);
button.setText(text);
button.setSelection(value == scope);
button.addSelectionListener(new SelectionAdapter() {
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
scope = value;
}
});
return button;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.provisional.views.markers.FilterConfigurationArea#getTitle()
*/
public String getTitle() {
return MarkerMessages.filtersDialog_scopeTitle;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.provisional.views.markers.FilterConfigurationArea#initializeFromGroup(org.eclipse.ui.internal.provisional.views.markers.MarkerFieldFilterGroup)
*/
public void initializeFromGroup(MarkerFieldFilterGroup group) {
buttons[scope].setSelection(false);
scope = group.getScope();
buttons[scope].setSelection(true);
workingSetArea.setWorkingSet(group.getWorkingSet());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#apply(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
*/
public void apply(MarkerFieldFilter filter) {
// Do nothing as this is a group level setting
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#initialize(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
*/
public void initialize(MarkerFieldFilter filter) {
// Do nothing as this is a group level setting
}
}