package org.atdl4j.ui.swt.widget;
import java.util.List;
import java.util.Vector;
import org.apache.log4j.Logger;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
/*
* Implements radioGroup attribute for RadioButton. The SWT
* framework can't handle linking RadioButtons that don't share
* the same parent container.
*
* @author johnnyshields
*/
public class SWTRadioButtonListener
implements Listener
{
private static final Logger logger = Logger.getLogger( SWTRadioButtonListener.class );
private List<Button> buttons;
public SWTRadioButtonListener()
{
buttons = new Vector<Button>();
}
public void addButton(Button button)
{
buttons.add( button );
button.addListener( SWT.Selection, this );
}
public void addButton(SWTButtonWidget sWTButtonWidget)
{
addButton( sWTButtonWidget.getButton() );
}
public void handleEvent(Event p_event)
{
handleEvent( (Button) p_event.widget );
}
public void handleEvent(Button aButton)
{
for ( Button b : buttons )
{
b.setSelection( aButton.equals( b ) );
}
}
/**
* If no RadioButtons within the radioGroup are selected, then first one in
* list will be selected.
*/
public void processReinit()
{
Button tempSelectedButton = null;
for ( Button b : buttons )
{
if ( b.getSelection() )
{
if ( tempSelectedButton == null )
{
tempSelectedButton = b;
}
else
{
// -- there is already a selected button!! --
b.setSelection( false );
}
}
}
// -- Select first in list if no buttons are selected --
if ( tempSelectedButton == null )
{
logger.info("Warning: no buttons were selected for SWTRadioButtonListener. Selecting first button in list: " + buttons.get(0) );
buttons.get( 0 ).setSelection( true );
}
}
}