cheri 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README +98 -0
- data/Rakefile +121 -0
- data/examples/hello_world_1.rb +28 -0
- data/examples/table_1.rb +44 -0
- data/lib/cheri/awt.rb +41 -0
- data/lib/cheri/builder.rb +31 -0
- data/lib/cheri/builder/awt/connecter.rb +63 -0
- data/lib/cheri/builder/awt/constants.rb +1003 -0
- data/lib/cheri/builder/awt/main.rb +191 -0
- data/lib/cheri/builder/awt/types.rb +220 -0
- data/lib/cheri/builder/base.rb +533 -0
- data/lib/cheri/builder/config.rb +187 -0
- data/lib/cheri/builder/connecter.rb +386 -0
- data/lib/cheri/builder/context.rb +655 -0
- data/lib/cheri/builder/generator.rb +425 -0
- data/lib/cheri/builder/html/charsets.rb +154 -0
- data/lib/cheri/builder/html/common.rb +32 -0
- data/lib/cheri/builder/html/connecter.rb +57 -0
- data/lib/cheri/builder/html/element.rb +156 -0
- data/lib/cheri/builder/html/main.rb +116 -0
- data/lib/cheri/builder/html/types.rb +123 -0
- data/lib/cheri/builder/main.rb +483 -0
- data/lib/cheri/builder/swing/connecter.rb +141 -0
- data/lib/cheri/builder/swing/constants.rb +420 -0
- data/lib/cheri/builder/swing/main.rb +446 -0
- data/lib/cheri/builder/swing/types.rb +270 -0
- data/lib/cheri/builder/xml/charsets.rb +154 -0
- data/lib/cheri/builder/xml/common.rb +32 -0
- data/lib/cheri/builder/xml/connecter.rb +42 -0
- data/lib/cheri/builder/xml/element.rb +189 -0
- data/lib/cheri/builder/xml/main.rb +130 -0
- data/lib/cheri/builder/xml/types.rb +36 -0
- data/lib/cheri/cheri.rb +70 -0
- data/lib/cheri/cjx.rb +3 -0
- data/lib/cheri/explorer.rb +32 -0
- data/lib/cheri/explorer/explorer.rb +560 -0
- data/lib/cheri/html.rb +31 -0
- data/lib/cheri/image/Delete24.gif +0 -0
- data/lib/cheri/image/Find24.gif +0 -0
- data/lib/cheri/image/FindAgain24.gif +0 -0
- data/lib/cheri/image/Refresh24.gif +0 -0
- data/lib/cheri/image/Search24.gif +0 -0
- data/lib/cheri/image/Thumbs.db +0 -0
- data/lib/cheri/image/cheri_icon_16x16.png +0 -0
- data/lib/cheri/image/cheri_icon_24x24.png +0 -0
- data/lib/cheri/image/cheri_logo_medium.png +0 -0
- data/lib/cheri/image/close_10x10.png +0 -0
- data/lib/cheri/image/close_10x10s.png +0 -0
- data/lib/cheri/image/close_12x12.png +0 -0
- data/lib/cheri/image/close_14x14.png +0 -0
- data/lib/cheri/image/close_24x24.png +0 -0
- data/lib/cheri/image/close_dim2_12x12.png +0 -0
- data/lib/cheri/image/close_dim_12x12.png +0 -0
- data/lib/cheri/image/cls_tree.png +0 -0
- data/lib/cheri/image/con_tree.png +0 -0
- data/lib/cheri/image/jruby_14x16.png +0 -0
- data/lib/cheri/image/jruby_logo.png +0 -0
- data/lib/cheri/image/mod_tree.png +0 -0
- data/lib/cheri/image/obj_tree.png +0 -0
- data/lib/cheri/image/ruby_16x16.png +0 -0
- data/lib/cheri/image/vars_tree.png +0 -0
- data/lib/cheri/java.rb +26 -0
- data/lib/cheri/java/builder.rb +28 -0
- data/lib/cheri/java/builder/main.rb +407 -0
- data/lib/cheri/java/builder/util.rb +480 -0
- data/lib/cheri/java/java.rb +56 -0
- data/lib/cheri/jruby.rb +32 -0
- data/lib/cheri/jruby/explorer.rb +43 -0
- data/lib/cheri/jruby/explorer/common.rb +38 -0
- data/lib/cheri/jruby/explorer/dialogs.rb +383 -0
- data/lib/cheri/jruby/explorer/explorer.rb +904 -0
- data/lib/cheri/jruby/explorer/splash.rb +80 -0
- data/lib/cheri/jruby/explorer/viewer.rb +619 -0
- data/lib/cheri/jruby/explorer/viewers.rb +1057 -0
- data/lib/cheri/jruby/jruby.rb +59 -0
- data/lib/cheri/swing.rb +41 -0
- data/lib/cheri/xml.rb +31 -0
- metadata +135 -0
@@ -0,0 +1,80 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (C) 2007 William N Dortch <bill.dortch@gmail.com>
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
#
|
24
|
+
|
25
|
+
|
26
|
+
module Cheri
|
27
|
+
module JRuby
|
28
|
+
module Explorer
|
29
|
+
class SplashScreen
|
30
|
+
include Cheri::Swing
|
31
|
+
Font = ::Java::JavaAwt::Font
|
32
|
+
def initialize
|
33
|
+
swing[:auto => true]
|
34
|
+
end
|
35
|
+
def splash(&block)
|
36
|
+
img_path = Cheri.img_path
|
37
|
+
@panel ||= y_panel do
|
38
|
+
align :LEFT
|
39
|
+
background :WHITE; bevel_border :LOWERED
|
40
|
+
y_spacer 56
|
41
|
+
x_box do
|
42
|
+
x_glue
|
43
|
+
x_spacer 20
|
44
|
+
y_box do
|
45
|
+
label image_icon("#{img_path}cheri_logo_medium.png")
|
46
|
+
y_spacer 100
|
47
|
+
end
|
48
|
+
y_box do
|
49
|
+
y_spacer 100
|
50
|
+
label image_icon("#{img_path}jruby_logo.png")
|
51
|
+
end
|
52
|
+
x_spacer 50
|
53
|
+
x_glue
|
54
|
+
end
|
55
|
+
x_box do
|
56
|
+
label 'E x p l o r e r' do
|
57
|
+
font 'Dialog', Font::BOLD|Font::ITALIC, 100; align :CENTER; foreground :BLUE
|
58
|
+
end
|
59
|
+
x_spacer 50
|
60
|
+
end
|
61
|
+
y_glue
|
62
|
+
x_box do
|
63
|
+
label '(C) 2007 Bill Dortch. JRuby logo (C) 2006 Codehaus Foundation.' do
|
64
|
+
foreground :GRAY; font 'Dialog',:BOLD,11
|
65
|
+
end
|
66
|
+
end
|
67
|
+
x_box do
|
68
|
+
label 'Some icons (C) Freeiconsweb http://www.freeiconsweb.com' do
|
69
|
+
foreground :GRAY; font 'Dialog',:BOLD,11
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
cheri_yield(panel,&block) if block
|
74
|
+
@panel
|
75
|
+
end
|
76
|
+
end #SplashScreen
|
77
|
+
|
78
|
+
end #Explorer
|
79
|
+
end #JRuby
|
80
|
+
end #Cheri
|
@@ -0,0 +1,619 @@
|
|
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
|
+
# registered viewers
|
30
|
+
@viewers = {}
|
31
|
+
class << self
|
32
|
+
# TODO: interface for registering sub[-sub]* types - TypeViewer class does support it
|
33
|
+
# TODO: allow multiple viewer registrations for a type[/subtype] - user
|
34
|
+
# could switch via View menu or popup
|
35
|
+
def register_viewer(type,subtype,clazz)
|
36
|
+
raise Cheri.new_type_error(type,Symbol,Class) unless Symbol === type || Class === type
|
37
|
+
raise Cheri.new_type_error(clazz,Class) unless Class === clazz
|
38
|
+
if subtype
|
39
|
+
raise Cheri.new_type_error(subtype,Class,Symbol) unless Symbol === subtype || Class === subtype
|
40
|
+
end
|
41
|
+
if (tv = @viewers[type])
|
42
|
+
if subtype
|
43
|
+
sv = tv[subtype]
|
44
|
+
if sv
|
45
|
+
warn "replacing viewer for type #{type}/#{subtype} (#{sv.clazz}) with #{clazz}" if sv.clazz
|
46
|
+
sv.clazz = clazz
|
47
|
+
else
|
48
|
+
tv[subtype] = TypeViewer.new(subtype,clazz)
|
49
|
+
end
|
50
|
+
else
|
51
|
+
warn "replacing default viewer for type #{type} (#{tv.clazz}) with #{clazz}" if tv.clazz
|
52
|
+
tv.clazz = clazz
|
53
|
+
end
|
54
|
+
else
|
55
|
+
if subtype
|
56
|
+
#warn "adding viewer for type #{type}/#{subtype} when no default viewer for #{type}"
|
57
|
+
tv = TypeViewer.new(type,nil)
|
58
|
+
tv[subtype] = TypeViewer.new(subtype,clazz)
|
59
|
+
@viewers[type] = tv
|
60
|
+
else
|
61
|
+
@viewers[type] = TypeViewer.new(type,clazz)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
def viewer(type,subtype=nil)
|
66
|
+
raise Cheri.new_type_error(type,Symbol,Class) unless Symbol === type || Class === type
|
67
|
+
raise Cheri.new_type_error(subtype,Symbol,Class,String) unless subtype.nil? ||
|
68
|
+
Symbol === subtype || Class === subtype || String === subtype
|
69
|
+
unless (tv = @viewers[type])
|
70
|
+
warn "no viewer found matching type: #{type} (#{subtype})"
|
71
|
+
return
|
72
|
+
end
|
73
|
+
if subtype
|
74
|
+
sv = tv[subtype]
|
75
|
+
# TODO: silently return default?
|
76
|
+
#warn "no viewer for subtype #{type}/#{subtype} - returning default for type" unless sv
|
77
|
+
sv || tv
|
78
|
+
else
|
79
|
+
tv
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
end #self
|
84
|
+
|
85
|
+
class TypeViewer
|
86
|
+
def initialize(type,clazz)
|
87
|
+
raise Cheri.new_type_error(type,Symbol,Class) unless Symbol === type || Class === type
|
88
|
+
raise Cheri.new_type_error(clazz,Class) unless clazz.nil? || Class === clazz
|
89
|
+
@t = type
|
90
|
+
@c = clazz if clazz
|
91
|
+
end
|
92
|
+
def type
|
93
|
+
@t
|
94
|
+
end
|
95
|
+
def clazz
|
96
|
+
@c
|
97
|
+
end
|
98
|
+
def clazz=(c)
|
99
|
+
raise Cheri.new_type_error(c,Class) unless Class === c
|
100
|
+
@c = c
|
101
|
+
end
|
102
|
+
def subtypes
|
103
|
+
@s
|
104
|
+
end
|
105
|
+
def []=(type,type_viewer)
|
106
|
+
raise Cheri.new_type_error(type,Symbol,Class) unless Symbol === type || Class === type
|
107
|
+
raise Cheri.new_type_error(type_viewer,TypeViewer) unless TypeViewer === type_viewer
|
108
|
+
(@s ||= {})[type] = type_viewer
|
109
|
+
end
|
110
|
+
def [](type)
|
111
|
+
raise Cheri.new_type_error(type,Symbol,Class,String) unless Symbol === type ||
|
112
|
+
Class === type || String === type
|
113
|
+
@s ? @s[type] : nil
|
114
|
+
end
|
115
|
+
|
116
|
+
# convenience method for instantiating +clazz+
|
117
|
+
def new(*r)
|
118
|
+
@c.new(*r) if @c
|
119
|
+
end
|
120
|
+
end #TypeViewer
|
121
|
+
|
122
|
+
|
123
|
+
class NodeType
|
124
|
+
def initialize(type,subtype=nil)
|
125
|
+
@t = type
|
126
|
+
@s = subtype if subtype
|
127
|
+
end
|
128
|
+
def type
|
129
|
+
@t
|
130
|
+
end
|
131
|
+
def subtype
|
132
|
+
@s
|
133
|
+
end
|
134
|
+
end
|
135
|
+
class NodeTypeValue < NodeType
|
136
|
+
def initialize(type,subtype,value)
|
137
|
+
super(type,subtype)
|
138
|
+
@v = value if value
|
139
|
+
end
|
140
|
+
def value
|
141
|
+
@v
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
module ViewerInterface
|
146
|
+
def initialize(node_type,main,instance,*r)
|
147
|
+
@type = node_type
|
148
|
+
@main = main
|
149
|
+
@instance = instance
|
150
|
+
end
|
151
|
+
|
152
|
+
# The node type of this viewer
|
153
|
+
def type
|
154
|
+
@type
|
155
|
+
end
|
156
|
+
|
157
|
+
def main
|
158
|
+
@main
|
159
|
+
end
|
160
|
+
|
161
|
+
def instance
|
162
|
+
@instance
|
163
|
+
end
|
164
|
+
|
165
|
+
def proxy
|
166
|
+
@instance.proxy
|
167
|
+
end
|
168
|
+
|
169
|
+
def title
|
170
|
+
@title
|
171
|
+
end
|
172
|
+
|
173
|
+
def title_tree
|
174
|
+
title
|
175
|
+
end
|
176
|
+
|
177
|
+
def title_tab
|
178
|
+
title
|
179
|
+
end
|
180
|
+
|
181
|
+
def icon
|
182
|
+
@icon
|
183
|
+
end
|
184
|
+
|
185
|
+
def icon_tree
|
186
|
+
icon
|
187
|
+
end
|
188
|
+
|
189
|
+
def icon_tab
|
190
|
+
icon
|
191
|
+
end
|
192
|
+
|
193
|
+
def tooltip
|
194
|
+
@tooltip
|
195
|
+
end
|
196
|
+
|
197
|
+
def leaf?
|
198
|
+
false
|
199
|
+
end
|
200
|
+
|
201
|
+
def view(&block)
|
202
|
+
if @view
|
203
|
+
@view.put_client_property(:viewer,self)
|
204
|
+
cheri_yield(@view,&block) if block
|
205
|
+
@view
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
def refresh
|
210
|
+
end
|
211
|
+
|
212
|
+
def tab(&block)
|
213
|
+
@tab ||= x_panel do
|
214
|
+
opaque false
|
215
|
+
label icon_tab
|
216
|
+
x_spacer 2
|
217
|
+
label title_tab
|
218
|
+
x_spacer 10
|
219
|
+
button CloseTabDimIcon do
|
220
|
+
rollover_icon CloseTabIcon
|
221
|
+
fixed_size 12,12
|
222
|
+
tool_tip_text 'Close'
|
223
|
+
content_area_filled false
|
224
|
+
border_painted false
|
225
|
+
on_click { close_view }
|
226
|
+
end
|
227
|
+
end
|
228
|
+
cheri_yield @tab, &block if block_given?
|
229
|
+
@tab
|
230
|
+
end
|
231
|
+
|
232
|
+
def close_view
|
233
|
+
@main.close_view(self)
|
234
|
+
end
|
235
|
+
|
236
|
+
end #ViewerInterface
|
237
|
+
|
238
|
+
module ValueViewerInterface
|
239
|
+
def initialize(node_type,main,instance,value,*r)
|
240
|
+
super
|
241
|
+
@value = value
|
242
|
+
end
|
243
|
+
def value
|
244
|
+
@value
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
module ParentViewerInterface
|
249
|
+
def children
|
250
|
+
@children
|
251
|
+
end
|
252
|
+
|
253
|
+
def children_loaded?
|
254
|
+
end
|
255
|
+
|
256
|
+
def load_children
|
257
|
+
end
|
258
|
+
|
259
|
+
def leaf?
|
260
|
+
false
|
261
|
+
end
|
262
|
+
|
263
|
+
end
|
264
|
+
|
265
|
+
class Viewer
|
266
|
+
include ViewerInterface
|
267
|
+
include Cheri::Swing
|
268
|
+
|
269
|
+
def initialize(*r)
|
270
|
+
super
|
271
|
+
swing[:auto => true]
|
272
|
+
end
|
273
|
+
|
274
|
+
end
|
275
|
+
|
276
|
+
class HtmlViewer < Viewer
|
277
|
+
include Cheri::Html
|
278
|
+
TblWidth = '98%'
|
279
|
+
TColor = '#080080'
|
280
|
+
HtmlStyle = %q[
|
281
|
+
.method { font-family: monospaced, courier; font-size: medium }
|
282
|
+
.oid { font-family: monospaced, courier; }
|
283
|
+
.var { font-family: monospaced, courier; font-weight: bold }
|
284
|
+
.val { font-family: monospaced, courier; color: #000080 }
|
285
|
+
.hdr { font-family: sans-serif; font-size: large; font-weight: bold; color: #000080 }
|
286
|
+
body { font-family: sans-serif; }
|
287
|
+
]
|
288
|
+
ContType = 'text/html'.freeze
|
289
|
+
|
290
|
+
def html_style
|
291
|
+
HtmlStyle
|
292
|
+
end
|
293
|
+
|
294
|
+
def view(&block)
|
295
|
+
@view ||= scroll_pane do
|
296
|
+
align :LEFT
|
297
|
+
@html_view = editor_pane do
|
298
|
+
editable false
|
299
|
+
content_type ContType
|
300
|
+
html_document
|
301
|
+
end
|
302
|
+
end
|
303
|
+
super
|
304
|
+
end
|
305
|
+
|
306
|
+
def html_document
|
307
|
+
html do
|
308
|
+
head do
|
309
|
+
style html_style
|
310
|
+
end
|
311
|
+
# TODO: body attrs should be in style sheet
|
312
|
+
body :bgcolor => :white do
|
313
|
+
div :align => :left do
|
314
|
+
html_heading
|
315
|
+
html_content
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
end
|
321
|
+
|
322
|
+
def html_heading
|
323
|
+
html_title
|
324
|
+
end
|
325
|
+
|
326
|
+
def html_title
|
327
|
+
table :width => TblWidth, :cellspacing => 2, :cellpadding => 2, :border => 0 do
|
328
|
+
tr do
|
329
|
+
td esc(title), :class => :hdr, :align => :left, :colspan=> 2
|
330
|
+
end
|
331
|
+
end
|
332
|
+
#h2 title, :align => :left, :text => TColor
|
333
|
+
end
|
334
|
+
|
335
|
+
def html_content
|
336
|
+
end
|
337
|
+
|
338
|
+
def refresh
|
339
|
+
cheri_yield @html_view do
|
340
|
+
html_document
|
341
|
+
end
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
class HtmlTableViewer < HtmlViewer
|
346
|
+
def html_content
|
347
|
+
table :width => TblWidth, :cellspacing => 2, :cellpadding => 2, :border => 0 do
|
348
|
+
table_rows
|
349
|
+
nil
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
def table_rows
|
354
|
+
end
|
355
|
+
|
356
|
+
def empty_row
|
357
|
+
tr td(' ')
|
358
|
+
end
|
359
|
+
|
360
|
+
end
|
361
|
+
|
362
|
+
class HtmlNameValueListViewer < HtmlTableViewer
|
363
|
+
HColor = '#f0faff'.freeze
|
364
|
+
NColor = '#f0e2e0'.freeze
|
365
|
+
VColor = '#f0f0f0'.freeze
|
366
|
+
Right = 'right'.freeze
|
367
|
+
Top = 'top'.freeze
|
368
|
+
|
369
|
+
def name_value_row(name,value)
|
370
|
+
v = tr do
|
371
|
+
th name, :align => :left, :valign => Top, :width=> 160, :bgcolor => NColor
|
372
|
+
td value, :bgcolor => VColor, :class => :val
|
373
|
+
nil
|
374
|
+
end
|
375
|
+
v
|
376
|
+
end
|
377
|
+
|
378
|
+
def name_type_value_row(name,type,value)
|
379
|
+
tr do
|
380
|
+
th name, :class => :var, :align => :left, :valign => Top, :width=> 120, :bgcolor => NColor
|
381
|
+
td type, :bgcolor => VColor, :valign => Top
|
382
|
+
td value, :bgcolor => VColor, :class => :val
|
383
|
+
nil
|
384
|
+
end
|
385
|
+
end
|
386
|
+
|
387
|
+
def name_type_id_value_row(name,type,id,value)
|
388
|
+
tr do
|
389
|
+
td name, :class => :var, :valign => Top, :width=> 120, :bgcolor => VColor
|
390
|
+
td type, :bgcolor => VColor, :valign => Top
|
391
|
+
td id, :bgcolor => VColor, :align => Right, :valign => Top, :width => 20, :class => :oid
|
392
|
+
td value, :bgcolor => VColor, :class => :val
|
393
|
+
nil
|
394
|
+
end
|
395
|
+
end
|
396
|
+
|
397
|
+
def type_id_value_row(type,id,value)
|
398
|
+
tr do
|
399
|
+
td type, :bgcolor => VColor, :valign => Top
|
400
|
+
td id, :bgcolor => VColor, :align => Right, :valign => Top, :width => 20, :class => :oid
|
401
|
+
td value, :bgcolor => VColor, :class => :val
|
402
|
+
nil
|
403
|
+
end
|
404
|
+
end
|
405
|
+
|
406
|
+
def id_value_row(type,id,value)
|
407
|
+
tr do
|
408
|
+
td id, :bgcolor => VColor, :align => Right, :valign => Top, :width => 20, :class => :oid
|
409
|
+
td value, :bgcolor => VColor, :class => :val
|
410
|
+
nil
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
414
|
+
def value_list(value_array)
|
415
|
+
table do
|
416
|
+
value_array.each do |value|
|
417
|
+
tr td(esc(value))
|
418
|
+
end
|
419
|
+
nil
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
end #HtmlNameValueListViewer
|
424
|
+
|
425
|
+
|
426
|
+
module NavViewerConstants
|
427
|
+
Color = ::Java::JavaAwt::Color
|
428
|
+
Font = ::Java::JavaAwt::Font
|
429
|
+
TColor = Color.new(0,0,0x80)
|
430
|
+
NColor = Color.new(0xf0,0xe2,0xe0)
|
431
|
+
VColor = Color.new(0xf0,0xf0,0xf0)
|
432
|
+
HColor = Color.new(0xd0,0xe0,0xff)
|
433
|
+
TFont = Font.new('Dialog',Font::BOLD,18)
|
434
|
+
NFont = Font.new('Dialog',Font::BOLD,14)
|
435
|
+
VFont = Font.new('Monospaced',Font::PLAIN,14)
|
436
|
+
IFont = Font.new('Monospaced',Font::BOLD,14)
|
437
|
+
CFont = Font.new('Dialog',Font::PLAIN,14)
|
438
|
+
ResFont = Font.new('Monospaced',Font::PLAIN,12)
|
439
|
+
HdrName = 'Name'.freeze
|
440
|
+
HdrVarName = 'Variable name'.freeze
|
441
|
+
HdrType = 'Type'.freeze
|
442
|
+
HdrId = 'Id'.freeze
|
443
|
+
HdrValue = 'Value'.freeze
|
444
|
+
end
|
445
|
+
|
446
|
+
module NavViewer
|
447
|
+
include NavViewerConstants
|
448
|
+
|
449
|
+
class ColDef
|
450
|
+
attr :col, true
|
451
|
+
attr :hbg, true
|
452
|
+
attr :hfg, true
|
453
|
+
attr :hfont, true
|
454
|
+
attr :dbg, true
|
455
|
+
attr :dfg, true
|
456
|
+
attr :dfont, true
|
457
|
+
attr :dtext, true
|
458
|
+
attr :maxh, true
|
459
|
+
attr :clk, true
|
460
|
+
def initialize(hbg,hfg,hfont,dbg,dfg,dfont,dtext=nil,maxh=nil)
|
461
|
+
@hbg = hbg if hbg
|
462
|
+
@hfg = hfg if hfg
|
463
|
+
@hfont = hfont if hfont
|
464
|
+
@dbg = dbg if dbg
|
465
|
+
@dfg = dfg if dfg
|
466
|
+
@dfont = dfont if dfont
|
467
|
+
@dtext = dtext if dtext
|
468
|
+
@maxh = maxh if maxh
|
469
|
+
end
|
470
|
+
end
|
471
|
+
|
472
|
+
def initialize(*r)
|
473
|
+
super
|
474
|
+
swing[:auto]
|
475
|
+
end
|
476
|
+
|
477
|
+
def title_section(title)
|
478
|
+
x_box do
|
479
|
+
align :LEFT
|
480
|
+
label title do
|
481
|
+
align :LEFT
|
482
|
+
set_font TFont
|
483
|
+
foreground TColor
|
484
|
+
end
|
485
|
+
x_spacer 2
|
486
|
+
end
|
487
|
+
end
|
488
|
+
|
489
|
+
def init_cols(*coldefs)
|
490
|
+
coldefs.each do |cd|
|
491
|
+
cd.col = y_panel do
|
492
|
+
align :LEFT,:TOP
|
493
|
+
opaque false
|
494
|
+
end
|
495
|
+
end
|
496
|
+
end
|
497
|
+
|
498
|
+
def last_row(cols)
|
499
|
+
cols.each do |col|
|
500
|
+
cheri_yield col.col do
|
501
|
+
y_glue
|
502
|
+
end
|
503
|
+
end
|
504
|
+
end
|
505
|
+
|
506
|
+
def header_row(cols,*labels)
|
507
|
+
last = labels.length - 1
|
508
|
+
labels.length.times do |i|
|
509
|
+
col = cols[i] || cols.last
|
510
|
+
cheri_yield col.col do
|
511
|
+
x_panel do
|
512
|
+
align :LEFT,:TOP
|
513
|
+
background col.hbg || NColor
|
514
|
+
maximum_size 1000, 24
|
515
|
+
x_spacer 2
|
516
|
+
label labels[i] do
|
517
|
+
align :LEFT,:TOP
|
518
|
+
set_font col.hfont || NFont
|
519
|
+
foreground col.hfg if col.hfg
|
520
|
+
end
|
521
|
+
x_spacer 2
|
522
|
+
x_glue if i == last
|
523
|
+
end
|
524
|
+
x_spacer 1
|
525
|
+
y_spacer 2
|
526
|
+
end
|
527
|
+
end
|
528
|
+
cheri_yield cols.last.col do
|
529
|
+
x_glue
|
530
|
+
end
|
531
|
+
y_spacer 2
|
532
|
+
end
|
533
|
+
|
534
|
+
def value_row(cols,*values)
|
535
|
+
last = values.length - 1
|
536
|
+
values.length.times do |i|
|
537
|
+
col = cols[i] || cols.last
|
538
|
+
cheri_yield col.col do
|
539
|
+
#y_glue
|
540
|
+
x_panel do
|
541
|
+
align :LEFT,:TOP
|
542
|
+
background col.dbg || VColor
|
543
|
+
maximum_size 1000,col.maxh || 24
|
544
|
+
x_spacer 2
|
545
|
+
if col.clk
|
546
|
+
on_mouse_entered do |e|
|
547
|
+
e.source.background = HColor
|
548
|
+
end
|
549
|
+
on_mouse_exited do |e|
|
550
|
+
e.source.background = VColor
|
551
|
+
end
|
552
|
+
end
|
553
|
+
if col.dtext
|
554
|
+
text_area do
|
555
|
+
align :LEFT,:TOP
|
556
|
+
editable false
|
557
|
+
line_wrap true
|
558
|
+
set_font col.dfont || VFont
|
559
|
+
background col.dbg || VColor
|
560
|
+
foreground col.dfg if col.dfg
|
561
|
+
text values[i]
|
562
|
+
end
|
563
|
+
else
|
564
|
+
label values[i] do
|
565
|
+
align :LEFT,:TOP
|
566
|
+
set_font col.dfont || VFont
|
567
|
+
foreground col.dfg if col.dfg
|
568
|
+
if (click_val = col.clk)
|
569
|
+
on_mouse_clicked do
|
570
|
+
mouse_clicked(click_val)
|
571
|
+
end
|
572
|
+
on_mouse_entered do |e|
|
573
|
+
e.source.parent.background = HColor
|
574
|
+
end
|
575
|
+
on_mouse_exited do |e|
|
576
|
+
e.source.parent.background = VColor
|
577
|
+
end
|
578
|
+
end
|
579
|
+
end
|
580
|
+
end
|
581
|
+
x_spacer 2
|
582
|
+
x_glue if i == last
|
583
|
+
end
|
584
|
+
x_spacer 1
|
585
|
+
y_spacer 2
|
586
|
+
end
|
587
|
+
end
|
588
|
+
cheri_yield cols.last.col do
|
589
|
+
x_glue
|
590
|
+
end
|
591
|
+
y_spacer 2
|
592
|
+
end
|
593
|
+
|
594
|
+
def empty_row(glue=nil)
|
595
|
+
x_box do
|
596
|
+
align :LEFT,:TOP
|
597
|
+
spacer 1,12
|
598
|
+
end
|
599
|
+
y_glue if glue
|
600
|
+
end
|
601
|
+
|
602
|
+
def mouse_clicked(val)
|
603
|
+
end
|
604
|
+
|
605
|
+
end
|
606
|
+
|
607
|
+
module DRbHelper
|
608
|
+
# work around DRb (or possibly JRuby) issue iterating pseudo-array.
|
609
|
+
# TODO: need a client-side proxy for error handling and issues like this.
|
610
|
+
def drb_to_array(maybe_array)
|
611
|
+
return maybe_array if Array === maybe_array
|
612
|
+
Array.new(maybe_array.length) {|i| maybe_array[i]}
|
613
|
+
end
|
614
|
+
|
615
|
+
end
|
616
|
+
|
617
|
+
end #Explorer
|
618
|
+
end #JRuby
|
619
|
+
end #Cheri
|