package org.atdl4j.ui.swing.widget;
import java.awt.Component;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.JCheckBox;
import javax.swing.JRadioButton;
import javax.swing.JToggleButton;
import org.atdl4j.data.Atdl4jConstants;
import org.atdl4j.fixatdl.core.BooleanT;
import org.atdl4j.fixatdl.layout.CheckBoxT;
import org.atdl4j.fixatdl.layout.RadioButtonT;
import org.atdl4j.ui.impl.ControlHelper;
import org.atdl4j.ui.swing.SwingListener;
/*
* Implements either a CheckBox or a RadioButton
*/
public class SwingButtonWidget
extends AbstractSwingWidget<Boolean>
{
private JToggleButton button;
//private SwingRadioButtonListener radioButtonListener;
public void setValue(Boolean value)
{
if (control instanceof CheckBoxT)
{
if (button.isSelected() != value.booleanValue())
{
button.setSelected(value.booleanValue());
}
}
else if (control instanceof RadioButtonT)
{
if (button.isSelected() != value.booleanValue())
{
button.setSelected(value.booleanValue());
}
}
else
{
button.setEnabled(value.booleanValue());
}
}
public List<Component> getComponents()
{
List<Component> widgets = new ArrayList<Component>();
widgets.add(button);
return widgets;
}
public List<Component> getComponentsExcludingLabel() {
// Label is part of the button control
return getComponents();
}
public JToggleButton getButton()
{
return button;
}
public void addListener(SwingListener listener) {
button.addActionListener(listener);
}
public void removeListener(SwingListener listener) {
button.removeActionListener(listener);
}
public Boolean getControlValueRaw()
{
return button.isSelected() ? Boolean.TRUE : Boolean.FALSE;
}
// Parameter value looks up checkedEnumRef and uncheckedEnumRef
public Object getParameterValue()
{
if ( getControlValue() == null )
{
return null;
}
else if ( parameter instanceof BooleanT )
{
return getControlValue(); // Short-circuit for Boolean parameters
}
else if ( getControlValue().equals( Boolean.TRUE ) )
{
String checkedEnumRef = control instanceof RadioButtonT ? ((RadioButtonT) control).getCheckedEnumRef() : ( (CheckBoxT) control ).getCheckedEnumRef();
if ( checkedEnumRef != null && !checkedEnumRef.equals( "" ) )
{
if ( checkedEnumRef.equals( Atdl4jConstants.VALUE_NULL_INDICATOR ) )
return null;
else
return getEnumWireValue( checkedEnumRef );
}
else
return Boolean.TRUE;
}
else if ( getControlValue().equals( Boolean.FALSE ) )
{
String uncheckedEnumRef = control instanceof RadioButtonT ? ( (RadioButtonT) control ).getUncheckedEnumRef() : ( (CheckBoxT) control )
.getUncheckedEnumRef();
if ( uncheckedEnumRef != null && !uncheckedEnumRef.equals( "" ) )
{
if ( uncheckedEnumRef.equals( Atdl4jConstants.VALUE_NULL_INDICATOR ) )
return null;
else
return getEnumWireValue( uncheckedEnumRef );
}
else
return Boolean.FALSE;
}
return null;
}
/*
*
*/
protected void processNullValueIndicatorChange(Boolean aOldNullValueInd, Boolean aNewNullValueInd)
{
// TODO ?? adjust the visual appearance of the control ??
}
/* (non-Javadoc)
* @see org.atdl4j.ui.ControlUI#reinit()
*/
@Override
public void processReinit( Object aControlInitValue )
{
if ( ( button != null ) )
{
button.setSelected( (aControlInitValue != null ) ? ((Boolean) aControlInitValue).booleanValue() : false );
}
}
@Override
public List<? extends Component> createBrickComponents() {
// button
if (control instanceof RadioButtonT) {
button = new JRadioButton();
} else {
button = new JCheckBox();
}
button.setName(getName()+"/button");
// set label and tooltips
if ( control.getLabel() != null ) button.setText( control.getLabel() );
if ( getTooltip() != null ) button.setToolTipText( getTooltip() );
// if (control.getTooltip() != null) button.setToolTipText(control.getTooltip());
Boolean tempInitValue = (Boolean) ControlHelper.getInitValue( control, getAtdl4jOptions() );
if ( tempInitValue != null )
{
setValue( tempInitValue );
}
return Collections.singletonList(button);
}
}