blob: a417657fece012b24258dc47212580deab01350e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 TwelveTone LLC 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: Steven Spungin <steven@spungin.tv> - initial API and implementation, Bug 432555
*******************************************************************************/
package org.eclipse.e4.tools.emf.ui.internal.common.component.tabs.empty;
import org.eclipse.e4.tools.emf.ui.internal.common.component.tabs.Messages;
import org.eclipse.jface.viewers.ILabelProvider;
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.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
/**
* A standard ElementListSelectionDialog with additional options for including,
* excluding, and selecting empty values.
*
* @author Steven Spungin
*
*/
public class TitleAreaFilterDialogWithEmptyOptions extends TitleAreaFilterDialog {
private Button btnExcludeEmptyValues;
private Button btnOnlyEmptyValues;
private Button btnIncludeEmptyValues;
private EmptyFilterOption emptyFilterOption;
private boolean bShowEmptyOptions = true;
private Composite compOptions;
private Composite parent;
public TitleAreaFilterDialogWithEmptyOptions(Shell parent, ILabelProvider renderer) {
super(parent, renderer);
}
@Override
protected org.eclipse.swt.widgets.Control createDialogArea(Composite parent) {
this.parent = parent;
Composite comp = (Composite) super.createDialogArea(parent);
// Label labelEmptyInfo = new Label(comp, SWT.NONE);
// labelEmptyInfo.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER,
// false, false));
// labelEmptyInfo.setText("An empty value is defined as a null object, an empty string, or an empty collection.");
compOptions = new Composite(comp, SWT.NONE);
compOptions.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
compOptions.setLayout(new RowLayout());
// labelEmptyInfo.moveAbove(getText());
compOptions.moveAbove(getText());
btnExcludeEmptyValues = new Button(compOptions, SWT.RADIO);
btnExcludeEmptyValues.setText(Messages.TitleAreaFilterDialogWithEmptyOptions_excludeEmptyValues);
btnExcludeEmptyValues.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setEmptyFilterOption(EmptyFilterOption.EXCLUDE);
}
});
btnIncludeEmptyValues = new Button(compOptions, SWT.RADIO);
btnIncludeEmptyValues.setText(Messages.TitleAreaFilterDialogWithEmptyOptions_includeEmptyValues);
btnIncludeEmptyValues.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setEmptyFilterOption(EmptyFilterOption.INCLUDE);
}
});
btnOnlyEmptyValues = new Button(compOptions, SWT.RADIO);
btnOnlyEmptyValues.setText(Messages.TitleAreaFilterDialogWithEmptyOptions_onlyEmptyValues);
btnOnlyEmptyValues.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setEmptyFilterOption(EmptyFilterOption.ONLY);
}
});
String toolTip = Messages.TitleAreaFilterDialogWithEmptyOptions_emptyValueDescription;
btnExcludeEmptyValues.setToolTipText(toolTip);
btnIncludeEmptyValues.setToolTipText(toolTip);
btnOnlyEmptyValues.setToolTipText(toolTip);
setEmptyFilterOption(EmptyFilterOption.EXCLUDE);
updateEmptyOptionState();
parent.pack();
return comp;
}
@Override
public boolean close() {
return super.close();
}
public EmptyFilterOption getEmptyFilterOption() {
return emptyFilterOption;
}
public void setEmptyFilterOption(EmptyFilterOption emptyFilterOption) {
this.emptyFilterOption = emptyFilterOption;
updateUi();
}
private void updateUi() {
if (btnExcludeEmptyValues == null) {
return;
}
switch (emptyFilterOption) {
case EXCLUDE:
btnExcludeEmptyValues.setSelection(true);
btnIncludeEmptyValues.setSelection(false);
btnOnlyEmptyValues.setSelection(false);
break;
case INCLUDE:
btnExcludeEmptyValues.setSelection(false);
btnIncludeEmptyValues.setSelection(true);
btnOnlyEmptyValues.setSelection(false);
break;
case ONLY:
btnExcludeEmptyValues.setSelection(false);
btnIncludeEmptyValues.setSelection(false);
btnOnlyEmptyValues.setSelection(true);
break;
default:
break;
}
}
public void setShowEmptyOptions(boolean bShow) {
this.bShowEmptyOptions = bShow;
updateEmptyOptionState();
}
private void updateEmptyOptionState() {
if (compOptions == null) {
return;
}
compOptions.setVisible(bShowEmptyOptions);
((GridData) compOptions.getLayoutData()).exclude = bShowEmptyOptions == false;
parent.layout();
}
}