/**
* Copyright (c) Red Hat, Inc., contributors and others 2013 - 2014. All rights reserved
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.tools.forge.ui.internal.ext.control;
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.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.jboss.forge.addon.convert.Converter;
import org.jboss.forge.addon.convert.ConverterFactory;
import org.jboss.forge.addon.ui.controller.CommandController;
import org.jboss.forge.addon.ui.hints.InputType;
import org.jboss.forge.addon.ui.input.InputComponent;
import org.jboss.forge.addon.ui.input.UIInput;
import org.jboss.forge.addon.ui.util.InputComponents;
import org.jboss.tools.forge.core.furnace.FurnaceService;
import org.jboss.tools.forge.ui.internal.ext.wizards.ForgeWizardPage;
@SuppressWarnings("unchecked")
public class CheckboxControlBuilder extends ControlBuilder<Button> {
@Override
public Button build(final ForgeWizardPage page,
final InputComponent<?, ?> input, final String inputName,
final Composite container) {
// Checkbox should be placed in second column
Label dummy1 = new Label(container, SWT.NONE);
dummy1.setText("");
GridData layoutData = new GridData(GridData.FILL_HORIZONTAL);
layoutData.horizontalSpan = 1;
Button cmb = new Button(container, SWT.CHECK);
cmb.setLayoutData(layoutData);
cmb.setText(getMnemonicLabel(input, false));
cmb.setToolTipText(input.getDescription());
// Set Default Value
final ConverterFactory converterFactory = FurnaceService.INSTANCE
.getConverterFactory();
if (converterFactory != null) {
Converter<Object, Boolean> converter = (Converter<Object, Boolean>) converterFactory
.getConverter(input.getValueType(), Boolean.class);
Boolean value = converter.convert(InputComponents
.getValueFor(input));
cmb.setSelection(value == null ? false : value);
}
cmb.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
boolean selection = ((Button) e.widget).getSelection();
CommandController controller = page.getController();
controller.setValueFor(inputName, selection);
}
});
// skip third column
Label dummy2 = new Label(container, SWT.NONE);
dummy2.setText("");
return cmb;
}
@Override
protected Class<Boolean> getProducedType() {
return Boolean.class;
}
@Override
protected String getSupportedInputType() {
return InputType.CHECKBOX;
}
@Override
protected Class<?>[] getSupportedInputComponentTypes() {
return new Class<?>[] { UIInput.class };
}
}