package org.atdl4j.ui.swing.app.impl;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Window;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import org.apache.log4j.Logger;
import org.atdl4j.config.Atdl4jOptions;
import org.atdl4j.fixatdl.core.StrategyT;
import org.atdl4j.ui.Atdl4jWidget;
import org.atdl4j.ui.StrategiesUI;
import org.atdl4j.ui.StrategyUI;
import org.atdl4j.ui.app.StrategySelectionEvent;
import org.atdl4j.ui.app.impl.AbstractAtdl4jCompositePanel;
/**
* Represents the Swing-specific strategy selection and display GUI component.
*
* Creation date: (Feb 28, 2010 6:26:02 PM)
* @author Scott Atwell
* @version 1.0, Feb 28, 2010
*/
public class SwingAtdl4jCompositePanel
extends AbstractAtdl4jCompositePanel
{
public final Logger logger = Logger.getLogger(SwingAtdl4jCompositePanel.class);
private Window parentComposite;
private JPanel strPanel;
private JPanel strategySelectionPanel;
private JPanel panel;
public Object buildAtdl4jCompositePanel(Object aParentOrShell, Atdl4jOptions aAtdl4jOptions)
{
return buildAtdl4jCompositePanel( (Window) aParentOrShell, aAtdl4jOptions );
}
public JPanel buildAtdl4jCompositePanel(Window aParentComposite, Atdl4jOptions aAtdl4jOptions)
{
parentComposite = aParentComposite;
panel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
// -- Delegate back to AbstractAtdl4jCompositePanel --
init( aParentComposite, aAtdl4jOptions );
strategySelectionPanel = new JPanel();
strategySelectionPanel.add((JPanel)getStrategySelectionPanel().buildStrategySelectionPanel( getParentOrShell(), getAtdl4jOptions()));
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.fill = GridBagConstraints.HORIZONTAL;
panel.add(strategySelectionPanel, gbc);
gbc.weightx = 0;
gbc.weighty = 0;
gbc.gridy = 1;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.fill = GridBagConstraints.BOTH;
strPanel = (JPanel)getStrategiesUI().buildStrategiesPanel( getParentOrShell(), getAtdl4jOptions(), getAtdl4jUserMessageHandler() );
panel.add(strPanel, gbc);
JPanel descrPanel = (JPanel)getStrategyDescriptionPanel().buildStrategyDescriptionPanel( getParentOrShell(), getAtdl4jOptions() );
gbc.weightx = 0;
gbc.weighty = 0;
gbc.gridy = 2;
gbc.gridwidth = 1;
descrPanel.setPreferredSize(new Dimension((int) strPanel.getPreferredSize().getWidth(), 120)); // FIXME ugly magic number
panel.add(descrPanel, gbc);
descrPanel.setVisible( false ); // hide until there is data to populate it with
// Empty filling component
gbc.gridy = 3;
gbc.weightx = 1;
gbc.weighty = 1;
panel.add(new JPanel(), gbc);
return panel;
}
public void setVisibleStrategySectionPanel( boolean aVisible )
{
if ( strategySelectionPanel != null )
{
strategySelectionPanel.setVisible( aVisible );
}
}
protected void packLayout()
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (strPanel != null) {
strPanel.revalidate();
strPanel.repaint();
}
if (parentComposite != null) {
// parentComposite.pack();
}
}
});
}
/* (non-Javadoc)
* @see org.atdl4j.ui.app.impl.AbstractAtdl4jCompositePanel#setVisibleOkCancelButtonSection(boolean)
*/
@Override
public void setVisibleOkCancelButtonSection(boolean aVisible) {
}
/* (non-Javadoc)
* @see org.atdl4j.ui.app.StrategySelectionPanelListener#strategySelected(org.atdl4j.fixatdl.core.StrategyT, int)
*/
@Override
public void strategySelected(StrategyT aStrategy)
{
setSelectedStrategy( aStrategy );
setSelectedStrategyValidated( false );
getStrategyDescriptionPanel().loadStrategyDescriptionVisible( aStrategy );
getStrategiesUI().adjustLayoutForSelectedStrategy( aStrategy );
getStrategyDescriptionPanel().loadStrategyDescriptionText( aStrategy );
// -- Notify StrategyEventListener (eg Atdl4jTesterPanel), aSelectedViaLoadFixMsg=false --
fireStrategyEventListenerStrategySelected( aStrategy, false );
packLayout();
}
@Override
public void beforeStrategyIsSelected(StrategySelectionEvent event) {
fireStrategyEventListenerBeforeStrategySelected();
}
@Override
public void setEditable(boolean b) {
setEnabled(b);
}
public void setEnabled(boolean enable) {
setStrategySelectionEnabled(enable);
StrategiesUI strategiesUI = getStrategiesUI();
StrategyT selectedStrategy = getSelectedStrategy();
if (selectedStrategy != null) {
StrategyUI ui = strategiesUI.getStrategyUI(selectedStrategy, false);
if (ui != null) {
for (Atdl4jWidget< ? > widget : ui.getAtdl4jWidgetMap().values()) {
widget.setEnabled(enable);
}
}
}
}
public void setStrategySelectionEnabled(boolean enable)
{
((SwingStrategySelectionPanel) getStrategySelectionPanel()).setEnabled(enable);
}
}