/*
* Created on Feb 28, 2010
*
*/
package org.atdl4j.ui.swt.app.impl;
import org.apache.log4j.Logger;
import org.atdl4j.config.Atdl4jConfig;
import org.atdl4j.config.Atdl4jOptions;
import org.atdl4j.data.exception.ValidationException;
import org.atdl4j.ui.app.StrategySelectionEvent;
import org.atdl4j.ui.app.impl.AbstractAtdl4jTesterPanel;
import org.atdl4j.ui.swt.util.SWTMenuHelper;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* Represents the SWT-specific "TesterApp" core GUI component (without a main() line).
* Contains a Atdl4jCompositePanel.
*
* @see org.atdl4j.ui.app.Atdl4jCompositePanel for AbstractAtdl4jTesterApp->AbstractAtdl4jTesterPanel->AbstractAtdl4jCompositePanel layering structure. *
*
* Creation date: (Feb 28, 2010 6:26:02 PM)
* @author Scott Atwell
* @version 1.0, Feb 28, 2010
*/
public class SWTAtdl4jTesterPanel
extends AbstractAtdl4jTesterPanel
{
public final Logger logger = Logger.getLogger(SWTAtdl4jTesterPanel.class);
private Composite parentComposite;
private Composite inputAndFilterDataAndLoadMessageComposite;
private Composite validateOutputSection;
private MenuItem showFileSelectionMenuItem;
private MenuItem showValidateOutputMenuItem;
private Composite okCancelButtonSection;
private Text outputFixMessageText;
public Object buildAtdl4jTesterPanel(Object aParentOrShell, Atdl4jOptions aAtdl4jOptions)
{
return buildAtdl4jTesterPanel( (Composite) aParentOrShell, aAtdl4jOptions );
}
public Composite buildAtdl4jTesterPanel(Composite aParentOrShell, Atdl4jOptions aAtdl4jOptions)
{
parentComposite = (Composite) aParentOrShell;
// -- Delegate back to AbstractAtdl4jTesterPanel --
init( aParentOrShell, aAtdl4jOptions );
//TODO any "tester-specific stuff" to add???
//TODO
// if (getAtdl4jOptions().isShowTimezoneSelector())
// {
//
// Label tzLabel = new Label(headerComposite, SWT.NONE);
// tzLabel.setText("Timezone:");
// // dropDownList
// Combo tzDropDown = new Combo(headerComposite, SWT.READ_ONLY | SWT.BORDER);
// GridData tzData = new GridData(SWT.FILL, SWT.CENTER, true, true);
// tzData.horizontalSpan = 2;
// tzDropDown.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
// false));
// }
inputAndFilterDataAndLoadMessageComposite = new Group( aParentOrShell, SWT.NONE );
((Group) inputAndFilterDataAndLoadMessageComposite).setText( "Testing Input" );
inputAndFilterDataAndLoadMessageComposite.setLayout( new org.eclipse.swt.layout.GridLayout(2, false) );
inputAndFilterDataAndLoadMessageComposite.setLayoutData( new GridData(SWT.FILL, SWT.FILL, true, false ) );
// -- Build the SWT.Composite from Atdl4jInputAndFilterDataSelectionPanel ("Input Data/Filter Criteria" button) --
getAtdl4jInputAndFilterDataSelectionPanel().buildAtdl4jInputAndFilterDataSelectionPanel( inputAndFilterDataAndLoadMessageComposite, getAtdl4jOptions(), getAtdl4jCompositePanel().getAtdl4jUserMessageHandler() );
// -- Build the SWT.Composite from FixMsgLoadPanel ("Load FIX Message" button) --
getFixMsgLoadPanel().buildFixMsgLoadPanel( inputAndFilterDataAndLoadMessageComposite, getAtdl4jOptions() );
// -- Build the SWT.Composite from FixatdlFileSelectionPanel (filename / file dialog) --
getFixatdlFileSelectionPanel().buildFixatdlFileSelectionPanel( getParentOrShell(), getAtdl4jOptions() );
// -- Build the SWT.Composite from Atdl4jCompositePanel --
getAtdl4jCompositePanel().buildAtdl4jCompositePanel( aParentOrShell, aAtdl4jOptions );
// -- Build the SWT.Composite containing "Validate Output" button and outputFixMessageText --
createValidateOutputSection();
// -- Build the SWT.Composite containing "OK" and "Cancel" buttons --
createOkCancelButtonSection();
// -- Build the SWT MenuItems --
createMenuItems();
// -- Implied --
/**
setVisibleTestingInputSection( true );
setVisibleFileSelectionSection( true );
setVisibleValidateOutputSection( true );
setVisibleOkCancelButtonSection( true );
**/
return parentComposite;
}
public void closePanel()
{
if ( ( parentComposite != null ) && ( ! parentComposite.getShell().isDisposed() ) )
{
parentComposite.getShell().dispose();
}
}
public void setVisibleFileSelectionSection( boolean aVisible )
{
if ( getFixatdlFileSelectionPanel() != null )
{
getFixatdlFileSelectionPanel().setVisible( aVisible );
if ( showFileSelectionMenuItem != null )
{
showFileSelectionMenuItem.setSelection( aVisible );
}
packLayout();
}
}
protected void createMenuItems()
{
// -- "Show File Selection" --
setVisibleFileSelectionSection( Atdl4jConfig.getConfig().isShowFileSelectionSection() );
showFileSelectionMenuItem = SWTMenuHelper.addShellPopupCheckMenuItem( getShell(), "Show File Selection" );
showFileSelectionMenuItem.setSelection( Atdl4jConfig.getConfig().isShowFileSelectionSection() );
showFileSelectionMenuItem.addListener( SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event aEvent)
{
setVisibleFileSelectionSection( showFileSelectionMenuItem.getSelection() );
}
});
// -- "Show Validate Output" --
setVisibleValidateOutputSection( Atdl4jConfig.getConfig().isShowValidateOutputSection() );
showValidateOutputMenuItem = SWTMenuHelper.addShellPopupCheckMenuItem( getShell(), "Show Validate Output" );
showValidateOutputMenuItem.setSelection( Atdl4jConfig.getConfig().isShowValidateOutputSection() );
showValidateOutputMenuItem.addListener( SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event aEvent)
{
setVisibleValidateOutputSection( showValidateOutputMenuItem.getSelection() );
}
});
}
protected Composite createValidateOutputSection()
{
// -- SWTVisibleGroup avoids consuming vertical space when hidden via setVisible(false) --
validateOutputSection = new SWTVisibleGroup(getShell(), SWT.NONE);
((Group) validateOutputSection).setText("Validation");
validateOutputSection.setLayout(new GridLayout(2, false));
validateOutputSection.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
// validate button
Button validateButton = new Button(validateOutputSection, SWT.NONE);
validateButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
validateButton.setText("Validate Output");
validateButton.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e)
{
try {
validateButtonSelected();
} catch (ValidationException ex) {
logger.info("Validation Exception:", ex);
getAtdl4jUserMessageHandler().displayException("Validation Exception", "", ex);
}
}
});
outputFixMessageText = new Text(validateOutputSection, SWT.BORDER);
outputFixMessageText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
setValidateOutputText( "" );
return validateOutputSection;
}
public void setVisibleValidateOutputSection( boolean aVisible )
{
if ( ( validateOutputSection != null ) && ( ! validateOutputSection.isDisposed() ) )
{
validateOutputSection.setVisible( aVisible );
if ( validateOutputSection.getLayoutData() instanceof GridData )
{
((GridData) validateOutputSection.getLayoutData()).exclude = !aVisible;
}
if ( showValidateOutputMenuItem != null )
{
showValidateOutputMenuItem.setSelection( aVisible );
}
packLayout();
}
}
public void setVisibleTestingInputSection( boolean aVisible )
{
if ( ( inputAndFilterDataAndLoadMessageComposite != null ) && ( ! inputAndFilterDataAndLoadMessageComposite.isDisposed() ) )
{
inputAndFilterDataAndLoadMessageComposite.setVisible( aVisible );
if ( inputAndFilterDataAndLoadMessageComposite.getLayoutData() instanceof GridData )
{
((GridData) inputAndFilterDataAndLoadMessageComposite.getLayoutData()).exclude = !aVisible;
}
packLayout();
}
}
protected Composite createOkCancelButtonSection()
{
// -- SWTVisibleComposite avoids consuming vertical space when hidden via setVisible(false) --
okCancelButtonSection = new SWTVisibleComposite(getShell(), SWT.NONE);
okCancelButtonSection.setLayout(new GridLayout(2, true));
okCancelButtonSection.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
// OK button
Button okButton = new Button(okCancelButtonSection, SWT.NONE);
okButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
okButton.setText("OK");
okButton.setToolTipText( "Validate and accept the specified strategy and parameters" );
okButton.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e)
{
okButtonSelected();
}
});
// Cancel button
Button cancelButton = new Button(okCancelButtonSection, SWT.NONE);
cancelButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
cancelButton.setText("Cancel");
cancelButton.setToolTipText( "Cancel ignoring any specified changes" );
cancelButton.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e)
{
cancelButtonSelected();
}
});
setVisibleOkCancelButtonSection( Atdl4jConfig.getConfig().isShowTesterPanelOkCancelButtonSection() );
return okCancelButtonSection;
}
public void setVisibleOkCancelButtonSection( boolean aVisible )
{
if ( ( okCancelButtonSection != null ) && ( ! okCancelButtonSection.isDisposed() ) )
{
okCancelButtonSection.setVisible( aVisible );
if ( okCancelButtonSection.getLayoutData() instanceof GridData )
{
((GridData) okCancelButtonSection.getLayoutData()).exclude = !aVisible;
}
packLayout();
}
}
protected void packLayout()
{
getShell().layout();
getShell().pack();
}
/**
* Returns getParentComposite().getShell().
* @return the shell
*/
private Shell getShell()
{
if ( getParentComposite() != null )
{
return getParentComposite().getShell();
}
else
{
return null;
}
}
/**
* @return the parentComposite
*/
private Composite getParentComposite()
{
return this.parentComposite;
}
/**
* @param aParentComposite the parentComposite to set
*/
private void setParentComposite(Composite aParentComposite)
{
this.parentComposite = aParentComposite;
}
protected void setValidateOutputText(String aText)
{
if ( ( Atdl4jConfig.getConfig().isShowValidateOutputSection() ) )
{
if ( aText != null )
{
outputFixMessageText.setText( aText.replace( '\n', ' ' ) );
}
else
{
outputFixMessageText.setText( "" );
}
}
else
{
outputFixMessageText.setText( aText.replace( '\n', ' ' ) );
}
}
@Override
public void beforeStrategyIsSelected(StrategySelectionEvent event) {
}
}