cheri 0.0.2

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