litesoft
@ 629
litesoft / trunk / GWT_Sandbox / FormEngine / src / com / temp / client / foundation / widget / input / fieldsupport / InputWidgetChangeFilter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
package com.temp.client.foundation.widget.input.fieldsupport; import com.google.gwt.event.dom.client.*; import com.google.gwt.event.shared.*; import com.temp.client.foundation.widget.input.support.*; import com.temp.client.foundation.widget.input.support.events.*; import com.temp.shared.utils.*; public class InputWidgetChangeFilter<T> implements InputWidgetValueAdapter<T> { protected final NonDomHandlerManager<ChangeHandler> handlerManager; protected final InputWidgetValueAdapter<T> delegateTo; protected T baseNotChangedValue; protected boolean isChanged; public InputWidgetChangeFilter(InputWidgetValueAdapter<T> delegateTo) { handlerManager = new NonDomHandlerManager<ChangeHandler>(this); this.delegateTo = delegateTo; baseNotChangedValue = delegateTo.getValue(); delegateTo.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { checkForChange(); } }); } public HandlerRegistration addFilteredChangeHandler(ChangeHandler handler) { return handler == null ? null : registerChangeHandler(handler); } @Override public HandlerRegistration addChangeHandler(ChangeHandler handler) { return delegateTo.addChangeHandler(handler); } @Override public T getValue() { return checkForChange(); } @Override public void setValue(T value) { delegateTo.setValue(value); baseNotChangedValue = delegateTo.getValue(); setChanged(false); } public T getBaseValue() { return baseNotChangedValue; } public void setValueAsUser(T value) { delegateTo.setValue(value); checkForChange(); } public boolean isChanged() { return isChanged; } protected T checkForChange() { T curValue = delegateTo.getValue(); setChanged(!ObjectUtils.areEqual(baseNotChangedValue, curValue)); return curValue; } protected void setChanged(boolean newChangedState) { boolean curChangedState = isChanged; isChanged = newChangedState; if (curChangedState != newChangedState) { notifyChangeHandlers(); } } protected void notifyChangeHandlers() { handlerManager.fireEvent(new NonDomChangeEvent()); } protected HandlerRegistration registerChangeHandler(ChangeHandler handler) { return handlerManager.addHandler(handler); } } |