jrubyfx-master 1.1.1.brakemanpro1-java
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.
- checksums.yaml +7 -0
- data/LICENSE +202 -0
- data/README.md +121 -0
- data/bin/jrubyfx-compile +32 -0
- data/bin/jrubyfx-generator +98 -0
- data/bin/jrubyfx-jarify +115 -0
- data/lib/jrubyfx/application.rb +42 -0
- data/lib/jrubyfx/compiler_app.rb +51 -0
- data/lib/jrubyfx/controller.rb +375 -0
- data/lib/jrubyfx/core_ext/border_pane.rb +30 -0
- data/lib/jrubyfx/core_ext/column_constraints.rb +43 -0
- data/lib/jrubyfx/core_ext/drag_event.rb +32 -0
- data/lib/jrubyfx/core_ext/duration.rb +30 -0
- data/lib/jrubyfx/core_ext/effects.rb +32 -0
- data/lib/jrubyfx/core_ext/exts.yml +57 -0
- data/lib/jrubyfx/core_ext/file_chooser.rb +63 -0
- data/lib/jrubyfx/core_ext/geometry.rb +27 -0
- data/lib/jrubyfx/core_ext/grid_pane.rb +30 -0
- data/lib/jrubyfx/core_ext/image_view.rb +25 -0
- data/lib/jrubyfx/core_ext/media_player.rb +25 -0
- data/lib/jrubyfx/core_ext/observable_value.rb +158 -0
- data/lib/jrubyfx/core_ext/pagination.rb +28 -0
- data/lib/jrubyfx/core_ext/path.rb +37 -0
- data/lib/jrubyfx/core_ext/precompiled.rb +1883 -0
- data/lib/jrubyfx/core_ext/progress_indicator.rb +41 -0
- data/lib/jrubyfx/core_ext/radial_gradient.rb +37 -0
- data/lib/jrubyfx/core_ext/region.rb +42 -0
- data/lib/jrubyfx/core_ext/rotate.rb +39 -0
- data/lib/jrubyfx/core_ext/stage.rb +89 -0
- data/lib/jrubyfx/core_ext/table_view.rb +31 -0
- data/lib/jrubyfx/core_ext/timeline.rb +56 -0
- data/lib/jrubyfx/core_ext/transition.rb +26 -0
- data/lib/jrubyfx/core_ext/tree_view.rb +40 -0
- data/lib/jrubyfx/core_ext/xy_chart.rb +53 -0
- data/lib/jrubyfx/dsl.rb +330 -0
- data/lib/jrubyfx/dsl_control.rb +28 -0
- data/lib/jrubyfx/dsl_map.rb +273 -0
- data/lib/jrubyfx/imports.rb +310 -0
- data/lib/jrubyfx/java_fx_impl.rb +137 -0
- data/lib/jrubyfx/module.rb +178 -0
- data/lib/jrubyfx/part_imports.rb +127 -0
- data/lib/jrubyfx/utils/__ignore_java_stupid_rdoc.rb +30 -0
- data/lib/jrubyfx/utils/common_converters.rb +223 -0
- data/lib/jrubyfx/utils/common_utils.rb +72 -0
- data/lib/jrubyfx/utils/string_utils.rb +48 -0
- data/lib/jrubyfx/utils.rb +76 -0
- data/lib/jrubyfx/version.rb +4 -0
- data/lib/jrubyfx.rb +41 -0
- data/lib/jrubyfx_tasks.rb +183 -0
- metadata +145 -0
@@ -0,0 +1,310 @@
|
|
1
|
+
=begin
|
2
|
+
JRubyFX - Write JavaFX and FXML in Ruby
|
3
|
+
Copyright (C) 2013 The JRubyFX Team
|
4
|
+
|
5
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
you may not use this file except in compliance with the License.
|
7
|
+
You may obtain a copy of the License at
|
8
|
+
|
9
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
|
11
|
+
Unless required by applicable law or agreed to in writing, software
|
12
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
See the License for the specific language governing permissions and
|
15
|
+
limitations under the License.
|
16
|
+
=end
|
17
|
+
|
18
|
+
require_relative 'utils'
|
19
|
+
|
20
|
+
# Update load path to include the JavaFX runtime and fail nicely if we can't find it
|
21
|
+
begin
|
22
|
+
if ENV['JFX_DIR']
|
23
|
+
$LOAD_PATH << ENV['JFX_DIR']
|
24
|
+
else #should we check for 1.7 vs 1.8? oh well, adding extra paths won't hurt anybody (maybe performance loading)
|
25
|
+
jfx_path = ENV_JAVA["sun.boot.library.path"]
|
26
|
+
$LOAD_PATH << if jfx_path.include? ":\\" and !jfx_path.include? "/" # can be tricked, but should work fine
|
27
|
+
#windows
|
28
|
+
jfx_path.gsub(/\\bin[\\]*$/i, "\\lib")
|
29
|
+
else
|
30
|
+
# *nix
|
31
|
+
jfx_path.gsub(/[\/\\][amdix345678_]+$/, "") # strip i386 or amd64 (including variants). TODO: ARM
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Java 8 at some point requires explicit toolkit/platform initialization
|
36
|
+
# before any controls can be loaded.
|
37
|
+
JRubyFX.load_fx
|
38
|
+
|
39
|
+
# Attempt to load a javafx class
|
40
|
+
Java.javafx.application.Application
|
41
|
+
rescue LoadError, NameError
|
42
|
+
puts "JavaFX runtime not found. Please install Java 7u6 or newer or set environment variable JFX_DIR to the folder that contains jfxrt.jar "
|
43
|
+
puts "If you have Java 7u6 or later, this is a bug. Please report to the issue tracker on github. Include your OS version, 32/64bit, and architecture (x86, ARM, PPC, etc)"
|
44
|
+
exit -1
|
45
|
+
end
|
46
|
+
|
47
|
+
module JRubyFX
|
48
|
+
# If you need JavaFX, just include this module. Its sole purpose in life is to
|
49
|
+
# import all JavaFX stuff, plus a few useful Java classes (like Void)
|
50
|
+
module FXImports
|
51
|
+
|
52
|
+
# If something is missing, just java_import it in your code.
|
53
|
+
# And then ask us to put it in this list
|
54
|
+
#
|
55
|
+
|
56
|
+
# The below lines are generated by `rake reflect`. Do not edit.
|
57
|
+
|
58
|
+
def const_missing(c)
|
59
|
+
if LOCAL_NAME_MAP.has_key? c
|
60
|
+
java_import(LOCAL_NAME_MAP[c])[0]
|
61
|
+
else
|
62
|
+
super
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
LOCAL_NAME_MAP = {
|
67
|
+
:Animation => "javafx.animation.Animation",
|
68
|
+
:AnimationTimer => "javafx.animation.AnimationTimer",
|
69
|
+
:FadeTransition => "javafx.animation.FadeTransition",
|
70
|
+
:FillTransition => "javafx.animation.FillTransition",
|
71
|
+
:Interpolator => "javafx.animation.Interpolator",
|
72
|
+
:KeyFrame => "javafx.animation.KeyFrame",
|
73
|
+
:KeyValue => "javafx.animation.KeyValue",
|
74
|
+
:ParallelTransition => "javafx.animation.ParallelTransition",
|
75
|
+
:PathTransition => "javafx.animation.PathTransition",
|
76
|
+
:PauseTransition => "javafx.animation.PauseTransition",
|
77
|
+
:RotateTransition => "javafx.animation.RotateTransition",
|
78
|
+
:ScaleTransition => "javafx.animation.ScaleTransition",
|
79
|
+
:SequentialTransition => "javafx.animation.SequentialTransition",
|
80
|
+
:StrokeTransition => "javafx.animation.StrokeTransition",
|
81
|
+
:Timeline => "javafx.animation.Timeline",
|
82
|
+
:Transition => "javafx.animation.Transition",
|
83
|
+
:TranslateTransition => "javafx.animation.TranslateTransition",
|
84
|
+
:Platform => "javafx.application.Platform",
|
85
|
+
:SimpleBooleanProperty => "javafx.beans.property.SimpleBooleanProperty",
|
86
|
+
:SimpleDoubleProperty => "javafx.beans.property.SimpleDoubleProperty",
|
87
|
+
:SimpleFloatProperty => "javafx.beans.property.SimpleFloatProperty",
|
88
|
+
:SimpleIntegerProperty => "javafx.beans.property.SimpleIntegerProperty",
|
89
|
+
:SimpleListProperty => "javafx.beans.property.SimpleListProperty",
|
90
|
+
:SimpleLongProperty => "javafx.beans.property.SimpleLongProperty",
|
91
|
+
:SimpleMapProperty => "javafx.beans.property.SimpleMapProperty",
|
92
|
+
:SimpleObjectProperty => "javafx.beans.property.SimpleObjectProperty",
|
93
|
+
:SimpleSetProperty => "javafx.beans.property.SimpleSetProperty",
|
94
|
+
:SimpleStringProperty => "javafx.beans.property.SimpleStringProperty",
|
95
|
+
:ChangeListener => "javafx.beans.value.ChangeListener",
|
96
|
+
:FXCollections => "javafx.collections.FXCollections",
|
97
|
+
:Worker => "javafx.concurrent.Worker",
|
98
|
+
:Task => "javafx.concurrent.Task",
|
99
|
+
:Service => "javafx.concurrent.Service",
|
100
|
+
:Event => "javafx.event.Event",
|
101
|
+
:ActionEvent => "javafx.event.ActionEvent",
|
102
|
+
:EventHandler => "javafx.event.EventHandler",
|
103
|
+
:Initializable => "javafx.fxml.Initializable",
|
104
|
+
:LoadException => "javafx.fxml.LoadException",
|
105
|
+
:HorizontalDirection => "javafx.geometry.HorizontalDirection",
|
106
|
+
:HPos => "javafx.geometry.HPos",
|
107
|
+
:Insets => "javafx.geometry.Insets",
|
108
|
+
:Orientation => "javafx.geometry.Orientation",
|
109
|
+
:Pos => "javafx.geometry.Pos",
|
110
|
+
:Rectangle2D => "javafx.geometry.Rectangle2D",
|
111
|
+
:Side => "javafx.geometry.Side",
|
112
|
+
:VerticalDirection => "javafx.geometry.VerticalDirection",
|
113
|
+
:VPos => "javafx.geometry.VPos",
|
114
|
+
:Group => "javafx.scene.Group",
|
115
|
+
:Node => "javafx.scene.Node",
|
116
|
+
:Parent => "javafx.scene.Parent",
|
117
|
+
:Scene => "javafx.scene.Scene",
|
118
|
+
:Canvas => "javafx.scene.canvas.Canvas",
|
119
|
+
:AreaChart => "javafx.scene.chart.AreaChart",
|
120
|
+
:Axis => "javafx.scene.chart.Axis",
|
121
|
+
:BarChart => "javafx.scene.chart.BarChart",
|
122
|
+
:BubbleChart => "javafx.scene.chart.BubbleChart",
|
123
|
+
:CategoryAxis => "javafx.scene.chart.CategoryAxis",
|
124
|
+
:Chart => "javafx.scene.chart.Chart",
|
125
|
+
:LineChart => "javafx.scene.chart.LineChart",
|
126
|
+
:NumberAxis => "javafx.scene.chart.NumberAxis",
|
127
|
+
:PieChart => "javafx.scene.chart.PieChart",
|
128
|
+
:ScatterChart => "javafx.scene.chart.ScatterChart",
|
129
|
+
:StackedAreaChart => "javafx.scene.chart.StackedAreaChart",
|
130
|
+
:StackedBarChart => "javafx.scene.chart.StackedBarChart",
|
131
|
+
:ValueAxis => "javafx.scene.chart.ValueAxis",
|
132
|
+
:XYChart => "javafx.scene.chart.XYChart",
|
133
|
+
:Accordion => "javafx.scene.control.Accordion",
|
134
|
+
:Button => "javafx.scene.control.Button",
|
135
|
+
:Cell => "javafx.scene.control.Cell",
|
136
|
+
:CheckBox => "javafx.scene.control.CheckBox",
|
137
|
+
:CheckBoxTreeItem => "javafx.scene.control.CheckBoxTreeItem",
|
138
|
+
:CheckMenuItem => "javafx.scene.control.CheckMenuItem",
|
139
|
+
:ChoiceBox => "javafx.scene.control.ChoiceBox",
|
140
|
+
:ColorPicker => "javafx.scene.control.ColorPicker",
|
141
|
+
:ComboBox => "javafx.scene.control.ComboBox",
|
142
|
+
:ContextMenu => "javafx.scene.control.ContextMenu",
|
143
|
+
:Hyperlink => "javafx.scene.control.Hyperlink",
|
144
|
+
:Label => "javafx.scene.control.Label",
|
145
|
+
:ListCell => "javafx.scene.control.ListCell",
|
146
|
+
:ListView => "javafx.scene.control.ListView",
|
147
|
+
:Menu => "javafx.scene.control.Menu",
|
148
|
+
:MenuBar => "javafx.scene.control.MenuBar",
|
149
|
+
:MenuButton => "javafx.scene.control.MenuButton",
|
150
|
+
:MenuItem => "javafx.scene.control.MenuItem",
|
151
|
+
:Pagination => "javafx.scene.control.Pagination",
|
152
|
+
:PasswordField => "javafx.scene.control.PasswordField",
|
153
|
+
:PopupControl => "javafx.scene.control.PopupControl",
|
154
|
+
:ProgressBar => "javafx.scene.control.ProgressBar",
|
155
|
+
:ProgressIndicator => "javafx.scene.control.ProgressIndicator",
|
156
|
+
:RadioButton => "javafx.scene.control.RadioButton",
|
157
|
+
:RadioMenuItem => "javafx.scene.control.RadioMenuItem",
|
158
|
+
:ScrollBar => "javafx.scene.control.ScrollBar",
|
159
|
+
:ScrollPane => "javafx.scene.control.ScrollPane",
|
160
|
+
:Separator => "javafx.scene.control.Separator",
|
161
|
+
:SeparatorMenuItem => "javafx.scene.control.SeparatorMenuItem",
|
162
|
+
:Slider => "javafx.scene.control.Slider",
|
163
|
+
:SplitMenuButton => "javafx.scene.control.SplitMenuButton",
|
164
|
+
:SplitPane => "javafx.scene.control.SplitPane",
|
165
|
+
:Tab => "javafx.scene.control.Tab",
|
166
|
+
:TableView => "javafx.scene.control.TableView",
|
167
|
+
:TableCell => "javafx.scene.control.TableCell",
|
168
|
+
:TableColumn => "javafx.scene.control.TableColumn",
|
169
|
+
:TabPane => "javafx.scene.control.TabPane",
|
170
|
+
:TextArea => "javafx.scene.control.TextArea",
|
171
|
+
:TextField => "javafx.scene.control.TextField",
|
172
|
+
:TitledPane => "javafx.scene.control.TitledPane",
|
173
|
+
:ToggleButton => "javafx.scene.control.ToggleButton",
|
174
|
+
:ToggleGroup => "javafx.scene.control.ToggleGroup",
|
175
|
+
:ToolBar => "javafx.scene.control.ToolBar",
|
176
|
+
:Tooltip => "javafx.scene.control.Tooltip",
|
177
|
+
:TreeCell => "javafx.scene.control.TreeCell",
|
178
|
+
:TreeItem => "javafx.scene.control.TreeItem",
|
179
|
+
:TreeView => "javafx.scene.control.TreeView",
|
180
|
+
:ContentDisplay => "javafx.scene.control.ContentDisplay",
|
181
|
+
:OverrunStyle => "javafx.scene.control.OverrunStyle",
|
182
|
+
:SelectionMode => "javafx.scene.control.SelectionMode",
|
183
|
+
:Blend => "javafx.scene.effect.Blend",
|
184
|
+
:BlendMode => "javafx.scene.effect.BlendMode",
|
185
|
+
:Bloom => "javafx.scene.effect.Bloom",
|
186
|
+
:BlurType => "javafx.scene.effect.BlurType",
|
187
|
+
:BoxBlur => "javafx.scene.effect.BoxBlur",
|
188
|
+
:ColorAdjust => "javafx.scene.effect.ColorAdjust",
|
189
|
+
:ColorInput => "javafx.scene.effect.ColorInput",
|
190
|
+
:DisplacementMap => "javafx.scene.effect.DisplacementMap",
|
191
|
+
:DropShadow => "javafx.scene.effect.DropShadow",
|
192
|
+
:GaussianBlur => "javafx.scene.effect.GaussianBlur",
|
193
|
+
:Glow => "javafx.scene.effect.Glow",
|
194
|
+
:ImageInput => "javafx.scene.effect.ImageInput",
|
195
|
+
:InnerShadow => "javafx.scene.effect.InnerShadow",
|
196
|
+
:Lighting => "javafx.scene.effect.Lighting",
|
197
|
+
:MotionBlur => "javafx.scene.effect.MotionBlur",
|
198
|
+
:PerspectiveTransform => "javafx.scene.effect.PerspectiveTransform",
|
199
|
+
:Reflection => "javafx.scene.effect.Reflection",
|
200
|
+
:SepiaTone => "javafx.scene.effect.SepiaTone",
|
201
|
+
:Shadow => "javafx.scene.effect.Shadow",
|
202
|
+
:Image => "javafx.scene.image.Image",
|
203
|
+
:ImageView => "javafx.scene.image.ImageView",
|
204
|
+
:PixelReader => "javafx.scene.image.PixelReader",
|
205
|
+
:PixelWriter => "javafx.scene.image.PixelWriter",
|
206
|
+
:Clipboard => "javafx.scene.input.Clipboard",
|
207
|
+
:ClipboardContent => "javafx.scene.input.ClipboardContent",
|
208
|
+
:ContextMenuEvent => "javafx.scene.input.ContextMenuEvent",
|
209
|
+
:DragEvent => "javafx.scene.input.DragEvent",
|
210
|
+
:GestureEvent => "javafx.scene.input.GestureEvent",
|
211
|
+
:InputEvent => "javafx.scene.input.InputEvent",
|
212
|
+
:InputMethodEvent => "javafx.scene.input.InputMethodEvent",
|
213
|
+
:KeyCode => "javafx.scene.input.KeyCode",
|
214
|
+
:KeyEvent => "javafx.scene.input.KeyEvent",
|
215
|
+
:Mnemonic => "javafx.scene.input.Mnemonic",
|
216
|
+
:MouseButton => "javafx.scene.input.MouseButton",
|
217
|
+
:MouseDragEvent => "javafx.scene.input.MouseDragEvent",
|
218
|
+
:MouseEvent => "javafx.scene.input.MouseEvent",
|
219
|
+
:RotateEvent => "javafx.scene.input.RotateEvent",
|
220
|
+
:ScrollEvent => "javafx.scene.input.ScrollEvent",
|
221
|
+
:SwipeEvent => "javafx.scene.input.SwipeEvent",
|
222
|
+
:TouchEvent => "javafx.scene.input.TouchEvent",
|
223
|
+
:TransferMode => "javafx.scene.input.TransferMode",
|
224
|
+
:ZoomEvent => "javafx.scene.input.ZoomEvent",
|
225
|
+
:AnchorPane => "javafx.scene.layout.AnchorPane",
|
226
|
+
:BorderPane => "javafx.scene.layout.BorderPane",
|
227
|
+
:ColumnConstraints => "javafx.scene.layout.ColumnConstraints",
|
228
|
+
:FlowPane => "javafx.scene.layout.FlowPane",
|
229
|
+
:GridPane => "javafx.scene.layout.GridPane",
|
230
|
+
:HBox => "javafx.scene.layout.HBox",
|
231
|
+
:Pane => "javafx.scene.layout.Pane",
|
232
|
+
:Priority => "javafx.scene.layout.Priority",
|
233
|
+
:RowConstraints => "javafx.scene.layout.RowConstraints",
|
234
|
+
:StackPane => "javafx.scene.layout.StackPane",
|
235
|
+
:TilePane => "javafx.scene.layout.TilePane",
|
236
|
+
:VBox => "javafx.scene.layout.VBox",
|
237
|
+
:AudioClip => "javafx.scene.media.AudioClip",
|
238
|
+
:AudioEqualizer => "javafx.scene.media.AudioEqualizer",
|
239
|
+
:AudioTrack => "javafx.scene.media.AudioTrack",
|
240
|
+
:EqualizerBand => "javafx.scene.media.EqualizerBand",
|
241
|
+
:Media => "javafx.scene.media.Media",
|
242
|
+
:MediaException => "javafx.scene.media.MediaException",
|
243
|
+
:MediaErrorEvent => "javafx.scene.media.MediaErrorEvent",
|
244
|
+
:MediaMarkerEvent => "javafx.scene.media.MediaMarkerEvent",
|
245
|
+
:MediaPlayer => "javafx.scene.media.MediaPlayer",
|
246
|
+
:MediaView => "javafx.scene.media.MediaView",
|
247
|
+
:VideoTrack => "javafx.scene.media.VideoTrack",
|
248
|
+
:Color => "javafx.scene.paint.Color",
|
249
|
+
:CycleMethod => "javafx.scene.paint.CycleMethod",
|
250
|
+
:ImagePattern => "javafx.scene.paint.ImagePattern",
|
251
|
+
:LinearGradient => "javafx.scene.paint.LinearGradient",
|
252
|
+
:Paint => "javafx.scene.paint.Paint",
|
253
|
+
:RadialGradient => "javafx.scene.paint.RadialGradient",
|
254
|
+
:Stop => "javafx.scene.paint.Stop",
|
255
|
+
:Arc => "javafx.scene.shape.Arc",
|
256
|
+
:ArcTo => "javafx.scene.shape.ArcTo",
|
257
|
+
:ArcType => "javafx.scene.shape.ArcType",
|
258
|
+
:Circle => "javafx.scene.shape.Circle",
|
259
|
+
:ClosePath => "javafx.scene.shape.ClosePath",
|
260
|
+
:CubicCurve => "javafx.scene.shape.CubicCurve",
|
261
|
+
:CubicCurveTo => "javafx.scene.shape.CubicCurveTo",
|
262
|
+
:Ellipse => "javafx.scene.shape.Ellipse",
|
263
|
+
:FillRule => "javafx.scene.shape.FillRule",
|
264
|
+
:HLineTo => "javafx.scene.shape.HLineTo",
|
265
|
+
:Line => "javafx.scene.shape.Line",
|
266
|
+
:LineTo => "javafx.scene.shape.LineTo",
|
267
|
+
:MoveTo => "javafx.scene.shape.MoveTo",
|
268
|
+
:Path => "javafx.scene.shape.Path",
|
269
|
+
:PathElement => "javafx.scene.shape.PathElement",
|
270
|
+
:Polygon => "javafx.scene.shape.Polygon",
|
271
|
+
:Polyline => "javafx.scene.shape.Polyline",
|
272
|
+
:QuadCurve => "javafx.scene.shape.QuadCurve",
|
273
|
+
:QuadCurveTo => "javafx.scene.shape.QuadCurveTo",
|
274
|
+
:Rectangle => "javafx.scene.shape.Rectangle",
|
275
|
+
:Shape => "javafx.scene.shape.Shape",
|
276
|
+
:StrokeLineCap => "javafx.scene.shape.StrokeLineCap",
|
277
|
+
:StrokeLineJoin => "javafx.scene.shape.StrokeLineJoin",
|
278
|
+
:StrokeType => "javafx.scene.shape.StrokeType",
|
279
|
+
:SVGPath => "javafx.scene.shape.SVGPath",
|
280
|
+
:VLineTo => "javafx.scene.shape.VLineTo",
|
281
|
+
:Font => "javafx.scene.text.Font",
|
282
|
+
:FontPosture => "javafx.scene.text.FontPosture",
|
283
|
+
:FontSmoothingType => "javafx.scene.text.FontSmoothingType",
|
284
|
+
:FontWeight => "javafx.scene.text.FontWeight",
|
285
|
+
:Text => "javafx.scene.text.Text",
|
286
|
+
:TextAlignment => "javafx.scene.text.TextAlignment",
|
287
|
+
:TextBoundsType => "javafx.scene.text.TextBoundsType",
|
288
|
+
:Affine => "javafx.scene.transform.Affine",
|
289
|
+
:Rotate => "javafx.scene.transform.Rotate",
|
290
|
+
:Scale => "javafx.scene.transform.Scale",
|
291
|
+
:Shear => "javafx.scene.transform.Shear",
|
292
|
+
:Translate => "javafx.scene.transform.Translate",
|
293
|
+
:WebView => "javafx.scene.web.WebView",
|
294
|
+
:HTMLEditor => "javafx.scene.web.HTMLEditor",
|
295
|
+
:DirectoryChooser => "javafx.stage.DirectoryChooser",
|
296
|
+
:FileChooser => "javafx.stage.FileChooser",
|
297
|
+
:Modality => "javafx.stage.Modality",
|
298
|
+
:Popup => "javafx.stage.Popup",
|
299
|
+
:PopupWindow => "javafx.stage.PopupWindow",
|
300
|
+
:Screen => "javafx.stage.Screen",
|
301
|
+
:Stage => "javafx.stage.Stage",
|
302
|
+
:StageStyle => "javafx.stage.StageStyle",
|
303
|
+
:Window => "javafx.stage.Window",
|
304
|
+
:WindowEvent => "javafx.stage.WindowEvent",
|
305
|
+
:Duration => "javafx.util.Duration"
|
306
|
+
}
|
307
|
+
java_import 'java.lang.Void'
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
@@ -0,0 +1,137 @@
|
|
1
|
+
=begin
|
2
|
+
JRubyFX - Write JavaFX and FXML in Ruby
|
3
|
+
Copyright (C) 2013 The JRubyFX Team
|
4
|
+
|
5
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
you may not use this file except in compliance with the License.
|
7
|
+
You may obtain a copy of the License at
|
8
|
+
|
9
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
|
11
|
+
Unless required by applicable law or agreed to in writing, software
|
12
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
See the License for the specific language governing permissions and
|
15
|
+
limitations under the License.
|
16
|
+
=end
|
17
|
+
#:nodoc: all
|
18
|
+
|
19
|
+
# Due to certain bugs in JRuby 1.7 (namely some newInstance mapping bugs), we
|
20
|
+
# are forced to re-create the Launcher if we want a pure ruby wrapper
|
21
|
+
# I can't wait to delete this. The _ONLY_ code that should use this is
|
22
|
+
# JRubyFX::Application.launch. Do _NOT_ use this code anywhere else.
|
23
|
+
module JavaFXImpl #:nodoc: all
|
24
|
+
java_import 'com.sun.javafx.application.PlatformImpl'
|
25
|
+
java_import 'javafx.stage.Stage'
|
26
|
+
|
27
|
+
#JRuby, you make me have to create real classes!
|
28
|
+
class FinisherInterface
|
29
|
+
include PlatformImpl::FinishListener
|
30
|
+
|
31
|
+
def initialize(&block)
|
32
|
+
@exitBlock = block
|
33
|
+
end
|
34
|
+
|
35
|
+
def idle(someBoolean)
|
36
|
+
@exitBlock.call
|
37
|
+
end
|
38
|
+
|
39
|
+
def exitCalled()
|
40
|
+
@exitBlock.call
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class Launcher
|
45
|
+
java_import 'java.util.concurrent.atomic.AtomicBoolean'
|
46
|
+
java_import 'java.util.concurrent.CountDownLatch'
|
47
|
+
java_import 'java.lang.IllegalStateException'
|
48
|
+
java_import 'com.sun.javafx.application.ParametersImpl'
|
49
|
+
|
50
|
+
@@launchCalled = AtomicBoolean.new(false) # Atomic boolean go boom on bikini
|
51
|
+
|
52
|
+
def self.launch_app(application_class, *args)
|
53
|
+
#prevent multiple!
|
54
|
+
if @@launchCalled.getAndSet(true)
|
55
|
+
throw IllegalStateException.new "Application launch must not be called more than once"
|
56
|
+
end
|
57
|
+
|
58
|
+
begin
|
59
|
+
#create a java thread, and run the real worker, and wait till it exits
|
60
|
+
count_down_latch = CountDownLatch.new(1)
|
61
|
+
thread = Java.java.lang.Thread.new do
|
62
|
+
begin
|
63
|
+
launch_app_from_thread(application_class, args)
|
64
|
+
rescue => ex
|
65
|
+
puts "Exception starting app:"
|
66
|
+
p ex
|
67
|
+
p ex.backtrace
|
68
|
+
end
|
69
|
+
count_down_latch.countDown #always count down
|
70
|
+
end
|
71
|
+
thread.name = "JavaFX-Launcher"
|
72
|
+
thread.start
|
73
|
+
count_down_latch.await
|
74
|
+
rescue => ex
|
75
|
+
puts "Exception launching JavaFX-Launcher thread:"
|
76
|
+
p ex
|
77
|
+
puts ex.backtrace
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.launch_app_from_thread(application_class, args)
|
82
|
+
begin
|
83
|
+
launch_app_after_platform(application_class, args)
|
84
|
+
rescue => ex
|
85
|
+
puts "Error running Application:"
|
86
|
+
p ex
|
87
|
+
puts ex.backtrace
|
88
|
+
end
|
89
|
+
|
90
|
+
PlatformImpl.tkExit # kill the toolkit and exit
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.launch_app_after_platform(application_class, args)
|
94
|
+
#listeners - for the end
|
95
|
+
finished_latch = CountDownLatch.new(1)
|
96
|
+
|
97
|
+
# register for shutdown
|
98
|
+
PlatformImpl.addListener(FinisherInterface.new {
|
99
|
+
# this is called when the stage exits
|
100
|
+
finished_latch.countDown
|
101
|
+
})
|
102
|
+
|
103
|
+
application = application_class.new
|
104
|
+
|
105
|
+
unless application.is_a? Java::javafx.application.Application
|
106
|
+
raise "Invalid type: cannot launch non-Application"
|
107
|
+
end
|
108
|
+
|
109
|
+
ParametersImpl.registerParameters(application, ParametersImpl.new(args))
|
110
|
+
|
111
|
+
application.init
|
112
|
+
|
113
|
+
error = false
|
114
|
+
#RUN! and hope it works!
|
115
|
+
PlatformImpl.runAndWait do
|
116
|
+
begin
|
117
|
+
stage = Stage.new
|
118
|
+
stage.impl_setPrimary(true)
|
119
|
+
application.start(stage)
|
120
|
+
# no countDown here because its up top... yes I know
|
121
|
+
rescue => ex
|
122
|
+
puts "Exception running Application:"
|
123
|
+
p ex
|
124
|
+
puts ex.backtrace
|
125
|
+
error = true
|
126
|
+
finished_latch.countDown # but if we fail, we need to unlatch it
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
#wait for stage exit
|
131
|
+
finished_latch.await
|
132
|
+
|
133
|
+
# call stop on the interface
|
134
|
+
application.stop unless error
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,178 @@
|
|
1
|
+
=begin
|
2
|
+
JRubyFX - Write JavaFX and FXML in Ruby
|
3
|
+
Copyright (C) 2013 The JRubyFX Team
|
4
|
+
|
5
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
you may not use this file except in compliance with the License.
|
7
|
+
You may obtain a copy of the License at
|
8
|
+
|
9
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
|
11
|
+
Unless required by applicable law or agreed to in writing, software
|
12
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
See the License for the specific language governing permissions and
|
15
|
+
limitations under the License.
|
16
|
+
=end
|
17
|
+
|
18
|
+
require_relative 'utils/common_utils'
|
19
|
+
|
20
|
+
# This module contains useful methods for defining JavaFX code. Include it in your
|
21
|
+
# class to use it, and the JRubyFX::FXImports. JRubyFX::Application and JRubyFX::Controller already include it.
|
22
|
+
module JRubyFX
|
23
|
+
include JRubyFX::FXImports
|
24
|
+
include JRubyFX::Utils::CommonUtils
|
25
|
+
|
26
|
+
##
|
27
|
+
# call-seq:
|
28
|
+
# with(obj, hash) => obj
|
29
|
+
# with(obj) { block } => obj
|
30
|
+
# with(obj, hash) { block }=> obj
|
31
|
+
#
|
32
|
+
# Set properties (e.g. setters) on the passed in object plus also invoke
|
33
|
+
# any block passed against this object.
|
34
|
+
# === Examples
|
35
|
+
#
|
36
|
+
# with(grid, vgap: 2, hgap: 2) do
|
37
|
+
# set_pref_size(500, 400)
|
38
|
+
# children << location << go << view
|
39
|
+
# end
|
40
|
+
#
|
41
|
+
def with(obj, properties = {}, &block)
|
42
|
+
puts "Warning: calling 'with' on a nil object from #{caller[0]}" if obj.nil?
|
43
|
+
populate_properties(obj, properties)
|
44
|
+
|
45
|
+
if block_given?
|
46
|
+
# cache the proxy - http://wiki.jruby.org/Persistence
|
47
|
+
obj.class.__persistent__ = true if obj.class.ancestors.include? JavaProxy
|
48
|
+
obj.extend(JRubyFX)
|
49
|
+
obj.instance_eval(&block)
|
50
|
+
end
|
51
|
+
|
52
|
+
obj
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# call-seq:
|
57
|
+
# run_later { block }
|
58
|
+
#
|
59
|
+
# Convenience method so anything can safely schedule to run on JavaFX
|
60
|
+
# main thread.
|
61
|
+
def run_later(&block)
|
62
|
+
Java::javafx.application.Platform.run_later &block
|
63
|
+
end
|
64
|
+
|
65
|
+
##
|
66
|
+
# call-seq:
|
67
|
+
# build(class) => obj
|
68
|
+
# build(class, hash) => obj
|
69
|
+
# build(class) { block } => obj
|
70
|
+
# build(class, hash) { block } => obj
|
71
|
+
#
|
72
|
+
# Create "build" a new JavaFX instance with the provided class and
|
73
|
+
# set properties (e.g. setters) on that new instance plus also invoke
|
74
|
+
# any block passed against this new instance. This also can build a proc
|
75
|
+
# or lambda form in which case the return value of the block will be what
|
76
|
+
# is used to set the additional properties on.
|
77
|
+
# === Examples
|
78
|
+
#
|
79
|
+
# grid = build(GridPane, vgap: 2, hgap: 2) do
|
80
|
+
# set_pref_size(500, 400)
|
81
|
+
# children << location << go << view
|
82
|
+
# end
|
83
|
+
#
|
84
|
+
# build(proc { Foo.new }, vgap: 2, hgap: 2)
|
85
|
+
#
|
86
|
+
def build(klass, *args, &block)
|
87
|
+
args, properties = split_args_from_properties(*args)
|
88
|
+
|
89
|
+
obj = if klass.kind_of? Proc
|
90
|
+
klass.call(*args)
|
91
|
+
else
|
92
|
+
klass.new(*attempt_conversion(klass, :new, *args))
|
93
|
+
end
|
94
|
+
|
95
|
+
with(obj, properties, &block)
|
96
|
+
end
|
97
|
+
|
98
|
+
def self.included(mod)
|
99
|
+
mod.extend(JRubyFX::FXMLClassUtils)
|
100
|
+
mod.extend(JRubyFX::FXImports)
|
101
|
+
end
|
102
|
+
|
103
|
+
module FXMLClassUtils
|
104
|
+
def fxml_raw_accessor(symbol_name, type=java::lang::String)
|
105
|
+
# TODO: RDoc
|
106
|
+
# TODO: somebody clean this up
|
107
|
+
# TODO: _reader and _writer
|
108
|
+
send(:define_method, symbol_name.id2name.snake_case + "=") do |val|
|
109
|
+
instance_variable_set("@#{symbol_name}", val)
|
110
|
+
end
|
111
|
+
send(:define_method, symbol_name.id2name.snake_case) do
|
112
|
+
instance_variable_get("@#{symbol_name}")
|
113
|
+
end
|
114
|
+
send(:define_method, symbol_name.id2name.snake_case + "GetType") do
|
115
|
+
return type.java_class
|
116
|
+
end
|
117
|
+
camel = symbol_name.id2name
|
118
|
+
camel = camel[0].upcase + camel[1..-1]
|
119
|
+
send(:define_method, "set" + camel) do |val|
|
120
|
+
instance_variable_set("@#{symbol_name}", val)
|
121
|
+
end
|
122
|
+
send(:define_method, "get" + camel) do
|
123
|
+
instance_variable_get("@#{symbol_name}")
|
124
|
+
end
|
125
|
+
send(:define_method, symbol_name.id2name + "GetType") do
|
126
|
+
return type.java_class
|
127
|
+
end
|
128
|
+
end
|
129
|
+
def fxml_accessor(symbol_name,ptype=Java::javafx.beans.property.SimpleStringProperty, type=nil)
|
130
|
+
# TODO: RDoc
|
131
|
+
# TODO: somebody clean this up
|
132
|
+
# TODO: _reader and _writer ? maybe? not?
|
133
|
+
pname = symbol_name.id2name + "Property"
|
134
|
+
raise "#{ptype} does not inherit from Property." unless ptype.ancestors.include? Java::javafx.beans.property.Property
|
135
|
+
unless type
|
136
|
+
type = ptype.java_class.java_instance_methods.find_all{|x|x.name == "getValue"}.map{|x|x.return_type}.find_all{|x|x != java.lang.Object.java_class}
|
137
|
+
if type.length != 1
|
138
|
+
raise "Unknown property type. Please manually supply a type or report this as a bug"
|
139
|
+
end
|
140
|
+
type = type[0]
|
141
|
+
else
|
142
|
+
type = type.java_class
|
143
|
+
end
|
144
|
+
send(:define_method, symbol_name.id2name.snake_case + "=") do |val|
|
145
|
+
send(pname).setValue val
|
146
|
+
end
|
147
|
+
send(:define_method, symbol_name.id2name.snake_case) do
|
148
|
+
send(pname).getValue
|
149
|
+
end
|
150
|
+
send(:define_method, symbol_name.id2name.snake_case + "GetType") do
|
151
|
+
return type
|
152
|
+
end
|
153
|
+
camel = symbol_name.id2name
|
154
|
+
camel = camel[0].upcase + camel[1..-1]
|
155
|
+
send(:define_method, "set" + camel) do |val|
|
156
|
+
send(pname).setValue val
|
157
|
+
end
|
158
|
+
send(:define_method, "get" + camel) do
|
159
|
+
send(pname).getValue
|
160
|
+
end
|
161
|
+
send(:define_method, symbol_name.id2name + "GetType") do
|
162
|
+
return type
|
163
|
+
end
|
164
|
+
send(:define_method, pname) do
|
165
|
+
unless instance_variable_get("@#{symbol_name}")
|
166
|
+
instance_variable_set("@#{symbol_name}", ptype.new(self, symbol_name.to_s))
|
167
|
+
end
|
168
|
+
return instance_variable_get("@#{symbol_name}")
|
169
|
+
end
|
170
|
+
send(:define_method, pname.snake_case) do
|
171
|
+
send(pname)
|
172
|
+
end
|
173
|
+
add_method_signature pname, [ptype]
|
174
|
+
add_method_signature "set" + camel, [java.lang.Void, type]
|
175
|
+
add_method_signature "get" + camel, [type]
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|