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.
Files changed (79) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README +98 -0
  3. data/Rakefile +121 -0
  4. data/examples/hello_world_1.rb +28 -0
  5. data/examples/table_1.rb +44 -0
  6. data/lib/cheri/awt.rb +41 -0
  7. data/lib/cheri/builder.rb +31 -0
  8. data/lib/cheri/builder/awt/connecter.rb +63 -0
  9. data/lib/cheri/builder/awt/constants.rb +1003 -0
  10. data/lib/cheri/builder/awt/main.rb +191 -0
  11. data/lib/cheri/builder/awt/types.rb +220 -0
  12. data/lib/cheri/builder/base.rb +533 -0
  13. data/lib/cheri/builder/config.rb +187 -0
  14. data/lib/cheri/builder/connecter.rb +386 -0
  15. data/lib/cheri/builder/context.rb +655 -0
  16. data/lib/cheri/builder/generator.rb +425 -0
  17. data/lib/cheri/builder/html/charsets.rb +154 -0
  18. data/lib/cheri/builder/html/common.rb +32 -0
  19. data/lib/cheri/builder/html/connecter.rb +57 -0
  20. data/lib/cheri/builder/html/element.rb +156 -0
  21. data/lib/cheri/builder/html/main.rb +116 -0
  22. data/lib/cheri/builder/html/types.rb +123 -0
  23. data/lib/cheri/builder/main.rb +483 -0
  24. data/lib/cheri/builder/swing/connecter.rb +141 -0
  25. data/lib/cheri/builder/swing/constants.rb +420 -0
  26. data/lib/cheri/builder/swing/main.rb +446 -0
  27. data/lib/cheri/builder/swing/types.rb +270 -0
  28. data/lib/cheri/builder/xml/charsets.rb +154 -0
  29. data/lib/cheri/builder/xml/common.rb +32 -0
  30. data/lib/cheri/builder/xml/connecter.rb +42 -0
  31. data/lib/cheri/builder/xml/element.rb +189 -0
  32. data/lib/cheri/builder/xml/main.rb +130 -0
  33. data/lib/cheri/builder/xml/types.rb +36 -0
  34. data/lib/cheri/cheri.rb +70 -0
  35. data/lib/cheri/cjx.rb +3 -0
  36. data/lib/cheri/explorer.rb +32 -0
  37. data/lib/cheri/explorer/explorer.rb +560 -0
  38. data/lib/cheri/html.rb +31 -0
  39. data/lib/cheri/image/Delete24.gif +0 -0
  40. data/lib/cheri/image/Find24.gif +0 -0
  41. data/lib/cheri/image/FindAgain24.gif +0 -0
  42. data/lib/cheri/image/Refresh24.gif +0 -0
  43. data/lib/cheri/image/Search24.gif +0 -0
  44. data/lib/cheri/image/Thumbs.db +0 -0
  45. data/lib/cheri/image/cheri_icon_16x16.png +0 -0
  46. data/lib/cheri/image/cheri_icon_24x24.png +0 -0
  47. data/lib/cheri/image/cheri_logo_medium.png +0 -0
  48. data/lib/cheri/image/close_10x10.png +0 -0
  49. data/lib/cheri/image/close_10x10s.png +0 -0
  50. data/lib/cheri/image/close_12x12.png +0 -0
  51. data/lib/cheri/image/close_14x14.png +0 -0
  52. data/lib/cheri/image/close_24x24.png +0 -0
  53. data/lib/cheri/image/close_dim2_12x12.png +0 -0
  54. data/lib/cheri/image/close_dim_12x12.png +0 -0
  55. data/lib/cheri/image/cls_tree.png +0 -0
  56. data/lib/cheri/image/con_tree.png +0 -0
  57. data/lib/cheri/image/jruby_14x16.png +0 -0
  58. data/lib/cheri/image/jruby_logo.png +0 -0
  59. data/lib/cheri/image/mod_tree.png +0 -0
  60. data/lib/cheri/image/obj_tree.png +0 -0
  61. data/lib/cheri/image/ruby_16x16.png +0 -0
  62. data/lib/cheri/image/vars_tree.png +0 -0
  63. data/lib/cheri/java.rb +26 -0
  64. data/lib/cheri/java/builder.rb +28 -0
  65. data/lib/cheri/java/builder/main.rb +407 -0
  66. data/lib/cheri/java/builder/util.rb +480 -0
  67. data/lib/cheri/java/java.rb +56 -0
  68. data/lib/cheri/jruby.rb +32 -0
  69. data/lib/cheri/jruby/explorer.rb +43 -0
  70. data/lib/cheri/jruby/explorer/common.rb +38 -0
  71. data/lib/cheri/jruby/explorer/dialogs.rb +383 -0
  72. data/lib/cheri/jruby/explorer/explorer.rb +904 -0
  73. data/lib/cheri/jruby/explorer/splash.rb +80 -0
  74. data/lib/cheri/jruby/explorer/viewer.rb +619 -0
  75. data/lib/cheri/jruby/explorer/viewers.rb +1057 -0
  76. data/lib/cheri/jruby/jruby.rb +59 -0
  77. data/lib/cheri/swing.rb +41 -0
  78. data/lib/cheri/xml.rb +31 -0
  79. metadata +135 -0
@@ -0,0 +1,1057 @@
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 JRuby
27
+ module Explorer
28
+
29
+ class RootNodeViewer < HtmlNameValueListViewer
30
+ include InstanceListener
31
+
32
+ def initialize(*r,&k)
33
+ super
34
+ main.add_instance_listener(self)
35
+ end
36
+
37
+ def title
38
+ 'Instances'
39
+ end
40
+ def icon
41
+ CheriIcon
42
+ end
43
+ def table_rows
44
+ main.instance_list.each do |inst|
45
+ name_value_row(inst.name,inst.address)
46
+ end
47
+ end
48
+ def instance_added(instance)
49
+ refresh
50
+ end
51
+ def instance_removed(instance)
52
+ refresh
53
+ end
54
+ end #RootNodeViewer
55
+
56
+ class RubyInstanceViewer < HtmlNameValueListViewer
57
+ def title
58
+ @instance.name
59
+ end
60
+
61
+ def icon
62
+ @instance.icon
63
+ end
64
+
65
+ def table_rows
66
+ name_value_row('RUBY_PLATFORM',proxy.ruby_platform)
67
+ name_value_row('RUBY_VERSION',proxy.ruby_version)
68
+ name_value_row('RUBY_RELEASE_DATE',proxy.ruby_release_date)
69
+ nil
70
+ end
71
+ end #RubyInstanceViewer
72
+
73
+ class JRubyInstanceViewer < RubyInstanceViewer
74
+ JVersion = 'java.version'.freeze
75
+ JVendor = 'java.vendor'.freeze
76
+ RtName = 'java.runtime.name'.freeze
77
+ RtVersion = 'java.runtime.version'.freeze
78
+ VmName = 'java.vm.name'.freeze
79
+ VmVersion = 'java.vm.version'.freeze
80
+ VmVendor = 'java.vm.vendor'.freeze
81
+
82
+ def table_rows
83
+ super
84
+ env = proxy.env_java_brief
85
+ name_value_row('JRUBY_VERSION',proxy.jruby_version)
86
+ name_value_row('Java version',env[JVersion])
87
+ name_value_row('Java vendor',env[JVendor])
88
+ name_value_row('Runtime name',env[RtName])
89
+ name_value_row('Runtime version',env[RtVersion])
90
+ name_value_row('VM name',env[VmName])
91
+ name_value_row('VM version',env[VmVersion])
92
+ name_value_row('VM vendor',env[VmVendor])
93
+ name_value_row('SecurityManager',proxy.security_manager)
94
+ name_value_row('Available processors',proxy.available_processors)
95
+ name_value_row('Total memory',"#{(proxy.total_memory/1000.0).round}K")
96
+ name_value_row('Free memory',"#{(proxy.free_memory/1000.0).round}K")
97
+ name_value_row('Maximum memory',"#{(proxy.max_memory/1000.0).round}K")
98
+ name_value_row('ObjectSpace enabled',proxy.object_space?)
99
+ name_value_row('JRuby start time',proxy.jruby_start_time)
100
+ nil
101
+ end
102
+
103
+ end #JRubyInstanceViewer
104
+
105
+ class LocalJRubyInstanceViewer < JRubyInstanceViewer
106
+ def title
107
+ 'Local JRuby'
108
+ end
109
+ def title_tab
110
+ 'Local'
111
+ end
112
+ end #LocalJRubyInstanceViewer
113
+
114
+ #class NameValueListViewer < HtmlNameValueListViewer
115
+ #
116
+ #end
117
+
118
+ class EnvViewer < HtmlNameValueListViewer
119
+ def title
120
+ "#{@instance.name}: ENV"
121
+ end
122
+ def title_tree
123
+ 'ENV'
124
+ end
125
+ def icon
126
+ VariablesIcon
127
+ end
128
+ def leaf?
129
+ true
130
+ end
131
+ def table_rows
132
+ env = proxy.env.sort
133
+ env.each do |name,value|
134
+ if Array === value
135
+ value = value.sort rescue value
136
+ name_value_row(name,value_list(value))
137
+ else
138
+ name_value_row(name,esc(value));
139
+ end
140
+ end
141
+ nil
142
+ end
143
+ end
144
+
145
+ class JavaEnvViewer < HtmlNameValueListViewer
146
+ def title
147
+ "#{@instance.name}: ENV_JAVA"
148
+ end
149
+ def title_tree
150
+ 'ENV_JAVA'
151
+ end
152
+ def icon
153
+ VariablesIcon
154
+ end
155
+ def leaf?
156
+ true
157
+ end
158
+ def table_rows
159
+ env = proxy.env_java.sort
160
+ env.each do |name,value|
161
+ if Array === value
162
+ value = value.sort rescue value
163
+ name_value_row(name,value_list(value))
164
+ else
165
+ name_value_row(name,esc(value));
166
+ end
167
+ end
168
+ nil
169
+ end
170
+ end
171
+
172
+ class GlobalVariablesViewer < HtmlNameValueListViewer
173
+ def title
174
+ "#{@instance.name}: global_variables"
175
+ end
176
+ def title_tree
177
+ 'global_vars'
178
+ end
179
+ def title_tab
180
+ "#{@instance.name}: global"
181
+ end
182
+ def icon
183
+ VariablesIcon
184
+ end
185
+ def leaf?
186
+ true
187
+ end
188
+ def table_rows
189
+ vars = proxy.global_vars.sort
190
+ vars.each do |name,value|
191
+ if Array === value
192
+ value = value.sort rescue value
193
+ name_value_row(@esc = esc(name),value_list(value))
194
+ else
195
+ name_value_row(@esc = esc(name),esc(value))
196
+ end
197
+ end
198
+ nil
199
+ end
200
+ end #GlobalVariablesViewer
201
+
202
+
203
+ class ConstantsViewer < HtmlNameValueListViewer
204
+ include ParentViewerInterface
205
+ include DRbHelper
206
+
207
+ def title
208
+ "#{@instance.name}: Module.constants"
209
+ end
210
+ def title_tree
211
+ 'constants'
212
+ end
213
+ def title_tab
214
+ "#{@instance.name}: const"
215
+ end
216
+ def icon
217
+ ConstantIcon
218
+ end
219
+
220
+ def table_rows
221
+ consts = proxy.constants.sort
222
+ consts.each do |name,type,value|
223
+ # TODO: screen this in proxy?
224
+ value = '' if value == name
225
+ if Array === value
226
+ value = value.sort rescue value
227
+ name_type_value_row(name,type,value_list(value))
228
+ else
229
+ name_type_value_row(name,type,esc(value))
230
+ end
231
+ end
232
+ nil
233
+ end
234
+
235
+ def load_children
236
+ recs = drb_to_array(proxy.const_recs).sort
237
+ children = []
238
+ recs.each do |rec|
239
+ ntv = case rec.clazz
240
+ when 'Class' : NodeTypeValue.new(Class,rec.value,rec)
241
+ when 'Module' : NodeTypeValue.new(Module,rec.value,rec)
242
+ else NodeTypeValue.new(:constant,rec.clazz,rec)
243
+ end
244
+ children << ntv
245
+ end
246
+ @children = children
247
+ end
248
+
249
+ def children_loaded?
250
+ @children
251
+ end
252
+
253
+ end #ConstantsViewer
254
+
255
+ class ConfigViewer < HtmlNameValueListViewer
256
+ def title
257
+ "#{@instance.name}: Config::CONFIG"
258
+ end
259
+ def title_tree
260
+ 'CONFIG'
261
+ end
262
+ def title_tab
263
+ "#{@instance.name}: CONFIG"
264
+ end
265
+ def icon
266
+ VariablesIcon
267
+ end
268
+ def leaf?
269
+ true
270
+ end
271
+ def table_rows
272
+ cfg = proxy.config.sort
273
+ cfg.each do |name,value|
274
+ if Array === value
275
+ value = value.sort rescue value
276
+ name_value_row(name,value_list(value))
277
+ else
278
+ name_value_row(name,esc(value));
279
+ end
280
+ end
281
+ nil
282
+ end
283
+ end
284
+
285
+
286
+ # TODO: factor/generalize the header row code
287
+
288
+ class ObjectViewer < HtmlNameValueListViewer
289
+ include ValueViewerInterface
290
+
291
+ #:stopdoc:
292
+ HdrInstVars = 'Instance variables'.freeze
293
+ HdrInstVarName = 'Variable name'.freeze
294
+ HdrName = 'Name'.freeze
295
+ HdrType = 'Type'.freeze
296
+ HdrId = 'Id'.freeze
297
+ HdrValue = 'Value'.freeze
298
+ Center = 'center'.freeze
299
+ Left = 'left'.freeze
300
+ Right = 'right'.freeze
301
+ #:startdoc:
302
+
303
+ def title
304
+ "#{@instance.name}: #{@value.clazz}"
305
+ end
306
+ def title_tree
307
+ "#{@value.clazz}"
308
+ end
309
+ def title_tab
310
+ "#{@instance.name}: #{@value.clazz}"
311
+ end
312
+ def icon
313
+ ObjectIcon
314
+ end
315
+ def leaf?
316
+ true
317
+ end
318
+
319
+ def table_rows
320
+ value_header_row
321
+ type_id_value_row(esc(@value.clazz),@value.id,esc(@value.value))
322
+ instance_var_rows if value.vars
323
+ end
324
+
325
+ def instance_var_rows
326
+ if (vars = value.vars)
327
+ col_header_row HdrInstVarName
328
+ vars.each do |name,type,value,id|
329
+ if Array === value
330
+ name_type_id_value_row(name,esc(type),id,value_list(value))
331
+ else
332
+ name_type_id_value_row(name,esc(type),id,esc(value))
333
+ end
334
+ end
335
+ empty_row
336
+ end
337
+ end
338
+
339
+ def header_row(hdr,cols=4)
340
+ tr do
341
+ th hdr, :bgcolor => NColor, :colspan => cols, :align => Left
342
+ end
343
+ end
344
+
345
+ def value_header_row
346
+ tr do
347
+ th HdrType, :bgcolor => NColor, :align => Left
348
+ th HdrId, :bgcolor => NColor, :align => Right
349
+ th HdrValue, :bgcolor => NColor, :align => Left
350
+ end
351
+ end
352
+
353
+ def col_header_row(name = HdrName)
354
+ tr do
355
+ th name, :bgcolor => NColor, :align => Left
356
+ th HdrType, :bgcolor => NColor, :align => Left
357
+ th HdrId, :bgcolor => NColor, :align => Right
358
+ th HdrValue, :bgcolor => NColor, :align => Left
359
+ end
360
+ end
361
+ end
362
+
363
+ class ConstantViewer < ObjectViewer
364
+ HdrConstName = 'Constant name'.freeze
365
+ def title
366
+ "#{@instance.name}: #{@value.qname}"
367
+ end
368
+ def title_tree
369
+ "#{@value.name}"
370
+ end
371
+ def title_tab
372
+ "#{@instance.name}: #{@value.name}"
373
+ end
374
+ def icon
375
+ ConstantIcon
376
+ end
377
+
378
+ def table_rows
379
+ col_header_row HdrConstName
380
+ name_type_id_value_row(@value.name,esc(@value.clazz),@value.id,esc(@value.value))
381
+ instance_var_rows if @value.vars
382
+ end
383
+
384
+ end
385
+
386
+ class ModuleViewer < ConstantViewer
387
+ include ParentViewerInterface
388
+ include DRbHelper
389
+ #:stopdoc:
390
+ SuperClazz = 'Superclass'.freeze
391
+ Ancestors = 'Ancestors'.freeze
392
+ HdrAncName = 'Ancestor name'.freeze
393
+ #:startdoc:
394
+
395
+ def title
396
+ "#{@instance.name}: #{@value.qname.empty? ? @value.value : @value.qname}"
397
+ end
398
+ def title_tree
399
+ "#{@value.name}"
400
+ end
401
+ def title_tab
402
+ "#{@instance.name}: #{@value.name.empty? ? @value.value : @value.name}"
403
+ end
404
+ def icon
405
+ ModuleIcon
406
+ end
407
+ def leaf?
408
+ false
409
+ end
410
+
411
+ def html_heading
412
+ val = @value
413
+ div :align => :left do
414
+ table :width => TblWidth, :cellspacing => 2, :cellpadding => 2, :border => 0 do
415
+ tr do
416
+ td esc(title), :class => :hdr, :align => :left, :colspan=> 2
417
+ end
418
+ tr do
419
+ th val.clazz, :align => :left, :bgcolor => NColor, :width => 120
420
+ td esc(val.qname.empty? ? val.value : val.qname), :align => :left, :bgcolor => VColor
421
+ end
422
+ tr do
423
+ th HdrId, :align => :left, :bgcolor => NColor, :width => 120
424
+ td val.id, :align => :left, :bgcolor => VColor
425
+ end
426
+ if (sc = val.superclazz)
427
+ tr do
428
+ th SuperClazz, :align => :left, :bgcolor => NColor, :width => 120
429
+ td esc(sc), :align => :left, :bgcolor => VColor
430
+ end
431
+ end
432
+ empty_row
433
+ end
434
+ if (anc = val.ancestors) && (first = anc.first)
435
+ anc.shift if first.id == val.id && first.value == val.qname
436
+ end
437
+ if anc && !anc.empty?
438
+ table :width => TblWidth, :cellspacing => 2, :cellpadding => 2, :border => 0 do
439
+ tr do
440
+ th HdrAncName, :bgcolor => NColor, :align => Left
441
+ th HdrType, :bgcolor => NColor, :align => Left, :width => '20%'
442
+ th HdrId, :bgcolor => NColor, :align => Right, :width => '10%'
443
+ end
444
+ anc.each do |name,type,id|
445
+ tr do
446
+ td esc(name), :bgcolor => VColor
447
+ td type, :width => '20%', :bgcolor => VColor
448
+ td id, :width => '10%', :bgcolor => VColor, :align => Right, :class => :oid
449
+ end
450
+ end
451
+ empty_row
452
+ end
453
+ end
454
+ end #div
455
+ end
456
+
457
+ def table_rows
458
+ instance_var_rows if value.vars
459
+ method_rows
460
+ end
461
+
462
+ #:stopdoc:
463
+ HdrPubClsMeth = 'Public class methods'.freeze
464
+ HdrPubInsMeth = 'Public instance methods'.freeze
465
+ HdrProClsMeth = 'Protected class methods'.freeze
466
+ HdrProInsMeth = 'Protected instance methods'.freeze
467
+ HdrPriClsMeth = 'Private class methods'.freeze
468
+ HdrPriInsMeth = 'Private instance methods'.freeze
469
+ #:startdoc:
470
+
471
+ def method_rows
472
+ if (meths = @methods ||= proxy.module_methods(@value.qname,@value.id))
473
+ if (ms = meths.pub) && !ms.empty?
474
+ method_header_row HdrPubClsMeth
475
+ ms.sort.each do |m| method_row(m); end
476
+ empty_row
477
+ end
478
+ if (ms = meths.pub_inst) && !ms.empty?
479
+ method_header_row HdrPubInsMeth
480
+ ms.sort.each do |m| method_row(m); end
481
+ empty_row
482
+ end
483
+ if (ms = meths.pro) && !ms.empty?
484
+ method_header_row HdrProClsMeth
485
+ ms.sort.each do |m| method_row(m); end
486
+ empty_row
487
+ end
488
+ if (ms = meths.pro_inst) && !ms.empty?
489
+ method_header_row HdrProInsMeth
490
+ ms.sort.each do |m| method_row(m); end
491
+ empty_row
492
+ end
493
+ if (ms = meths.pri) && !ms.empty?
494
+ method_header_row HdrPriClsMeth
495
+ ms.sort.each do |m| method_row(m); end
496
+ empty_row
497
+ end
498
+ if (ms = meths.pri_inst) && !ms.empty?
499
+ method_header_row HdrPriInsMeth
500
+ ms.sort.each do |m| method_row(m); end
501
+ empty_row
502
+ end
503
+ end
504
+ end
505
+
506
+ def method_header_row(hdr,cols=4)
507
+ tr do
508
+ td b(hdr), :bgcolor => NColor, :colspan => cols
509
+ end
510
+ end
511
+
512
+ def method_row(meth,cols=4)
513
+ tr td(esc(meth), :class => :method, :bgcolor => VColor, :colspan => cols)
514
+ end
515
+
516
+ Cls = 'Class'.freeze #:nodoc:
517
+ Mod = 'Module'.freeze #:nodoc:
518
+ def load_children
519
+ recs = drb_to_array(proxy.const_recs(value.qname)).sort
520
+ children = []
521
+ recs.each do |rec|
522
+ ntv = case rec.clazz
523
+ when Cls : NodeTypeValue.new(Class,rec.value,rec)
524
+ when Mod : NodeTypeValue.new(Module,rec.value,rec)
525
+ else NodeTypeValue.new(:constant,rec.clazz,rec)
526
+ end
527
+ children << ntv
528
+ end
529
+ @children = children
530
+ end
531
+
532
+ def children_loaded?
533
+ @children
534
+ end
535
+
536
+ def refresh
537
+ @methods = nil
538
+ super
539
+ end
540
+
541
+ end
542
+
543
+ class ClassViewer < ModuleViewer
544
+ def icon
545
+ ClassIcon
546
+ end
547
+
548
+ end
549
+
550
+ class ResultListViewer < Viewer
551
+ include ValueViewerInterface
552
+ include NavViewerConstants
553
+
554
+ class ResultListItem
555
+ def initialize(id,viewer)
556
+ #puts "RLI init, id = #{id}"
557
+ @i = id
558
+ @w = viewer
559
+ end
560
+ def value
561
+ unless @v
562
+ @v = @w.item_value(@i)
563
+ #@v = @v.to_s unless String === @v
564
+ #puts "RLI set value [#{@v}] class #{@v.class}"
565
+ end
566
+ @v
567
+ end
568
+ def to_s
569
+ value || 'Unavailable'
570
+ end
571
+ alias_method :to_str,:to_s
572
+ end
573
+
574
+ def item_value(id)
575
+ #@count += 1
576
+ v = @main.simple_value(@instance,id)
577
+ #puts "#{@count} val [#{v}]"
578
+ #v
579
+ end
580
+
581
+ def initialize(*r,&k)
582
+ super
583
+ create_object_list
584
+ end
585
+
586
+ def create_object_list
587
+ res = @value.results
588
+ #puts "results.length = #{res.length}"
589
+ arr = Array.new(res.length) {|i| ResultListItem.new(res[i],self)}
590
+ @obj_list = arr.to_java
591
+ #puts "list.length = #{@obj_list.length}"
592
+ #@count = 0
593
+ end
594
+
595
+ def title
596
+ "#{@instance.name}: Search Results"
597
+ end
598
+ def title_tree
599
+ "Results"
600
+ end
601
+ def title_tab
602
+ "#{@instance.name}: Results"
603
+ end
604
+ def icon
605
+ VariablesIcon
606
+ end
607
+
608
+ # not expecting this to appear in trees, but if it does, it's a leaf
609
+ def leaf?
610
+ true
611
+ end
612
+
613
+ def view(&block)
614
+ @view ||= scroll_pane do
615
+ align :LEFT
616
+ @top_view = y_panel do
617
+ align :LEFT
618
+ empty_border 4,4,4,4
619
+ background :WHITE
620
+ x_box do
621
+ align :LEFT
622
+ background :WHITE
623
+ label title do
624
+ align :LEFT
625
+ set_font TFont
626
+ foreground TColor
627
+ end
628
+ x_glue
629
+ end
630
+ @header = x_box do
631
+ align :LEFT
632
+ @cnames = y_panel do
633
+ align :LEFT
634
+ opaque false
635
+ #background NColor
636
+ end
637
+ x_spacer 2
638
+ @cvals = y_panel do
639
+ align :LEFT
640
+ opaque false
641
+ end
642
+ end
643
+ name_value_row('Class/Module',@value.args.clazz,CFont)
644
+ if (vars = @value.args.vars) && !vars.empty?
645
+ vname = vars[0].name.to_s
646
+ vval = vars[0].value || ''
647
+ vval = vval.inspect if Regexp === vval
648
+ name_value_row('Variable',vname)
649
+ name_value_row('Value',vval)
650
+ end
651
+ last_row
652
+ y_spacer 5
653
+ x_box do
654
+ align :LEFT
655
+ label "=== found #{@value.length} objects ===" do
656
+ align :LEFT
657
+ foreground TColor
658
+ end
659
+ end
660
+ y_spacer 3
661
+ result_list
662
+ y_spacer 3
663
+ x_box do
664
+ align :LEFT
665
+ label '=== end of results ===' do
666
+ align :LEFT
667
+ foreground TColor
668
+ end
669
+ end
670
+ # trying to get everything else pushed up
671
+ y_glue
672
+ y_panel do
673
+ opaque false
674
+ end
675
+ y_glue
676
+ end
677
+ end
678
+ super
679
+ end
680
+
681
+ def item_selected
682
+ if (ix = @list.selected_index) >= 0
683
+ @main.new_find(@instance,@value.results[ix])
684
+ end
685
+ end
686
+
687
+ def result_list
688
+ @list = list @obj_list do
689
+ align :LEFT
690
+ set_font ResFont
691
+ foreground TColor
692
+ selection_mode :SINGLE_SELECTION
693
+ on_value_changed do |e|
694
+ unless e.value_is_adjusting
695
+ item_selected
696
+ end
697
+ end
698
+ end
699
+ end
700
+
701
+ def name_value_row(name,value,vfont=VFont)
702
+ cheri_yield @cnames do
703
+ x_panel do
704
+ align :LEFT
705
+ background NColor
706
+ maximum_size 200,28
707
+ on_mouse_entered do |e|
708
+ e.source.background = HColor
709
+ end
710
+ on_mouse_exited do |e|
711
+ e.source.background = NColor
712
+ end
713
+ x_spacer 2
714
+ label name do
715
+ align :LEFT,:CENTER
716
+ set_font NFont
717
+ end
718
+ #x_glue
719
+ end
720
+ y_spacer 2
721
+ end
722
+ cheri_yield @cvals do
723
+ x_panel do
724
+ align :LEFT
725
+ background VColor
726
+ x_spacer 2
727
+ label value do
728
+ align :LEFT,:CENTER
729
+ set_font vfont
730
+ end
731
+ x_glue
732
+ end
733
+ y_spacer 2
734
+ end
735
+ end
736
+
737
+ def last_row
738
+ cheri_yield @cnames do y_glue; end
739
+ cheri_yield @cvals do y_glue; end
740
+ end
741
+
742
+ def close_view
743
+ @main.close_search_view(self)
744
+ end
745
+ end
746
+
747
+
748
+ class NavObjectViewer
749
+ include ViewerInterface
750
+ include ValueViewerInterface
751
+ include NavViewer
752
+ include Cheri::Swing
753
+
754
+ def title
755
+ "#{@instance.name}: #{@value.clazz}"
756
+ end
757
+ def title_tree
758
+ "#{@value.clazz}"
759
+ end
760
+ def title_tab
761
+ "#{@instance.name}: #{@value.clazz}"
762
+ end
763
+ def icon
764
+ ObjectIcon
765
+ end
766
+ def leaf?
767
+ true
768
+ end
769
+
770
+ def content_section
771
+ empty_row
772
+ value_section
773
+ if @value.vars
774
+ empty_row
775
+ variables_section
776
+ last_row(@icols)
777
+ else
778
+ last_row(@vcols)
779
+ end
780
+ empty_row true
781
+ end
782
+
783
+ def value_section
784
+ idcol = ColDef.new(NColor,nil,NFont,VColor,nil,CFont)
785
+ typecol = ColDef.new(NColor,nil,NFont,VColor,nil,CFont)
786
+ valcol = ColDef.new(NColor,nil,NFont,VColor,TColor,VFont,true,10000)
787
+
788
+ @vcols = [idcol,typecol,valcol]
789
+ @vsec = x_box do
790
+ init_cols(*@vcols)
791
+ align :LEFT,:TOP
792
+ end
793
+ header_row(@vcols,HdrId,HdrType,HdrValue)
794
+ value_row(@vcols,@value.id.to_s,@value.clazz,@value.value)
795
+ end
796
+
797
+ def variables_section
798
+ return unless (vars = value.vars)
799
+ idcol = ColDef.new(NColor,nil,NFont,VColor,nil,CFont)
800
+ namecol = ColDef.new(NColor,nil,NFont,VColor,nil,IFont)
801
+ typecol = ColDef.new(NColor,nil,NFont,VColor,nil,CFont)
802
+ valcol = ColDef.new(NColor,nil,NFont,VColor,TColor,VFont)
803
+
804
+ @icols = [idcol,namecol,typecol,valcol]
805
+ @isec = x_box do
806
+ init_cols(*@icols)
807
+ align :LEFT,:TOP
808
+ end
809
+ header_row(@icols,HdrId,HdrVarName,HdrType,HdrValue)
810
+ vars.each do |name,type,value,id|
811
+ idcol.clk = id
812
+ namecol.clk = id
813
+ value_row(@icols,id.to_s,name,type,value)
814
+ end
815
+ end
816
+
817
+ def mouse_clicked(val)
818
+ @main.new_find(@instance,val)
819
+ end
820
+
821
+
822
+ def view(&block)
823
+ @view ||= scroll_pane do
824
+ align :LEFT
825
+ @top_view = y_panel do
826
+ align :LEFT
827
+ empty_border 4,4,4,4
828
+ background :WHITE
829
+ title_section title
830
+ content_section
831
+ end
832
+ end
833
+ end
834
+
835
+ end #NavObjectViewer
836
+
837
+ class NavModuleViewer
838
+ include ViewerInterface
839
+ include ValueViewerInterface
840
+ include ParentViewerInterface
841
+ include NavViewer
842
+ include Cheri::Swing
843
+ include DRbHelper
844
+ #:stopdoc:
845
+ SuperClazz = 'Superclass'.freeze
846
+ Ancestors = 'Ancestors'.freeze
847
+ HdrAncName = 'Ancestor name'.freeze
848
+ HdrPubClsMeth = 'Public class methods'.freeze
849
+ HdrPubInsMeth = 'Public instance methods'.freeze
850
+ HdrProClsMeth = 'Protected class methods'.freeze
851
+ HdrProInsMeth = 'Protected instance methods'.freeze
852
+ HdrPriClsMeth = 'Private class methods'.freeze
853
+ HdrPriInsMeth = 'Private instance methods'.freeze
854
+ #:startdoc:
855
+
856
+
857
+ def title
858
+ "#{@instance.name}: #{@value.qname.empty? ? @value.value : @value.qname}"
859
+ end
860
+ def title_tree
861
+ "#{@value.name}"
862
+ end
863
+ def title_tab
864
+ "#{@instance.name}: #{@value.name.empty? ? @value.value : @value.name}"
865
+ end
866
+ def icon
867
+ ModuleIcon
868
+ end
869
+ def leaf?
870
+ false
871
+ end
872
+
873
+ def content_section
874
+ val = @value
875
+ empty_row
876
+ header_section
877
+ if (anc = val.ancestors) && (first = anc.first)
878
+ anc.shift if first.id == val.id && first.value == val.qname
879
+ end
880
+ if anc && !anc.empty?
881
+ empty_row
882
+ ancestor_section
883
+ end
884
+ if val.vars
885
+ empty_row
886
+ variables_section
887
+ end
888
+ methods_section
889
+ last_row @last_cols
890
+ empty_row true
891
+ end
892
+
893
+ def header_section
894
+ namecol = ColDef.new(NColor,nil,NFont,NColor,nil,NFont)
895
+ valcol = ColDef.new(VColor,nil,CFont,VColor,nil,CFont)
896
+
897
+ @hcols = [namecol,valcol]
898
+ @hsec = x_box do
899
+ init_cols(*@hcols)
900
+ align :LEFT,:TOP
901
+ end
902
+ val = @value
903
+ header_row(@hcols,val.clazz, val.qname.empty? ? val.value : val.qname)
904
+ header_row(@hcols,HdrId,val.id.to_s)
905
+ if (sc = val.superclazz)
906
+ header_row(@hcols,SuperClazz,sc)
907
+ end
908
+ @last_cols = @hcols
909
+ end
910
+
911
+ def ancestor_section
912
+ idcol = ColDef.new(NColor,nil,NFont,VColor,nil,CFont)
913
+ namecol = ColDef.new(NColor,nil,NFont,VColor,nil,CFont)
914
+ typecol = ColDef.new(NColor,nil,NFont,VColor,nil,CFont)
915
+
916
+ @acols = [idcol,namecol,typecol]
917
+ @asec = x_box do
918
+ init_cols(*@acols)
919
+ align :LEFT,:TOP
920
+ end
921
+ header_row(@acols,HdrId,HdrAncName,HdrType)
922
+ @value.ancestors.each do |name,type,id|
923
+ idcol.clk = id
924
+ namecol.clk = id
925
+ value_row(@acols,id.to_s,name,type)
926
+ end
927
+ @last_cols = @acols
928
+ end
929
+
930
+ def variables_section
931
+ return unless (vars = value.vars)
932
+ idcol = ColDef.new(NColor,nil,NFont,VColor,nil,CFont)
933
+ namecol = ColDef.new(NColor,nil,NFont,VColor,nil,IFont)
934
+ typecol = ColDef.new(NColor,nil,NFont,VColor,nil,CFont)
935
+ valcol = ColDef.new(NColor,nil,NFont,VColor,TColor,VFont)
936
+
937
+ @icols = [idcol,namecol,typecol,valcol]
938
+ @isec = x_box do
939
+ init_cols(*@icols)
940
+ align :LEFT,:TOP
941
+ end
942
+ header_row(@icols,HdrId,HdrVarName,HdrType,HdrValue)
943
+ vars.each do |name,type,value,id|
944
+ idcol.clk = id
945
+ namecol.clk = id
946
+ value = value + '...' if value.length == 100
947
+ value_row(@icols,id.to_s,name,type,value)
948
+ end
949
+ @last_cols = @icols
950
+ end
951
+
952
+ def methods_section
953
+ return unless (meths = @methods ||= proxy.module_methods(@value.qname,@value.id))
954
+ empty_row
955
+ coldef = ColDef.new(NColor,nil,NFont,VColor,nil,VFont)
956
+
957
+ @mcols = [coldef]
958
+ @msec = x_box do
959
+ init_cols(*@mcols)
960
+ align :LEFT,:TOP
961
+ end
962
+ if (ms = meths.pub) && !ms.empty?
963
+ header_row(@mcols,HdrPubClsMeth)
964
+ ms.sort.each do |m| value_row(@mcols,m); end
965
+ end
966
+ if (ms = meths.pub_inst) && !ms.empty?
967
+ header_row(@mcols,HdrPubInsMeth)
968
+ ms.sort.each do |m| value_row(@mcols,m); end
969
+ end
970
+ if (ms = meths.pro) && !ms.empty?
971
+ header_row(@mcols,HdrProClsMeth)
972
+ ms.sort.each do |m| value_row(@mcols,m); end
973
+ end
974
+ if (ms = meths.pro_inst) && !ms.empty?
975
+ header_row(@mcols,HdrProInsMeth)
976
+ ms.sort.each do |m| value_row(@mcols,m); end
977
+ end
978
+ if (ms = meths.pri) && !ms.empty?
979
+ header_row(@mcols,HdrPriClsMeth)
980
+ ms.sort.each do |m| value_row(@mcols,m); end
981
+ end
982
+ if (ms = meths.pri_inst) && !ms.empty?
983
+ header_row(@mcols, HdrPriInsMeth)
984
+ ms.sort.each do |m| value_row(@mcols,m); end
985
+ end
986
+ @last_cols = @mcols
987
+ end
988
+
989
+ Cls = 'Class'.freeze #:nodoc:
990
+ Mod = 'Module'.freeze #:nodoc:
991
+ def load_children
992
+ recs = drb_to_array(proxy.const_recs(value.qname)).sort
993
+ children = []
994
+ recs.each do |rec|
995
+ ntv = case rec.clazz
996
+ when Cls : NodeTypeValue.new(Class,rec.value,rec)
997
+ when Mod : NodeTypeValue.new(Module,rec.value,rec)
998
+ else NodeTypeValue.new(:constant,rec.clazz,rec)
999
+ end
1000
+ children << ntv
1001
+ end
1002
+ @children = children
1003
+ end
1004
+
1005
+ def children_loaded?
1006
+ @children
1007
+ end
1008
+
1009
+ def mouse_clicked(val)
1010
+ @main.new_find(@instance,val)
1011
+ end
1012
+
1013
+ def view(&block)
1014
+ @view ||= scroll_pane do
1015
+ align :LEFT
1016
+ @top_view = y_panel do
1017
+ align :LEFT
1018
+ empty_border 4,4,4,4
1019
+ background :WHITE
1020
+ title_section title
1021
+ content_section
1022
+ end
1023
+ end
1024
+ end
1025
+
1026
+ end
1027
+
1028
+ class NavClassViewer < NavModuleViewer
1029
+
1030
+ def icon
1031
+ ClassIcon
1032
+ end
1033
+
1034
+ end
1035
+
1036
+
1037
+ register_viewer(:root_node,nil,RootNodeViewer)
1038
+ register_viewer(:ruby_instance,nil,RubyInstanceViewer)
1039
+ register_viewer(:jruby_instance,nil,JRubyInstanceViewer)
1040
+ register_viewer(:env,nil,EnvViewer)
1041
+ register_viewer(:env_java,nil,JavaEnvViewer)
1042
+ register_viewer(:global_vars,nil,GlobalVariablesViewer)
1043
+ register_viewer(:global_const,nil,ConstantsViewer)
1044
+ register_viewer(:config,nil,ConfigViewer)
1045
+ #register_viewer(:object,nil,ObjectViewer)
1046
+ register_viewer(:object,nil,NavObjectViewer)
1047
+ register_viewer(:constant,nil,ConstantViewer)
1048
+ #register_viewer(Class,nil,ClassViewer)
1049
+ #register_viewer(Module,nil,ModuleViewer)
1050
+ register_viewer(Class,nil,NavClassViewer)
1051
+ register_viewer(Module,nil,NavModuleViewer)
1052
+ register_viewer(:results,nil,ResultListViewer)
1053
+
1054
+
1055
+ end #Explorer
1056
+ end #JRuby
1057
+ end #Cheri