sweetgui 0.0.3 → 0.0.4
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/docs/object-tree.jpg +0 -0
- data/icons/Thumbs.db +0 -0
- data/lib/apps/objecttree.rb +9 -2
- data/lib/swt.rb +97 -44
- metadata +3 -3
- data/lib/test2.class +0 -0
Binary file
|
data/icons/Thumbs.db
CHANGED
Binary file
|
data/lib/apps/objecttree.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# This file is an application of the SWT module. JRubyUtils::RubyObjectBrowser may be
|
2
|
+
# used to show the contents of an object.
|
3
|
+
#--
|
1
4
|
# The contents of this file are subject to the Mozilla Public License
|
2
5
|
# Version 1.1 (the "License"); you may not use this file except in
|
3
6
|
# compliance with the License. You may obtain a copy of the License at
|
@@ -15,9 +18,8 @@
|
|
15
18
|
# Contributor(s):
|
16
19
|
# Johannes Rudolph <johannes_rudolph@gmail.com>
|
17
20
|
|
18
|
-
#require '../swt'
|
19
|
-
|
20
21
|
class Method
|
22
|
+
# get the name of the method
|
21
23
|
def name
|
22
24
|
method_field=Java::JavaClass.for_name('org.jruby.RubyMethod').declared_field('methodName')
|
23
25
|
method_field.accessible=true
|
@@ -36,9 +38,14 @@ class ::SWT::TreeBuilder
|
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
41
|
+
# some JRuby utilities
|
39
42
|
module JRubyUtils
|
43
|
+
# A Browser of objects for JRuby
|
44
|
+
#
|
45
|
+
# link:../docs/object-tree.jpg
|
40
46
|
class RubyObjectBrowser
|
41
47
|
class << self
|
48
|
+
# Builds a tree which shows the structure of the given object
|
42
49
|
def object_tree(object)
|
43
50
|
SWT::Builder.go do
|
44
51
|
shell "JRuby Object Viewer by JR - visit http://virtual-void.net" do
|
data/lib/swt.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# SWT::Builder and SWT::TreeBuilder implementation
|
2
|
+
#--
|
1
3
|
# The contents of this file are subject to the Mozilla Public License
|
2
4
|
# Version 1.1 (the "License"); you may not use this file except in
|
3
5
|
# compliance with the License. You may obtain a copy of the License at
|
@@ -18,10 +20,12 @@
|
|
18
20
|
require 'java'
|
19
21
|
|
20
22
|
module SWT
|
23
|
+
# see JRubyUtils::RubyObjectBrowser#object_tree
|
21
24
|
def self.object_tree(o)
|
22
25
|
require 'apps/objecttree'
|
23
26
|
JRubyUtils::RubyObjectBrowser.object_tree o
|
24
27
|
end
|
28
|
+
|
25
29
|
class TreeCommand
|
26
30
|
def initialize(parent)
|
27
31
|
@parent=parent
|
@@ -165,28 +169,8 @@ module SWT
|
|
165
169
|
end
|
166
170
|
def invoke(stack)
|
167
171
|
lastobject=stack.last.getData("object")
|
168
|
-
#puts "Laststack: #{stack.last} id: #{stack.last.hashCode} object: #{lastobject} id: #{lastobject.hashCode}"
|
169
172
|
newobject=@exp.call(lastobject)
|
170
|
-
#class <<newobject
|
171
|
-
# def last
|
172
|
-
# @last
|
173
|
-
# end
|
174
|
-
# def last=(last)
|
175
|
-
# @last=last
|
176
|
-
# end
|
177
|
-
# alias :old_dup :dup
|
178
|
-
# def dup
|
179
|
-
# new=old_dup
|
180
|
-
# new.last=@last
|
181
|
-
# puts "Object gets dupd: #{self} #{self.id}"
|
182
|
-
# end
|
183
|
-
#end
|
184
|
-
#newobject.last=lastobject
|
185
|
-
#test=Java.java_to_ruby(newobject)
|
186
173
|
stack.last.setData("object",newobject)
|
187
|
-
#test2=stack.last.getData("object")
|
188
|
-
#puts "Test: #{test}, Test2: #{test2} test1==test2: #{test==test2} test1===test2 #{test===test2} id:#{test.id} lasttree: #{stack.last.hashCode}"
|
189
|
-
# puts "ObjectCommand.invoke lastobject: #{lastobject} newobject: #{newobject} newobject.last: #{newobject.last}"
|
190
174
|
end
|
191
175
|
end
|
192
176
|
class ChildrenCommand<ContainerTreeCommand
|
@@ -221,18 +205,56 @@ module SWT
|
|
221
205
|
super if condition
|
222
206
|
end
|
223
207
|
end
|
208
|
+
|
209
|
+
# Used to describe Trees
|
210
|
+
#
|
211
|
+
# Example:
|
212
|
+
# SWT::Builder.go do
|
213
|
+
# shell "Example" do
|
214
|
+
# tree :horizontalFill=>true,:verticalFill=>true do
|
215
|
+
# child "Father" do
|
216
|
+
# child "Peter"
|
217
|
+
# child "Paul"
|
218
|
+
# child "Mary"
|
219
|
+
# end
|
220
|
+
# end
|
221
|
+
# end
|
222
|
+
# end
|
223
|
+
#
|
224
|
+
# But most of it's power lies in its 'children' and 'link' constructs:
|
225
|
+
#
|
226
|
+
# kids=%w[Peter Paul Mary] # define some children
|
227
|
+
# SWT::Builder.go do
|
228
|
+
# shell "Example" do
|
229
|
+
# tree :horizontalFill=>true,:verticalFill=>true do # some display styles
|
230
|
+
# object {"Fritz"}
|
231
|
+
# @father=child do # safe this tree command for later
|
232
|
+
# label {|object| "Father #{object}"} # we'll call him Father X
|
233
|
+
# children lambda{kids} do # children will evaluate the given lambda when appropriate ...
|
234
|
+
# label {|child| "#{child} (age:#{child.length})"} # ... and execute every child command for each child
|
235
|
+
# link{@father} # since every child is a maybe-father, link back to father command, see what happens...
|
236
|
+
# end # ... yeah, recursive reproduction
|
237
|
+
# end
|
238
|
+
# end
|
239
|
+
# end
|
240
|
+
# end
|
241
|
+
#
|
242
|
+
# Since every command is evaluated lazily, it's possible to construct
|
243
|
+
# such infinite trees easily.
|
244
|
+
#
|
245
|
+
# See JRubyUtils::RubyObjectBrowser#object_tree for a more complex example.
|
224
246
|
class TreeBuilder
|
225
247
|
def initialize(&block)
|
226
248
|
@current=ContainerTreeCommand.new nil
|
227
249
|
instance_eval(&block)
|
228
250
|
end
|
251
|
+
# Command to create a new tree column in a tree table
|
229
252
|
def column(text)
|
230
253
|
cmd=SimpleCommand.new @current
|
231
254
|
@current.accept cmd
|
232
255
|
class <<cmd
|
233
256
|
include_class 'org.eclipse.swt.widgets.TreeColumn'
|
234
257
|
def invoke(stack)
|
235
|
-
# puts "column invoke stack:#{stack}, name:#{@name}"
|
236
258
|
stack.last.setHeaderVisible true
|
237
259
|
tc=TreeColumn.new stack.last,Builder::RealSWT::NONE
|
238
260
|
tc.setText @name
|
@@ -244,6 +266,7 @@ module SWT
|
|
244
266
|
end
|
245
267
|
cmd.name=text
|
246
268
|
end
|
269
|
+
# Command which creates a new child if invoked
|
247
270
|
def child(label=nil,&block)
|
248
271
|
cmd=ChildCommand.new @current
|
249
272
|
@current and @current.accept cmd
|
@@ -254,24 +277,37 @@ module SWT
|
|
254
277
|
@current=old
|
255
278
|
cmd
|
256
279
|
end
|
280
|
+
# Command which will set the text of a specific column
|
281
|
+
# when invoked
|
257
282
|
def cell(i,&block)
|
258
283
|
@current.accept(LabelCommand.new(@current,block,i))
|
259
284
|
end
|
285
|
+
# Command which will set the label of the item
|
260
286
|
def label(labelExp=nil,&block)
|
261
287
|
block=lambda{labelExp} if labelExp
|
262
288
|
@current.accept(LabelCommand.new(@current,block))
|
263
289
|
end
|
290
|
+
# Command to set the object property of the item
|
264
291
|
def object(&block)
|
265
292
|
@current.accept(ObjectCommand.new(@current,block))
|
266
293
|
end
|
294
|
+
# Command to set the image of a tree item
|
267
295
|
def image(&block)
|
268
296
|
@current.accept(ImageCommand.new(@current,block))
|
269
297
|
end
|
298
|
+
# Link back to command used before, if the link command is
|
299
|
+
# invoked it simply delegates to the cmd given
|
270
300
|
def link(cmd=nil,&block)
|
271
301
|
cmd=block unless cmd
|
272
302
|
#puts "Creating link with cmd=#{cmd}"
|
273
303
|
@current.accept(SimpleCommand.new(@current, cmd))
|
274
304
|
end
|
305
|
+
# Command which expands child items from a collection
|
306
|
+
#
|
307
|
+
# The collection has to be given as lambda (exp).
|
308
|
+
# It will be invoked when the children command is invoked.
|
309
|
+
# You may define child commands in a block, these will
|
310
|
+
# be executed for each child of the computed collection/array.
|
275
311
|
def children(exp,&block)
|
276
312
|
cmd=ChildrenCommand.new @current,exp
|
277
313
|
@current.accept cmd
|
@@ -281,11 +317,14 @@ module SWT
|
|
281
317
|
@current=old
|
282
318
|
cmd
|
283
319
|
end
|
320
|
+
# A shortcut command for a child without children
|
284
321
|
def leaf(&block)
|
285
322
|
child do
|
286
323
|
label &block
|
287
324
|
end
|
288
325
|
end
|
326
|
+
# Command which acts as a container for other commands.
|
327
|
+
# It has no semantics on its own but just invokes it child commands.
|
289
328
|
def container(&block)
|
290
329
|
cmd=ContainerTreeCommand.new @current
|
291
330
|
@current and @current.accept cmd
|
@@ -295,6 +334,8 @@ module SWT
|
|
295
334
|
@current=old
|
296
335
|
cmd
|
297
336
|
end
|
337
|
+
# Command that will execute only if the condition given as 'exp' evaluates
|
338
|
+
# to a non-nil value. It will then invoke its child commands given in a block.
|
298
339
|
def conditional(exp,&block)
|
299
340
|
cmd=ConditionalCommand.new @current,exp
|
300
341
|
@current.accept cmd
|
@@ -311,16 +352,12 @@ module SWT
|
|
311
352
|
@current
|
312
353
|
end
|
313
354
|
end
|
314
|
-
class Builder
|
315
|
-
#class <<self
|
316
|
-
# alias :old_include_class :include_class
|
317
|
-
#def include_class (name,&block)
|
318
|
-
# cl=old_include_class name,&block
|
319
|
-
# JavaUtilities.get_proxy_class(name).compile
|
320
|
-
#end
|
321
|
-
#end
|
322
355
|
|
356
|
+
# The heart of the SWT module: You may build GUIs with the Builder class
|
357
|
+
#
|
358
|
+
class Builder
|
323
359
|
include_class 'org.eclipse.swt.widgets.Shell'
|
360
|
+
include_class 'org.eclipse.swt.events.SelectionListener'
|
324
361
|
include_class 'org.eclipse.swt.widgets.Group'
|
325
362
|
include_class 'org.eclipse.swt.widgets.Text'
|
326
363
|
include_class 'org.eclipse.swt.widgets.Label'
|
@@ -335,10 +372,7 @@ module SWT
|
|
335
372
|
'RealSWT'
|
336
373
|
end
|
337
374
|
|
338
|
-
|
339
|
-
|
340
|
-
# end
|
341
|
-
|
375
|
+
# takes a block of Builder language code, builds the screen and shows it
|
342
376
|
def self.go(&block)
|
343
377
|
shell=Builder.new.instance_eval(&block)
|
344
378
|
shell.pack
|
@@ -347,6 +381,7 @@ module SWT
|
|
347
381
|
run shell
|
348
382
|
end
|
349
383
|
|
384
|
+
private
|
350
385
|
def init_control(c,opts={})
|
351
386
|
if c.getParent.getLayout.class==GridLayout
|
352
387
|
gd=GridData.new
|
@@ -376,6 +411,8 @@ module SWT
|
|
376
411
|
end
|
377
412
|
end
|
378
413
|
|
414
|
+
public
|
415
|
+
# Create a shell (a toplevel window)
|
379
416
|
def shell(title,columns=1,style=RealSWT::SHELL_TRIM,&block)
|
380
417
|
res=Shell.new(Display.getDefault,style)
|
381
418
|
res.setText title
|
@@ -383,15 +420,13 @@ module SWT
|
|
383
420
|
fl.marginHeight=5
|
384
421
|
fl.marginWidth=5
|
385
422
|
res.setLayout fl
|
386
|
-
# oldparent=@parent
|
387
423
|
@parent=res
|
388
|
-
# instance_eval(&block) if block_given?
|
389
|
-
# @parent=oldparent
|
390
424
|
container(columns,&block)
|
391
|
-
#init_composite res,columns
|
392
425
|
return res
|
393
426
|
end
|
394
427
|
|
428
|
+
# Create an empty container (does not show anything). It's
|
429
|
+
# only supposed for layouting elements
|
395
430
|
def container(columns=1,opts={},&block)
|
396
431
|
opts[:style] or opts[:style]=RealSWT::NONE
|
397
432
|
res=Composite.new(@parent,opts[:style])
|
@@ -399,6 +434,7 @@ module SWT
|
|
399
434
|
return res
|
400
435
|
end
|
401
436
|
|
437
|
+
# Create a group element with the given title
|
402
438
|
def group(title,columns=1,style=RealSWT::NONE,&block)
|
403
439
|
res=Group.new(@parent,style)
|
404
440
|
res.setText title
|
@@ -406,14 +442,16 @@ module SWT
|
|
406
442
|
return res
|
407
443
|
end
|
408
444
|
|
445
|
+
# Create a text box. Sets the text if supplied
|
409
446
|
def text(text=nil,style=RealSWT::BORDER)
|
410
|
-
#puts "Text: #{text}"
|
411
447
|
res=Text.new(@parent,style)
|
412
448
|
text and res.setText text
|
413
449
|
init_control res
|
414
450
|
return res
|
415
451
|
end
|
416
452
|
|
453
|
+
# Create a label and show the text supplied.
|
454
|
+
# You may use any form of 'labeledText', 'labeledButton'...
|
417
455
|
def label(text,style=RealSWT::NONE)
|
418
456
|
res=Label.new(@parent,style)
|
419
457
|
res.setText text
|
@@ -421,19 +459,33 @@ module SWT
|
|
421
459
|
return res
|
422
460
|
end
|
423
461
|
|
424
|
-
|
462
|
+
# Create a push button with the specified text
|
463
|
+
# If block is given this block will be called if button is pressed
|
464
|
+
def button(text,style=RealSWT::NONE,&block)
|
425
465
|
res=Button.new(@parent,style)
|
426
466
|
res.setText text
|
427
467
|
init_control res
|
468
|
+
if block_given?
|
469
|
+
lis=SelectionListener.new
|
470
|
+
lis.instance_eval do
|
471
|
+
def widgetDefaultSelected(event)
|
472
|
+
end
|
473
|
+
def widgetSelected (event)
|
474
|
+
@block.call event
|
475
|
+
end
|
476
|
+
@block=block
|
477
|
+
end
|
478
|
+
res.addSelectionListener lis
|
479
|
+
end
|
428
480
|
return res
|
429
481
|
end
|
430
482
|
|
483
|
+
# Create Tree if block is given it is evaluated as TreeBuilder commands
|
431
484
|
def tree(opts={:style=>RealSWT::BORDER},&block)
|
432
485
|
opts[:style] or opts[:style]=RealSWT::BORDER
|
433
486
|
res=Tree.new(@parent,opts[:style])
|
434
487
|
init_control res,opts
|
435
488
|
builder=TreeBuilder.new &block
|
436
|
-
#puts builder.current
|
437
489
|
builder.run res
|
438
490
|
res.pack
|
439
491
|
return res
|
@@ -443,16 +495,17 @@ module SWT
|
|
443
495
|
alias :old_method_missing method_missing
|
444
496
|
end
|
445
497
|
|
446
|
-
def method_missing(id,*args)
|
447
|
-
#puts "ID:#{id.class.inspect}\t\targs:#{args.join ','}\t#{id=~/labeled(\w+)/}"
|
498
|
+
def method_missing(id,*args,&block)
|
448
499
|
if id.to_s=~/labeled(\w+)/
|
449
500
|
label args.shift
|
450
|
-
method($1.downcase).call *args
|
501
|
+
method($1.downcase).call *args,&block
|
451
502
|
else
|
452
|
-
old_method_missing id,args
|
503
|
+
old_method_missing id,args,&block
|
453
504
|
end
|
454
505
|
end
|
455
506
|
|
507
|
+
# A helper function for dispatching SWT events.
|
508
|
+
# Blocks as long as the given shell is not disposed.
|
456
509
|
def Builder.run(shell)
|
457
510
|
d=shell.getDisplay
|
458
511
|
while(!shell.isDisposed&&shell.isVisible) do
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: sweetgui
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2006-
|
6
|
+
version: 0.0.4
|
7
|
+
date: 2006-10-12 00:00:00 +02:00
|
8
8
|
summary: "SWeeTgui: Fast building of SWT GUI screens for JRuby"
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -31,8 +31,8 @@ files:
|
|
31
31
|
- tests/ts_swt.rb
|
32
32
|
- lib/apps
|
33
33
|
- lib/swt.rb
|
34
|
-
- lib/test2.class
|
35
34
|
- lib/apps/objecttree.rb
|
35
|
+
- docs/object-tree.jpg
|
36
36
|
- icons/action_back.gif
|
37
37
|
- icons/action_forward.gif
|
38
38
|
- icons/action_go.gif
|
data/lib/test2.class
DELETED
Binary file
|