package org.atdl4j.ui.swing.widget; import java.awt.Component; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Vector; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.ListSelectionModel; import org.atdl4j.fixatdl.layout.ListItemT; import org.atdl4j.fixatdl.layout.MultiSelectListT; import org.atdl4j.fixatdl.layout.SingleSelectListT; import org.atdl4j.ui.impl.ControlHelper; import org.atdl4j.ui.swing.SwingListener; public class SwingListBoxWidget extends AbstractSwingWidget<String> { private JList listBox; private JLabel label; private Vector<String> list = new Vector<String>(); public String getControlValueRaw() { String value = ""; List<ListItemT> listItems = control instanceof MultiSelectListT ? ( (MultiSelectListT) control ).getListItem() : ( (SingleSelectListT) control ).getListItem(); int[] selection = listBox.getSelectedIndices(); for ( int i = 0; i < selection.length; i++ ) { value += listItems.get( selection[ i ] ).getEnumID(); if ( i + 1 != selection.length ) value += " "; } return "".equals( value ) ? null : value; } public String getParameterValue() { // Helper method from AbstractControlUI return getParameterValueAsMultipleValueString(); } public void setValue(String value) { this.setValue( value, false ); } public void setValue(String value, boolean setValueAsControl) { // split string by spaces in case of MultiSelectList List<String> values = Arrays.asList( value.split( "\\s" ) ); for ( String singleValue : values ) { for ( int i = 0; i < getListItems().size(); i++ ) { if ( setValueAsControl || parameter == null ) { if ( getListItems().get( i ).getEnumID().equals( singleValue ) ) { listBox.setSelectedIndex( i ); break; } } else { if ( parameter.getEnumPair().get( i ).getWireValue().equals( singleValue ) ) { listBox.setSelectedIndex( i ); break; } } } } } public List<Component> getComponents() { List<Component> widgets = new ArrayList<Component>(); if (label != null) widgets.add(label); widgets.add(listBox); return widgets; } public List<Component> getComponentsExcludingLabel() { List<Component> widgets = new ArrayList<Component>(); widgets.add( listBox ); return widgets; } public void addListener(SwingListener listener) { listBox.addListSelectionListener(listener); } public void removeListener(SwingListener listener) { listBox.removeListSelectionListener(listener); } /* (non-Javadoc) * @see org.atdl4j.ui.ControlUI#reinit() */ @Override public void processReinit( Object aControlInitValue ) { if ( listBox != null ) { if ( aControlInitValue != null ) { // -- apply initValue if one has been specified -- setValue( (String) aControlInitValue, true ); } else { // -- set to first when no initValue exists -- if ( list.size() > 0 ) { listBox.setSelectedIndex( 0 ); } } } } /* (non-Javadoc) * @see org.atdl4j.ui.impl.AbstractAtdl4jWidget#applyConstOrInitValues() */ @Override public void applyConstOrInitValues() { super.applyConstOrInitValues(); listBox.revalidate(); } /* * */ 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>(); String tooltip = getTooltip(); // label if ( control.getLabel() != null ) { label = new JLabel(); label.setName(getName()+"/label"); label.setText( control.getLabel() ); if ( tooltip != null ) label.setToolTipText( tooltip ); components.add(label); } // listbox listBox = new JList(list); if (control instanceof MultiSelectListT) { listBox.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); } else if (control instanceof SingleSelectListT) { listBox.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); } listBox.setName(getName()+"/listbox"); // listBox items java.util.List<ListItemT> listItems = control instanceof MultiSelectListT ? ( (MultiSelectListT) control ).getListItem() : ( (SingleSelectListT) control ).getListItem(); for ( ListItemT listItem : listItems ) { list.add(listItem.getUiRep() != null ? listItem.getUiRep() : ""); } // tooltip if ( tooltip != null ) listBox.setToolTipText( tooltip ); // init value String initValue = (String) ControlHelper.getInitValue( control, getAtdl4jOptions() ); if ( initValue != null ) setValue( initValue, true ); return components; } }