\r
import java.lang.reflect.Method;\r
\r
+import com.vaadin.terminal.gwt.client.EventId;\r
import com.vaadin.tools.ReflectTools;\r
import com.vaadin.ui.Component;\r
import com.vaadin.ui.Field;\r
* \r
* @since 6.2\r
*/\r
+ @SuppressWarnings("serial")\r
public class FocusEvent extends Component.Event {\r
\r
+ /**\r
+ * Identifier for event that can be used in {@link EventRouter}\r
+ */\r
+ public static final String EVENT_ID = EventId.FOCUS;\r
+\r
public FocusEvent(Component source) {\r
super(source);\r
}\r
* \r
* @since 6.2\r
*/\r
+ @SuppressWarnings("serial")\r
public class BlurEvent extends Component.Event {\r
\r
+ /**\r
+ * Identifier for event that can be used in {@link EventRouter}\r
+ */\r
+ public static final String EVENT_ID = EventId.BLUR;\r
+\r
public BlurEvent(Component source) {\r
super(source);\r
}\r
--- /dev/null
+package com.vaadin.terminal.gwt.client;
+
+import static com.vaadin.terminal.gwt.client.EventId.BLUR;
+import static com.vaadin.terminal.gwt.client.EventId.FOCUS;
+
+import com.google.gwt.event.dom.client.BlurHandler;
+import com.google.gwt.event.dom.client.FocusHandler;
+import com.google.gwt.event.dom.client.HasBlurHandlers;
+import com.google.gwt.event.dom.client.HasFocusHandlers;
+import com.google.gwt.event.shared.HandlerRegistration;
+
+/**
+ * Helper class for attaching/detaching handlers for Vaadin client side
+ * components, based on identifiers in UIDL. Helpers expect Paintables to be
+ * both listeners and sources for events. This helper cannot be used for more
+ * complex widgets.
+ * <p>
+ * Possible current registration is given as parameter. The returned
+ * registration (possibly the same as given, should be store for next update.
+ * <p>
+ * Pseudocode what helpers do:
+ *
+ * <pre>
+ *
+ * if paintable has event listener in UIDL
+ * if registration is null
+ * register paintable as as handler for event
+ * return the registration
+ * else
+ * if registration is not null
+ * remove the handler from paintable
+ * return null
+ *
+ *
+ * </pre>
+ *
+ */
+public class EventHelper {
+
+ public static HandlerRegistration updateFocusHandler(Paintable paintable,
+ ApplicationConnection client,
+ HandlerRegistration handlerRegistration) {
+ if (client.hasEventListeners(paintable, FOCUS)) {
+ if (handlerRegistration == null) {
+ handlerRegistration = ((HasFocusHandlers) paintable)
+ .addFocusHandler((FocusHandler) paintable);
+ }
+ return handlerRegistration;
+ } else if (handlerRegistration != null) {
+ handlerRegistration.removeHandler();
+ handlerRegistration = null;
+
+ }
+ return null;
+ }
+
+ public static HandlerRegistration updateBlurHandler(Paintable paintable,
+ ApplicationConnection client,
+ HandlerRegistration handlerRegistration) {
+ if (client.hasEventListeners(paintable, BLUR)) {
+ if (handlerRegistration == null) {
+ handlerRegistration = ((HasBlurHandlers) paintable)
+ .addBlurHandler((BlurHandler) paintable);
+ }
+ return handlerRegistration;
+ } else if (handlerRegistration != null) {
+ handlerRegistration.removeHandler();
+ handlerRegistration = null;
+
+ }
+ return null;
+ }
+
+}
--- /dev/null
+package com.vaadin.terminal.gwt.client;
+
+public interface EventId {
+ public static final String BLUR = "blur";
+ public static final String FOCUS = "focus";
+}
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.event.dom.client.BlurEvent;
+import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.FocusEvent;
+import com.google.gwt.event.dom.client.FocusHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Accessibility;
import com.google.gwt.user.client.ui.FocusWidget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
+import com.vaadin.terminal.gwt.client.EventHelper;
+import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VTooltip;
-public class VButton extends FocusWidget implements Paintable, ClickHandler {
+public class VButton extends FocusWidget implements Paintable, ClickHandler,
+ FocusHandler, BlurHandler {
public static final String CLASSNAME = "v-button";
private static final String CLASSNAME_PRESSED = "v-pressed";
private boolean disallowNextClick = false;
private boolean isHovering;
+ private HandlerRegistration focusHandlerRegistration;
+ private HandlerRegistration blurHandlerRegistration;
+
public VButton() {
super(DOM.createDiv());
setTabIndex(0);
return;
}
+ focusHandlerRegistration = EventHelper.updateFocusHandler(this, client,
+ focusHandlerRegistration);
+ blurHandlerRegistration = EventHelper.updateBlurHandler(this, client,
+ blurHandlerRegistration);
+
// Save details
this.client = client;
id = uidl.getId();
return ret;
}-*/;
+ public void onFocus(FocusEvent arg0) {
+ client.updateVariable(id, EventId.FOCUS, "", true);
+ }
+
+ public void onBlur(BlurEvent arg0) {
+ client.updateVariable(id, EventId.BLUR, "", true);
+ }
+
}
import com.google.gwt.dom.client.LabelElement;
import com.google.gwt.dom.client.Node;
import com.google.gwt.dom.client.NodeList;
+import com.google.gwt.event.dom.client.BlurEvent;
+import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.FocusEvent;
+import com.google.gwt.event.dom.client.FocusHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
+import com.vaadin.terminal.gwt.client.EventHelper;
+import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VTooltip;
public class VCheckBox extends com.google.gwt.user.client.ui.CheckBox implements
- Paintable, Field {
+ Paintable, Field, FocusHandler, BlurHandler {
public static final String CLASSNAME = "v-checkbox";
private boolean isBlockMode = false;
+ private HandlerRegistration focusHandlerRegistration;
+ private HandlerRegistration blurHandlerRegistration;
+
public VCheckBox() {
setStyleName(CLASSNAME);
addClickHandler(new ClickHandler() {
return;
}
+ focusHandlerRegistration = EventHelper.updateFocusHandler(this, client,
+ focusHandlerRegistration);
+ blurHandlerRegistration = EventHelper.updateBlurHandler(this, client, blurHandlerRegistration);
+
if (uidl.hasAttribute("error")) {
if (errorIndicatorElement == null) {
errorIndicatorElement = DOM.createSpan();
isBlockMode = true;
}
}
+
+ public void onFocus(FocusEvent arg0) {
+ client.updateVariable(id, EventId.FOCUS, "", true);
+ }
+
+ public void onBlur(BlurEvent arg0) {
+ client.updateVariable(id, EventId.BLUR, "", true);
+ }
}
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
+import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.Focusable;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
public static final int FILTERINGMODE_CONTAINS = 2;
private static final String CLASSNAME = "v-filterselect";
- public static final String FOCUS_EVENT_IDENTIFIER = "focus";
- public static final String BLUR_EVENT_IDENTIFIER = "blur";
protected int pageLength = 10;
}
addStyleDependentName("focus");
- if (client.hasEventListeners(this, FOCUS_EVENT_IDENTIFIER)) {
- client
- .updateVariable(paintableId, FOCUS_EVENT_IDENTIFIER, "",
- true);
+ if (client.hasEventListeners(this, EventId.FOCUS)) {
+ client.updateVariable(paintableId, EventId.FOCUS, "", true);
}
}
}
removeStyleDependentName("focus");
- if (client.hasEventListeners(this, BLUR_EVENT_IDENTIFIER)) {
- client.updateVariable(paintableId, BLUR_EVENT_IDENTIFIER, "", true);
+ if (client.hasEventListeners(this, EventId.BLUR)) {
+ client.updateVariable(paintableId, EventId.BLUR, "", true);
}
}
package com.vaadin.terminal.gwt.client.ui;
import com.google.gwt.dom.client.Element;
+import com.google.gwt.event.dom.client.BlurEvent;
+import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.FocusEvent;
+import com.google.gwt.event.dom.client.FocusHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.ui.Button;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
+import com.vaadin.terminal.gwt.client.EventHelper;
+import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VTooltip;
-public class VNativeButton extends Button implements Paintable, ClickHandler {
+public class VNativeButton extends Button implements Paintable, ClickHandler,
+ FocusHandler, BlurHandler {
public static final String CLASSNAME = "v-nativebutton";
*/
private boolean clickPending;
+ private HandlerRegistration focusHandlerRegistration;
+ private HandlerRegistration blurHandlerRegistration;
+
public VNativeButton() {
setStyleName(CLASSNAME);
return;
}
+ focusHandlerRegistration = EventHelper.updateFocusHandler(this, client,
+ focusHandlerRegistration);
+ blurHandlerRegistration = EventHelper.updateBlurHandler(this, client,
+ blurHandlerRegistration);
+
// Save details
this.client = client;
id = uidl.getId();
clickPending = false;
}
+ public void onFocus(FocusEvent arg0) {
+ client.updateVariable(id, EventId.FOCUS, "", true);
+ }
+
+ public void onBlur(BlurEvent arg0) {
+ client.updateVariable(id, EventId.BLUR, "", true);
+ }
+
}
\r
package com.vaadin.terminal.gwt.client.ui;\r
\r
+import java.util.ArrayList;\r
import java.util.HashMap;\r
import java.util.Iterator;\r
+import java.util.List;\r
import java.util.Map;\r
\r
+import com.google.gwt.event.dom.client.BlurEvent;\r
+import com.google.gwt.event.dom.client.BlurHandler;\r
import com.google.gwt.event.dom.client.ClickEvent;\r
+import com.google.gwt.event.dom.client.FocusEvent;\r
+import com.google.gwt.event.dom.client.FocusHandler;\r
+import com.google.gwt.event.shared.HandlerRegistration;\r
+import com.google.gwt.user.client.Command;\r
+import com.google.gwt.user.client.DeferredCommand;\r
import com.google.gwt.user.client.ui.CheckBox;\r
import com.google.gwt.user.client.ui.FocusWidget;\r
import com.google.gwt.user.client.ui.Focusable;\r
import com.google.gwt.user.client.ui.Panel;\r
import com.google.gwt.user.client.ui.RadioButton;\r
import com.google.gwt.user.client.ui.Widget;\r
+import com.vaadin.terminal.gwt.client.ApplicationConnection;\r
+import com.vaadin.terminal.gwt.client.EventId;\r
import com.vaadin.terminal.gwt.client.UIDL;\r
\r
-public class VOptionGroup extends VOptionGroupBase {\r
+public class VOptionGroup extends VOptionGroupBase implements FocusHandler,\r
+ BlurHandler {\r
\r
public static final String CLASSNAME = "v-select-optiongroup";\r
\r
\r
private final Map optionsToKeys;\r
\r
+ private boolean sendFocusEvents = false;\r
+ private boolean sendBlurEvents = false;\r
+ private List<HandlerRegistration> focusHandlers = null;\r
+ private List<HandlerRegistration> blurHandlers = null;\r
+\r
+ /**\r
+ * used to check whether a blur really was a blur of the complete\r
+ * optiongroup: if a control inside this optiongroup gains focus right after\r
+ * blur of another control inside this optiongroup (meaning: if onFocus\r
+ * fires after onBlur has fired), the blur and focus won't be sent to the\r
+ * server side as only a focus change inside this optiongroup occured\r
+ */\r
+ private boolean blurOccured = false;\r
+\r
public VOptionGroup() {\r
super(CLASSNAME);\r
panel = (Panel) optionsContainer;\r
optionsToKeys = new HashMap();\r
}\r
\r
+ @Override\r
+ public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {\r
+ super.updateFromUIDL(uidl, client);\r
+\r
+ sendFocusEvents = client.hasEventListeners(this, EventId.FOCUS);\r
+ sendBlurEvents = client.hasEventListeners(this, EventId.BLUR);\r
+\r
+ if (focusHandlers != null) {\r
+ for (HandlerRegistration reg : focusHandlers) {\r
+ reg.removeHandler();\r
+ }\r
+ focusHandlers.clear();\r
+ focusHandlers = null;\r
+\r
+ for (HandlerRegistration reg : blurHandlers) {\r
+ reg.removeHandler();\r
+ }\r
+ blurHandlers.clear();\r
+ blurHandlers = null;\r
+ }\r
+\r
+ if (sendFocusEvents || sendBlurEvents) {\r
+ focusHandlers = new ArrayList<HandlerRegistration>();\r
+ blurHandlers = new ArrayList<HandlerRegistration>();\r
+\r
+ // add focus and blur handlers to checkboxes / radio buttons\r
+ for (Widget wid : panel) {\r
+ if (wid instanceof CheckBox) {\r
+ focusHandlers.add(((CheckBox) wid).addFocusHandler(this));\r
+ blurHandlers.add(((CheckBox) wid).addBlurHandler(this));\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
/*\r
* Return true if no elements were changed, false otherwise.\r
*/\r
}\r
}\r
\r
+ public void onFocus(FocusEvent arg0) {\r
+ if (!blurOccured) {\r
+ // no blur occured before this focus event\r
+ // panel was blurred => fire the event to the server side if\r
+ // requested by server side\r
+ if (sendFocusEvents) {\r
+ client.updateVariable(id, EventId.FOCUS, "", true);\r
+ }\r
+ } else {\r
+ // blur occured before this focus event\r
+ // another control inside the panel (checkbox / radio box) was\r
+ // blurred => do not fire the focus and set blurOccured to false, so\r
+ // blur will not be fired, too\r
+ blurOccured = false;\r
+ }\r
+ }\r
+\r
+ public void onBlur(BlurEvent arg0) {\r
+ blurOccured = true;\r
+ if (sendBlurEvents) {\r
+ DeferredCommand.addCommand(new Command() {\r
+ public void execute() {\r
+ // check whether blurOccured still is true and then send the\r
+ // event out to the server\r
+ if (blurOccured) {\r
+ client.updateVariable(id, EventId.BLUR, "",\r
+ true);\r
+ blurOccured = false;\r
+ }\r
+ }\r
+ });\r
+ }\r
+ }\r
}\r
import com.google.gwt.user.client.ui.TextBoxBase;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
+import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
private static final String CLASSNAME_PROMPT = "prompt";
private static final String ATTR_INPUTPROMPT = "prompt";
- public static final String FOCUS_EVENT_IDENTIFIER = "focus";
- public static final String BLUR_EVENT_IDENTIFIER = "blur";
private String inputPrompt = null;
private boolean prompting = false;
boolean sendBlurEvent = false;
boolean sendValueChange = false;
- if (blurred
- && client.hasEventListeners(this, BLUR_EVENT_IDENTIFIER)) {
+ if (blurred && client.hasEventListeners(this, EventId.BLUR)) {
sendBlurEvent = true;
- client.updateVariable(id, BLUR_EVENT_IDENTIFIER, "", false);
+ client.updateVariable(id, EventId.BLUR, "", false);
}
String newText = getText();
}
}
focusedTextField = this;
- if (client.hasEventListeners(this, FOCUS_EVENT_IDENTIFIER)) {
- client.updateVariable(client.getPid(this), FOCUS_EVENT_IDENTIFIER,
- "", true);
+ if (client.hasEventListeners(this, EventId.FOCUS)) {
+ client.updateVariable(client.getPid(this), EventId.FOCUS, "", true);
}
}
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ClientExceptionHandler;
import com.vaadin.terminal.gwt.client.ContainerResizedListener;
+import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.Focusable;
import com.vaadin.terminal.gwt.client.LocaleNotLoadedException;
import com.vaadin.terminal.gwt.client.LocaleService;
private static final String PARSE_ERROR_CLASSNAME = CLASSNAME
+ "-parseerror";
- public static final String FOCUS_EVENT_IDENTIFIER = "focus";
- public static final String BLUR_EVENT_IDENTIFIER = "blur";
private final TextBox text;
+ VTextField.CLASSNAME_FOCUS);
if (client != null
&& client.hasEventListeners(VTextualDate.this,
- FOCUS_EVENT_IDENTIFIER)) {
- client.updateVariable(id, FOCUS_EVENT_IDENTIFIER, "", true);
+ EventId.FOCUS)) {
+ client.updateVariable(id, EventId.FOCUS, "", true);
}
}
});
+ VTextField.CLASSNAME_FOCUS);
if (client != null
&& client.hasEventListeners(VTextualDate.this,
- BLUR_EVENT_IDENTIFIER)) {
- client.updateVariable(id, BLUR_EVENT_IDENTIFIER, "", true);
+ EventId.BLUR)) {
+ client.updateVariable(id, EventId.BLUR, "", true);
}
}
});
import com.vaadin.data.Property;
import com.vaadin.event.ShortcutListener;
+import com.vaadin.event.FieldEvents;
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.gwt.client.ui.VButton;
*/
@SuppressWarnings("serial")
@ClientWidget(VButton.class)
-public class Button extends AbstractField {
+public class Button extends AbstractField implements FieldEvents.BlurNotifier,
+ FieldEvents.FocusNotifier {
/* Private members */
* @param variables
*/
@Override
- public void changeVariables(Object source, Map variables) {
+ public void changeVariables(Object source, Map<String, Object> variables) {
super.changeVariables(source, variables);
if (!isReadOnly() && variables.containsKey("state")) {
}
}
}
+
+ if (variables.containsKey(FocusEvent.EVENT_ID)) {
+ fireEvent(new FocusEvent(this));
+ }
+ if (variables.containsKey(BlurEvent.EVENT_ID)) {
+ fireEvent(new BlurEvent(this));
+ }
}
/**
super.setInternalValue(newValue);
}
+ public void addListener(BlurListener listener) {
+ addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener,
+ BlurListener.blurMethod);
+ }
+
+ public void removeListener(BlurListener listener) {
+ removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener);
+ }
+
+ public void addListener(FocusListener listener) {
+ addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener,
+ FocusListener.focusMethod);
+ }
+
+ public void removeListener(FocusListener listener) {
+ removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener);
+
+ }
+
/*
* Actions
*/
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.gwt.client.ui.VDateField;
import com.vaadin.terminal.gwt.client.ui.VPopupCalendar;
-import com.vaadin.terminal.gwt.client.ui.VTextualDate;
/**
* <p>
*/
protected static final String TYPE_INLINE = "inline";
- private static final String BLUR_EVENT = VTextualDate.BLUR_EVENT_IDENTIFIER;
- private static final String FOCUS_EVENT = VTextualDate.FOCUS_EVENT_IDENTIFIER;
-
/**
* Specified widget type.
*/
}
}
- if (variables.containsKey(FOCUS_EVENT)) {
+ if (variables.containsKey(FocusEvent.EVENT_ID)) {
fireEvent(new FocusEvent(this));
}
- if (variables.containsKey(BLUR_EVENT)) {
+ if (variables.containsKey(BlurEvent.EVENT_ID)) {
fireEvent(new BlurEvent(this));
}
}
}
public void addListener(FocusListener listener) {
- addListener(FOCUS_EVENT, FocusEvent.class, listener,
+ addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener,
FocusListener.focusMethod);
}
public void removeListener(FocusListener listener) {
- removeListener(FOCUS_EVENT, FocusEvent.class, listener);
+ removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener);
}
public void addListener(BlurListener listener) {
- addListener(BLUR_EVENT, BlurEvent.class, listener,
+ addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener,
BlurListener.blurMethod);
}
public void removeListener(BlurListener listener) {
- removeListener(BLUR_EVENT, BlurEvent.class, listener);
+ removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener);
}
/**
package com.vaadin.ui;
import java.util.Collection;
+import java.util.Map;
import com.vaadin.data.Container;
+import com.vaadin.event.FieldEvents;
+import com.vaadin.event.FieldEvents.BlurEvent;
+import com.vaadin.event.FieldEvents.BlurListener;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.event.FieldEvents.FocusListener;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.gwt.client.ui.VOptionGroup;
*/
@SuppressWarnings("serial")
@ClientWidget(VOptionGroup.class)
-public class OptionGroup extends AbstractSelect {
+public class OptionGroup extends AbstractSelect implements
+ FieldEvents.BlurNotifier, FieldEvents.FocusNotifier {
public OptionGroup() {
super();
super.paintContent(target);
}
+ @Override
+ public void changeVariables(Object source, Map<String, Object> variables) {
+ super.changeVariables(source, variables);
+
+ if (variables.containsKey(FocusEvent.EVENT_ID)) {
+ fireEvent(new FocusEvent(this));
+ }
+ if (variables.containsKey(BlurEvent.EVENT_ID)) {
+ fireEvent(new BlurEvent(this));
+ }
+ }
+
+ public void addListener(BlurListener listener) {
+ addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener,
+ BlurListener.blurMethod);
+ }
+
+ public void removeListener(BlurListener listener) {
+ removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener);
+ }
+
+ public void addListener(FocusListener listener) {
+ addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener,
+ FocusListener.focusMethod);
+ }
+
+ public void removeListener(FocusListener listener) {
+ removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener);
+
+ }
+
}
public class Select extends AbstractSelect implements AbstractSelect.Filtering,
FieldEvents.BlurNotifier, FieldEvents.FocusNotifier {
- private static final String BLUR_EVENT_ID = VFilterSelect.BLUR_EVENT_IDENTIFIER;
- private static final String FOCUS_EVENT_ID = VFilterSelect.FOCUS_EVENT_IDENTIFIER;
-
/**
* Holds value of property pageLength. 0 disables paging.
*/
}
}
- if (variables.containsKey(FOCUS_EVENT_ID)) {
+ if (variables.containsKey(FocusEvent.EVENT_ID)) {
fireEvent(new FocusEvent(this));
}
- if (variables.containsKey(BLUR_EVENT_ID)) {
+ if (variables.containsKey(BlurEvent.EVENT_ID)) {
fireEvent(new BlurEvent(this));
}
}
public void addListener(BlurListener listener) {
- addListener(BLUR_EVENT_ID, BlurEvent.class, listener,
+ addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener,
BlurListener.blurMethod);
}
public void removeListener(BlurListener listener) {
- removeListener(BLUR_EVENT_ID, BlurEvent.class, listener);
+ removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener);
}
public void addListener(FocusListener listener) {
- addListener(FOCUS_EVENT_ID, FocusEvent.class, listener,
+ addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener,
FocusListener.focusMethod);
}
public void removeListener(FocusListener listener) {
- removeListener(FOCUS_EVENT_ID, FocusEvent.class, listener);
+ removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener);
}
*/
private int maxLength = -1;
- private static final String BLUR_EVENT = VTextField.BLUR_EVENT_IDENTIFIER;
- private static final String FOCUS_EVENT = VTextField.FOCUS_EVENT_IDENTIFIER;
-
/* Constructors */
/**
}
}
- if (variables.containsKey(FOCUS_EVENT)) {
- fireFocus(variables.get(FOCUS_EVENT));
+ if (variables.containsKey(FocusEvent.EVENT_ID)) {
+ fireEvent(new FocusEvent(this));
}
- if (variables.containsKey(BLUR_EVENT)) {
- fireBlur(variables.get(BLUR_EVENT));
+ if (variables.containsKey(BlurEvent.EVENT_ID)) {
+ fireEvent(new BlurEvent(this));
}
}
requestRepaint();
}
- private void fireFocus(Object object) {
- fireEvent(new FocusEvent(this));
- }
-
- private void fireBlur(Object object) {
- fireEvent(new BlurEvent(this));
- }
-
public void addListener(FocusListener listener) {
- addListener(FOCUS_EVENT, FocusEvent.class, listener,
+ addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener,
FocusListener.focusMethod);
}
public void removeListener(FocusListener listener) {
- removeListener(FOCUS_EVENT, FocusEvent.class, listener);
+ removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener);
}
public void addListener(BlurListener listener) {
- addListener(BLUR_EVENT, BlurEvent.class, listener,
+ addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener,
BlurListener.blurMethod);
}
public void removeListener(BlurListener listener) {
- removeListener(BLUR_EVENT, BlurEvent.class, listener);
+ removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener);
}
}
import com.vaadin.event.FieldEvents.BlurListener;
import com.vaadin.event.FieldEvents.FocusEvent;
import com.vaadin.event.FieldEvents.FocusListener;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.DateField;
import com.vaadin.ui.Label;
import com.vaadin.ui.Layout;
+import com.vaadin.ui.NativeButton;
+import com.vaadin.ui.OptionGroup;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
public class FocusAndBlurListeners extends TestBase {
@Override
protected void setup() {
Layout l = getLayout();
+
TextField tf = new TextField("TextField");
l.addComponent(tf);
+
DateField df = new DateField("DateField");
l.addComponent(df);
ComboBox cb = new ComboBox("ComboBox");
-
l.addComponent(cb);
+ Button btn = new Button("Button");
+ l.addComponent(btn);
+
+ NativeButton nbtn = new NativeButton("NativeButton");
+ l.addComponent(nbtn);
+
+ CheckBox chkb = new CheckBox("CheckBox");
+ l.addComponent(chkb);
+
+ OptionGroup og = createOptionGroup("OptionGroup");
+ og.setMultiSelect(false);
+ l.addComponent(og);
+
+ final OptionGroup ogm = createOptionGroup("OptionGroup (multiselect)");
+ ogm.setMultiSelect(true);
+ l.addComponent(ogm);
+
+ btn.addListener(new ClickListener() {
+
+ private int i;
+
+ public void buttonClick(ClickEvent event) {
+ ogm.addItem("newItem" + i++);
+
+ }
+ });
+
tf.addListener(focusListener);
tf.addListener(blurListener);
df.addListener(focusListener);
df.addListener(blurListener);
cb.addListener(focusListener);
cb.addListener(blurListener);
+ btn.addListener(focusListener);
+ btn.addListener(blurListener);
+ nbtn.addListener(focusListener);
+ nbtn.addListener(blurListener);
+ chkb.addListener(focusListener);
+ chkb.addListener(blurListener);
+ og.addListener(focusListener);
+ og.addListener(blurListener);
+ ogm.addListener(focusListener);
+ ogm.addListener(blurListener);
l.addComponent(messages);
}
+ private OptionGroup createOptionGroup(String caption) {
+ OptionGroup og = new OptionGroup(caption);
+ og.addItem("Option 0");
+ og.addItem("Option 1");
+ og.addItem("Option 2");
+ return og;
+ }
+
@Override
protected String getDescription() {
return "Testing blur and focus listeners added in 6.2";