package org.atdl4j.ui.swing.widget;
import java.awt.Component;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JSlider;
import org.atdl4j.fixatdl.core.EnumPairT;
import org.atdl4j.fixatdl.layout.ListItemT;
import org.atdl4j.fixatdl.layout.SliderT;
import org.atdl4j.ui.impl.ControlHelper;
import org.atdl4j.ui.swing.SwingListener;
public class SwingSliderWidget
extends AbstractSwingWidget<String>
{
private JSlider slider;
private JLabel label;
public String getControlValueRaw()
{
return ( (SliderT) control ).getListItem().get( slider.getValue() ).getEnumID();
}
public String getParameterValue()
{
return getParameterValueAsEnumWireValue();
}
public void setValue(String value)
{
this.setValue( value, false );
}
public void setValue(String value, boolean setValueAsControl)
{
for ( int i = 0; i < getListItems().size(); i++ )
{
if ( setValueAsControl || parameter == null )
{
if ( getListItems().get( i ).getEnumID().equals( value ) )
{
slider.setValue( i );
break;
}
}
else
{
if ( parameter.getEnumPair().get( i ).getWireValue().equals( value ) )
{
slider.setValue( i );
break;
}
}
}
}
public List<Component> getComponents() {
List<Component> widgets = new ArrayList<Component>();
widgets.add(label);
widgets.add(slider);
return widgets;
}
public List<Component> getComponentsExcludingLabel()
{
List<Component> widgets = new ArrayList<Component>();
widgets.add(slider);
return widgets;
}
@Override
public void addListener(SwingListener listener) {
slider.addChangeListener(listener);
}
@Override
public void removeListener(SwingListener listener) {
slider.removeChangeListener(listener);
}
/* (non-Javadoc)
* @see org.atdl4j.ui.ControlUI#reinit()
*/
@Override
public void processReinit( Object aControlInitValue )
{
if ( ( slider != null ) )
{
if ( aControlInitValue != null )
{
// -- apply initValue if one has been specified --
setValue( (String) aControlInitValue, true );
}
else
{
// -- set to minimum when no initValue exists --
slider.setValue( slider.getMinimum() );
}
}
}
/*
*
*/
protected void processNullValueIndicatorChange(Boolean aOldNullValueInd, Boolean aNewNullValueInd)
{
// TODO ?? adjust the visual appearance of the control ??
}
@Override
protected List< ? extends Component> createBrickComponents() {
List<Component> components = new ArrayList<Component>();
// label
label = new JLabel();
label.setName(getName()+"/label");
if (control.getLabel() != null) label.setText(control.getLabel());
int numColumns = ((SliderT)control).getListItem().size();
// slider
slider = new JSlider(JSlider.HORIZONTAL, 0, numColumns - 1, 0);
slider.setName(getName()+"/slider");
// add major tick marks
slider.setMajorTickSpacing(1);
slider.setPaintTicks(true);
// labels based on parameter ListItemTs
// if ( ( (SliderT) control ).getListItem() != null )
// {
Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
int i = 0;
for ( ListItemT li : ( (SliderT) control ).getListItem() )
{
JLabel label = new JLabel();
label.setName(getName()+"/slider/"+li.getEnumID()+"/label");
if (li.getUiRep() != null && !li.getUiRep().equals(""))
{
label.setText( li.getUiRep() );
}
for ( EnumPairT ep : parameter.getEnumPair() )
{
if (ep.getEnumID().equals(li.getEnumID()) && ep.getDescription() != null && !ep.getDescription().equals(""))
{
label.setToolTipText(ep.getDescription());
}
}
labelTable.put(new Integer(i), label);
i++;
}
slider.setLabelTable(labelTable);
slider.setPaintLabels(true);
// }
// tooltip
if ( getTooltip() != null )
{
slider.setToolTipText( getTooltip() );
if (label != null) label.setToolTipText( getTooltip() );
}
if ( ControlHelper.getInitValue( control, getAtdl4jOptions() ) != null )
setValue( (String) ControlHelper.getInitValue( control, getAtdl4jOptions() ), true );
//TODO: make this a composite
components.add(label);
components.add(slider);
return components;
}
}