cheri 0.0.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/MIT-LICENSE +20 -0
- data/README +98 -0
- data/Rakefile +121 -0
- data/examples/hello_world_1.rb +28 -0
- data/examples/table_1.rb +44 -0
- data/lib/cheri/awt.rb +41 -0
- data/lib/cheri/builder.rb +31 -0
- data/lib/cheri/builder/awt/connecter.rb +63 -0
- data/lib/cheri/builder/awt/constants.rb +1003 -0
- data/lib/cheri/builder/awt/main.rb +191 -0
- data/lib/cheri/builder/awt/types.rb +220 -0
- data/lib/cheri/builder/base.rb +533 -0
- data/lib/cheri/builder/config.rb +187 -0
- data/lib/cheri/builder/connecter.rb +386 -0
- data/lib/cheri/builder/context.rb +655 -0
- data/lib/cheri/builder/generator.rb +425 -0
- data/lib/cheri/builder/html/charsets.rb +154 -0
- data/lib/cheri/builder/html/common.rb +32 -0
- data/lib/cheri/builder/html/connecter.rb +57 -0
- data/lib/cheri/builder/html/element.rb +156 -0
- data/lib/cheri/builder/html/main.rb +116 -0
- data/lib/cheri/builder/html/types.rb +123 -0
- data/lib/cheri/builder/main.rb +483 -0
- data/lib/cheri/builder/swing/connecter.rb +141 -0
- data/lib/cheri/builder/swing/constants.rb +420 -0
- data/lib/cheri/builder/swing/main.rb +446 -0
- data/lib/cheri/builder/swing/types.rb +270 -0
- data/lib/cheri/builder/xml/charsets.rb +154 -0
- data/lib/cheri/builder/xml/common.rb +32 -0
- data/lib/cheri/builder/xml/connecter.rb +42 -0
- data/lib/cheri/builder/xml/element.rb +189 -0
- data/lib/cheri/builder/xml/main.rb +130 -0
- data/lib/cheri/builder/xml/types.rb +36 -0
- data/lib/cheri/cheri.rb +70 -0
- data/lib/cheri/cjx.rb +3 -0
- data/lib/cheri/explorer.rb +32 -0
- data/lib/cheri/explorer/explorer.rb +560 -0
- data/lib/cheri/html.rb +31 -0
- data/lib/cheri/image/Delete24.gif +0 -0
- data/lib/cheri/image/Find24.gif +0 -0
- data/lib/cheri/image/FindAgain24.gif +0 -0
- data/lib/cheri/image/Refresh24.gif +0 -0
- data/lib/cheri/image/Search24.gif +0 -0
- data/lib/cheri/image/Thumbs.db +0 -0
- data/lib/cheri/image/cheri_icon_16x16.png +0 -0
- data/lib/cheri/image/cheri_icon_24x24.png +0 -0
- data/lib/cheri/image/cheri_logo_medium.png +0 -0
- data/lib/cheri/image/close_10x10.png +0 -0
- data/lib/cheri/image/close_10x10s.png +0 -0
- data/lib/cheri/image/close_12x12.png +0 -0
- data/lib/cheri/image/close_14x14.png +0 -0
- data/lib/cheri/image/close_24x24.png +0 -0
- data/lib/cheri/image/close_dim2_12x12.png +0 -0
- data/lib/cheri/image/close_dim_12x12.png +0 -0
- data/lib/cheri/image/cls_tree.png +0 -0
- data/lib/cheri/image/con_tree.png +0 -0
- data/lib/cheri/image/jruby_14x16.png +0 -0
- data/lib/cheri/image/jruby_logo.png +0 -0
- data/lib/cheri/image/mod_tree.png +0 -0
- data/lib/cheri/image/obj_tree.png +0 -0
- data/lib/cheri/image/ruby_16x16.png +0 -0
- data/lib/cheri/image/vars_tree.png +0 -0
- data/lib/cheri/java.rb +26 -0
- data/lib/cheri/java/builder.rb +28 -0
- data/lib/cheri/java/builder/main.rb +407 -0
- data/lib/cheri/java/builder/util.rb +480 -0
- data/lib/cheri/java/java.rb +56 -0
- data/lib/cheri/jruby.rb +32 -0
- data/lib/cheri/jruby/explorer.rb +43 -0
- data/lib/cheri/jruby/explorer/common.rb +38 -0
- data/lib/cheri/jruby/explorer/dialogs.rb +383 -0
- data/lib/cheri/jruby/explorer/explorer.rb +904 -0
- data/lib/cheri/jruby/explorer/splash.rb +80 -0
- data/lib/cheri/jruby/explorer/viewer.rb +619 -0
- data/lib/cheri/jruby/explorer/viewers.rb +1057 -0
- data/lib/cheri/jruby/jruby.rb +59 -0
- data/lib/cheri/swing.rb +41 -0
- data/lib/cheri/xml.rb +31 -0
- metadata +135 -0
@@ -0,0 +1,446 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (C) 2007 William N Dortch <bill.dortch@gmail.com>
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
#
|
24
|
+
|
25
|
+
|
26
|
+
module Cheri
|
27
|
+
# TODO: module comments
|
28
|
+
|
29
|
+
module Swing
|
30
|
+
VERSION = Cheri::VERSION
|
31
|
+
|
32
|
+
CJava = Cheri::Java #:nodoc:
|
33
|
+
CBuilder = Cheri::Builder #:nodoc:
|
34
|
+
JBuilder = Cheri::Java::Builder #:nodoc:
|
35
|
+
AWT = Cheri::AWT #:nodoc:
|
36
|
+
AWTFrame = Cheri::AWT::AWTFrame #:nodoc:
|
37
|
+
AWTProxy = Cheri::AWT::AWTProxy #:nodoc:
|
38
|
+
JComp = javax.swing.JComponent #:nodoc:
|
39
|
+
RPC = javax.swing.RootPaneContainer #:nodoc:
|
40
|
+
# types checked by cherify/cheri_yield logic
|
41
|
+
# TODO: more
|
42
|
+
SwingTypes = [
|
43
|
+
javax.swing.Action,
|
44
|
+
javax.swing.JComponent,
|
45
|
+
javax.swing.RootPaneContainer,
|
46
|
+
javax.swing.border.Border
|
47
|
+
]
|
48
|
+
SwingPkg = 'javax.swing.'
|
49
|
+
|
50
|
+
class << self
|
51
|
+
def append_features(clazz)
|
52
|
+
CBuilder.module_included(Cheri::AWT,clazz)
|
53
|
+
CBuilder.module_included(JBuilder,clazz)
|
54
|
+
CBuilder.module_included(self,clazz)
|
55
|
+
super
|
56
|
+
end
|
57
|
+
private :append_features
|
58
|
+
|
59
|
+
def factory
|
60
|
+
SwingFactory
|
61
|
+
end
|
62
|
+
|
63
|
+
def connecter
|
64
|
+
SwingConnecter
|
65
|
+
end
|
66
|
+
|
67
|
+
def consumer
|
68
|
+
SwingConsumer
|
69
|
+
end
|
70
|
+
|
71
|
+
def resolver
|
72
|
+
SwingResolver
|
73
|
+
end
|
74
|
+
|
75
|
+
# a bit expensive, but only used by cherify/cheri_yield
|
76
|
+
def swing?(obj)
|
77
|
+
obj.respond_to?(:java_class) &&
|
78
|
+
(obj.java_class.name.rindex(SwingPkg,0) ||
|
79
|
+
!(obj.class.ancestors & SwingTypes).empty?)
|
80
|
+
end
|
81
|
+
end #self
|
82
|
+
|
83
|
+
# call-seq:
|
84
|
+
# awt([*args] [, &block]) -> AWTProxy if no block given, else result of block
|
85
|
+
#
|
86
|
+
#--
|
87
|
+
# Duplicating this here rather than including Cheri::AWT. (See note re: performance)
|
88
|
+
#++
|
89
|
+
def awt(*r,&k)
|
90
|
+
if (ctx = __cheri_ctx)
|
91
|
+
if k
|
92
|
+
AWTFrame.new(ctx,*r,&k).run
|
93
|
+
else
|
94
|
+
ctx[:awt_proxy] ||= AWTProxy.new(ctx,*r)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
private :awt
|
99
|
+
|
100
|
+
# call-seq:
|
101
|
+
# swing([*args] [, &block]) -> SwingProxy if no block given, else result of block
|
102
|
+
#
|
103
|
+
def swing(*r,&k)
|
104
|
+
if (ctx = __cheri_ctx)
|
105
|
+
if k
|
106
|
+
if ctx.empty? && (c = ctx.client).kind_of?(RPC) || c.kind_of?(JComp)
|
107
|
+
ctx.fsend(CheriYieldFactory,:cheri_yield,c,&k)
|
108
|
+
else
|
109
|
+
SwingFrame.new(ctx,*r,&k).run
|
110
|
+
end
|
111
|
+
else
|
112
|
+
ctx[:swing_proxy] ||= SwingProxy.new(ctx,*r)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
private :swing
|
117
|
+
|
118
|
+
AnyTypes = {
|
119
|
+
javax.swing.ButtonGroup => true
|
120
|
+
}
|
121
|
+
|
122
|
+
class BaseBuilder < Cheri::Java::Builder::BaseBuilder
|
123
|
+
JF = CJava.get_class('javax.swing.JFrame')
|
124
|
+
|
125
|
+
def mod
|
126
|
+
Cheri::Swing
|
127
|
+
end
|
128
|
+
|
129
|
+
def any?
|
130
|
+
@any
|
131
|
+
end
|
132
|
+
|
133
|
+
private
|
134
|
+
def post
|
135
|
+
@obj.icon_image ||= CJava.cheri_icon.image if @obj.kind_of?(JF)
|
136
|
+
if AnyTypes[@clazz]
|
137
|
+
@any = true
|
138
|
+
@not_parent = true
|
139
|
+
@not_child = true
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end #BaseBuilder
|
143
|
+
|
144
|
+
class ClassBuilder < BaseBuilder
|
145
|
+
def initialize(ctx,sym,clazz,*args,&block)
|
146
|
+
super(ctx,sym,*args,&block)
|
147
|
+
@clazz = clazz
|
148
|
+
@resolve = true
|
149
|
+
end
|
150
|
+
private
|
151
|
+
def create
|
152
|
+
@obj = @clazz.new(*@args)
|
153
|
+
end
|
154
|
+
end #ClassBuilder
|
155
|
+
|
156
|
+
class ProcBuilder < BaseBuilder
|
157
|
+
def initialize(ctx,sym,proc,*args,&block)
|
158
|
+
super(ctx,sym,*args,&block)
|
159
|
+
@proc = proc
|
160
|
+
end
|
161
|
+
private
|
162
|
+
def create
|
163
|
+
@obj = @proc.call(*@args)
|
164
|
+
@clazz = @obj.class
|
165
|
+
@resolve = true
|
166
|
+
end
|
167
|
+
end #ProcBuilder
|
168
|
+
|
169
|
+
class CherifyBuilder < BaseBuilder
|
170
|
+
def initialize(ctx,sym,obj,*args,&block)
|
171
|
+
super(ctx,sym,*args,&block)
|
172
|
+
@obj = obj
|
173
|
+
@clazz = obj.class
|
174
|
+
@no_create = true
|
175
|
+
@resolve = true
|
176
|
+
end
|
177
|
+
end #CherifyBuilder
|
178
|
+
|
179
|
+
class CheriYieldBuilder < BaseBuilder
|
180
|
+
def initialize(ctx,sym,obj,*args,&block)
|
181
|
+
super(ctx,sym,*args,&block)
|
182
|
+
@obj = obj
|
183
|
+
@clazz = obj.class
|
184
|
+
@no_create = true
|
185
|
+
@not_child = true
|
186
|
+
@resolve = true
|
187
|
+
end
|
188
|
+
end #CheriYieldBuilder
|
189
|
+
|
190
|
+
# TODO: comments
|
191
|
+
module CherifyFactory
|
192
|
+
S = ::Cheri::Swing #:nodoc:
|
193
|
+
def self.builder(ctx,sym,*args,&block)
|
194
|
+
return nil unless sym == :cherify && !args.empty? && S.swing?(args[0])
|
195
|
+
raise Cheri.argument_error(args.length,1..2) unless args.length == 1 || args.length == 2
|
196
|
+
CherifyBuilder.new(ctx,sym,*args,&block)
|
197
|
+
end
|
198
|
+
end #CherifyFactory
|
199
|
+
|
200
|
+
# TODO: comments
|
201
|
+
module CheriYieldFactory # < Cheri::AbstractFactory
|
202
|
+
S = ::Cheri::Swing #:nodoc:
|
203
|
+
def self.builder(ctx,sym,*args,&block)
|
204
|
+
return nil unless sym == :cheri_yield && !args.empty? && S.swing?(args[0])
|
205
|
+
raise Cheri.argument_error(args.length,1) unless args.length == 1
|
206
|
+
CheriYieldBuilder.new(ctx,sym,*args,&block)
|
207
|
+
end
|
208
|
+
end #CheriYieldFactory
|
209
|
+
|
210
|
+
# TODO: comments
|
211
|
+
module StandardFactory
|
212
|
+
def self.builder(ctx,sym,*args,&block)
|
213
|
+
clazz = Types.get_class(sym)
|
214
|
+
clazz ? ClassBuilder.new(ctx,sym,clazz,*args,&block) : nil
|
215
|
+
end
|
216
|
+
end #StandardFactory
|
217
|
+
|
218
|
+
module BoxComponentFactory
|
219
|
+
CJava = Cheri::Java
|
220
|
+
X_AXIS = 0
|
221
|
+
Y_AXIS = 1
|
222
|
+
LINE_AXIS = 2
|
223
|
+
PAGE_AXIS = 3
|
224
|
+
RPC = javax.swing.RootPaneContainer
|
225
|
+
@box = nil
|
226
|
+
@box_layout = nil
|
227
|
+
@panel = nil
|
228
|
+
@dimension = nil
|
229
|
+
@procs = {}
|
230
|
+
class << self
|
231
|
+
def builder(ctx,sym,*args,&block)
|
232
|
+
proc = @procs[sym]
|
233
|
+
proc ? ProcBuilder.new(ctx,sym,proc,*args,&block) : nil
|
234
|
+
end
|
235
|
+
def box
|
236
|
+
@box ||= CJava.get_class('javax.swing.Box')
|
237
|
+
end
|
238
|
+
def box_layout
|
239
|
+
@box_layout ||= CJava.get_class('javax.swing.BoxLayout')
|
240
|
+
end
|
241
|
+
def panel
|
242
|
+
@panel ||= CJava.get_class('javax.swing.JPanel')
|
243
|
+
end
|
244
|
+
def dimension
|
245
|
+
@dimension ||= CJava.get_class('java.awt.Dimension')
|
246
|
+
end
|
247
|
+
def names
|
248
|
+
@names ||= @procs.keys
|
249
|
+
end
|
250
|
+
end #self
|
251
|
+
|
252
|
+
@procs[:box_layout] =
|
253
|
+
Proc.new do |obj,axis|
|
254
|
+
iaxis = case axis
|
255
|
+
when :X_AXIS : X_AXIS
|
256
|
+
when :Y_AXIS : Y_AXIS
|
257
|
+
when :LINE_AXIS : LINE_AXIS
|
258
|
+
when :PAGE_AXIS : PAGE_AXIS
|
259
|
+
else axis
|
260
|
+
end
|
261
|
+
box_layout.new(obj.kind_of?(RPC) ? obj.content_pane : obj,iaxis)
|
262
|
+
end
|
263
|
+
@procs[:x_box] = @procs[:h_box] = @procs[:horizontal_box] = Proc.new { box.new(X_AXIS) }
|
264
|
+
@procs[:y_box] = @procs[:v_box] = @procs[:vertical_box] = Proc.new { box.new(Y_AXIS) }
|
265
|
+
@procs[:line_box] = Proc.new { box.new(LINE_AXIS) }
|
266
|
+
@procs[:page_box] = Proc.new { box.new(PAGE_AXIS) }
|
267
|
+
@procs[:x_panel] = @procs[:h_panel] = @procs[:horizontal_panel] =
|
268
|
+
Proc.new do |*args|
|
269
|
+
p = panel.new(*args)
|
270
|
+
p.setLayout(box_layout.new(p,X_AXIS))
|
271
|
+
p
|
272
|
+
end
|
273
|
+
@procs[:y_panel] = @procs[:v_panel] = @procs[:vertical_panel] =
|
274
|
+
Proc.new do |*args|
|
275
|
+
p = panel.new(*args)
|
276
|
+
p.setLayout(box_layout.new(p,Y_AXIS))
|
277
|
+
p
|
278
|
+
end
|
279
|
+
@procs[:line_panel] =
|
280
|
+
Proc.new do |*args|
|
281
|
+
p = panel.new(*args)
|
282
|
+
p.setLayout(box_layout.new(p,LINE_AXIS))
|
283
|
+
p
|
284
|
+
end
|
285
|
+
@procs[:page_panel] =
|
286
|
+
Proc.new do |*args|
|
287
|
+
p = panel.new(*args)
|
288
|
+
p.setLayout(box_layout.new(p,PAGE_AXIS))
|
289
|
+
p
|
290
|
+
end
|
291
|
+
@procs[:glue] = Proc.new { box.createGlue }
|
292
|
+
@procs[:x_glue] = @procs[:h_glue] = @procs[:horizontal_glue] = Proc.new { box.createHorizontalGlue }
|
293
|
+
@procs[:y_glue] = @procs[:v_glue] = @procs[:vertical_glue] = Proc.new { box.createVerticalGlue }
|
294
|
+
@procs[:x_strut] = @procs[:h_strut] = @procs[:horizontal_strut] =
|
295
|
+
Proc.new do |*args|
|
296
|
+
box.createHorizontalStrut(*args)
|
297
|
+
end
|
298
|
+
@procs[:y_strut] = @procs[:v_strut] = @procs[:vertical_strut] =
|
299
|
+
Proc.new do |*args|
|
300
|
+
box.createVerticalStrut(*args)
|
301
|
+
end
|
302
|
+
@procs[:rigid_area] = @procs[:spacer] =
|
303
|
+
Proc.new do |*args|
|
304
|
+
box.createRigidArea(dimension.new(*args))
|
305
|
+
end
|
306
|
+
@procs[:x_spacer] = @procs[:h_spacer] = @procs[:horizontal_spacer] =
|
307
|
+
Proc.new do |*args|
|
308
|
+
box.createRigidArea(dimension.new(args[0],0))
|
309
|
+
end
|
310
|
+
@procs[:y_spacer] = @procs[:v_spacer] = @procs[:vertical_spacer] =
|
311
|
+
Proc.new do |*args|
|
312
|
+
box.createRigidArea(dimension.new(0,args[0]))
|
313
|
+
end
|
314
|
+
@procs[:filler] =
|
315
|
+
Proc.new do |*args|
|
316
|
+
box::Filler.new(dimension.new(args[0],args[1]),
|
317
|
+
dimension.new(args[2],args[3]),
|
318
|
+
dimension.new(args[4],args[5]))
|
319
|
+
end
|
320
|
+
end #BoxComponentFactory
|
321
|
+
|
322
|
+
|
323
|
+
# TODO: more factories
|
324
|
+
|
325
|
+
module DialogComponentFactory
|
326
|
+
CJava = Cheri::Java
|
327
|
+
|
328
|
+
end #DialogComponentFactory
|
329
|
+
|
330
|
+
|
331
|
+
SwingFactory = Cheri::Builder::SuperFactory.new do |f|
|
332
|
+
f << StandardFactory
|
333
|
+
f << BoxComponentFactory
|
334
|
+
f << Cheri::AWT::StandardFactory
|
335
|
+
f << CheriYieldFactory
|
336
|
+
f << CherifyFactory
|
337
|
+
f << Cheri::Java::Builder::CheriYieldFactory
|
338
|
+
f << Cheri::Java::Builder::CherifyFactory
|
339
|
+
f << Cheri::Builder::CheriYieldFactory
|
340
|
+
f << Cheri::Builder::CherifyFactory
|
341
|
+
end
|
342
|
+
|
343
|
+
class SwingProxy < Cheri::AWT::AWTProxy
|
344
|
+
|
345
|
+
impl(Types.names)
|
346
|
+
impl(BoxComponentFactory.names)
|
347
|
+
|
348
|
+
def initialize(ctx,*r)
|
349
|
+
super
|
350
|
+
if Hash === r.last
|
351
|
+
@ctx.auto!(mod) if r.last[:auto]
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
def mod
|
356
|
+
Cheri::Swing
|
357
|
+
end
|
358
|
+
private :mod
|
359
|
+
|
360
|
+
def [](opts)
|
361
|
+
raise Cheri.type_error(opts,Hash,Symbol) unless Hash === opts || Symbol === opts
|
362
|
+
if opts == :auto || (Hash === opts && opts[:auto])
|
363
|
+
@ctx.ictx.auto!(mod)
|
364
|
+
@ctx.auto!(mod)
|
365
|
+
# if (c = @ctx.client).kind_of?(RPC) || c.kind_of?(JComp)
|
366
|
+
# @ctx.push(b = CheriYieldBuilder.new(@ctx,:cheri_yield,c))
|
367
|
+
# b.run
|
368
|
+
# else
|
369
|
+
# @ctx.push(SwingFrame.new(@ctx))
|
370
|
+
# end
|
371
|
+
end
|
372
|
+
nil
|
373
|
+
end
|
374
|
+
end #SwingProxy
|
375
|
+
|
376
|
+
class SwingFrame
|
377
|
+
include Cheri::Builder::Frame
|
378
|
+
def initialize(ctx,*r,&k)
|
379
|
+
super
|
380
|
+
@obj = ctx[:swing_proxy] ||= SwingProxy.new(ctx,*r)
|
381
|
+
end
|
382
|
+
|
383
|
+
def mod
|
384
|
+
Cheri::Swing
|
385
|
+
end
|
386
|
+
end #SwingFrame
|
387
|
+
|
388
|
+
SwingResolver = Cheri::Java::Builder::ConstantResolver.new do |r|
|
389
|
+
r << Cheri::AWT::Constants
|
390
|
+
r << Constants
|
391
|
+
end
|
392
|
+
|
393
|
+
module AlignMethodConsumer
|
394
|
+
BOTTOM = 1.0
|
395
|
+
CENTER = 0.5
|
396
|
+
LEFT = 0.0
|
397
|
+
RIGHT = 1.0
|
398
|
+
TOP = 0.0
|
399
|
+
JComp = javax.swing.JComponent
|
400
|
+
|
401
|
+
def self.consume(ctx,bld,sym,*args,&k)
|
402
|
+
return false,nil unless sym == :align && (obj = bld.object).kind_of?(JComp)
|
403
|
+
argc = args.length
|
404
|
+
raise Cheri.new_argument_error(argc,1..2) unless argc == 1 || argc == 2
|
405
|
+
x_val = nil
|
406
|
+
y_val = nil
|
407
|
+
0.upto(argc-1) do |i|
|
408
|
+
arg = args[i]
|
409
|
+
if arg.kind_of?(Numeric)
|
410
|
+
unless argc == 2
|
411
|
+
raise ArgumentError,"align can't evaluate numeric value with only one argument -- specify both x and y"
|
412
|
+
end
|
413
|
+
i == 0 ? x_val = arg : y_val = arg
|
414
|
+
else
|
415
|
+
raise ArgumentError,"invalid argument for align: #{arg}" unless arg.instance_of?(Symbol)
|
416
|
+
case arg
|
417
|
+
when :TOP : y_val = TOP
|
418
|
+
when :BOTTOM : y_val = BOTTOM
|
419
|
+
when :LEFT : x_val = LEFT
|
420
|
+
when :RIGHT : x_val = RIGHT
|
421
|
+
when :CENTER :
|
422
|
+
if argc ==2
|
423
|
+
i == 0 ? x_val = CENTER : y_val = CENTER
|
424
|
+
else
|
425
|
+
x_val = y_val = CENTER
|
426
|
+
end
|
427
|
+
else raise ArgumentError,"invalid argument for align: #{arg}"
|
428
|
+
end
|
429
|
+
end
|
430
|
+
end
|
431
|
+
obj.alignment_x = x_val if x_val
|
432
|
+
obj.alignment_y = y_val if y_val
|
433
|
+
return true,nil
|
434
|
+
end
|
435
|
+
end #AlignMethodConsumer
|
436
|
+
|
437
|
+
SwingConsumer = Cheri::Builder::SuperConsumer.new do |c|
|
438
|
+
c << AlignMethodConsumer
|
439
|
+
c << Cheri::AWT::SizeMethodConsumer
|
440
|
+
c << Cheri::Java::Builder::EventMethodConsumer
|
441
|
+
c << Cheri::Java::Builder::GenericConsumer
|
442
|
+
c << Cheri::Builder::DefaultConsumer
|
443
|
+
end
|
444
|
+
|
445
|
+
end #Swing
|
446
|
+
end #Cheri
|
@@ -0,0 +1,270 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (C) 2007 William N Dortch <bill.dortch@gmail.com>
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
#
|
24
|
+
|
25
|
+
module Cheri
|
26
|
+
module Swing
|
27
|
+
module Types
|
28
|
+
CJava = Cheri::Java #:nodoc:
|
29
|
+
JS = 'javax.swing.'.freeze #:nodoc:
|
30
|
+
class << self
|
31
|
+
def get_class(sym)
|
32
|
+
# TODO: threadsafe support?
|
33
|
+
cls = @classes[sym]
|
34
|
+
if cls
|
35
|
+
if cls.instance_of?(String)
|
36
|
+
cls = CJava.get_class(JS + cls)
|
37
|
+
@classes[sym] = cls if cls
|
38
|
+
end
|
39
|
+
cls
|
40
|
+
else
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
def names
|
45
|
+
@names ||= @classes.keys
|
46
|
+
end
|
47
|
+
end #self
|
48
|
+
# TODO: review included classes; some of these would
|
49
|
+
# never be called in a builder context
|
50
|
+
@classes = {
|
51
|
+
:action_map => 'ActionMap',
|
52
|
+
:border_factory => 'BorderFactory',
|
53
|
+
:box => 'Box',
|
54
|
+
# handling box_layout in BoxComponentFactory to simplify syntax
|
55
|
+
# :box_layout => 'BoxLayout',
|
56
|
+
:button_group => 'ButtonGroup',
|
57
|
+
:cell_renderer_pane => 'CellRendererPane',
|
58
|
+
:component_input_map => 'ComponentInputMap',
|
59
|
+
:default_bounded_range_model => 'DefaultBoundedRangeModel',
|
60
|
+
:default_button_model => 'DefaultButtonModel',
|
61
|
+
:default_cell_editor => 'DefaultCellEditor',
|
62
|
+
:default_combo_box_model => 'DefaultComboBoxModel',
|
63
|
+
:default_desktop_manager => 'DefaultDesktopManager',
|
64
|
+
:default_focus_manager => 'DefaultFocusManager',
|
65
|
+
:default_list_cell_renderer => 'DefaultListCellRenderer',
|
66
|
+
:default_list_cell_renderer_ui_resource => 'DefaultListCellRenderer::UIResource',
|
67
|
+
:default_list_model => 'DefaultListModel',
|
68
|
+
:default_list_selection_model => 'DefaultListSelectionModel',
|
69
|
+
:default_row_sorter => 'DefaultRowSorter',
|
70
|
+
:default_row_sorter_model_wrapper => 'DefaultRowSorter::ModelWrapper',
|
71
|
+
:default_single_selection_model => 'DefaultSingleSelectionModel',
|
72
|
+
:focus_manager => 'FocusManager',
|
73
|
+
:gray_filter => 'GrayFilter',
|
74
|
+
:group_layout => 'GroupLayout',
|
75
|
+
:image_icon => 'ImageIcon',
|
76
|
+
:input_map => 'InputMap',
|
77
|
+
:input_verifier => 'InputVerifier',
|
78
|
+
:internal_frame_focus_traversal_policy => 'InternalFrameFocusTraversalPolicy',
|
79
|
+
:j_applet => 'JApplet',
|
80
|
+
:applet => 'JApplet',
|
81
|
+
:j_button => 'JButton',
|
82
|
+
:button => 'JButton',
|
83
|
+
:j_check_box => 'JCheckBox',
|
84
|
+
:check_box => 'JCheckBox',
|
85
|
+
:j_check_box_menu_item => 'JCheckBoxMenuItem',
|
86
|
+
:check_box_menu_item => 'JCheckBoxMenuItem',
|
87
|
+
:j_color_chooser => 'JColorChooser',
|
88
|
+
:color_chooser => 'JColorChooser',
|
89
|
+
:j_combo_box => 'JComboBox',
|
90
|
+
:combo_box => 'JComboBox',
|
91
|
+
:j_component => 'JComponent',
|
92
|
+
:component => 'JComponent',
|
93
|
+
:j_desktop_pane => 'JDesktopPane',
|
94
|
+
:desktop_pane => 'JDesktopPane',
|
95
|
+
:j_dialog => 'JDialog',
|
96
|
+
:dialog => 'JDialog',
|
97
|
+
:j_editor_pane => 'JEditorPane',
|
98
|
+
:editor_pane => 'JEditorPane',
|
99
|
+
:j_file_chooser => 'JFileChooser',
|
100
|
+
:file_chooser => 'JFileChooser',
|
101
|
+
:j_formatted_text_field => 'JFormattedTextField',
|
102
|
+
:formatted_text_field => 'JFormattedTextField',
|
103
|
+
:j_frame => 'JFrame',
|
104
|
+
:frame => 'JFrame',
|
105
|
+
:j_internal_frame => 'JInternalFrame',
|
106
|
+
:internal_frame => 'JInternalFrame',
|
107
|
+
:j_internal_frame_desktop_icon => 'JInternalFrame::JDesktopIcon',
|
108
|
+
:internal_frame_desktop_icon => 'JInternalFrame::JDesktopIcon',
|
109
|
+
:j_label => 'JLabel',
|
110
|
+
:label => 'JLabel',
|
111
|
+
:j_layered_pane => 'JLayeredPane',
|
112
|
+
:layered_pane => 'JLayeredPane',
|
113
|
+
:j_list => 'JList',
|
114
|
+
:list => 'JList',
|
115
|
+
:j_list_drop_location => 'JList::DropLocation',
|
116
|
+
:list_drop_location => 'JList::DropLocation',
|
117
|
+
:j_menu => 'JMenu',
|
118
|
+
:menu => 'JMenu',
|
119
|
+
:j_menu_bar => 'JMenuBar',
|
120
|
+
:menu_bar => 'JMenuBar',
|
121
|
+
:j_menu_item => 'JMenuItem',
|
122
|
+
:menu_item => 'JMenuItem',
|
123
|
+
:j_option_pane => 'JOptionPane',
|
124
|
+
:option_pane => 'JOptionPane',
|
125
|
+
:j_panel => 'JPanel',
|
126
|
+
:panel => 'JPanel',
|
127
|
+
:j_password_field => 'JPasswordField',
|
128
|
+
:password_field => 'JPasswordField',
|
129
|
+
:j_popup_menu => 'JPopupMenu',
|
130
|
+
:popup_menu => 'JPopupMenu',
|
131
|
+
:j_popup_menu_separator => 'JPopupMenu::Separator',
|
132
|
+
:popup_menu_separator => 'JPopupMenu::Separator',
|
133
|
+
:j_progress_bar => 'JProgressBar',
|
134
|
+
:progress_bar => 'JProgressBar',
|
135
|
+
:j_radio_button => 'JRadioButton',
|
136
|
+
:radio_button => 'JRadioButton',
|
137
|
+
:j_radio_button_menu_item => 'JRadioButtonMenuItem',
|
138
|
+
:radio_button_menu_item => 'JRadioButtonMenuItem',
|
139
|
+
:j_root_pane => 'JRootPane',
|
140
|
+
:root_pane => 'JRootPane',
|
141
|
+
:j_scroll_bar => 'JScrollBar',
|
142
|
+
:scroll_bar => 'JScrollBar',
|
143
|
+
:j_scroll_pane => 'JScrollPane',
|
144
|
+
:scroll_pane => 'JScrollPane',
|
145
|
+
:j_separator => 'JSeparator',
|
146
|
+
:separator => 'JSeparator',
|
147
|
+
:j_slider => 'JSlider',
|
148
|
+
:slider => 'JSlider',
|
149
|
+
:j_spinner => 'JSpinner',
|
150
|
+
:spinner => 'JSpinner',
|
151
|
+
:j_spinner_date_editor => 'JSpinner::DateEditor',
|
152
|
+
:spinner_date_editor => 'JSpinner::DateEditor',
|
153
|
+
:j_spinner_default_editor => 'JSpinner::DefaultEditor',
|
154
|
+
:spinner_default_editor => 'JSpinner::DefaultEditor',
|
155
|
+
:j_spinner_list_editor => 'JSpinner::ListEditor',
|
156
|
+
:spinner_list_editor => 'JSpinner::ListEditor',
|
157
|
+
:j_spinner_number_editor => 'JSpinner::NumberEditor',
|
158
|
+
:spinner_number_editor => 'JSpinner::NumberEditor',
|
159
|
+
:j_split_pane => 'JSplitPane',
|
160
|
+
:split_pane => 'JSplitPane',
|
161
|
+
:j_tabbed_pane => 'JTabbedPane',
|
162
|
+
:tabbed_pane => 'JTabbedPane',
|
163
|
+
:j_table => 'JTable',
|
164
|
+
:table => 'JTable',
|
165
|
+
:j_table_drop_location => 'JTable::DropLocation',
|
166
|
+
:table_drop_location => 'JTable::DropLocation',
|
167
|
+
:j_text_area => 'JTextArea',
|
168
|
+
:text_area => 'JTextArea',
|
169
|
+
:j_text_field => 'JTextField',
|
170
|
+
:text_field => 'JTextField',
|
171
|
+
:j_text_pane => 'JTextPane',
|
172
|
+
:text_pane => 'JTextPane',
|
173
|
+
:j_toggle_button => 'JToggleButton',
|
174
|
+
:toggle_button => 'JToggleButton',
|
175
|
+
:j_toggle_button_toggle_button_model => 'JToggleButton::ToggleButtonModel',
|
176
|
+
:toggle_button_toggle_button_model => 'JToggleButton::ToggleButtonModel',
|
177
|
+
:toggle_button_model => 'JToggleButton::ToggleButtonModel',
|
178
|
+
:j_tool_bar => 'JToolBar',
|
179
|
+
:tool_bar => 'JToolBar',
|
180
|
+
:j_tool_bar_separator => 'JToolBar::Separator',
|
181
|
+
:tool_bar_separator => 'JToolBar::Separator',
|
182
|
+
:j_tool_tip => 'JToolTip',
|
183
|
+
:tool_tip => 'JToolTip',
|
184
|
+
:j_tree => 'JTree',
|
185
|
+
:tree => 'JTree',
|
186
|
+
:j_tree_drop_location => 'JTree::DropLocation',
|
187
|
+
:tree_drop_location => 'JTree::DropLocation',
|
188
|
+
:j_tree_dynamic_util_tree_node => 'JTree::DynamicUtilTreeNode',
|
189
|
+
:tree_dynamic_util_tree_node => 'JTree::DynamicUtilTreeNode',
|
190
|
+
:dynamic_util_tree_node => 'JTree::DynamicUtilTreeNode',
|
191
|
+
:j_tree_empty_selection_model => 'JTree::EmptySelectionModel',
|
192
|
+
:tree_empty_selection_model => 'JTree::EmptySelectionModel',
|
193
|
+
:j_viewport => 'JViewport',
|
194
|
+
:viewport => 'JViewport',
|
195
|
+
:j_window => 'JWindow',
|
196
|
+
:window => 'JWindow',
|
197
|
+
:key_stroke => 'KeyStroke',
|
198
|
+
:layout_focus_traversal_policy => 'LayoutFocusTraversalPolicy',
|
199
|
+
:layout_style => 'LayoutStyle',
|
200
|
+
:look_and_feel => 'LookAndFeel',
|
201
|
+
:menu_selection_manager => 'MenuSelectionManager',
|
202
|
+
:overlay_layout => 'OverlayLayout',
|
203
|
+
:popup => 'Popup',
|
204
|
+
:popup_factory => 'PopupFactory',
|
205
|
+
:progress_monitor => 'ProgressMonitor',
|
206
|
+
:progress_monitor_input_stream => 'ProgressMonitorInputStream',
|
207
|
+
:repaint_manager => 'RepaintManager',
|
208
|
+
:row_filter => 'RowFilter',
|
209
|
+
:row_filter_entry => 'RowFilter::Entry ',
|
210
|
+
:row_sorter => 'RowSorter',
|
211
|
+
:row_sorter_sort_key => 'RowSorter::SortKey',
|
212
|
+
:scroll_pane_layout => 'ScrollPaneLayout',
|
213
|
+
:scroll_pane_layout_ui_resource => 'ScrollPaneLayout::UIResource',
|
214
|
+
:size_requirements => 'SizeRequirements',
|
215
|
+
:size_sequence => 'SizeSequence',
|
216
|
+
:sorting_focus_traversal_policy => 'SortingFocusTraversalPolicy',
|
217
|
+
:spinner_date_model => 'SpinnerDateModel',
|
218
|
+
:spinner_list_model => 'SpinnerListModel',
|
219
|
+
:spinner_number_model => 'SpinnerNumberModel',
|
220
|
+
:spring => 'Spring',
|
221
|
+
:spring_layout => 'SpringLayout',
|
222
|
+
:spring_layout_constraints => 'SpringLayout::Constraints',
|
223
|
+
:swing_utilities => 'SwingUtilities',
|
224
|
+
:swing_worker => 'SwingWorker',
|
225
|
+
:timer => 'Timer',
|
226
|
+
:tool_tip_manager => 'ToolTipManager',
|
227
|
+
:transfer_handler => 'TransferHandler',
|
228
|
+
:transfer_handler_drop_location => 'TransferHandler::DropLocation',
|
229
|
+
:transfer_handler_transfer_support => 'TransferHandler::TransferSupport',
|
230
|
+
:ui_defaults => 'UIDefaults',
|
231
|
+
:ui_defaults_lazy_input_map => 'UIDefaults::LazyInputMap',
|
232
|
+
:ui_defaults_proxy_lazy_value => 'UIDefaults::ProxyLazyValue',
|
233
|
+
:ui_manager => 'UIManager',
|
234
|
+
:ui_manager_look_and_feel_info => 'UIManager::LookAndFeelInfo',
|
235
|
+
:viewport_layout => 'ViewportLayout',
|
236
|
+
:bevel_border => 'border.BevelBorder',
|
237
|
+
:compound_border => 'border.CompoundBorder',
|
238
|
+
:empty_border => 'border.EmptyBorder',
|
239
|
+
:etched_border => 'border.EtchedBorder',
|
240
|
+
:line_border => 'border.LineBorder',
|
241
|
+
:matte_border => 'border.MatteBorder',
|
242
|
+
:soft_bevel_border => 'border.SoftBevelBorder',
|
243
|
+
:titled_border => 'border.TitledBorder',
|
244
|
+
:color_chooser_component_factory => 'colorchooser.ColorChooserComponentFactory',
|
245
|
+
:default_color_selection_model => 'colorchooser.DefaultColorSelectionModel',
|
246
|
+
:file_name_extension_filter => 'filechooser.FileNameExtensionFilter',
|
247
|
+
:default_table_cell_renderer => 'table.DefaultTableCellRenderer',
|
248
|
+
:default_table_cell_renderer_ui_resource => 'table.DefaultTableCellRenderer::UIResource',
|
249
|
+
:default_table_column_model => 'table.DefaultTableColumnModel',
|
250
|
+
:default_table_model => 'table.DefaultTableModel',
|
251
|
+
:j_table_header => 'table.JTableHeader',
|
252
|
+
:table_header => 'table.JTableHeader',
|
253
|
+
:table_column => 'table.TableColumn',
|
254
|
+
:table_row_sorter => 'table.TableRowSorter',
|
255
|
+
:default_mutable_tree_node => 'tree.DefaultMutableTreeNode',
|
256
|
+
:default_tree_cell_editor => 'tree.DefaultTreeCellEditor',
|
257
|
+
:default_tree_cell_renderer => 'tree.DefaultTreeCellRenderer',
|
258
|
+
:default_tree_model => 'tree.DefaultTreeModel',
|
259
|
+
:default_tree_selection_model => 'tree.DefaultTreeSelectionModel',
|
260
|
+
:fixed_height_layout_cache => 'tree.FixedHeightLayoutCache',
|
261
|
+
:tree_path => 'tree.TreePath',
|
262
|
+
:variable_height_layout_cache => 'tree.VariableHeightLayoutCache'
|
263
|
+
}
|
264
|
+
|
265
|
+
end #StandardTypes
|
266
|
+
end #Swing
|
267
|
+
end #Cheri
|
268
|
+
|
269
|
+
#cls = Cheri::Swing::StandardTypes.get_class(:frame)
|
270
|
+
#puts cls.java_class.name
|