superchris-rubyjs 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +131 -0
- data/Rakefile +65 -0
- data/bin/rubyjs +144 -0
- data/rubyjs.gemspec +112 -0
- data/src/rubyjs.rb +3 -0
- data/src/rubyjs/code_generator.rb +474 -0
- data/src/rubyjs/compiler.rb +2061 -0
- data/src/rubyjs/debug_name_generator.rb +95 -0
- data/src/rubyjs/encoder.rb +171 -0
- data/src/rubyjs/eval_into.rb +59 -0
- data/src/rubyjs/lib/core.rb +1016 -0
- data/src/rubyjs/lib/dom_element.rb +66 -0
- data/src/rubyjs/lib/json.rb +101 -0
- data/src/rubyjs/lib/microunit.rb +188 -0
- data/src/rubyjs/model.rb +293 -0
- data/src/rubyjs/name_generator.rb +71 -0
- data/src/rwt/AbsolutePanel.rb +161 -0
- data/src/rwt/DOM.Konqueror.rb +89 -0
- data/src/rwt/DOM.Opera.rb +65 -0
- data/src/rwt/DOM.rb +1044 -0
- data/src/rwt/Event.Opera.rb +35 -0
- data/src/rwt/Event.rb +429 -0
- data/src/rwt/HTTPRequest.IE6.rb +5 -0
- data/src/rwt/HTTPRequest.rb +74 -0
- data/src/rwt/Label.rb +164 -0
- data/src/rwt/Panel.rb +90 -0
- data/src/rwt/RootPanel.rb +16 -0
- data/src/rwt/UIObject.rb +495 -0
- data/src/rwt/Widget.rb +193 -0
- data/src/rwt/ported-from/AbsolutePanel.java +158 -0
- data/src/rwt/ported-from/DOM.java +571 -0
- data/src/rwt/ported-from/DOMImpl.java +426 -0
- data/src/rwt/ported-from/DOMImplOpera.java +82 -0
- data/src/rwt/ported-from/DOMImplStandard.java +234 -0
- data/src/rwt/ported-from/HTTPRequest.java +81 -0
- data/src/rwt/ported-from/HTTPRequestImpl.java +103 -0
- data/src/rwt/ported-from/Label.java +163 -0
- data/src/rwt/ported-from/Panel.java +99 -0
- data/src/rwt/ported-from/UIObject.java +614 -0
- data/src/rwt/ported-from/Widget.java +221 -0
- data/test/benchmark/bm_vm1_block.rb +15 -0
- data/test/benchmark/bm_vm1_const.rb +13 -0
- data/test/benchmark/bm_vm1_ensure.rb +15 -0
- data/test/benchmark/common.rb +5 -0
- data/test/benchmark/params.yaml +7 -0
- data/test/common.Browser.rb +13 -0
- data/test/common.rb +8 -0
- data/test/gen_browser_test_suite.rb +129 -0
- data/test/gen_test_suite.rb +41 -0
- data/test/run_benchs.rb +58 -0
- data/test/run_tests.rb +22 -0
- data/test/test_args.rb +24 -0
- data/test/test_array.rb +22 -0
- data/test/test_case.rb +35 -0
- data/test/test_class.rb +55 -0
- data/test/test_eql.rb +9 -0
- data/test/test_exception.rb +61 -0
- data/test/test_expr.rb +12 -0
- data/test/test_hash.rb +29 -0
- data/test/test_hot_ruby.rb +146 -0
- data/test/test_if.rb +28 -0
- data/test/test_insertion_sort.rb +25 -0
- data/test/test_inspect.rb +10 -0
- data/test/test_lebewesen.rb +39 -0
- data/test/test_massign.rb +66 -0
- data/test/test_new.rb +12 -0
- data/test/test_range.rb +70 -0
- data/test/test_regexp.rb +22 -0
- data/test/test_send.rb +65 -0
- data/test/test_simple_output.rb +5 -0
- data/test/test_splat.rb +21 -0
- data/test/test_string.rb +51 -0
- data/test/test_test.rb +17 -0
- data/test/test_yield.rb +154 -0
- data/utils/js/Makefile +9 -0
- data/utils/js/RunScript.class +0 -0
- data/utils/js/RunScript.java +73 -0
- data/utils/js/js.jar +0 -0
- data/utils/js/run.sh +3 -0
- data/utils/jsc/Makefile +7 -0
- data/utils/jsc/README +3 -0
- data/utils/jsc/RunScript.c +93 -0
- data/utils/jsc/run.sh +15 -0
- data/utils/yuicompressor/README +1 -0
- data/utils/yuicompressor/yuicompressor-2.2.5.jar +0 -0
- metadata +157 -0
data/src/rwt/Widget.rb
ADDED
@@ -0,0 +1,193 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2007 by Michael Neumann (mneumann@ntecs.de)
|
3
|
+
#
|
4
|
+
# Copyright 2007 Google Inc.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
7
|
+
# use this file except in compliance with the License. You may obtain a copy of
|
8
|
+
# the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
14
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
15
|
+
# License for the specific language governing permissions and limitations under
|
16
|
+
# the License.
|
17
|
+
#++
|
18
|
+
|
19
|
+
#
|
20
|
+
# The base class for the majority of user-interface objects. Widget adds
|
21
|
+
# support for receiving events from the browser and being added directly to
|
22
|
+
# panels (class +Panel+).
|
23
|
+
#
|
24
|
+
class Widget < UIObject
|
25
|
+
|
26
|
+
#
|
27
|
+
# Gets this widget's parent panel.
|
28
|
+
#
|
29
|
+
# return:: the widget's parent panel
|
30
|
+
#
|
31
|
+
def getParent
|
32
|
+
@parent
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# Sets this widget's parent. This method should only be called by
|
37
|
+
# +Panel+ and +Composite+.
|
38
|
+
#
|
39
|
+
# parent:: the widget's new parent
|
40
|
+
#
|
41
|
+
def setParent(parent)
|
42
|
+
oldParent = @parent
|
43
|
+
@parent = parent
|
44
|
+
|
45
|
+
if parent.nil?
|
46
|
+
# Remove from parent
|
47
|
+
onDetach() if oldParent and oldParent.isAttached
|
48
|
+
elsif parent.isAttached
|
49
|
+
onAttach()
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# Determines whether this widget is currently attached to the browser's
|
55
|
+
# document (i.e., there is an unbroken chain of widgets between this widget
|
56
|
+
# and the underlying browser document).
|
57
|
+
#
|
58
|
+
# return:: +true+ if the widget is attached
|
59
|
+
#
|
60
|
+
def isAttached
|
61
|
+
@attached
|
62
|
+
end
|
63
|
+
|
64
|
+
#
|
65
|
+
# Sets this object's browser element. Widget subclasses must call this method
|
66
|
+
# before attempting to call any other methods.
|
67
|
+
#
|
68
|
+
# If a browser element has already been attached, then it is replaced with
|
69
|
+
# the new element. The old event listeners are removed from the old browser
|
70
|
+
# element, and the event listeners are set up on the new browser element.
|
71
|
+
#
|
72
|
+
# elem:: the object's new element
|
73
|
+
#
|
74
|
+
def setElement(elem)
|
75
|
+
if @attached
|
76
|
+
# Remove old event listener to avoid leaking. onDetach will not do this
|
77
|
+
# for us, because it is only called when the widget itself is detached from
|
78
|
+
# the document.
|
79
|
+
DOM.removeEventListener(getElement())
|
80
|
+
end
|
81
|
+
|
82
|
+
super(elem)
|
83
|
+
|
84
|
+
if @attached
|
85
|
+
# Hook the event listener back up on the new element. onAttach will not
|
86
|
+
# do this for us, because it is only called when the widget itself is
|
87
|
+
# attached to the document.
|
88
|
+
DOM.setEventListener(elem, self)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
#
|
93
|
+
# Removes this widget from its parent widget. If it has no parent, this
|
94
|
+
# method does nothing.
|
95
|
+
#
|
96
|
+
def removeFromParent
|
97
|
+
@parent.remove(self) if @parent
|
98
|
+
end
|
99
|
+
|
100
|
+
#-------------------------------------------------------------------
|
101
|
+
# Event handlers
|
102
|
+
#-------------------------------------------------------------------
|
103
|
+
|
104
|
+
def onBrowserEvent(event)
|
105
|
+
end
|
106
|
+
|
107
|
+
#
|
108
|
+
# This method is called when a widget is attached to the browser's document.
|
109
|
+
# To receive notification after a Widget has been added to the
|
110
|
+
# document, override the +onLoad+ method.
|
111
|
+
#
|
112
|
+
# Subclasses that override this method must call <tt>super()</tt> to ensure
|
113
|
+
# that the Widget has been attached to the underlying Element.
|
114
|
+
#
|
115
|
+
def onAttach
|
116
|
+
raise "already attached" if @attached
|
117
|
+
|
118
|
+
@attached = true
|
119
|
+
|
120
|
+
# Set the main element's event listener. This should only be set
|
121
|
+
# while the widget is attached, because it creates a circular
|
122
|
+
# reference between JavaScript and the DOM.
|
123
|
+
DOM.setEventListener(getElement(), self)
|
124
|
+
|
125
|
+
# Now that the widget is attached, call onLoad().
|
126
|
+
onLoad()
|
127
|
+
end
|
128
|
+
|
129
|
+
#
|
130
|
+
# This method is called when a widget is detached from the browser's
|
131
|
+
# document. To receive notification before a Widget is removed from the
|
132
|
+
# document, override the +onUnload+ method.
|
133
|
+
#
|
134
|
+
# Subclasses that override this method must call <tt>super()</tt>
|
135
|
+
# to ensure that the Widget has been detached from the underlying Element.
|
136
|
+
# Failure to do so will result in application memory leaks due to circular
|
137
|
+
# references between DOM Elements and JavaScript objects.
|
138
|
+
#
|
139
|
+
def onDetach
|
140
|
+
raise "cannot detached unattached widget" unless @attached
|
141
|
+
|
142
|
+
# Give the user a chance to clean up, but don't trust the code to not throw
|
143
|
+
# TODO: begin onUnload ensure xxx end
|
144
|
+
onUnload()
|
145
|
+
@attached = false
|
146
|
+
|
147
|
+
# Clear out the element's event listener (breaking the circular
|
148
|
+
# reference between it and the widget).
|
149
|
+
DOM.removeEventListener(getElement())
|
150
|
+
end
|
151
|
+
|
152
|
+
#
|
153
|
+
# This method is called immediately after a widget becomes attached to the
|
154
|
+
# browser's document.
|
155
|
+
#
|
156
|
+
def onLoad
|
157
|
+
end
|
158
|
+
|
159
|
+
#
|
160
|
+
# This method is called immediately before a widget will be detached from the
|
161
|
+
# browser's document.
|
162
|
+
#
|
163
|
+
def onUnload
|
164
|
+
end
|
165
|
+
|
166
|
+
#-------------------------------------------------------------------
|
167
|
+
# Layout data
|
168
|
+
#-------------------------------------------------------------------
|
169
|
+
|
170
|
+
#
|
171
|
+
# Gets the panel-defined layout data associated with this widget.
|
172
|
+
#
|
173
|
+
# return:: the widget's layout data
|
174
|
+
#
|
175
|
+
# See #setLayoutData.
|
176
|
+
#
|
177
|
+
def getLayoutData
|
178
|
+
@layoutData
|
179
|
+
end
|
180
|
+
|
181
|
+
#
|
182
|
+
# Sets the panel-defined layout data associated with this widget. Only the
|
183
|
+
# panel that currently contains a widget should ever set this value. It
|
184
|
+
# serves as a place to store layout bookkeeping data associated with a
|
185
|
+
# widget.
|
186
|
+
#
|
187
|
+
# layoutData:: the widget's layout data
|
188
|
+
#
|
189
|
+
def setLayoutData(layoutData)
|
190
|
+
@layoutData = layoutData
|
191
|
+
end
|
192
|
+
|
193
|
+
end # class Widget
|
@@ -0,0 +1,158 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2007 Google Inc.
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
5
|
+
* use this file except in compliance with the License. You may obtain a copy of
|
6
|
+
* the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
* License for the specific language governing permissions and limitations under
|
14
|
+
* the License.
|
15
|
+
*/
|
16
|
+
package com.google.gwt.user.client.ui;
|
17
|
+
|
18
|
+
import com.google.gwt.user.client.DOM;
|
19
|
+
import com.google.gwt.user.client.Element;
|
20
|
+
|
21
|
+
/**
|
22
|
+
* An absolute panel positions all of its children absolutely, allowing them to
|
23
|
+
* overlap.
|
24
|
+
*
|
25
|
+
* <p>
|
26
|
+
* Note that this panel will not automatically resize itself to allow enough
|
27
|
+
* room for its absolutely-positioned children. It must be explicitly sized in
|
28
|
+
* order to make room for them.
|
29
|
+
* </p>
|
30
|
+
*
|
31
|
+
* <p>
|
32
|
+
* Once a widget has been added to an absolute panel, the panel effectively
|
33
|
+
* "owns" the positioning of the widget. Any existing positioning attributes
|
34
|
+
* on the widget may be modified by the panel.
|
35
|
+
* </p>
|
36
|
+
*/
|
37
|
+
public class AbsolutePanel extends ComplexPanel {
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Changes a DOM element's positioning to static.
|
41
|
+
*
|
42
|
+
* @param elem the DOM element
|
43
|
+
*/
|
44
|
+
private static void changeToStaticPositioning(Element elem) {
|
45
|
+
DOM.setStyleAttribute(elem, "left", "");
|
46
|
+
DOM.setStyleAttribute(elem, "top", "");
|
47
|
+
DOM.setStyleAttribute(elem, "position", "static");
|
48
|
+
}
|
49
|
+
|
50
|
+
/**
|
51
|
+
* Creates an empty absolute panel.
|
52
|
+
*/
|
53
|
+
public AbsolutePanel() {
|
54
|
+
setElement(DOM.createDiv());
|
55
|
+
|
56
|
+
// Setting the panel's position style to 'relative' causes it to be treated
|
57
|
+
// as a new positioning context for its children.
|
58
|
+
DOM.setStyleAttribute(getElement(), "position", "relative");
|
59
|
+
DOM.setStyleAttribute(getElement(), "overflow", "hidden");
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Adds a child widget to this panel.
|
64
|
+
*
|
65
|
+
* @param w the child widget to be added
|
66
|
+
*/
|
67
|
+
public void add(Widget w) {
|
68
|
+
super.add(w, getElement());
|
69
|
+
}
|
70
|
+
|
71
|
+
/**
|
72
|
+
* Adds a widget to the panel at the specified position. Setting a position
|
73
|
+
* of <code>(-1, -1)</code> will cause the child widget to be positioned
|
74
|
+
* statically.
|
75
|
+
*
|
76
|
+
* @param w the widget to be added
|
77
|
+
* @param left the widget's left position
|
78
|
+
* @param top the widget's top position
|
79
|
+
*/
|
80
|
+
public void add(Widget w, int left, int top) {
|
81
|
+
// In order to avoid the potential for a flicker effect, it is necessary
|
82
|
+
// to set the position of the widget before adding it to the AbsolutePanel.
|
83
|
+
// The Widget should be removed from its parent before any positional
|
84
|
+
// changes are made to prevent flickering.
|
85
|
+
w.removeFromParent();
|
86
|
+
setWidgetPositionImpl(w, left, top);
|
87
|
+
add(w);
|
88
|
+
}
|
89
|
+
|
90
|
+
/**
|
91
|
+
* Gets the position of the left outer border edge of the widget relative to
|
92
|
+
* the left outer border edge of the panel.
|
93
|
+
*
|
94
|
+
* @param w the widget whose position is to be retrieved
|
95
|
+
* @return the widget's left position
|
96
|
+
*/
|
97
|
+
public int getWidgetLeft(Widget w) {
|
98
|
+
checkWidgetParent(w);
|
99
|
+
return DOM.getAbsoluteLeft(w.getElement()) - DOM.getAbsoluteLeft(getElement());
|
100
|
+
}
|
101
|
+
|
102
|
+
/**
|
103
|
+
* Gets the position of the top outer border edge of the widget relative to
|
104
|
+
* the top outer border edge of the panel.
|
105
|
+
*
|
106
|
+
* @param w the widget whose position is to be retrieved
|
107
|
+
* @return the widget's top position
|
108
|
+
*/
|
109
|
+
public int getWidgetTop(Widget w) {
|
110
|
+
checkWidgetParent(w);
|
111
|
+
return DOM.getAbsoluteTop(w.getElement()) - DOM.getAbsoluteTop(getElement());
|
112
|
+
}
|
113
|
+
|
114
|
+
/**
|
115
|
+
* Sets the position of the specified child widget. Setting a position of
|
116
|
+
* <code>(-1, -1)</code> will cause the child widget to be positioned
|
117
|
+
* statically.
|
118
|
+
*
|
119
|
+
* @param w the child widget to be positioned
|
120
|
+
* @param left the widget's left position
|
121
|
+
* @param top the widget's top position
|
122
|
+
*/
|
123
|
+
public void setWidgetPosition(Widget w, int left, int top) {
|
124
|
+
checkWidgetParent(w);
|
125
|
+
setWidgetPositionImpl(w, left, top);
|
126
|
+
}
|
127
|
+
|
128
|
+
/**
|
129
|
+
* Calls the superclass' <code>disown(Widget)</code> method, and sets the
|
130
|
+
* the positioning of the widget to static. This is done so that any
|
131
|
+
* positioning changes to the widget that were done by the panel are undone
|
132
|
+
* when the widget is disowned from the panel.
|
133
|
+
*
|
134
|
+
* @param w the widget to be disowned
|
135
|
+
*/
|
136
|
+
protected void disown(Widget w) {
|
137
|
+
super.disown(w);
|
138
|
+
changeToStaticPositioning(w.getElement());
|
139
|
+
}
|
140
|
+
|
141
|
+
private void checkWidgetParent(Widget w) {
|
142
|
+
if (w.getParent() != this) {
|
143
|
+
throw new IllegalArgumentException(
|
144
|
+
"Widget must be a child of this panel.");
|
145
|
+
}
|
146
|
+
}
|
147
|
+
|
148
|
+
private void setWidgetPositionImpl(Widget w, int left, int top) {
|
149
|
+
Element h = w.getElement();
|
150
|
+
if ((left == -1) && (top == -1)) {
|
151
|
+
changeToStaticPositioning(h);
|
152
|
+
} else {
|
153
|
+
DOM.setStyleAttribute(h, "position", "absolute");
|
154
|
+
DOM.setStyleAttribute(h, "left", left + "px");
|
155
|
+
DOM.setStyleAttribute(h, "top", top + "px");
|
156
|
+
}
|
157
|
+
}
|
158
|
+
}
|
@@ -0,0 +1,571 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2007 Google Inc.
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
5
|
+
* use this file except in compliance with the License. You may obtain a copy of
|
6
|
+
* the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
* License for the specific language governing permissions and limitations under
|
14
|
+
* the License.
|
15
|
+
*/
|
16
|
+
package com.google.gwt.user.client;
|
17
|
+
|
18
|
+
import com.google.gwt.core.client.GWT;
|
19
|
+
import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
|
20
|
+
import com.google.gwt.user.client.impl.DOMImpl;
|
21
|
+
|
22
|
+
import java.util.ArrayList;
|
23
|
+
|
24
|
+
/**
|
25
|
+
* This class provides a set of static methods that allow you to manipulate the
|
26
|
+
* browser's Document Object Model (DOM). It contains methods for manipulating
|
27
|
+
* both {@link com.google.gwt.user.client.Element elements} and
|
28
|
+
* {@link com.google.gwt.user.client.Event events}.
|
29
|
+
*/
|
30
|
+
public class DOM {
|
31
|
+
|
32
|
+
// The current event being fired
|
33
|
+
private static Event currentEvent = null;
|
34
|
+
private static DOMImpl impl;
|
35
|
+
private static Element sCaptureElem;
|
36
|
+
|
37
|
+
//<BrowserEventPreview>
|
38
|
+
private static ArrayList sEventPreviewStack = new ArrayList();
|
39
|
+
|
40
|
+
static {
|
41
|
+
impl = (DOMImpl) GWT.create(DOMImpl.class);
|
42
|
+
impl.init();
|
43
|
+
}
|
44
|
+
|
45
|
+
/**
|
46
|
+
* Adds an event preview to the preview stack. As long as this preview remains
|
47
|
+
* on the top of the stack, it will receive all events before they are fired
|
48
|
+
* to their listeners. Note that the event preview will receive <u>all </u>
|
49
|
+
* events, including those received due to bubbling, whereas normal event
|
50
|
+
* handlers only receive explicitly sunk events.
|
51
|
+
*
|
52
|
+
* @param preview the event preview to be added to the stack.
|
53
|
+
*/
|
54
|
+
public static void addEventPreview(EventPreview preview) {
|
55
|
+
// Add the event preview to the stack. It will automatically
|
56
|
+
// begin receiving events.
|
57
|
+
sEventPreviewStack.add(preview);
|
58
|
+
}
|
59
|
+
|
60
|
+
/**
|
61
|
+
* Cancels bubbling for the given event. This will stop the event from being
|
62
|
+
* propagated to parent elements.
|
63
|
+
*
|
64
|
+
* @param evt the event on which to cancel bubbling
|
65
|
+
* @param cancel <code>true</code> to cancel bubbling
|
66
|
+
*/
|
67
|
+
public static void eventCancelBubble(Event evt, boolean cancel) {
|
68
|
+
impl.eventCancelBubble(evt, cancel);
|
69
|
+
}
|
70
|
+
|
71
|
+
/**
|
72
|
+
* Gets whether the ALT key was depressed when the given event occurred.
|
73
|
+
*
|
74
|
+
* @param evt the event to be tested
|
75
|
+
* @return <code>true</code> if ALT was depressed when the event occurred
|
76
|
+
*/
|
77
|
+
public static boolean eventGetAltKey(Event evt) {
|
78
|
+
return impl.eventGetAltKey(evt);
|
79
|
+
}
|
80
|
+
|
81
|
+
/**
|
82
|
+
* Gets the mouse buttons that were depressed when the given event occurred.
|
83
|
+
*
|
84
|
+
* @param evt the event to be tested
|
85
|
+
* @return a bit-field, defined by {@link Event#BUTTON_LEFT},
|
86
|
+
* {@link Event#BUTTON_MIDDLE}, and {@link Event#BUTTON_RIGHT}
|
87
|
+
*/
|
88
|
+
public static int eventGetButton(Event evt) {
|
89
|
+
return impl.eventGetButton(evt);
|
90
|
+
}
|
91
|
+
|
92
|
+
/**
|
93
|
+
* Gets the mouse x-position within the browser window's client area.
|
94
|
+
*
|
95
|
+
* @param evt the event to be tested
|
96
|
+
* @return the mouse x-position
|
97
|
+
*/
|
98
|
+
public static int eventGetClientX(Event evt) {
|
99
|
+
return impl.eventGetClientX(evt);
|
100
|
+
}
|
101
|
+
|
102
|
+
/**
|
103
|
+
* Gets the mouse y-position within the browser window's client area.
|
104
|
+
*
|
105
|
+
* @param evt the event to be tested
|
106
|
+
* @return the mouse y-position
|
107
|
+
*/
|
108
|
+
public static int eventGetClientY(Event evt) {
|
109
|
+
return impl.eventGetClientY(evt);
|
110
|
+
}
|
111
|
+
|
112
|
+
/**
|
113
|
+
* Gets whether the CTRL key was depressed when the given event occurred.
|
114
|
+
*
|
115
|
+
* @param evt the event to be tested
|
116
|
+
* @return <code>true</code> if CTRL was depressed when the event occurred
|
117
|
+
*/
|
118
|
+
public static boolean eventGetCtrlKey(Event evt) {
|
119
|
+
return impl.eventGetCtrlKey(evt);
|
120
|
+
}
|
121
|
+
|
122
|
+
/**
|
123
|
+
* Gets the current event that is being fired. The current event
|
124
|
+
* is only available within the lifetime of the onBrowserEvent function.
|
125
|
+
* Once the onBrowserEvent method returns, the current event is reset
|
126
|
+
* to null.
|
127
|
+
*
|
128
|
+
* @return the current event
|
129
|
+
*/
|
130
|
+
public static Event eventGetCurrentEvent() {
|
131
|
+
return currentEvent;
|
132
|
+
}
|
133
|
+
|
134
|
+
/**
|
135
|
+
* Gets the current target element of the given event. This is the element
|
136
|
+
* whose listener fired last, not the element which fired the event
|
137
|
+
* initially.
|
138
|
+
*
|
139
|
+
* @param evt the event
|
140
|
+
* @return the event's current target element
|
141
|
+
* @see DOM#eventGetTarget(Event)
|
142
|
+
*/
|
143
|
+
public static Element eventGetCurrentTarget(Event evt) {
|
144
|
+
return impl.eventGetCurrentTarget(evt);
|
145
|
+
}
|
146
|
+
|
147
|
+
/**
|
148
|
+
* Gets the element from which the mouse pointer was moved (only valid for
|
149
|
+
* {@link Event#ONMOUSEOVER}).
|
150
|
+
*
|
151
|
+
* @param evt the event to be tested
|
152
|
+
* @return the element from which the mouse pointer was moved
|
153
|
+
*/
|
154
|
+
public static Element eventGetFromElement(Event evt) {
|
155
|
+
return impl.eventGetFromElement(evt);
|
156
|
+
}
|
157
|
+
|
158
|
+
/**
|
159
|
+
* Gets the key code associated with this event.
|
160
|
+
*
|
161
|
+
* <p>
|
162
|
+
* For {@link Event#ONKEYPRESS}, this method returns the Unicode value of the
|
163
|
+
* character generated. For {@link Event#ONKEYDOWN} and {@link Event#ONKEYUP},
|
164
|
+
* it returns the code associated with the physical key.
|
165
|
+
* </p>
|
166
|
+
*
|
167
|
+
* @param evt the event to be tested
|
168
|
+
* @return the Unicode character or key code.
|
169
|
+
* @see com.google.gwt.user.client.ui.KeyboardListener
|
170
|
+
*/
|
171
|
+
public static int eventGetKeyCode(Event evt) {
|
172
|
+
return impl.eventGetKeyCode(evt);
|
173
|
+
}
|
174
|
+
|
175
|
+
/**
|
176
|
+
* Gets whether the META key was depressed when the given event occurred.
|
177
|
+
*
|
178
|
+
* @param evt the event to be tested
|
179
|
+
* @return <code>true</code> if META was depressed when the event occurred
|
180
|
+
*/
|
181
|
+
public static boolean eventGetMetaKey(Event evt) {
|
182
|
+
return impl.eventGetMetaKey(evt);
|
183
|
+
}
|
184
|
+
|
185
|
+
/**
|
186
|
+
* Gets the velocity of the mouse wheel associated with the event along the
|
187
|
+
* Y axis.
|
188
|
+
* <p>
|
189
|
+
* The velocity of the event is an artifical measurement for relative
|
190
|
+
* comparisons of wheel activity. It is affected by some non-browser
|
191
|
+
* factors, including choice of input hardware and mouse acceleration
|
192
|
+
* settings. The sign of the velocity measurement agrees with the screen
|
193
|
+
* coordinate system; negative values are towards the origin and positive
|
194
|
+
* values are away from the origin. Standard scrolling speed is approximately
|
195
|
+
* ten units per event.
|
196
|
+
* </p>
|
197
|
+
*
|
198
|
+
* @param evt the event to be examined.
|
199
|
+
* @return The velocity of the mouse wheel.
|
200
|
+
*/
|
201
|
+
public static int eventGetMouseWheelVelocityY(Event evt) {
|
202
|
+
return impl.eventGetMouseWheelVelocityY(evt);
|
203
|
+
}
|
204
|
+
|
205
|
+
/**
|
206
|
+
* Gets the key-repeat state of this event.
|
207
|
+
*
|
208
|
+
* @param evt the event to be tested
|
209
|
+
* @return <code>true</code> if this key event was an auto-repeat
|
210
|
+
*/
|
211
|
+
public static boolean eventGetRepeat(Event evt) {
|
212
|
+
return impl.eventGetRepeat(evt);
|
213
|
+
}
|
214
|
+
|
215
|
+
/**
|
216
|
+
* Gets the mouse x-position on the user's display.
|
217
|
+
*
|
218
|
+
* @param evt the event to be tested
|
219
|
+
* @return the mouse x-position
|
220
|
+
*/
|
221
|
+
public static int eventGetScreenX(Event evt) {
|
222
|
+
return impl.eventGetScreenX(evt);
|
223
|
+
}
|
224
|
+
|
225
|
+
/**
|
226
|
+
* Gets the mouse y-position on the user's display.
|
227
|
+
*
|
228
|
+
* @param evt the event to be tested
|
229
|
+
* @return the mouse y-position
|
230
|
+
*/
|
231
|
+
public static int eventGetScreenY(Event evt) {
|
232
|
+
return impl.eventGetScreenY(evt);
|
233
|
+
}
|
234
|
+
|
235
|
+
/**
|
236
|
+
* Gets whether the shift key was depressed when the given event occurred.
|
237
|
+
*
|
238
|
+
* @param evt the event to be tested
|
239
|
+
* @return <code>true</code> if shift was depressed when the event occurred
|
240
|
+
*/
|
241
|
+
public static boolean eventGetShiftKey(Event evt) {
|
242
|
+
return impl.eventGetShiftKey(evt);
|
243
|
+
}
|
244
|
+
|
245
|
+
/**
|
246
|
+
* Returns the element that was the actual target of the given event.
|
247
|
+
*
|
248
|
+
* @param evt the event to be tested
|
249
|
+
* @return the target element
|
250
|
+
*/
|
251
|
+
public static Element eventGetTarget(Event evt) {
|
252
|
+
return impl.eventGetTarget(evt);
|
253
|
+
}
|
254
|
+
|
255
|
+
/**
|
256
|
+
* Gets the element to which the mouse pointer was moved (only valid for
|
257
|
+
* {@link Event#ONMOUSEOUT}).
|
258
|
+
*
|
259
|
+
* @param evt the event to be tested
|
260
|
+
* @return the element to which the mouse pointer was moved
|
261
|
+
*/
|
262
|
+
public static Element eventGetToElement(Event evt) {
|
263
|
+
return impl.eventGetToElement(evt);
|
264
|
+
}
|
265
|
+
|
266
|
+
/**
|
267
|
+
* Gets the enumerated type of this event (as defined in {@link Event}).
|
268
|
+
*
|
269
|
+
* @param evt the event to be tested
|
270
|
+
* @return the event's enumerated type
|
271
|
+
*/
|
272
|
+
public static int eventGetType(Event evt) {
|
273
|
+
return impl.eventGetTypeInt(evt);
|
274
|
+
}
|
275
|
+
|
276
|
+
/**
|
277
|
+
* Gets the type of the given event as a string.
|
278
|
+
*
|
279
|
+
* @param evt the event to be tested
|
280
|
+
* @return the event's type name
|
281
|
+
*/
|
282
|
+
public static String eventGetTypeString(Event evt) {
|
283
|
+
return impl.eventGetType(evt);
|
284
|
+
}
|
285
|
+
|
286
|
+
/**
|
287
|
+
* Prevents the browser from taking its default action for the given event.
|
288
|
+
*
|
289
|
+
* @param evt the event whose default action is to be prevented
|
290
|
+
*/
|
291
|
+
public static void eventPreventDefault(Event evt) {
|
292
|
+
impl.eventPreventDefault(evt);
|
293
|
+
}
|
294
|
+
|
295
|
+
/**
|
296
|
+
* Sets the key code associated with the given keyboard event.
|
297
|
+
*
|
298
|
+
* @param evt the event whose key code is to be set
|
299
|
+
* @param key the new key code
|
300
|
+
*/
|
301
|
+
public static void eventSetKeyCode(Event evt, char key) {
|
302
|
+
impl.eventSetKeyCode(evt, key);
|
303
|
+
}
|
304
|
+
|
305
|
+
/**
|
306
|
+
* Returns a stringized version of the event. This string is for debugging
|
307
|
+
* purposes and will NOT be consistent on different browsers.
|
308
|
+
*
|
309
|
+
* @param evt the event to stringize
|
310
|
+
* @return a string form of the event
|
311
|
+
*/
|
312
|
+
public static String eventToString(Event evt) {
|
313
|
+
return impl.eventToString(evt);
|
314
|
+
}
|
315
|
+
|
316
|
+
/**
|
317
|
+
* Gets an integer attribute on a given element.
|
318
|
+
*
|
319
|
+
* @param elem the element whose attribute is to be retrieved
|
320
|
+
* @param attr the name of the attribute to be retrieved
|
321
|
+
* @return the attribute's value as an integer
|
322
|
+
* @deprecated Use the more appropriately named
|
323
|
+
* {@link #getElementPropertyInt(Element, String)} instead.
|
324
|
+
*/
|
325
|
+
public static int getIntAttribute(Element elem, String attr) {
|
326
|
+
return getElementPropertyInt(elem, attr);
|
327
|
+
}
|
328
|
+
|
329
|
+
/**
|
330
|
+
* Gets an integer attribute on a given element's style.
|
331
|
+
*
|
332
|
+
* @param elem the element whose style attribute is to be retrieved
|
333
|
+
* @param attr the name of the attribute to be retrieved
|
334
|
+
* @return the style attribute's value as an integer
|
335
|
+
*/
|
336
|
+
public static int getIntStyleAttribute(Element elem, String attr) {
|
337
|
+
return impl.getIntStyleAttribute(elem, attr);
|
338
|
+
}
|
339
|
+
|
340
|
+
/**
|
341
|
+
* Creates an <code><option></code> element and inserts it as a child
|
342
|
+
* of the specified <code><select></code> element. If the index is
|
343
|
+
* less than zero, or greater than or equal to the length of the list, then
|
344
|
+
* the option element will be appended to the end of the list.
|
345
|
+
*
|
346
|
+
* @param select the <code><select></code> element
|
347
|
+
* @param item the text of the new item; cannot be <code>null</code>
|
348
|
+
* @param value the <code>value</code> attribute for the new
|
349
|
+
* <code><option></code>; cannot be <code>null</code>
|
350
|
+
* @param index the index at which to insert the child
|
351
|
+
*/
|
352
|
+
public static void insertListItem(Element select, String item, String value,
|
353
|
+
int index) {
|
354
|
+
impl.insertListItem(select, item, value, index);
|
355
|
+
}
|
356
|
+
|
357
|
+
/**
|
358
|
+
* Releases mouse capture on the given element. Calling this method has no
|
359
|
+
* effect if the element does not currently have mouse capture.
|
360
|
+
*
|
361
|
+
* @param elem the element to release capture
|
362
|
+
* @see #setCapture(Element)
|
363
|
+
*/
|
364
|
+
public static void releaseCapture(Element elem) {
|
365
|
+
if ((sCaptureElem != null) && compare(elem, sCaptureElem)) {
|
366
|
+
sCaptureElem = null;
|
367
|
+
}
|
368
|
+
impl.releaseCapture(elem);
|
369
|
+
}
|
370
|
+
|
371
|
+
/**
|
372
|
+
* Removes an element from the preview stack. This element will no longer
|
373
|
+
* capture events, though any preview underneath it will begin to do so.
|
374
|
+
*
|
375
|
+
* @param preview the event preview to be removed from the stack
|
376
|
+
*/
|
377
|
+
public static void removeEventPreview(EventPreview preview) {
|
378
|
+
// Remove the event preview from the stack. If it was on top,
|
379
|
+
// any preview underneath it will automatically begin to
|
380
|
+
// receive events.
|
381
|
+
sEventPreviewStack.remove(preview);
|
382
|
+
}
|
383
|
+
|
384
|
+
/**
|
385
|
+
* Scrolls the given element into view.
|
386
|
+
*
|
387
|
+
* <p>
|
388
|
+
* This method crawls up the DOM hierarchy, adjusting the scrollLeft and
|
389
|
+
* scrollTop properties of each scrollable element to ensure that the
|
390
|
+
* specified element is completely in view. It adjusts each scroll position by
|
391
|
+
* the minimum amount necessary.
|
392
|
+
* </p>
|
393
|
+
*
|
394
|
+
* @param elem the element to be made visible
|
395
|
+
*/
|
396
|
+
public static void scrollIntoView(Element elem) {
|
397
|
+
impl.scrollIntoView(elem);
|
398
|
+
}
|
399
|
+
|
400
|
+
}
|
401
|
+
|
402
|
+
/**
|
403
|
+
* Sets mouse-capture on the given element. This element will directly receive
|
404
|
+
* all mouse events until {@link #releaseCapture(Element)} is called on it.
|
405
|
+
*
|
406
|
+
* @param elem the element on which to set mouse capture
|
407
|
+
*/
|
408
|
+
public static void setCapture(Element elem) {
|
409
|
+
sCaptureElem = elem;
|
410
|
+
impl.setCapture(elem);
|
411
|
+
}
|
412
|
+
|
413
|
+
|
414
|
+
|
415
|
+
/**
|
416
|
+
* Sets the src attribute of an img element. This method ensures that imgs
|
417
|
+
* only ever have their contents requested one single time from the server.
|
418
|
+
*
|
419
|
+
* @param img a non-null img whose src attribute will be set.
|
420
|
+
* @param src a non-null url for the img
|
421
|
+
*/
|
422
|
+
public static void setImgSrc(Element img, String src) {
|
423
|
+
impl.setImgSrc(img, src);
|
424
|
+
}
|
425
|
+
|
426
|
+
/**
|
427
|
+
* Sets the HTML contained within an element.
|
428
|
+
*
|
429
|
+
* @param elem the element whose inner HTML is to be set
|
430
|
+
* @param html the new html
|
431
|
+
*/
|
432
|
+
public static void setInnerHTML(Element elem, String html) {
|
433
|
+
impl.setInnerHTML(elem, html);
|
434
|
+
}
|
435
|
+
|
436
|
+
/**
|
437
|
+
* Sets the text contained within an element. If the element already has
|
438
|
+
* children, they will be destroyed.
|
439
|
+
*
|
440
|
+
* @param elem the element whose inner text is to be set
|
441
|
+
* @param text the new text
|
442
|
+
*/
|
443
|
+
public static void setInnerText(Element elem, String text) {
|
444
|
+
impl.setInnerText(elem, text);
|
445
|
+
}
|
446
|
+
|
447
|
+
/**
|
448
|
+
* Sets an integer attribute on the given element's style.
|
449
|
+
*
|
450
|
+
* @param elem the element whose style attribute is to be set
|
451
|
+
* @param attr the name of the style attribute to be set
|
452
|
+
* @param value the style attribute's new integer value
|
453
|
+
*/
|
454
|
+
public static void setIntStyleAttribute(Element elem, String attr,
|
455
|
+
int value) {
|
456
|
+
impl.setIntStyleAttribute(elem, attr, value);
|
457
|
+
}
|
458
|
+
|
459
|
+
/**
|
460
|
+
* Sets the option text of the given select object.
|
461
|
+
*
|
462
|
+
* @param select the select object whose option text is being set
|
463
|
+
* @param text the text to set
|
464
|
+
* @param index the index of the option whose text should be set
|
465
|
+
*/
|
466
|
+
public static void setOptionText(Element select, String text, int index) {
|
467
|
+
impl.setOptionText(select, text, index);
|
468
|
+
}
|
469
|
+
|
470
|
+
/**
|
471
|
+
* Returns a stringized version of the element. This string is for debugging
|
472
|
+
* purposes and will NOT be consistent on different browsers.
|
473
|
+
*
|
474
|
+
* @param elem the element to stringize
|
475
|
+
* @return a string form of the element
|
476
|
+
*/
|
477
|
+
public static String toString(Element elem) {
|
478
|
+
return impl.toString(elem);
|
479
|
+
}
|
480
|
+
|
481
|
+
/**
|
482
|
+
* Gets the height of the browser window's client area excluding the
|
483
|
+
* scroll bar.
|
484
|
+
*
|
485
|
+
* @return the window's client height
|
486
|
+
*/
|
487
|
+
public static int windowGetClientHeight() {
|
488
|
+
return impl.windowGetClientHeight();
|
489
|
+
}
|
490
|
+
|
491
|
+
/**
|
492
|
+
* Gets the width of the browser window's client area excluding the
|
493
|
+
* vertical scroll bar.
|
494
|
+
*
|
495
|
+
* @return the window's client width
|
496
|
+
*/
|
497
|
+
public static int windowGetClientWidth() {
|
498
|
+
return impl.windowGetClientWidth();
|
499
|
+
}
|
500
|
+
|
501
|
+
/**
|
502
|
+
* This method is called directly by native code when any event is fired.
|
503
|
+
*
|
504
|
+
* @param evt the handle to the event being fired.
|
505
|
+
* @param elem the handle to the element that received the event.
|
506
|
+
* @param listener the listener associated with the element that received the
|
507
|
+
* event.
|
508
|
+
*/
|
509
|
+
static void dispatchEvent(Event evt, Element elem, EventListener listener) {
|
510
|
+
UncaughtExceptionHandler handler = GWT.getUncaughtExceptionHandler();
|
511
|
+
if (handler != null) {
|
512
|
+
dispatchEventAndCatch(evt, elem, listener, handler);
|
513
|
+
} else {
|
514
|
+
dispatchEventImpl(evt, elem, listener);
|
515
|
+
}
|
516
|
+
}
|
517
|
+
|
518
|
+
/**
|
519
|
+
* This method is called directly by native code when event preview is being
|
520
|
+
* used.
|
521
|
+
*
|
522
|
+
* @param evt a handle to the event being previewed
|
523
|
+
* @return <code>false</code> to cancel the event
|
524
|
+
*/
|
525
|
+
static boolean previewEvent(Event evt) {
|
526
|
+
// If event previews are present, redirect events to the topmost of them.
|
527
|
+
boolean ret = true;
|
528
|
+
if (sEventPreviewStack.size() > 0) {
|
529
|
+
EventPreview preview =
|
530
|
+
(EventPreview) sEventPreviewStack.get(sEventPreviewStack.size() - 1);
|
531
|
+
if (!(ret = preview.onEventPreview(evt))) {
|
532
|
+
// If the preview cancels the event, stop it from bubbling and
|
533
|
+
// performing its default action.
|
534
|
+
eventCancelBubble(evt, true);
|
535
|
+
eventPreventDefault(evt);
|
536
|
+
}
|
537
|
+
}
|
538
|
+
|
539
|
+
return ret;
|
540
|
+
}
|
541
|
+
|
542
|
+
private static void dispatchEventAndCatch(Event evt, Element elem,
|
543
|
+
EventListener listener, UncaughtExceptionHandler handler) {
|
544
|
+
try {
|
545
|
+
dispatchEventImpl(evt, elem, listener);
|
546
|
+
} catch (Throwable e) {
|
547
|
+
handler.onUncaughtException(e);
|
548
|
+
}
|
549
|
+
}
|
550
|
+
|
551
|
+
private static void dispatchEventImpl(Event evt, Element elem,
|
552
|
+
EventListener listener) {
|
553
|
+
// If this element has capture...
|
554
|
+
if (elem == sCaptureElem) {
|
555
|
+
// ... and it's losing capture, clear sCaptureElem.
|
556
|
+
if (eventGetType(evt) == Event.ONLOSECAPTURE) {
|
557
|
+
sCaptureElem = null;
|
558
|
+
}
|
559
|
+
}
|
560
|
+
|
561
|
+
// Preserve the current event in case we are in a reentrant event dispatch.
|
562
|
+
Event prevCurrentEvent = currentEvent;
|
563
|
+
currentEvent = evt;
|
564
|
+
try {
|
565
|
+
// Pass the event to the listener.
|
566
|
+
listener.onBrowserEvent(evt);
|
567
|
+
} finally {
|
568
|
+
currentEvent = prevCurrentEvent;
|
569
|
+
}
|
570
|
+
}
|
571
|
+
}
|