blob: f6eb0db4ca0c15743b3fb244540603e356a787f0 [file] [log] [blame]
/*
* Created on Feb 15, 2004
*/
package groovy.swt.factory;
import groovy.swt.SwtHelper;
import groovy.swt.impl.ExpansionListenerImpl;
import groovy.swt.impl.HyperLinkListenerImpl;
import groovy.swt.impl.ListenerImpl;
import groovy.swt.impl.LocationListenerImpl;
import groovy.swt.impl.ProgressListenerImpl;
import groovy.swt.impl.StatusTextListenerImpl;
import java.util.Map;
import org.codehaus.groovy.GroovyException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.browser.StatusTextListener;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.forms.events.ExpansionListener;
import org.eclipse.ui.forms.events.HyperlinkListener;
import org.eclipse.ui.forms.widgets.AbstractHyperlink;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
/**
* @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
* @version $Revision$
*/
public class ListenerFactory extends AbstractSwtFactory implements SwtFactory {
private Class beanClass;
/**
* @param class1
*/
public ListenerFactory(Class beanClass) {
this.beanClass = beanClass;
}
/*
* @see groovy.swt.impl.SwtFactory#newInstance(java.util.Map,
* java.lang.Object)
*/
public Object newInstance(Map properties, Object parent)
throws GroovyException {
String type = (String) properties.remove("type");
if (parent instanceof Browser){
Browser browser = (Browser) parent;
if (beanClass.equals(LocationListener.class)){
LocationListener locationListener = new LocationListenerImpl(type);
browser.addLocationListener(locationListener);
return locationListener;
}
else if (beanClass.equals(ProgressListener.class)){
ProgressListener progressListener = new ProgressListenerImpl(type);
browser.addProgressListener(progressListener);
return progressListener;
}
else if (beanClass.equals(StatusTextListener.class)){
StatusTextListener statusTextListener = new StatusTextListenerImpl();
browser.addStatusTextListener(statusTextListener);
return statusTextListener;
}
}
else if (parent instanceof AbstractHyperlink){
AbstractHyperlink hyperlink = (AbstractHyperlink) parent;
HyperlinkListener hyperLinkListenerImpl = new HyperLinkListenerImpl(type);
hyperlink.addHyperlinkListener(hyperLinkListenerImpl);
return hyperLinkListenerImpl;
}
else if (parent instanceof ExpandableComposite){
ExpandableComposite expandableComposite = (ExpandableComposite) parent;
ExpansionListener expansionListener = new ExpansionListenerImpl(type);
expandableComposite.addExpansionListener(expansionListener);
return expansionListener;
}
else if (parent instanceof Widget){
Widget widget = (Widget) parent;
int eventType = getEventType(type);
if (eventType == 0){
throw new GroovyException(
"No event type specified, could not understand: " + type);
}
ListenerImpl listenerImpl = new ListenerImpl();
widget.addListener(eventType, listenerImpl);
return listenerImpl;
}
throw new GroovyException("No factory found for class: " + beanClass);
}
/**
* Parses the given event type String and returns the SWT event type code
*
* @param type
* is the String event type
* @return the SWT integer event type
*/
protected int getEventType(String type) throws GroovyException {
return SwtHelper.parseStyle(SWT.class, type, false);
}
}