| /* |
| * 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); |
| } |
| } |