blob: b63459114c692cec9c8f630ce36b8f62258d806e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2018 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Simon Scholz <simon.scholz@vogella.com> - Bug 434283
******************************************************************************/
package org.eclipse.jface.examples.databinding.snippets;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.jface.databinding.swt.DisplayRealm;
import org.eclipse.jface.databinding.swt.ISWTObservableValue;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.jface.internal.databinding.provisional.swt.ControlUpdater;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* @since 3.2
*
*/
public class Snippet023ConditionalVisibility {
public static void main(String[] args) {
Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
Realm.runWithDefault(DisplayRealm.getRealm(display),
() -> new Snippet023ConditionalVisibility().createControls(shell));
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
Text text;
Text toText;
Text fromText;
/**
* @param shell
*/
private void createControls(Shell shell) {
Composite composite = new Composite(shell, SWT.NONE);
Group radioGroup = new Group(composite, SWT.NONE);
radioGroup.setText("Type");
Button textButton = new Button(radioGroup, SWT.RADIO);
textButton.setText("Text");
Button rangeButton = new Button(radioGroup, SWT.RADIO);
rangeButton.setText("Range");
GridLayoutFactory.swtDefaults().generateLayout(radioGroup);
final Composite oneOfTwo = new Composite(composite, SWT.NONE);
final StackLayout stackLayout = new StackLayout();
oneOfTwo.setLayout(stackLayout);
final Group rangeGroup = new Group(oneOfTwo, SWT.NONE);
rangeGroup.setText("Range");
Label fromLabel = new Label(rangeGroup, SWT.NONE);
fromLabel.setText("From:");
fromText = new Text(rangeGroup, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
Label toLabel = new Label(rangeGroup, SWT.NONE);
toLabel.setText("To:");
toText = new Text(rangeGroup, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
GridLayoutFactory.swtDefaults().numColumns(2)
.generateLayout(rangeGroup);
final Group textGroup = new Group(oneOfTwo, SWT.NONE);
textGroup.setText("Text");
Label label = new Label(textGroup, SWT.NONE);
label.setText("Text:");
text = new Text(textGroup, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
GridLayoutFactory.swtDefaults().numColumns(2).generateLayout(textGroup);
GridLayoutFactory.swtDefaults().numColumns(2).generateLayout(composite);
final ISWTObservableValue rangeSelected = WidgetProperties.selection().observe(rangeButton);
final ISWTObservableValue textSelected = WidgetProperties.selection().observe(textButton);
// Note that ControlUpdater is not API.
new ControlUpdater(oneOfTwo) {
@Override
protected void updateControl() {
if (((Boolean) rangeSelected.getValue()).booleanValue()) {
stackLayout.topControl = rangeGroup;
oneOfTwo.layout();
} else if (((Boolean) textSelected.getValue()).booleanValue()) {
stackLayout.topControl = textGroup;
oneOfTwo.layout();
}
}
};
}
}