sweetgui 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|