package edu.ualberta.med.biobank.mvp.view.item; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; public class CheckBox extends AbstractValueField<Boolean> { private final SelectionListener selectionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { boolean value = button.getSelection(); setValueInternal(value); } }; private Button button; public Button create(Composite parent) { Button button = new Button(parent, SWT.CHECK); setButton(button); return button; } public synchronized void setButton(Button button) { unbindOldButton(); this.button = button; updateGui(); forwardEnabled(button); forwardVisible(button); button.addSelectionListener(selectionListener); // TODO: listen for disposal? } @Override protected void updateGui() { if (button != null) { button.removeSelectionListener(selectionListener); // treat null values as false Boolean value = Boolean.TRUE.equals(getValue()); button.setSelection(value); button.addSelectionListener(selectionListener); } } private void unbindOldButton() { if (button != null) { button.removeSelectionListener(selectionListener); unforwardEnabled(button); unforwardVisible(button); } } }