package org.atdl4j.ui.swing.app.impl; import java.awt.BorderLayout; import java.awt.Window; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.List; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import org.apache.log4j.Logger; import org.atdl4j.config.Atdl4jConfig; import org.atdl4j.config.Atdl4jOptions; import org.atdl4j.data.Atdl4jHelper; import org.atdl4j.fixatdl.core.StrategyT; import org.atdl4j.ui.app.impl.AbstractStrategySelectionPanel; /** * Represents the Swing-specific available strategy choices GUI component. * * @author Scott Atwell * @version 1.0, October 5, 2010 */ public class SwingStrategySelectionPanel extends AbstractStrategySelectionPanel { private final Logger logger = Logger.getLogger(SwingStrategySelectionPanel.class); private JComboBox strategiesDropDown; public Object buildStrategySelectionPanel(Object parentOrShell, Atdl4jOptions atdl4jOptions) { return buildStrategySelectionPanel( (Window) parentOrShell, atdl4jOptions ); } public JPanel buildStrategySelectionPanel(Window aParentContainer, Atdl4jOptions atdl4jOptions) { setAtdl4jOptions( atdl4jOptions ); JPanel panel = new JPanel(new BorderLayout()); // label JLabel strategiesDropDownLabel = new JLabel("Strategy"); panel.add( strategiesDropDownLabel, BorderLayout.WEST ); // dropDownList strategiesDropDown = new JComboBox(); strategiesDropDown.setEditable( false ); panel.add(strategiesDropDown, BorderLayout.CENTER); if ( Atdl4jConfig.getConfig().getStrategyDropDownItemDepth() != null ) { strategiesDropDown.setMaximumRowCount( Atdl4jConfig.getConfig().getStrategyDropDownItemDepth().intValue() ); } // tooltip strategiesDropDown.setToolTipText("Select a Strategy"); // action listener strategiesDropDown.addItemListener( new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { firePreStrategySelectedEvent(); int index = strategiesDropDown.getSelectedIndex(); selectDropDownStrategy( index ); } } } ); return panel; } public void loadStrategyList( List<StrategyT> aStrategyList ) { strategiesDropDown.removeAllItems(); setStrategiesList( aStrategyList ); if ( getStrategiesList() == null ) { return; } for (StrategyT tempStrategy : getStrategiesList()) { logger.debug( "loadStrategyList() [" + strategiesDropDown.getItemCount() + "] strategiesDropDown.add: " + Atdl4jHelper.getStrategyUiRepOrName( tempStrategy ) ); strategiesDropDown.addItem( Atdl4jHelper.getStrategyUiRepOrName( tempStrategy ) ); } } public void selectDropDownStrategy(int index) { logger.debug( "selectDropDownStrategy() index: " + index ); if ( getStrategiesList().size() != strategiesDropDown.getItemCount() ) { return; } strategiesDropDown.setSelectedIndex( index ); StrategyT tempStrategy = getStrategiesList().get( index ); if ( ! strategiesDropDown.getItemAt( index ).equals( Atdl4jHelper.getStrategyUiRepOrName( tempStrategy ) ) ) { throw new IllegalStateException( "UNEXPECTED ERROR: strategiesDropDown.getItem(" + index + "): " + strategiesDropDown.getItemAt( index ) + " DID NOT MATCH tempStrategy: " + Atdl4jHelper.getStrategyUiRepOrName( tempStrategy ) ); } fireStrategySelectedEvent( tempStrategy ); } // 4/16/2010 Scott Atwell public void selectDropDownStrategy(String strategyName) public void selectDropDownStrategyByStrategyName(String aStrategyName) { logger.debug( "selectDropDownStrategyByStrategyName() aStrategyName: " + aStrategyName ); if ( getStrategiesList().size() != strategiesDropDown.getItemCount() ) { throw new IllegalStateException( "UNEXPECTED ERROR: getStrategiesList().size(): " + getStrategiesList().size() + " does NOT MATCH strategiesDropDown.getItemCount(): " + strategiesDropDown.getItemCount() ); } for (int i = 0; i < getStrategiesList().size(); i++) { StrategyT tempStrategy = getStrategiesList().get( i ); if ( aStrategyName.equals( tempStrategy.getName() ) ) { logger.debug( "selectDropDownStrategyByStrategyName() invoking selectDropDownStrategy( " + i + " )" ); selectDropDownStrategy( i ); } } } // 4/16/2010 Scott Atwell added public void selectDropDownStrategyByStrategyWireValue( String aStrategyWireValue ) { logger.debug( "selectDropDownStrategyByStrategyWireValue() aStrategyWireValue: " + aStrategyWireValue ); if ( getStrategiesList().size() != strategiesDropDown.getItemCount() ) { throw new IllegalStateException( "UNEXPECTED ERROR: getStrategiesList().size(): " + getStrategiesList().size() + " does NOT MATCH strategiesDropDown.getItemCount(): " + strategiesDropDown.getItemCount() ); } for (int i = 0; i < getStrategiesList().size(); i++) { StrategyT tempStrategy = getStrategiesList().get( i ); if ( aStrategyWireValue.equals( tempStrategy.getWireValue() ) ) { logger.debug( "selectDropDownStrategyByStrategyWireValue() invoking selectDropDownStrategy( " + i + " )" ); selectDropDownStrategy( i ); } } } public void selectFirstDropDownStrategy() { if ( ( strategiesDropDown != null ) && ( strategiesDropDown.getItemCount() > 0 ) ) { strategiesDropDown.setSelectedItem( null ); logger.debug( "selectFirstDropDownStrategy() invoking selectDropDownStrategy( 0 )" ); selectDropDownStrategy( 0 ); } } public void setEnabled(boolean enable) { strategiesDropDown.setEnabled(enable); } }