blob: ab8527f476a1b02ae2aee621f6bd96afa49196b1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2011 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
* Remy Chi Jian Suen <remy.suen@gmail.com>
* - Fix for Bug 214443 Problem view filter created even if I hit Cancel
******************************************************************************/
package org.eclipse.ui.internal.views.markers;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.Util;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
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.layout.FillLayout;
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.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.internal.ide.IDEInternalPreferences;
import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
import org.eclipse.ui.preferences.ViewSettingsDialog;
import org.eclipse.ui.views.markers.FilterConfigurationArea;
import org.eclipse.ui.views.markers.internal.MarkerMessages;
/**
* FiltersConfigurationDialog is the dialog for configuring the filters for the
*
* @since 3.3
*
*/
public class FiltersConfigurationDialog extends ViewSettingsDialog {
private static final String SELECTED_FILTER_GROUP = "SELECTED_FILTER_GROUP"; //$NON-NLS-1$
private static final String PREV_SELECTED_ELEMENTS = "PREV_SELECTED_ELEMENTS"; //$NON-NLS-1$
private Collection filterGroups;
private CheckboxTableViewer configsTable;
private MarkerFieldFilterGroup selectedFilterGroup;
private MarkerContentGenerator generator;
private boolean andFilters = false;
private Button removeButton;
private Button renameButton;
private Button allButton;
private Button andButton;
private Button orButton;
private Button limitButton;
private Text limitText;
private GroupFilterConfigurationArea scopeArea = new ScopeArea();
private ScrolledForm form;
private Collection configAreas;
private Label limitsLabel;
private Object[] previouslyChecked = new Object[0];
/**
* Create a new instance of the receiver on builder.
*
* @param parentShell
* @param generator
*/
public FiltersConfigurationDialog(Shell parentShell,
MarkerContentGenerator generator) {
super(parentShell);
filterGroups = makeWorkingCopy(generator.getAllFilters());
this.generator = generator;
andFilters = generator.andFilters();
}
/**
* Return whether or not to AND the filters
*
* @return boolean
*/
boolean andFilters() {
return andFilters;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.views.markers.ViewerSettingsAndStatusDialog#
* configureShell(org.eclipse.swt.widgets.Shell)
*/
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(MarkerMessages.configureFiltersDialog_title);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.Dialog#isResizable()
*/
@Override
protected boolean isResizable() {
return true;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.views.markers.ViewerSettingsAndStatusDialog#
* createDialogContentArea(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new GridLayout());
container.setLayoutData(new GridData(GridData.FILL_BOTH));
container.setFont(parent.getFont());
Composite composite = new Composite(container, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
composite.setLayout(layout);
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
composite.setBackground(container.getBackground());
createAndOrButtons(composite);
Group configComposite = new Group(composite, SWT.NONE);
configComposite.setText(MarkerMessages.MarkerConfigurationsLabel);
configComposite.setLayout(new GridLayout(3, false));
GridData configData = new GridData(GridData.FILL_BOTH);
configData.horizontalIndent = 20;
configComposite.setLayoutData(configData);
configComposite.setBackground(composite.getBackground());
createConfigs(configComposite);
createConfigDesc(configComposite);
createMarkerLimits(composite);
Label separator = new Label(parent, SWT.HORIZONTAL | SWT.SEPARATOR);
separator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
applyDialogFont(container);
initUI();
return container;
}
private void initUI() {
configsTable.setInput(filterGroups);
IStructuredSelection selection = getInitialSelection();
configsTable.setSelection(selection);
if (selection.isEmpty()) {
setFieldsEnabled(false);
}
Iterator iterator = filterGroups.iterator();
while (iterator.hasNext()) {
MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) iterator
.next();
boolean enabled = group.isEnabled();
configsTable.setChecked(group, enabled);
}
andButton.setSelection(andFilters);
orButton.setSelection(!andFilters);
updateRadioButtonsFromTable();
int limits = generator.getMarkerLimits();
boolean limitsEnabled = generator.isMarkerLimitsEnabled();
limitButton.setSelection(limitsEnabled);
limitsLabel.setEnabled(limitsEnabled);
limitText.setEnabled(limitsEnabled);
limitText.setText(Integer.toString(limits));
configsTable.getTable().setFocus();
}
private void updateRadioButtonsFromTable() {
boolean showAll = isShowAll();
allButton.setSelection(showAll);
andButton.setEnabled(!showAll);
orButton.setEnabled(!showAll);
}
private void updateShowAll(boolean showAll) {
allButton.setSelection(showAll);
andButton.setEnabled(!showAll);
orButton.setEnabled(!showAll);
if (showAll) {
previouslyChecked = configsTable.getCheckedElements();
configsTable.setAllChecked(false);
} else {
if (previouslyChecked != null && previouslyChecked.length > 0) {
configsTable.setCheckedElements(previouslyChecked);
} else {
// make the first entry checked
if (filterGroups.size() > 0) {
Object group = filterGroups.iterator().next();
configsTable.setChecked(group, true);
}
}
}
}
private boolean isShowAll() {
return configsTable.getCheckedElements().length == 0;
}
/**
* @param parent
*/
private void createMarkerLimits(Composite parent) {
limitButton = new Button(parent, SWT.CHECK);
limitButton.setText(MarkerMessages.MarkerPreferences_MarkerLimits);
limitButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
limitsLabel.setEnabled(limitButton.getSelection());
limitText.setEnabled(limitButton.getSelection());
}
});
GridData limitData = new GridData();
limitData.verticalIndent = 5;
limitButton.setLayoutData(limitData);
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
layout.marginWidth = 0;
layout.marginHeight = 0;
composite.setLayout(layout);
GridData compositeData = new GridData(GridData.FILL_HORIZONTAL);
compositeData.horizontalIndent = 20;
composite.setLayoutData(compositeData);
limitsLabel = new Label(composite, SWT.NONE);
limitsLabel.setText(MarkerMessages.MarkerPreferences_VisibleItems);
limitText = new Text(composite, SWT.BORDER);
GridData textData = new GridData();
textData.widthHint = convertWidthInCharsToPixels(10);
limitText.setLayoutData(textData);
limitText.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
if (e.character != 0 && e.keyCode != SWT.BS
&& e.keyCode != SWT.DEL
&& !Character.isDigit(e.character)) {
e.doit = false;
}
}
});
limitText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
try {
Integer.parseInt(limitText.getText());
} catch (NumberFormatException ex) {
limitText.setText(Integer.toString(generator.getMarkerLimits()));
}
}
});
}
/**
* @param parent
*/
private void createConfigs(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(2, false));
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
composite.setBackground(parent.getBackground());
configsTable = CheckboxTableViewer.newCheckList(composite, SWT.BORDER);
GridData tableData = new GridData(SWT.FILL, SWT.FILL, true, true);
tableData.widthHint = convertHorizontalDLUsToPixels(120);
configsTable.getControl().setLayoutData(tableData);
configsTable.setContentProvider(ArrayContentProvider.getInstance());
configsTable.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
return ((MarkerFieldFilterGroup) element).getName();
}
});
configsTable.addCheckStateListener(new ICheckStateListener() {
@Override
public void checkStateChanged(CheckStateChangedEvent event) {
configsTable.setSelection(new StructuredSelection(event
.getElement()));
updateRadioButtonsFromTable();
}
});
configsTable
.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
storeConfiguration();
MarkerFieldFilterGroup group = getSelectionFromTable();
if (group == null) {
setFieldsEnabled(false);
} else
setFieldsEnabled(true);
updateButtonEnablement(group);
updateConfigDesc(group);
selectedFilterGroup = group;
}
});
createButtons(composite);
}
private void storeConfiguration() {
if (selectedFilterGroup == null)
return;
scopeArea.applyToGroup(selectedFilterGroup);
Iterator areas = configAreas.iterator();
while (areas.hasNext()) {
FilterConfigurationArea area = (FilterConfigurationArea) areas
.next();
// Handle the internal special cases
if (area instanceof GroupFilterConfigurationArea)
((GroupFilterConfigurationArea) area)
.applyToGroup(selectedFilterGroup);
area.apply(selectedFilterGroup.getFilter(area.getField()));
}
configsTable.refresh(selectedFilterGroup);
}
private void updateConfigDesc(MarkerFieldFilterGroup configuration) {
if (configuration == null) {
return;
}
scopeArea.initializeFromGroup(configuration);
Iterator areas = configAreas.iterator();
while (areas.hasNext()) {
FilterConfigurationArea area = (FilterConfigurationArea) areas
.next();
if (area instanceof GroupFilterConfigurationArea)
((GroupFilterConfigurationArea) area)
.initializeFromGroup(configuration);
area.initialize(configuration.getFilter(area.getField()));
}
}
private void createConfigDesc(Composite parent) {
Label separator = new Label(parent, SWT.SEPARATOR | SWT.VERTICAL);
separator.setLayoutData(new GridData(GridData.FILL_VERTICAL));
Composite descComposite = new Composite(parent, SWT.NONE);
descComposite.setLayout(new FillLayout());
descComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
descComposite.setBackground(parent.getBackground());
final FormToolkit toolkit = new FormToolkit(parent.getDisplay());
parent.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
toolkit.dispose();
}
});
form = toolkit.createScrolledForm(descComposite);
form.setBackground(parent.getBackground());
form.getBody().setLayout(new GridLayout());
configAreas = generator.createFilterConfigurationFields();
createFieldArea(toolkit, form, scopeArea, true);
Iterator areas = configAreas.iterator();
while (areas.hasNext()) {
createFieldArea(toolkit, form,
(FilterConfigurationArea) areas.next(), true);
}
}
/**
* Create a field area in the form for the FilterConfigurationArea
*
* @param toolkit
* @param form
* @param area
* @param expand
* <code>true</code> if the area should be expanded by default
*/
private void createFieldArea(final FormToolkit toolkit,
final ScrolledForm form, final FilterConfigurationArea area,
boolean expand) {
final ExpandableComposite expandable = toolkit
.createExpandableComposite(form.getBody(),
ExpandableComposite.TWISTIE);
expandable.setText(area.getTitle());
expandable.setBackground(form.getBackground());
expandable.setLayout(new GridLayout());
expandable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, area
.grabExcessVerticalSpace()));
expandable.addExpansionListener(new ExpansionAdapter() {
@Override
public void expansionStateChanged(ExpansionEvent e) {
form.reflow(true);
}
});
Composite sectionClient = toolkit.createComposite(expandable);
GridLayout gridLayout = new GridLayout();
gridLayout.verticalSpacing = 3;
sectionClient.setLayout(gridLayout);
sectionClient.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true,
false));
sectionClient.setBackground(form.getBackground());
area.createContents(sectionClient);
expandable.setClient(sectionClient);
expandable.setExpanded(expand);
}
/**
* @param composite
*/
private void createButtons(Composite composite) {
Composite buttons = new Composite(composite, SWT.NONE);
GridLayout buttonLayout = new GridLayout();
buttonLayout.marginWidth = 0;
buttons.setLayout(buttonLayout);
GridData buttonsData = new GridData();
buttonsData.verticalAlignment = GridData.BEGINNING;
buttons.setLayoutData(buttonsData);
Button addNew = new Button(buttons, SWT.PUSH);
addNew.setText(MarkerMessages.MarkerFilter_addFilterName);
addNew.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
addConfiguration();
}
});
setButtonLayoutData(addNew);
removeButton = new Button(buttons, SWT.PUSH);
removeButton.setText(MarkerMessages.MarkerFilter_deleteSelectedName);
removeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
removeFilters(configsTable.getSelection());
}
});
removeButton.setEnabled(false);
setButtonLayoutData(removeButton);
renameButton = new Button(buttons, SWT.PUSH);
renameButton.setText(MarkerMessages.MarkerFilter_renameName);
renameButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
renameFilter();
}
});
renameButton.setEnabled(false);
setButtonLayoutData(renameButton);
}
private void renameFilter() {
MarkerFieldFilterGroup filterGroup = getSelectionFromTable();
IInputValidator nameValidator = getNameValidator(filterGroup.getName(), getCurrentConfigurationNames());
InputDialog inputDialog = new InputDialog(getShell(),
MarkerMessages.MarkerFilterDialog_title,
MarkerMessages.MarkerFilterDialog_message,
filterGroup.getName(), nameValidator);
if(inputDialog.open() == Window.OK) {
filterGroup.setName(inputDialog.getValue());
configsTable.refresh(filterGroup);
}
}
private IInputValidator getNameValidator(final String currentName, final Collection existingNames) {
return new IInputValidator() {
@Override
public String isValid(String newText) {
newText = newText.trim();
if (newText.length() == 0)
return MarkerMessages.MarkerFilterDialog_emptyMessage;
if(existingNames.contains(newText) && !currentName.equals(newText)) {
return NLS.bind(MarkerMessages.filtersDialog_conflictingName, newText);
}
return null;
}
};
}
private void createAndOrButtons(Composite parent) {
allButton = new Button(parent, SWT.CHECK);
allButton.setText(MarkerMessages.ALL_Title);
allButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateShowAll(allButton.getSelection());
}
});
andButton = new Button(parent, SWT.RADIO);
andButton.setText(MarkerMessages.AND_Title);
andButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
andFilters = true;
}
});
GridData andData = new GridData();
andData.horizontalIndent = 20;
andButton.setLayoutData(andData);
orButton = new Button(parent, SWT.RADIO);
orButton.setText(MarkerMessages.OR_Title);
orButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
andFilters = false;
}
});
GridData orData = new GridData();
orData.horizontalIndent = 20;
orButton.setLayoutData(orData);
}
/**
* Get a collection of names of the filters currently in the list
*
* @return Collection
*/
private Collection getCurrentConfigurationNames() {
Collection names = new ArrayList();
Iterator filterIterator = filterGroups.iterator();
while (filterIterator.hasNext()) {
names.add(((MarkerFieldFilterGroup) filterIterator.next())
.getName());
}
return names;
}
private void addConfiguration() {
String newName = getNewConfigurationName(
getCurrentConfigurationNames(),
MarkerMessages.MarkerFilter_newFilterName);
MarkerFieldFilterGroup configuration = createConfiguration(newName);
filterGroups.add(configuration);
configsTable.refresh();
configsTable.setSelection(new StructuredSelection(configuration));
configsTable.setChecked(configuration, true);
updateRadioButtonsFromTable();
}
private String getNewConfigurationName(final Collection avoidNames,
String initialName) {
String configName = initialName;
for (int i = 1; avoidNames.contains(configName); i++) {
configName = initialName + ' ' + i;
}
return configName;
}
private MarkerFieldFilterGroup createConfiguration(String newName) {
MarkerFieldFilterGroup config = new MarkerFieldFilterGroup(null,
generator);
config.setName(newName);
return config;
}
/**
* Return the dialog settings for the receiver.
*
* @return IDialogSettings
*/
private IDialogSettings getDialogSettings() {
IDialogSettings settings = IDEWorkbenchPlugin.getDefault()
.getDialogSettings().getSection(this.getClass().getName());
if (settings == null) {
settings = IDEWorkbenchPlugin.getDefault().getDialogSettings()
.addNewSection(this.getClass().getName());
}
return settings;
}
/**
* Return the filter groups modified by the receiver.
*
* @return Collection of {@link MarkerFieldFilterGroup}
*/
Collection getFilters() {
return filterGroups;
}
private IStructuredSelection getInitialSelection() {
IDialogSettings settings = getDialogSettings();
String selectedGroupName = settings.get(SELECTED_FILTER_GROUP);
MarkerFieldFilterGroup selectedGroup = null;
if (selectedGroupName == null && filterGroups.size() > 0) {
selectedGroup = (MarkerFieldFilterGroup) filterGroups.iterator()
.next();
} else {
Iterator groups = filterGroups.iterator();
while (groups.hasNext()) {
MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) groups
.next();
if (group.getName().equals(selectedGroupName)) {
selectedGroup = group;
break;
}
}
}
String[] selectedElementNames = settings
.getArray(PREV_SELECTED_ELEMENTS);
List selectedElements = new ArrayList();
if (selectedElementNames != null) {
for (int i = 0; i < selectedElementNames.length; i++) {
Iterator filterGroupIterator = filterGroups.iterator();
while (filterGroupIterator.hasNext()) {
MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) filterGroupIterator
.next();
if (Util.equals(group.getName(), selectedElementNames[i])) {
selectedElements.add(group);
break;
}
}
}
previouslyChecked = selectedElements.toArray();
}
if (selectedGroup != null) {
return new StructuredSelection(selectedGroup);
}
return StructuredSelection.EMPTY;
}
/**
* Make a working copy of the groups.
*
* @param groups
* @return Collection of MarkerFieldFilterGroup
*/
private Collection makeWorkingCopy(Collection groups) {
Iterator initialFiltersIterator = groups.iterator();
Collection returnFilters = new ArrayList(groups.size());
while (initialFiltersIterator.hasNext()) {
MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) initialFiltersIterator
.next();
MarkerFieldFilterGroup copy = group.makeWorkingCopy();
if (copy != null)
returnFilters.add(copy);
}
return returnFilters;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
*/
@Override
protected void okPressed() {
generator.setMarkerLimitsEnabled(limitButton.getSelection());
generator.setMarkerLimits(Integer.parseInt(limitText.getText().trim()));
Iterator filterGroupIterator = filterGroups.iterator();
while (filterGroupIterator.hasNext()) {
MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) filterGroupIterator
.next();
group.setEnabled(configsTable.getChecked(group));
}
storeConfiguration();
saveDialogSettings();
super.okPressed();
}
@Override
protected void performDefaults() {
andFilters = false;
andButton.setSelection(andFilters);
orButton.setSelection(!andFilters);
filterGroups.clear();
filterGroups.addAll(generator.getDeclaredFilters());
configsTable.refresh();
configsTable.setSelection(new StructuredSelection(
filterGroups.size() > 1 ? filterGroups.iterator().next()
: new Object[0]));
IPreferenceStore preferenceStore = IDEWorkbenchPlugin.getDefault()
.getPreferenceStore();
boolean useMarkerLimits = preferenceStore
.getBoolean(IDEInternalPreferences.USE_MARKER_LIMITS);
int markerLimits = useMarkerLimits ? preferenceStore
.getInt(IDEInternalPreferences.MARKER_LIMITS_VALUE) : 100;
limitButton.setSelection(useMarkerLimits);
limitsLabel.setEnabled(useMarkerLimits);
limitText.setEnabled(useMarkerLimits);
limitText.setText(Integer.toString(markerLimits));
updateRadioButtonsFromTable();
}
/**
* Remove the filters in selection.
*
* @param selection
*/
private void removeFilters(ISelection selection) {
filterGroups.remove(((IStructuredSelection) selection)
.getFirstElement());
configsTable.refresh();
updateRadioButtonsFromTable();
}
/**
* Save the dialog settings for the receiver.
*/
private void saveDialogSettings() {
IDialogSettings settings = getDialogSettings();
if (selectedFilterGroup != null)
settings.put(SELECTED_FILTER_GROUP, selectedFilterGroup.getName());
String[] selectedNames = new String[previouslyChecked.length];
for (int i = 0; i < selectedNames.length; i++) {
selectedNames[i] = ((MarkerFieldFilterGroup)previouslyChecked[i]).getName();
}
settings.put(PREV_SELECTED_ELEMENTS, selectedNames);
}
private void updateButtonEnablement(MarkerFieldFilterGroup group) {
boolean enabled = group != null && !group.isSystem();
removeButton.setEnabled(enabled);
renameButton.setEnabled(enabled);
}
private MarkerFieldFilterGroup getSelectionFromTable() {
IStructuredSelection selection = (IStructuredSelection) configsTable
.getSelection();
return (MarkerFieldFilterGroup) selection.getFirstElement();
}
/**
* Set the control and all of it's visibility state to visible.
*
* @param enabled
* @param control
*/
private void setEnabled(boolean enabled, Control control) {
control.setEnabled(enabled);
if (control instanceof Composite) {
Control[] children = ((Composite) control).getChildren();
for (int i = 0; i < children.length; i++) {
setEnabled(enabled, children[i]);
}
}
}
/**
* Set the enablement state of the fields to enabled.
*/
private void setFieldsEnabled(boolean enabled) {
setEnabled(enabled, form);
}
}