AutoDirectionHandler class
Utility class for handling auto-direction adjustment.
This class is useful for automatically adjusting the direction of an object that takes text input, while the text is being entered.
class AutoDirectionHandler implements KeyUpHandler, HasDirectionEstimator {
/**
* Operates like {@link #addTo(AutoDirectionHandlerTarget, DirectionEstimator)}, but uses a
* default DirectionEstimator, {@link
* com.google.gwt.i18n.shared.WordCountDirectionEstimator} if {@code enabled},
* or else a null DirectionEstimator, which means disabling direction
* estimation.
*
* @param target Object whose direction should be automatically adjusted on
* relevant events.
* @param enabled Whether the handler is enabled upon creation.
* @return AutoDirectionHandler An instance of AutoDirectionHandler for the
* given object.
*/
static AutoDirectionHandler addToDefault(AutoDirectionHandlerTarget target, [bool enabled = true]) {
return addTo(target, enabled ? WordCountDirectionEstimator.get() : null);
}
/**
* Adds auto-direction adjustment to a given object:
* - Creates an AutoDirectionHandler.
* - Initializes it with the given DirectionEstimator.
* - Adds it as an event handler for the relevant events on the given object.
* - Returns the AutoDirectionHandler, so its setAutoDir() method can be
* called when the object's text changes by means other than the handled
* events.
*
* @param target Object whose direction should be automatically adjusted on
* relevant events.
* @param directionEstimator A DirectionEstimator object used for direction
* estimation (use null to disable direction estimation).
* @return AutoDirectionHandler An instance of AutoDirectionHandler for the
* given object.
*/
static AutoDirectionHandler addTo(AutoDirectionHandlerTarget target, DirectionEstimator directionEstimator) {
AutoDirectionHandler autoDirHandler = new AutoDirectionHandler(target, directionEstimator);
return autoDirHandler;
}
/**
* A DirectionEstimator object used for direction estimation.
*/
DirectionEstimator directionEstimator;
/**
* A HandlerRegistration object used to remove this handler.
*/
HandlerRegistration handlerRegistration;
/**
* The object being handled.
*/
AutoDirectionHandlerTarget target;
/**
* Private constructor. Instantiate using one of the addTo() methods.
*
* @param target Object whose direction should be automatically adjusted on
* relevant events.
* @param directionEstimator A DirectionEstimator object used for direction
* estimation.
*/
AutoDirectionHandler(AutoDirectionHandlerTarget target, DirectionEstimator
directionEstimator) {
this.target = target;
this.handlerRegistration = null;
setDirectionEstimator(directionEstimator);
}
/**
* Returns the DirectionEstimator object.
*/
DirectionEstimator getDirectionEstimator() {
return directionEstimator;
}
/**
* Automatically adjusts hasDirection's direction on KeyUpEvent events.
* Implementation of KeyUpHandler interface method.
*/
void onKeyUp(KeyUpEvent event) {
refreshDirection();
}
/**
* Adjusts target's direction according to the estimated direction of the text
* it supplies.
*/
void refreshDirection() {
if (directionEstimator != null) {
Direction dir = directionEstimator.estimateStringDirection(target.text);
if (dir != target.direction) {
target.direction = dir;
}
}
}
/**
* Toggles direction estimation on (using a default estimator) and off.
*/
void enableDefaultDirectionEstimator(bool enabled) {
setDirectionEstimator(enabled ? WordCountDirectionEstimator.get() : null);
}
/**
* Sets the DirectionEstimator object.
*/
void setDirectionEstimator(DirectionEstimator directionEstimator) {
this.directionEstimator = directionEstimator;
if ((directionEstimator == null) != (handlerRegistration == null)) {
if (directionEstimator == null) {
handlerRegistration.removeHandler();
handlerRegistration = null;
} else {
handlerRegistration = target.addKeyUpHandler(this);
}
}
refreshDirection();
}
}
Implements
HasDirectionEstimator, KeyUpHandler
Static Methods
AutoDirectionHandler addToDefault(AutoDirectionHandlerTarget target, [bool enabled = true]) #
Operates like {@link #addTo(AutoDirectionHandlerTarget, DirectionEstimator)}, but uses a default DirectionEstimator, {@link com.google.gwt.i18n.shared.WordCountDirectionEstimator} if {@code enabled}, or else a null DirectionEstimator, which means disabling direction estimation.
@param target Object whose direction should be automatically adjusted on
relevant events.
@param enabled Whether the handler is enabled upon creation. @return AutoDirectionHandler An instance of AutoDirectionHandler for the
given object.
static AutoDirectionHandler addToDefault(AutoDirectionHandlerTarget target, [bool enabled = true]) {
return addTo(target, enabled ? WordCountDirectionEstimator.get() : null);
}
AutoDirectionHandler addTo(AutoDirectionHandlerTarget target, DirectionEstimator directionEstimator) #
Adds auto-direction adjustment to a given object: - Creates an AutoDirectionHandler. - Initializes it with the given DirectionEstimator. - Adds it as an event handler for the relevant events on the given object. - Returns the AutoDirectionHandler, so its setAutoDir() method can be called when the object's text changes by means other than the handled events.
@param target Object whose direction should be automatically adjusted on
relevant events.
@param directionEstimator A DirectionEstimator object used for direction
estimation (use null to disable direction estimation).
@return AutoDirectionHandler An instance of AutoDirectionHandler for the
given object.
static AutoDirectionHandler addTo(AutoDirectionHandlerTarget target, DirectionEstimator directionEstimator) {
AutoDirectionHandler autoDirHandler = new AutoDirectionHandler(target, directionEstimator);
return autoDirHandler;
}
Constructors
new AutoDirectionHandler(AutoDirectionHandlerTarget target, DirectionEstimator directionEstimator) #
Private constructor. Instantiate using one of the addTo() methods.
@param target Object whose direction should be automatically adjusted on
relevant events.
@param directionEstimator A DirectionEstimator object used for direction
estimation.
AutoDirectionHandler(AutoDirectionHandlerTarget target, DirectionEstimator
directionEstimator) {
this.target = target;
this.handlerRegistration = null;
setDirectionEstimator(directionEstimator);
}
Properties
DirectionEstimator directionEstimator #
A DirectionEstimator object used for direction estimation.
DirectionEstimator directionEstimator
HandlerRegistration handlerRegistration #
A HandlerRegistration object used to remove this handler.
HandlerRegistration handlerRegistration
AutoDirectionHandlerTarget target #
The object being handled.
AutoDirectionHandlerTarget target
Methods
void enableDefaultDirectionEstimator(bool enabled) #
Toggles direction estimation on (using a default estimator) and off.
void enableDefaultDirectionEstimator(bool enabled) {
setDirectionEstimator(enabled ? WordCountDirectionEstimator.get() : null);
}
DirectionEstimator getDirectionEstimator() #
Returns the DirectionEstimator object.
DirectionEstimator getDirectionEstimator() {
return directionEstimator;
}
void onKeyUp(KeyUpEvent event) #
Automatically adjusts hasDirection's direction on KeyUpEvent events. Implementation of KeyUpHandler interface method.
void onKeyUp(KeyUpEvent event) {
refreshDirection();
}
void refreshDirection() #
Adjusts target's direction according to the estimated direction of the text it supplies.
void refreshDirection() {
if (directionEstimator != null) {
Direction dir = directionEstimator.estimateStringDirection(target.text);
if (dir != target.direction) {
target.direction = dir;
}
}
}
void setDirectionEstimator(DirectionEstimator directionEstimator) #
Sets the DirectionEstimator object.
void setDirectionEstimator(DirectionEstimator directionEstimator) {
this.directionEstimator = directionEstimator;
if ((directionEstimator == null) != (handlerRegistration == null)) {
if (directionEstimator == null) {
handlerRegistration.removeHandler();
handlerRegistration = null;
} else {
handlerRegistration = target.addKeyUpHandler(this);
}
}
refreshDirection();
}