| package groovy.swt.impl; |
| |
| import groovy.lang.Closure; |
| import groovy.swt.ClosureSupport; |
| |
| import org.eclipse.swt.browser.LocationEvent; |
| import org.eclipse.swt.browser.LocationListener; |
| |
| /** |
| * This implementation adds a LocationListener to a browser widget |
| * |
| * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a> |
| */ |
| public class LocationListenerImpl implements LocationListener, ClosureSupport { |
| |
| private String type; |
| |
| private Closure closure; |
| |
| /** |
| * @param type |
| */ |
| public LocationListenerImpl(String type) |
| { |
| this.type = type; |
| } |
| |
| public Closure getClosure() |
| { |
| return closure; |
| } |
| |
| public void setClosure(Closure closure) |
| { |
| this.closure = closure; |
| } |
| |
| /* |
| * @see org.eclipse.swt.browser.LocationListener#changing(org.eclipse.swt.browser.LocationEvent) |
| */ |
| public void changing(LocationEvent event) |
| { |
| if (closure == null) { throw new NullPointerException( |
| "No closure has been configured for this Listener"); |
| } |
| |
| if ("changing".equals(type)) |
| { |
| closure.setProperty("event", new CustomLocationEvent(event)); |
| closure.call(event); |
| } |
| |
| } |
| |
| /* |
| * @see org.eclipse.swt.browser.LocationListener#changed(org.eclipse.swt.browser.LocationEvent) |
| */ |
| public void changed(LocationEvent event) |
| { |
| if (closure == null) { |
| throw new NullPointerException( |
| "No closure has been configured for this Action"); |
| } |
| |
| if ("changed".equals(type)) |
| { |
| closure.setProperty("event", new CustomLocationEvent(event)); |
| closure.call(event); |
| } |
| } |
| |
| public class CustomLocationEvent { |
| |
| private LocationEvent event; |
| |
| public CustomLocationEvent(LocationEvent event) |
| { |
| this.event = event; |
| } |
| |
| public String getLocation() |
| { |
| return event.location; |
| } |
| } |
| |
| } |