Subversion Repository Public Repository

litesoft

Diff Revisions 947 vs 950 for /trunk/WDS-Temp/WidgetMouseHandler.java

Diff revisions: vs.
  @@ -1,240 +1,240 @@
1 - // This Source Code is derived from the version(s) at litesoft.org which are in the Public Domain per: http://unlicense.org
2 - package com.wdstechnology.ucci.deviceassist.client.ui;
3 -
4 - import com.google.gwt.event.dom.client.MouseMoveEvent;
5 - import com.google.gwt.user.client.*;
6 -
7 - public class WidgetMouseHandler {
8 - public interface MouseClickedListener {
9 - void mouseClicked();
10 - }
11 -
12 - public interface Logger {
13 - void log(String message);
14 - }
15 -
16 - public static int EVENT_BITS = Event.MOUSEEVENTS;
17 -
18 - private static final State sREGULAR = new State("Regular");
19 -
20 - private static final State sMOUSEOVER = new State("Mouseover");
21 -
22 - private static final State sMOUSEDOWN = new State("Mousedown");
23 -
24 - private static final State sDISABLED = new State("Disabled");
25 -
26 - public static final State[] ALL_STATES = new State[] { sREGULAR, sMOUSEOVER, sMOUSEDOWN, sDISABLED };
27 -
28 - private boolean mMouseOver = false;
29 -
30 - private boolean mMouseDown = false;
31 -
32 - private boolean mDisabled = false;
33 -
34 - protected Element mMouseCtrlElement;
35 -
36 - private MouseClickedListener mListener;
37 -
38 - protected State mCurrentState = null;
39 -
40 - private Element mSavedCaptureElement = null;
41 -
42 - private final Logger mLogger;
43 -
44 - private boolean mLastLogWasMove = false;
45 -
46 - public WidgetMouseHandler(Element pMouseCtrlElement, MouseClickedListener pListener, Logger pLogger) {
47 - mMouseCtrlElement = pMouseCtrlElement;
48 - mListener = pListener;
49 - mLogger = (pLogger != null) ? pLogger : NOOP_LOGGER;
50 - }
51 -
52 - private State determineNewForm() {
53 - if (mDisabled) {
54 - return sDISABLED;
55 - }
56 - if (mMouseDown) {
57 - return sMOUSEDOWN;
58 - }
59 - if (mMouseOver) {
60 - return sMOUSEOVER;
61 - }
62 - return sREGULAR;
63 - }
64 -
65 - public WidgetMouseHandler updateForm() {
66 - State zNewForm = determineNewForm();
67 - if (mCurrentState != zNewForm) {
68 - if (mCurrentState != null) {
69 - removeCurrentState();
70 -
71 - if (mCurrentState == sMOUSEDOWN) {
72 - DOM.releaseCapture(mMouseCtrlElement);
73 - if (mSavedCaptureElement != null) {
74 - DOM.setCapture(mSavedCaptureElement);
75 - mSavedCaptureElement = null;
76 - }
77 - }
78 - }
79 - if (zNewForm != sDISABLED) {
80 - if (zNewForm == sMOUSEDOWN) {
81 - mSavedCaptureElement = DOM.getCaptureElement();
82 - if (mSavedCaptureElement != null) {
83 - DOM.releaseCapture(mSavedCaptureElement);
84 - }
85 - DOM.setCapture(mMouseCtrlElement);
86 - }
87 - }
88 - mCurrentState = zNewForm;
89 - applyCurrentState();
90 - }
91 - return this;
92 - }
93 -
94 - protected void applyCurrentState() {
95 - mMouseCtrlElement.addClassName("" + mCurrentState);
96 - }
97 -
98 - protected void removeCurrentState() {
99 - mMouseCtrlElement.removeClassName("" + mCurrentState);
100 - }
101 -
102 - public boolean isEnabled() {
103 - return !mDisabled;
104 - }
105 -
106 - public void setEnabled(boolean pEnabled) {
107 - mDisabled = !pEnabled;
108 - updateForm();
109 - }
110 -
111 - public boolean onBrowserEvent(Event pEvent) {
112 - switch (DOM.eventGetType(pEvent)) {
113 - case Event.ONMOUSEDOWN:
114 - eventPreventDefaultAndCancelBubble(pEvent);
115 - onMouseDown(pEvent);
116 - break;
117 - case Event.ONMOUSEUP:
118 - onMouseUp(pEvent);
119 - break;
120 - case Event.ONMOUSEOVER:
121 - onMouseEnter(pEvent);
122 - break;
123 - case Event.ONMOUSEOUT:
124 - onMouseLeave(pEvent);
125 - break;
126 - case Event.ONMOUSEMOVE:
127 - eventPreventDefaultAndCancelBubble(pEvent);
128 - onMouseMove(pEvent);
129 - default:
130 - return false;
131 - }
132 - return !isEnabled();
133 - }
134 -
135 - protected void onMouseDown(Event pEvent) {
136 - mouseDown();
137 - }
138 -
139 - protected void onMouseUp(Event pEvent) {
140 - mouseUp();
141 - }
142 -
143 - protected void onMouseEnter(Event pEvent) {
144 - mouseEnter();
145 - }
146 -
147 - protected void onMouseLeave(Event pEvent) {
148 - mouseLeave();
149 - }
150 -
151 - protected void onMouseMove(Event pEvent) {
152 - if (!mLastLogWasMove) {
153 - mLastLogWasMove = true;
154 - mLogger.log("Move");
155 - }
156 - MyMouseMoveEvent zEvent = new MyMouseMoveEvent(pEvent);
157 - int zRelativeX = zEvent.getRelativeX(mMouseCtrlElement);
158 - int zOffsetWidth = mMouseCtrlElement.getOffsetWidth();
159 - int zRelativeY = zEvent.getRelativeY(mMouseCtrlElement);
160 - int zOffsetHeight = mMouseCtrlElement.getOffsetHeight();
161 - if (over(zRelativeX, zOffsetWidth) && over(zRelativeY, zOffsetHeight)) {
162 - if (!mMouseOver) {
163 - mouseEnter();
164 - }
165 - } else {
166 - if (mMouseOver) {
167 - mouseLeave();
168 - }
169 - }
170 - }
171 -
172 - private boolean over(int pRelativeAt, int pOffsetSize) {
173 - return (0 <= pRelativeAt) && (pRelativeAt < pOffsetSize);
174 - }
175 -
176 - protected void mouseDown() {
177 - mLastLogWasMove = false;
178 - mLogger.log("Down");
179 - mMouseDown = true;
180 - updateForm();
181 - }
182 -
183 - protected void mouseUp() {
184 - mLastLogWasMove = false;
185 - mLogger.log("Up");
186 - mMouseDown = false;
187 - updateForm();
188 - if (mListener != null) {
189 - mListener.mouseClicked();
190 - }
191 - }
192 -
193 - protected void mouseEnter() {
194 - mLastLogWasMove = false;
195 - mLogger.log("Enter");
196 - mMouseOver = true;
197 - updateForm();
198 - }
199 -
200 - protected void mouseLeave() {
201 - mLastLogWasMove = false;
202 - mLogger.log("Leave");
203 - mMouseDown = false;
204 - mMouseOver = false;
205 - updateForm();
206 - }
207 -
208 - public static void eventPreventDefaultAndCancelBubble(Event pEvent) {
209 - pEvent.preventDefault();
210 - pEvent.stopPropagation();
211 - }
212 -
213 - public static class State {
214 - private String mText;
215 -
216 - public State(String pText) {
217 - mText = pText;
218 - }
219 -
220 - @Override
221 - public String toString() {
222 - return mText;
223 - }
224 -
225 - public String getURL(String pURLBaseGifExtentionAssumed) {
226 - return pURLBaseGifExtentionAssumed + "-" + mText + ".cache.gif";
227 - }
228 - }
229 -
230 - protected static class MyMouseMoveEvent extends MouseMoveEvent {
231 - public MyMouseMoveEvent(Event pEvent) {
232 - setNativeEvent(pEvent);
233 - }
234 - }
235 -
236 - private static final Logger NOOP_LOGGER = new Logger() {
237 - public void log(String message) {
238 - }
239 - };
240 - }
1 + // This Source Code is derived from the version(s) at litesoft.org which are in the Public Domain per: http://unlicense.org
2 + package com.wdstechnology.ucci.deviceassist.client.ui;
3 +
4 + import com.google.gwt.event.dom.client.MouseMoveEvent;
5 + import com.google.gwt.user.client.*;
6 +
7 + public class WidgetMouseHandler {
8 + public interface MouseClickedListener {
9 + void mouseClicked();
10 + }
11 +
12 + public interface Logger {
13 + void log(String message);
14 + }
15 +
16 + public static int EVENT_BITS = Event.MOUSEEVENTS;
17 +
18 + private static final State sREGULAR = new State("Regular");
19 +
20 + private static final State sMOUSEOVER = new State("Mouseover");
21 +
22 + private static final State sMOUSEDOWN = new State("Mousedown");
23 +
24 + private static final State sDISABLED = new State("Disabled");
25 +
26 + public static final State[] ALL_STATES = new State[] { sREGULAR, sMOUSEOVER, sMOUSEDOWN, sDISABLED };
27 +
28 + private boolean mMouseOver = false;
29 +
30 + private boolean mMouseDown = false;
31 +
32 + private boolean mDisabled = false;
33 +
34 + protected Element mMouseCtrlElement;
35 +
36 + private MouseClickedListener mListener;
37 +
38 + protected State mCurrentState = null;
39 +
40 + private Element mSavedCaptureElement = null;
41 +
42 + private final Logger mLogger;
43 +
44 + private boolean mLastLogWasMove = false;
45 +
46 + public WidgetMouseHandler(Element pMouseCtrlElement, MouseClickedListener pListener, Logger pLogger) {
47 + mMouseCtrlElement = pMouseCtrlElement;
48 + mListener = pListener;
49 + mLogger = (pLogger != null) ? pLogger : NOOP_LOGGER;
50 + }
51 +
52 + private State determineNewForm() {
53 + if (mDisabled) {
54 + return sDISABLED;
55 + }
56 + if (mMouseDown) {
57 + return sMOUSEDOWN;
58 + }
59 + if (mMouseOver) {
60 + return sMOUSEOVER;
61 + }
62 + return sREGULAR;
63 + }
64 +
65 + public WidgetMouseHandler updateForm() {
66 + State zNewForm = determineNewForm();
67 + if (mCurrentState != zNewForm) {
68 + if (mCurrentState != null) {
69 + removeCurrentState();
70 +
71 + if (mCurrentState == sMOUSEDOWN) {
72 + DOM.releaseCapture(mMouseCtrlElement);
73 + if (mSavedCaptureElement != null) {
74 + DOM.setCapture(mSavedCaptureElement);
75 + mSavedCaptureElement = null;
76 + }
77 + }
78 + }
79 + if (zNewForm != sDISABLED) {
80 + if (zNewForm == sMOUSEDOWN) {
81 + mSavedCaptureElement = DOM.getCaptureElement();
82 + if (mSavedCaptureElement != null) {
83 + DOM.releaseCapture(mSavedCaptureElement);
84 + }
85 + DOM.setCapture(mMouseCtrlElement);
86 + }
87 + }
88 + mCurrentState = zNewForm;
89 + applyCurrentState();
90 + }
91 + return this;
92 + }
93 +
94 + protected void applyCurrentState() {
95 + mMouseCtrlElement.addClassName("" + mCurrentState);
96 + }
97 +
98 + protected void removeCurrentState() {
99 + mMouseCtrlElement.removeClassName("" + mCurrentState);
100 + }
101 +
102 + public boolean isEnabled() {
103 + return !mDisabled;
104 + }
105 +
106 + public void setEnabled(boolean pEnabled) {
107 + mDisabled = !pEnabled;
108 + updateForm();
109 + }
110 +
111 + public boolean onBrowserEvent(Event pEvent) {
112 + switch (DOM.eventGetType(pEvent)) {
113 + case Event.ONMOUSEDOWN:
114 + eventPreventDefaultAndCancelBubble(pEvent);
115 + onMouseDown(pEvent);
116 + break;
117 + case Event.ONMOUSEUP:
118 + onMouseUp(pEvent);
119 + break;
120 + case Event.ONMOUSEOVER:
121 + onMouseEnter(pEvent);
122 + break;
123 + case Event.ONMOUSEOUT:
124 + onMouseLeave(pEvent);
125 + break;
126 + case Event.ONMOUSEMOVE:
127 + eventPreventDefaultAndCancelBubble(pEvent);
128 + onMouseMove(pEvent);
129 + default:
130 + return false;
131 + }
132 + return !isEnabled();
133 + }
134 +
135 + protected void onMouseDown(Event pEvent) {
136 + mouseDown();
137 + }
138 +
139 + protected void onMouseUp(Event pEvent) {
140 + mouseUp();
141 + }
142 +
143 + protected void onMouseEnter(Event pEvent) {
144 + mouseEnter();
145 + }
146 +
147 + protected void onMouseLeave(Event pEvent) {
148 + mouseLeave();
149 + }
150 +
151 + protected void onMouseMove(Event pEvent) {
152 + if (!mLastLogWasMove) {
153 + mLastLogWasMove = true;
154 + mLogger.log("Move");
155 + }
156 + MyMouseMoveEvent zEvent = new MyMouseMoveEvent(pEvent);
157 + int zRelativeX = zEvent.getRelativeX(mMouseCtrlElement);
158 + int zOffsetWidth = mMouseCtrlElement.getOffsetWidth();
159 + int zRelativeY = zEvent.getRelativeY(mMouseCtrlElement);
160 + int zOffsetHeight = mMouseCtrlElement.getOffsetHeight();
161 + if (over(zRelativeX, zOffsetWidth) && over(zRelativeY, zOffsetHeight)) {
162 + if (!mMouseOver) {
163 + mouseEnter();
164 + }
165 + } else {
166 + if (mMouseOver) {
167 + mouseLeave();
168 + }
169 + }
170 + }
171 +
172 + private boolean over(int pRelativeAt, int pOffsetSize) {
173 + return (0 <= pRelativeAt) && (pRelativeAt < pOffsetSize);
174 + }
175 +
176 + protected void mouseDown() {
177 + mLastLogWasMove = false;
178 + mLogger.log("Down");
179 + mMouseDown = true;
180 + updateForm();
181 + }
182 +
183 + protected void mouseUp() {
184 + mLastLogWasMove = false;
185 + mLogger.log("Up");
186 + mMouseDown = false;
187 + updateForm();
188 + if (mListener != null) {
189 + mListener.mouseClicked();
190 + }
191 + }
192 +
193 + protected void mouseEnter() {
194 + mLastLogWasMove = false;
195 + mLogger.log("Enter");
196 + mMouseOver = true;
197 + updateForm();
198 + }
199 +
200 + protected void mouseLeave() {
201 + mLastLogWasMove = false;
202 + mLogger.log("Leave");
203 + mMouseDown = false;
204 + mMouseOver = false;
205 + updateForm();
206 + }
207 +
208 + public static void eventPreventDefaultAndCancelBubble(Event pEvent) {
209 + pEvent.preventDefault();
210 + pEvent.stopPropagation();
211 + }
212 +
213 + public static class State {
214 + private String mText;
215 +
216 + public State(String pText) {
217 + mText = pText;
218 + }
219 +
220 + @Override
221 + public String toString() {
222 + return mText;
223 + }
224 +
225 + public String getURL(String pURLBaseGifExtentionAssumed) {
226 + return pURLBaseGifExtentionAssumed + "-" + mText + ".cache.gif";
227 + }
228 + }
229 +
230 + protected static class MyMouseMoveEvent extends MouseMoveEvent {
231 + public MyMouseMoveEvent(Event pEvent) {
232 + setNativeEvent(pEvent);
233 + }
234 + }
235 +
236 + private static final Logger NOOP_LOGGER = new Logger() {
237 + public void log(String message) {
238 + }
239 + };
240 + }