gave 1.2.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.
@@ -0,0 +1,326 @@
1
+ require "numru/gave/draw"
2
+ require "vtk/Gtk"
3
+
4
+ GAVE_GTK_VERSION = 2
5
+
6
+ Gtk.init
7
+ Gtk::GL.init
8
+
9
+ class GtkGLExtVTKRenderWindow
10
+ def OnKeyPress(wid, event=nil)
11
+ if (event.keyval == Gdk::Keyval.from_name("q")) ||
12
+ (event.keyval == Gdk::Keyval.from_name("Q"))
13
+ self.parent.hide
14
+ elsif (event.keyval == Gdk::Keyval.from_name('r')) ||
15
+ (event.keyval == Gdk::Keyval.from_name('R'))
16
+ self.Reset
17
+ return true
18
+ elsif (event.keyval == Gdk::Keyval.from_name('w')) ||
19
+ (event.keyval == Gdk::Keyval.from_name('W'))
20
+ self.Wireframe
21
+ return true
22
+ elsif (event.keyval == Gdk::Keyval.from_name('s')) ||
23
+ (event.keyval == Gdk::Keyval.from_name('S'))
24
+ self.Surface
25
+ return true
26
+ elsif (event.keyval == Gdk::Keyval.from_name('p')) ||
27
+ (event.keyval == Gdk::Keyval.from_name('P'))
28
+ m = pointer
29
+ self.PickActor(m[0], m[1])
30
+ return true
31
+ else
32
+ return false
33
+ end
34
+ end
35
+ end
36
+
37
+ class Draw
38
+ alias :_initialize :initialize
39
+ def initialize(n)
40
+ _initialize(n)
41
+ end
42
+ alias :_clear :clear
43
+ def clear
44
+ _clear
45
+ end
46
+ def open_graphics
47
+ @draw_area = GtkGLExtVTKRenderWindow.new
48
+ @draw_area.set_size_request(@width,@height)
49
+ @ren = Vtk::Renderer.new
50
+ @draw_area.GetRenderWindow.AddRenderer(@ren)
51
+ @window = Gtk::Window.new(Gtk::Window::TOPLEVEL).set_resizable(true)
52
+ @window.signal_connect("delete-event"){|w,p| w.hide; true}
53
+ @window.signal_connect("destroy"){exit}
54
+ @window.add(@draw_area)
55
+ names = @gphys.funcs[0]
56
+ @window.set_title("#{@winno}: #{names[2]}@#{names[0]}")
57
+ end
58
+
59
+
60
+ private
61
+ def draw_1d(title,xtitle,ytitle)
62
+ @fig.figure_set("title = \"#{title}\"", __FILE__,__LINE__)
63
+ @fig.figure_set("xtitle = \"#{xtitle}\"", __FILE__,__LINE__)
64
+ @fig.figure_set("ytitle = \"#{ytitle}\"", __FILE__,__LINE__)
65
+ @fig.figure_set('x = gphys0.coord(0).val', __FILE__,__LINE__)
66
+ @fig.figure_set('grid = Vtk::RectilinearGrid.new', __FILE__,__LINE__)
67
+ @fig.figure_set('length = gphys0.length', __FILE__,__LINE__)
68
+ @fig.figure_set('grid.SetDimensions(length,1,1)', __FILE__,__LINE__)
69
+ @fig.figure_set('grid.SetXCoordinates(x.to_va)', __FILE__,__LINE__)
70
+ @fig.figure_set('data = gphys0.val', __FILE__,__LINE__)
71
+ @fig.figure_set('data = data.get_array! if NArrayMiss===data', __FILE__,__LINE__)
72
+ @fig.figure_set('grid.GetPointData.SetScalars(data.to_va)', __FILE__,__LINE__)
73
+ @fig.figure_set('xyplot = Vtk::XYPlotActor.new', __FILE__,__LINE__)
74
+ @fig.figure_set('xyplot.AddInput(grid)', __FILE__,__LINE__)
75
+ @fig.figure_set('xyplot.GetProperty.SetColor(0,0,0)', __FILE__,__LINE__)
76
+ @fig.figure_set('xyplot.SetTitle(title)', __FILE__,__LINE__)
77
+ @fig.figure_set('xyplot.SetXTitle(xtitle)', __FILE__,__LINE__)
78
+ @fig.figure_set('xyplot.SetYTitle(ytitle)', __FILE__,__LINE__)
79
+ # @fig.figure_set('xyplot.PlotPointsOn', __FILE__,__LINE__)
80
+ @fig.figure_set('tprop = xyplot.GetTitleTextProperty', __FILE__,__LINE__)
81
+ @fig.figure_set('tprop.SetColor(*xyplot.GetProperty.GetColor)', __FILE__,__LINE__)
82
+ @fig.figure_set('xyplot.SetAxisTitleTextProperty(tprop)', __FILE__,__LINE__)
83
+ @fig.figure_set('xyplot.SetAxisLabelTextProperty(tprop)', __FILE__,__LINE__)
84
+ @fig.figure_set('ren.AddActor2D(xyplot)', __FILE__,__LINE__)
85
+ @fig.figure_set('ren.SetBackground(1, 1, 1)', __FILE__,__LINE__)
86
+ end
87
+
88
+ private
89
+ def draw_2d(title,type)
90
+ @fig.figure_set('x = gphys0.coord(0).val', __FILE__,__LINE__)
91
+ @fig.figure_set('xmin = x.min', __FILE__,__LINE__)
92
+ @fig.figure_set('xmax = x.max', __FILE__,__LINE__)
93
+ @fig.figure_set('x = x/(xmax-xmin)', __FILE__,__LINE__)
94
+ @fig.figure_set('y = gphys0.coord(1).val', __FILE__,__LINE__)
95
+ @fig.figure_set('ymin = y.min', __FILE__,__LINE__)
96
+ @fig.figure_set('ymax = y.max', __FILE__,__LINE__)
97
+ @fig.figure_set('y = y/(ymax-ymin)', __FILE__,__LINE__)
98
+ # @fig.figure_set('yfact = (xmax-xmin)/(ymax-ymin)', __FILE__,__LINE__)
99
+ @fig.figure_set('grid = Vtk::RectilinearGrid.new', __FILE__,__LINE__)
100
+ @fig.figure_set('shape = gphys0.shape', __FILE__,__LINE__)
101
+ @fig.figure_set('grid.SetDimensions(shape[0],shape[1],1)', __FILE__,__LINE__)
102
+ @fig.figure_set('grid.SetXCoordinates(x.to_va)', __FILE__,__LINE__)
103
+ @fig.figure_set('grid.SetYCoordinates(y.to_va)', __FILE__,__LINE__)
104
+ @fig.figure_set('data = gphys0.val', __FILE__,__LINE__)
105
+ @fig.figure_set('data = data.get_array! if NArrayMiss===data', __FILE__,__LINE__)
106
+ @fig.figure_set('grid.GetPointData.SetScalars(data.reshape!(data.length).to_va)', __FILE__,__LINE__)
107
+ @fig.figure_set('outline = Vtk::OutlineFilter.new', __FILE__,__LINE__)
108
+ @fig.figure_set('outline.SetInput(grid)', __FILE__,__LINE__)
109
+ @fig.figure_set('outlineMapper = Vtk::PolyDataMapper.new', __FILE__,__LINE__)
110
+ @fig.figure_set('outlineMapper.SetInput(outline.GetOutput)', __FILE__,__LINE__)
111
+ @fig.figure_set('outlineActor = Vtk::Actor.new', __FILE__,__LINE__)
112
+ @fig.figure_set('outlineActor.SetMapper(outlineMapper)', __FILE__,__LINE__)
113
+ # @fig.figure_set('outlineActor.SetScale(1,yfact,1)', __FILE__,__LINE__)
114
+ @fig.figure_set('outlineActor.GetProperty.SetColor(0,0,0)', __FILE__,__LINE__)
115
+ @fig.figure_set('contour = Vtk::ContourFilter.new', __FILE__,__LINE__)
116
+ @fig.figure_set('contour.SetInput(grid)', __FILE__,__LINE__)
117
+ @fig.figure_set('contour.GenerateValues(40, data.min, data.max)', __FILE__,__LINE__)
118
+ @fig.figure_set('mapper = Vtk::PolyDataMapper.new', __FILE__,__LINE__)
119
+ @fig.figure_set('mapper.SetInput(contour.GetOutput)', __FILE__,__LINE__)
120
+ @fig.figure_set('mapper.SetScalarRange(data.min,data.max)', __FILE__,__LINE__)
121
+ @fig.figure_set('actor = Vtk::Actor.new', __FILE__,__LINE__)
122
+ @fig.figure_set('actor.SetMapper(mapper)', __FILE__,__LINE__)
123
+ # @fig.figure_set('actor.SetScale(1,yfact,1)', __FILE__,__LINE__)
124
+ @fig.figure_set('ren.AddActor(actor)', __FILE__,__LINE__)
125
+ @fig.figure_set('ren.AddActor(outlineActor)', __FILE__,__LINE__)
126
+ @fig.figure_set('ren.SetBackground(1, 1, 1)', __FILE__,__LINE__)
127
+ # @fig.figure_set('tprop = Vtk::TextProperty.new', __FILE__,__LINE__)
128
+ # @fig.figure_set('tprop.SetColor(0,0,0)', __FILE__,__LINE__)
129
+ @fig.figure_set('axes = Vtk::CubeAxesActor2D.new', __FILE__,__LINE__)
130
+ @fig.figure_set('axes.SetCornerOffset(0)', __FILE__,__LINE__)
131
+ @fig.figure_set('axes.SetInput(grid)', __FILE__,__LINE__)
132
+ @fig.figure_set('axes.SetCamera(ren.GetActiveCamera)', __FILE__,__LINE__)
133
+ @fig.figure_set('axes.SetFontFactor(1.2)', __FILE__,__LINE__)
134
+ # @fig.figure_set('axes.SetAxisTitleTextProperty(tprop)', __FILE__,__LINE__)
135
+ # @fig.figure_set('axes.SetAxisLabelTextProperty(tprop)', __FILE__,__LINE__)
136
+ @fig.figure_set('axes.GetProperty.SetColor(0,0,0)', __FILE__,__LINE__)
137
+ @fig.figure_set('axes.UseRangesOn', __FILE__,__LINE__)
138
+ @fig.figure_set('axes.SetRanges(xmin,xmax,ymin,ymax,0,0)', __FILE__,__LINE__)
139
+ @fig.figure_set('ren.AddProp(axes)', __FILE__,__LINE__)
140
+ end
141
+
142
+ def draw_3d(title)
143
+ @fig.figure_set('x = gphys0.coord(0).val', __FILE__,__LINE__)
144
+ @fig.figure_set('xmin = x.min', __FILE__,__LINE__)
145
+ @fig.figure_set('xmax = x.max', __FILE__,__LINE__)
146
+ @fig.figure_set('x = x/(xmax-xmin)', __FILE__,__LINE__)
147
+ @fig.figure_set('y = gphys0.coord(1).val', __FILE__,__LINE__)
148
+ @fig.figure_set('ymin = y.min', __FILE__,__LINE__)
149
+ @fig.figure_set('ymax = y.max', __FILE__,__LINE__)
150
+ @fig.figure_set('y = y/(ymax-ymin)', __FILE__,__LINE__)
151
+ @fig.figure_set('z = gphys0.coord(2).val', __FILE__,__LINE__)
152
+ @fig.figure_set('zmin = z.min', __FILE__,__LINE__)
153
+ @fig.figure_set('zmax = z.max', __FILE__,__LINE__)
154
+ @fig.figure_set('z = z/(zmax-zmin)', __FILE__,__LINE__)
155
+ # @fig.figure_set('yfact = (xmax-xmin)/(ymax-ymin)', __FILE__,__LINE__)
156
+ # @fig.figure_set('zfact = (xmax-xmin)/(zmax-zmin)', __FILE__,__LINE__)
157
+ @fig.figure_set('grid = Vtk::RectilinearGrid.new', __FILE__,__LINE__)
158
+ @fig.figure_set('shape = gphys0.shape', __FILE__,__LINE__)
159
+ @fig.figure_set('grid.SetDimensions(*shape)', __FILE__,__LINE__)
160
+ @fig.figure_set('grid.SetXCoordinates(x.to_va)', __FILE__,__LINE__)
161
+ @fig.figure_set('grid.SetYCoordinates(y.to_va)', __FILE__,__LINE__)
162
+ @fig.figure_set('grid.SetZCoordinates(z.to_va)', __FILE__,__LINE__)
163
+
164
+ @fig.figure_set('data = gphys0.val', __FILE__,__LINE__)
165
+ @fig.figure_set('data = data.get_array! if NArrayMiss===data', __FILE__,__LINE__)
166
+ @fig.figure_set('data = (data-data.min)/(data.max-data.min)', __FILE__,__LINE__)
167
+ @fig.figure_set('grid.GetPointData.SetScalars(data.reshape!(data.length).to_va)', __FILE__,__LINE__)
168
+ @fig.figure_set('outline = Vtk::OutlineFilter.new', __FILE__,__LINE__)
169
+ @fig.figure_set('outline.SetInput(grid)', __FILE__,__LINE__)
170
+ @fig.figure_set('outlineMapper = Vtk::PolyDataMapper.new', __FILE__,__LINE__)
171
+ @fig.figure_set('outlineMapper.SetInput(outline.GetOutput)', __FILE__,__LINE__)
172
+ @fig.figure_set('outlineActor = Vtk::Actor.new', __FILE__,__LINE__)
173
+ @fig.figure_set('outlineActor.SetMapper(outlineMapper)', __FILE__,__LINE__)
174
+ # @fig.figure_set('outlineActor.SetScale(1,yfact,zfact)', __FILE__,__LINE__)
175
+ # @fig.figure_set('outlineActor.GetProperty.SetColor(0,0,0)', __FILE__,__LINE__)
176
+ @fig.figure_set('surface = Vtk::ContourFilter.new', __FILE__,__LINE__)
177
+ @fig.figure_set('surface.SetInput(grid)', __FILE__,__LINE__)
178
+ if @surface
179
+ @fig.figure_set("surface.SetValue(0,#{@surface})", __FILE__,__LINE__)
180
+ else
181
+ @fig.figure_set('surface.SetValue(0,0.5)', __FILE__,__LINE__)
182
+ end
183
+ @fig.figure_set('mapper = Vtk::PolyDataMapper.new', __FILE__,__LINE__)
184
+ @fig.figure_set('mapper.SetInput(surface.GetOutput)', __FILE__,__LINE__)
185
+ @fig.figure_set('mapper.SetScalarModeToUsePointFieldData', __FILE__,__LINE__)
186
+ @fig.figure_set('actor = Vtk::Actor.new', __FILE__,__LINE__)
187
+ @fig.figure_set('actor.SetMapper(mapper)', __FILE__,__LINE__)
188
+ @fig.figure_set('actor.GetProperty.SetOpacity(0.5)', __FILE__,__LINE__)
189
+ # @fig.figure_set('actor.SetScale(1,yfact,zfact)', __FILE__,__LINE__)
190
+ @fig.figure_set('ren.AddActor(outlineActor)', __FILE__,__LINE__)
191
+ @fig.figure_set('ren.AddActor(actor)', __FILE__,__LINE__)
192
+ @fig.figure_set('ren.SetBackground(0.1, 0.2, 0.4)', __FILE__,__LINE__)
193
+ # @fig.figure_set('tprop = Vtk::TextProperty.new', __FILE__,__LINE__)
194
+ # @fig.figure_set('tprop.SetColor(1,1,1)', __FILE__,__LINE__)
195
+ @fig.figure_set('axes = Vtk::CubeAxesActor2D.new', __FILE__,__LINE__)
196
+ @fig.figure_set('axes.SetCornerOffset(0)', __FILE__,__LINE__)
197
+ @fig.figure_set('axes.SetInput(grid)', __FILE__,__LINE__)
198
+ @fig.figure_set('axes.SetCamera(ren.GetActiveCamera)', __FILE__,__LINE__)
199
+ @fig.figure_set('axes.SetFontFactor(1.2)', __FILE__,__LINE__)
200
+ # @fig.figure_set('axes.SetAxisTitleTextProperty(tprop)', __FILE__,__LINE__)
201
+ # @fig.figure_set('axes.SetAxisLabelTextProperty(tprop)', __FILE__,__LINE__)
202
+ @fig.figure_set('axes.UseRangesOn', __FILE__,__LINE__)
203
+ @fig.figure_set('axes.SetRanges(xmin,xmax,ymin,ymax,zmin,zmax)', __FILE__,__LINE__)
204
+ @fig.figure_set('ren.AddProp(axes)', __FILE__,__LINE__)
205
+ end
206
+
207
+ private
208
+ def draw(drawing_area)
209
+ @fig.figure_clear
210
+ acts = @ren.GetActors
211
+ for i in 0...acts.GetNumberOfItems
212
+ act = Vtk::Actor.SafeDownCast(acts.GetItemAsObject(0))
213
+ @ren.RemoveActor(act)
214
+ end
215
+
216
+ if @type == LINE
217
+ draw_1d(@title,@x_title,@y_title)
218
+ elsif @type == CONTOUR
219
+ draw_2d(@title,@type)
220
+ elsif @type == SURFACE
221
+ draw_3d(@title)
222
+ end
223
+
224
+ root = @window
225
+ gphys0 = @gphys
226
+ renWin = @draw_area
227
+ ren = @ren
228
+ codes = @fig.draw_eval
229
+ for j in 0...codes.length
230
+ eval *codes[j]
231
+ end
232
+ @draw_area.Render
233
+ @window.show_all
234
+ end
235
+
236
+ private
237
+ class Fig
238
+ attr_reader :head, :var, :open, :close
239
+ def initialize
240
+ @var = ""
241
+ @figure = Array.new
242
+ @head = <<"END"
243
+ require "numru/gphys"
244
+ require "vtk"
245
+
246
+ include NumRu
247
+ END
248
+ @open = <<"END"
249
+ renWin = Vtk::RenderWindow.new
250
+ ren = Vtk::Renderer.new
251
+ renWin.AddRenderer(ren)
252
+
253
+ END
254
+ @close = <<"END"
255
+ iren = Vtk::RenderWindowInteractor.new
256
+ iren.SetRenderWindow(renWin)
257
+ iren.Initialize
258
+ renWin.Render
259
+ iren.Start
260
+ END
261
+ end
262
+ def var_set(funcs,mapping,n)
263
+ @var = "" if n==0
264
+ filename, filetype, varname = funcs[0]
265
+ if filename.length==1
266
+ @var += "filename = \"#{filename[0]}\"\n"
267
+ else
268
+ @var += "filename = [\"#{filename.join('", "')}\"]\n"
269
+ end
270
+ @var += "varname = \"#{varname}\"\n"
271
+
272
+
273
+ if filetype.nil?
274
+ @var += "gphys#{n} = GPhys::IO.open(filename,varname)\n"
275
+ elsif filetype=="druby"
276
+ @var += "require \"drb/drb\"\n"
277
+ @var += "DRb.start_service\n"
278
+ @var += "class NArray\n"
279
+ @var += " def self._load(o) to_na(*Marshal::load(o)).ntoh end\n"
280
+ @var += "end\n"
281
+ @var += "ary = filename.split('/')\n"
282
+ @var += "host = 'druby://'+ary[2]\n"
283
+ @var += "path = ary[3..-1].join('/')\n"
284
+ @var += "tree = DRbObject.new(nil,host)\n"
285
+ @var += "gphys#{n} = tree.data(path)\n"
286
+ else
287
+ raise "filetype is invalid"
288
+ end
289
+
290
+ if funcs.length!=0
291
+ funcs[1..-1].each{|func|
292
+ @var += "gphys#{n} = gphys#{n}.cut(#{func[2].join(",")})\n"
293
+ @var += "gphys#{n} = gphys#{n}.#{func[0]}(#{func[1]})\n"
294
+ }
295
+ end
296
+ str = mapping.collect{|a|
297
+ if NArray===a
298
+ "NArray[#{a.to_a.join(",")}]"
299
+ else
300
+ a
301
+ end
302
+ }.join(",")
303
+ @var += "gphys#{n} = gphys#{n}[#{str}]\n"
304
+ end
305
+
306
+ def title_set(xt,xu,yt,yu, file,line)
307
+ end
308
+
309
+ def figure_clear
310
+ @figure.clear
311
+ end
312
+ def figure_set(str,file,line)
313
+ @figure.push([str,file,line])
314
+ end
315
+ def draw_parm
316
+ end
317
+ def draw
318
+ @figure.collect{|c| c[0]}.join("\n")
319
+ end
320
+ def draw_eval
321
+ codes = Array.new
322
+ @figure.each{|c| codes.push [c[0], nil, c[1], c[2]]}
323
+ codes
324
+ end
325
+ end
326
+ end
@@ -0,0 +1,188 @@
1
+ #!/usr/bin/env ruby
2
+ enable = true
3
+ begin
4
+ require 'libglade2'
5
+ rescue LoadError
6
+ begin
7
+ require "lglade"
8
+ rescue LoadError
9
+ enable = false
10
+ end
11
+ end
12
+
13
+ if enable
14
+ begin
15
+ require "gnomevfs"
16
+ require "drb/drb"
17
+ require "narray"
18
+ rescue LoadError
19
+ enable = false
20
+ end
21
+ end
22
+
23
+ if enable
24
+
25
+ DRb.start_service
26
+
27
+ class NArray
28
+ def self._load(o) to_na(*Marshal::load(o)).ntoh end
29
+ end
30
+ class NArrayMiss
31
+ def self._load(o)
32
+ ary, mask = Marshal::load(o)
33
+ ary = NArray._load(ary)
34
+ mask = NArray._load(mask)
35
+ NArrayMiss.to_nam_no_dup(ary,mask)
36
+ end
37
+ end
38
+
39
+
40
+ class DFileSelection
41
+ Glade_file = DATA_PATH+"/gave/glade/fileselection.glade"
42
+ def initialize(title="FileSelection")
43
+ glade = GladeXML.new(Glade_file) {|handler| method(handler)}
44
+ @window = glade.get_widget("Fileselection")
45
+ @window.hide
46
+ @window.title = title
47
+ @ok = glade.get_widget("ok")
48
+ @entry = glade.get_widget("entry")
49
+ hpaned = glade.get_widget("hpaned1")
50
+ hpaned.position=245
51
+ @dirlist = glade.get_widget("dirlist")
52
+ @filelist = glade.get_widget("filelist")
53
+ column = Gtk::TreeViewColumn.new("Dir", Gtk::CellRendererText.new,
54
+ {:text=>0})
55
+ @dirlist.append_column(column)
56
+ column = Gtk::TreeViewColumn.new("File", Gtk::CellRendererText.new,
57
+ {:text=>0})
58
+ @filelist.append_column(column)
59
+ @dirlist.show_all
60
+ @filelist.show_all
61
+ @dirmodel = Gtk::TreeStore.new(String)
62
+ @filemodel = Gtk::TreeStore.new(String)
63
+ @dirlist.model = @dirmodel
64
+ @filelist.model = @filemodel
65
+ GnomeVFS.init
66
+ @uri = GnomeVFS::URI.new(File.expand_path("."))
67
+ make_models
68
+ end
69
+
70
+ def on_dirlist_cursor_changed(widget)
71
+ path = widget.cursor[0]
72
+ name = @dirmodel.get_iter(path)[0]
73
+ if GnomeVFS::URI===@uri
74
+ uri = @uri.append_path(name)
75
+ return until uri.exists?
76
+ return if @uri.to_s==uri.to_s
77
+ @uri = uri
78
+ else
79
+ return until @uri.list_dirs.index(name) || name=="." || name==".."
80
+ uri = @uri.dir(name)
81
+ return if @uri.path==uri.path
82
+ @uri = uri
83
+ end
84
+ make_models
85
+ end
86
+ def on_filelist_cursor_changed(widget)
87
+ path = widget.cursor[0]
88
+ name = @filemodel.get_iter(path)[0]
89
+ if GnomeVFS::URI===@uri
90
+ uri = @uri.append_path(name)
91
+ return until uri.exists?
92
+ @entry.text = uri.to_s
93
+ else
94
+ return until @uri.list_data.index(name)
95
+ @entry.text = @uri.__drburi+@uri.path+name
96
+ end
97
+ end
98
+ def on_entry_activate
99
+ jump
100
+ end
101
+ def on_jump_clicked(widget)
102
+ jump
103
+ end
104
+ def jump
105
+ if @entry.text =~ /^druby:\/\//
106
+ path = @entry.text
107
+ uri = DRbObject.new(nil,path)
108
+ return until uri
109
+ @uri = uri
110
+ else
111
+ uri = GnomeVFS::URI.new(@entry.text)
112
+ if uri.exists?
113
+ @uri = uri
114
+ else
115
+ return
116
+ end
117
+ end
118
+ make_models
119
+ end
120
+ def on_cancel_clicked(widget)
121
+ hide
122
+ end
123
+ def on_Fileselection_delete_event(widget, arg0)
124
+ hide
125
+ end
126
+
127
+ def make_models
128
+ @dirmodel.clear
129
+ @filemodel.clear
130
+ items = Array.new
131
+ if GnomeVFS::URI===@uri
132
+ GnomeVFS::Directory.open(@uri).each{|i| items.push i}
133
+ items = [".",".."]+items if items[0].name != "."
134
+ items.each{|item|
135
+ if String===item || item.directory?
136
+ iter = @dirmodel.append(nil)
137
+ else
138
+ iter = @filemodel.append(nil)
139
+ end
140
+ item = item.name until String===item
141
+ iter[0] = item
142
+ }
143
+ @entry.text = @uri.to_s
144
+ else
145
+ @dirmodel.append(nil)[0] = "."
146
+ # @dirmodel.append(nil)[0] = ".." if @uri.dir("..")
147
+ @dirmodel.append(nil)[0] = ".."
148
+ @uri.list_dirs.each{|name| @dirmodel.append(nil)[0] = name}
149
+ @uri.list_data.each{|name| @filemodel.append(nil)[0] = name}
150
+ @entry.text = @uri.__drburi+@uri.path
151
+ end
152
+ end
153
+
154
+ def ok_button
155
+ @ok
156
+ end
157
+ def show
158
+ @window.show
159
+ end
160
+ def hide
161
+ @window.hide
162
+ end
163
+ def selection
164
+ [@entry.text]
165
+ end
166
+ end
167
+ end
168
+
169
+ if $0 == __FILE__
170
+
171
+
172
+ #If you use only Ruby/GTK2 widgets, call Gtk.init here.
173
+ #Gtk.init
174
+ #If you use Ruby/GNOME2 widgets, call Gnome::Program.new here.
175
+ if enable
176
+ Gnome::Program.new("Druby selection", "0.0")
177
+
178
+ fs = DFileSelection.new("test")
179
+ fs.show
180
+ fs.ok_button.signal_connect("clicked"){|w|
181
+ fs.hide
182
+ p fs.selection
183
+ }
184
+
185
+ Gtk.main
186
+ end
187
+
188
+ end