visualruby 3.0.12 → 3.0.13
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.
- checksums.yaml +4 -4
- data/.vr_settings.yaml +6 -6
- data/examples/alert_box/.vr_settings.yaml +5 -4
- data/examples/alert_box/main.rb +8 -0
- data/examples/listview/.vr_settings.yaml +5 -8
- data/examples/listview/bin/SongListView.rb +9 -9
- data/examples/listview/main.rb +1 -1
- data/examples/listview_objects/bin/ListViewObjects.rb +8 -8
- data/lib/Alert.rb +30 -21
- data/lib/GladeGUI.rb +17 -3
- data/lib/oinspect/MethodsListView.rb +11 -10
- data/lib/oinspect/ObjectInspectorGUI.rb +36 -20
- data/lib/oinspect/VariablesListView.rb +31 -30
- data/lib/oinspect/glade/ObjectInspectorGUI.glade +90 -12
- data/lib/treeview/FileTreeView.rb +23 -6
- data/lib/treeview/IterMethods.rb +66 -66
- data/lib/treeview/ListView.rb +5 -5
- data/lib/treeview/ViewCommon.rb +43 -23
- data/lib/treeview/columns/{TextCol.rb → BlobCol.rb} +6 -6
- data/lib/treeview/columns/CalendarCol.rb +23 -27
- data/lib/treeview/columns/CellRendererCombo.rb +1 -1
- data/lib/treeview/columns/CellRendererObject.rb +1 -1
- data/lib/treeview/columns/CellRendererProgress.rb +17 -17
- data/lib/treeview/columns/CellRendererSpin.rb +1 -1
- data/lib/treeview/columns/CellRendererText.rb +1 -1
- data/lib/treeview/columns/CellRendererToggle.rb +3 -3
- data/lib/treeview/columns/ComboCol.rb +1 -1
- data/lib/treeview/columns/CurrencyCol.rb +1 -1
- data/lib/treeview/columns/ImageCol.rb +1 -1
- data/lib/treeview/columns/ProgressCol.rb +4 -4
- data/lib/treeview/columns/SpinCol.rb +1 -1
- data/lib/treeview/columns/TreeViewColumn.rb +15 -20
- data/src/main/VR_File_Tree.rb +2 -3
- data/src/main/VR_Main.rb +12 -0
- data/src/main/glade/VR_Main.glade +14 -0
- metadata +3 -10
- data/lib/IconHash.rb +0 -18
- data/lib/SimpleComboBoxEntry.rb +0 -8
- data/lib/treeview/columns/CellRendererDate.rb +0 -45
- data/lib/treeview/columns/CellRendererPhone.rb +0 -45
- data/lib/treeview/columns/CellRendererPixbuf.rb +0 -16
- data/lib/treeview/columns/DateCol.rb +0 -20
- data/src/main/ProjectChooserView.rb +0 -40
@@ -1,4 +1,4 @@
|
|
1
|
-
module VR
|
1
|
+
module VR::Col
|
2
2
|
|
3
3
|
class TreeViewColumn < Gtk::TreeViewColumn # :nodoc:
|
4
4
|
|
@@ -11,44 +11,40 @@ module VR
|
|
11
11
|
cols.each_pair do |symb, type|
|
12
12
|
r = nil
|
13
13
|
a = [model_col, self, @view, symb]
|
14
|
-
if type == Gdk::Pixbuf
|
15
|
-
r =
|
16
|
-
# ren = Gtk::CellRendererPixbuf.new #(*a)
|
14
|
+
if type == Gdk::Pixbuf # ok to use gtk
|
15
|
+
r = Gtk::CellRendererPixbuf.new #(*a)
|
17
16
|
self.pack_start( r, false )
|
18
17
|
self.add_attribute( r, :pixbuf, model_col)
|
19
18
|
elsif type == TrueClass
|
20
|
-
r = VR::CellRendererToggle.new(*a)
|
19
|
+
r = VR::Col::Ren::CellRendererToggle.new(*a)
|
20
|
+
# r = Gtk::CellRendererToggle.new()
|
21
21
|
self.pack_start( r, false )
|
22
22
|
self.add_attribute( r, :active, model_col)
|
23
|
-
elsif type == VR::SpinCol #or type == Gtk::Adjustment
|
24
|
-
r = VR::CellRendererSpin.new(*a)
|
23
|
+
elsif type == VR::Col::SpinCol #or type == Gtk::Adjustment
|
24
|
+
r = VR::Col::Ren::CellRendererSpin.new(*a)
|
25
25
|
self.pack_start( r, false )
|
26
26
|
self.add_attribute( r, :adjustment, model_col)
|
27
27
|
self.set_cell_data_func(r) do |col, rend, model, iter|
|
28
28
|
fmt = "%.#{rend.digits}f"
|
29
29
|
rend.text = fmt % iter[rend.model_col].value.to_s
|
30
30
|
end
|
31
|
-
elsif type == VR::ComboCol
|
32
|
-
r = VR::CellRendererCombo.new(*a)
|
31
|
+
elsif type == VR::Col::ComboCol
|
32
|
+
r = VR::Col::Ren::CellRendererCombo.new(*a)
|
33
33
|
self.pack_start( r, false )
|
34
34
|
self.set_cell_data_func(r) do |col, rend, model, iter|
|
35
35
|
iter = model.get_iter(iter.path)
|
36
|
-
#puts "VR::ComboCol Renderer: " + ren.class.name + " model_col: " + ren.model_col.to_s
|
37
|
-
#puts "VR::ComboCol Iter: " + iter.class.name
|
38
|
-
#puts "VR::ComboCol Model: " + model.class.name
|
39
|
-
#puts "VR::ComboCol Cell: " + iter[ren.model_col].class.name
|
40
|
-
#puts "VR::ComboCol iter[ren.model_col]: " + iter[ren.model_col].selected.to_s
|
41
36
|
# display_val = iter[rend.model_col].selected.to_s
|
42
37
|
display_val = iter[@view.id(sym)].selected.to_s
|
43
38
|
#puts display_val
|
44
39
|
rend.text = display_val #= iter[ren.model_col].selected.to_s
|
45
40
|
end
|
46
|
-
elsif type == VR::ProgressCol
|
47
|
-
r = VR::CellRendererProgress.new(*a)
|
41
|
+
elsif type == VR::Col::ProgressCol
|
42
|
+
# r = VR::Col::Ren::CellRendererProgress.new(*a)
|
43
|
+
r = Gtk::CellRendererProgress.new()
|
48
44
|
self.pack_start( r, false )
|
49
45
|
self.add_attribute( r, :value, model_col)
|
50
46
|
elsif type == DateTime
|
51
|
-
r = VR::CellRendererDate.new(*a)
|
47
|
+
r = VR::Col::Ren::CellRendererDate.new(*a)
|
52
48
|
self.pack_start( r, false )
|
53
49
|
self.set_cell_data_func(r) do |col, ren, model, iter|
|
54
50
|
#iter = model.get_iter(iter.path)
|
@@ -56,11 +52,11 @@ module VR
|
|
56
52
|
ren.text = iter[ren.model_col].strftime(ren.date_format).to_s
|
57
53
|
end
|
58
54
|
elsif type == String or type == Float or type == Integer or type == Fixnum
|
59
|
-
r = VR::CellRendererText.new(*a)
|
55
|
+
r = VR::Col::Ren::CellRendererText.new(*a)
|
60
56
|
self.pack_start( r, false )
|
61
57
|
self.add_attribute( r, :text, model_col)
|
62
58
|
else #user defined object
|
63
|
-
r = VR::CellRendererObject.new(*a)
|
59
|
+
r = VR::Col::Ren::CellRendererObject.new(*a)
|
64
60
|
self.pack_start( r, false )
|
65
61
|
self.set_cell_data_func(r) do |col, ren, model, iter|
|
66
62
|
ren.render_object(iter)
|
@@ -68,7 +64,6 @@ module VR
|
|
68
64
|
end
|
69
65
|
model_col = model_col + 1
|
70
66
|
view.vr_renderer[sym] = r
|
71
|
-
view.vr_column[sym] = self
|
72
67
|
end
|
73
68
|
end
|
74
69
|
|
data/src/main/VR_File_Tree.rb
CHANGED
@@ -46,7 +46,7 @@ class VR_File_Tree < VR::FileTreeView
|
|
46
46
|
# txt = VR_Tools.sudo_command(command)
|
47
47
|
# end
|
48
48
|
@main.shell.buffer.text = txt
|
49
|
-
end
|
49
|
+
end
|
50
50
|
|
51
51
|
def menuRDoc_clicked
|
52
52
|
return unless @main.tabs.try_to_save_all(:ask => false)
|
@@ -56,10 +56,9 @@ class VR_File_Tree < VR::FileTreeView
|
|
56
56
|
@main.shell.buffer.text = $VR_ENV.rdoc_command_line + fn + "\n"
|
57
57
|
@main.shell.buffer.text += `#{$VR_ENV.rdoc_command_line} 2>&1`
|
58
58
|
VR_Tools.replace_html_in_docs()
|
59
|
-
FileUtils.copy("yard_hack/common.css", "#{fn}/doc/css/common.css") if File.exists?("yard_hack/common.css")
|
60
59
|
if File.exists?("yard_hack/index.html.replace")
|
61
60
|
FileUtils.copy("yard_hack/index.html.replace", "#{fn}/doc/index.html")
|
62
|
-
FileUtils.copy("yard_hack/
|
61
|
+
FileUtils.copy("yard_hack/common.css", "#{fn}/doc/css/common.css")
|
63
62
|
end
|
64
63
|
FileUtils.cd(old_dir)
|
65
64
|
VR_Tools.popen("#{$VR_ENV_GLOBAL.browser} #{fn}/doc/index.html")
|
data/src/main/VR_Main.rb
CHANGED
@@ -144,6 +144,18 @@ class VR_Main
|
|
144
144
|
when 2 then @remote_gem_tree.refresh()
|
145
145
|
end
|
146
146
|
end
|
147
|
+
|
148
|
+
def toolRDoc__clicked(*a)
|
149
|
+
@shell.buffer.text = $VR_ENV.rdoc_command_line + "\n"
|
150
|
+
clear_events
|
151
|
+
@shell.buffer.text += `#{$VR_ENV.rdoc_command_line} 2>&1`
|
152
|
+
VR_Tools.replace_html_in_docs()
|
153
|
+
if File.exists?("yard_hack/index.html.replace")
|
154
|
+
FileUtils.copy("yard_hack/index.html.replace", "doc/index.html")
|
155
|
+
FileUtils.copy("yard_hack/common.css", "doc/css/common.css")
|
156
|
+
end
|
157
|
+
# VR_Tools.popen("#{$VR_ENV_GLOBAL.browser} #{fn}/doc/index.html")
|
158
|
+
end
|
147
159
|
|
148
160
|
def toolSave__clicked(*a) # saves open tab
|
149
161
|
@tabs.docs[@tabs.page].try_to_save(false) # false = don't ask
|
@@ -328,6 +328,20 @@
|
|
328
328
|
<property name="homogeneous">True</property>
|
329
329
|
</packing>
|
330
330
|
</child>
|
331
|
+
<child>
|
332
|
+
<object class="GtkToolButton" id="toolRDoc">
|
333
|
+
<property name="visible">True</property>
|
334
|
+
<property name="can_focus">False</property>
|
335
|
+
<property name="tooltip_text" translatable="yes">Create RDocs for this project.</property>
|
336
|
+
<property name="label" translatable="yes">RDoc</property>
|
337
|
+
<property name="use_underline">True</property>
|
338
|
+
<property name="stock_id">gtk-copy</property>
|
339
|
+
</object>
|
340
|
+
<packing>
|
341
|
+
<property name="expand">False</property>
|
342
|
+
<property name="homogeneous">True</property>
|
343
|
+
</packing>
|
344
|
+
</child>
|
331
345
|
</object>
|
332
346
|
<packing>
|
333
347
|
<property name="expand">False</property>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: visualruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Cunningham
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir:
|
10
10
|
- "."
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-06-
|
12
|
+
date: 2016-06-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: gtk3
|
@@ -178,9 +178,7 @@ files:
|
|
178
178
|
- "./lib/Alert.rb"
|
179
179
|
- "./lib/DragDrop.rb"
|
180
180
|
- "./lib/GladeGUI.rb"
|
181
|
-
- "./lib/IconHash.rb"
|
182
181
|
- "./lib/SavableClass.rb"
|
183
|
-
- "./lib/SimpleComboBoxEntry.rb"
|
184
182
|
- "./lib/glade/Alert.glade"
|
185
183
|
- "./lib/oinspect/MethodsListView.rb"
|
186
184
|
- "./lib/oinspect/ObjectInspectorGUI.rb"
|
@@ -191,23 +189,19 @@ files:
|
|
191
189
|
- "./lib/treeview/ListView.rb"
|
192
190
|
- "./lib/treeview/TreeView.rb"
|
193
191
|
- "./lib/treeview/ViewCommon.rb"
|
192
|
+
- "./lib/treeview/columns/BlobCol.rb"
|
194
193
|
- "./lib/treeview/columns/CalendarCol.rb"
|
195
194
|
- "./lib/treeview/columns/CellRendererCombo.rb"
|
196
|
-
- "./lib/treeview/columns/CellRendererDate.rb"
|
197
195
|
- "./lib/treeview/columns/CellRendererObject.rb"
|
198
|
-
- "./lib/treeview/columns/CellRendererPhone.rb"
|
199
|
-
- "./lib/treeview/columns/CellRendererPixbuf.rb"
|
200
196
|
- "./lib/treeview/columns/CellRendererProgress.rb"
|
201
197
|
- "./lib/treeview/columns/CellRendererSpin.rb"
|
202
198
|
- "./lib/treeview/columns/CellRendererText.rb"
|
203
199
|
- "./lib/treeview/columns/CellRendererToggle.rb"
|
204
200
|
- "./lib/treeview/columns/ComboCol.rb"
|
205
201
|
- "./lib/treeview/columns/CurrencyCol.rb"
|
206
|
-
- "./lib/treeview/columns/DateCol.rb"
|
207
202
|
- "./lib/treeview/columns/ImageCol.rb"
|
208
203
|
- "./lib/treeview/columns/ProgressCol.rb"
|
209
204
|
- "./lib/treeview/columns/SpinCol.rb"
|
210
|
-
- "./lib/treeview/columns/TextCol.rb"
|
211
205
|
- "./lib/treeview/columns/TreeViewColumn.rb"
|
212
206
|
- "./lib/treeview/columns/glade/CalendarCol.glade"
|
213
207
|
- "./lib/treeview/columns/glade/ImageCol.glade"
|
@@ -227,7 +221,6 @@ files:
|
|
227
221
|
- "./src/main/GemTree.rb"
|
228
222
|
- "./src/main/NewProjectGUI.rb"
|
229
223
|
- "./src/main/OpenProject.rb"
|
230
|
-
- "./src/main/ProjectChooserView.rb"
|
231
224
|
- "./src/main/ProjectTree.rb"
|
232
225
|
- "./src/main/RubygemsAPI.rb"
|
233
226
|
- "./src/main/VR_ENV.rb"
|
data/lib/IconHash.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
module VR
|
2
|
-
|
3
|
-
class IconHash < Hash # :nodoc:
|
4
|
-
|
5
|
-
def initialize(path)
|
6
|
-
Dir.glob(path + "/*.png").each do |f|
|
7
|
-
ext = File.basename(f, ".png")
|
8
|
-
self[ext] = Gdk::Pixbuf.new(f)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def get_icon(file_name)
|
13
|
-
ext = File.extname(file_name).gsub(".", "")
|
14
|
-
self.has_key?(ext) ? self[ext] : self["unknown"]
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
data/lib/SimpleComboBoxEntry.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
module VR
|
2
|
-
|
3
|
-
# This class is a helper to VR::ListView and VR::TreeView. When
|
4
|
-
# colums are created, this class is used as the renderer because
|
5
|
-
# it adds functionality to the Gtk Renderer.
|
6
|
-
#
|
7
|
-
# When you call ListView#render(model_col) an instance of this class
|
8
|
-
# will be returned. It is a subclass of
|
9
|
-
#
|
10
|
-
# {Gtk::CellRendererText}[http://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk%3A%3ACellRendererText]
|
11
|
-
#
|
12
|
-
# So it has all the functionality of its parent, plus the methods listed here.
|
13
|
-
|
14
|
-
class CellRendererDate < Gtk::CellRendererText
|
15
|
-
|
16
|
-
attr_accessor :date_format, :edited_callback, :model_col, :column, :model_sym
|
17
|
-
|
18
|
-
def initialize(model_col, column, view, model_sym) # :nodoc:
|
19
|
-
super()
|
20
|
-
@model_col = model_col
|
21
|
-
@column = column
|
22
|
-
@view = view
|
23
|
-
@model_sym = model_sym
|
24
|
-
@view.model.set_sort_func(@model_col) { |m,x,y| x[@model_col] <=> y[@model_col] }
|
25
|
-
@date_format = "%m-%d-%Y"
|
26
|
-
@validate_block = Proc.new { |text, model_sym, row, view|
|
27
|
-
begin
|
28
|
-
Date.strptime(text, @date_format)
|
29
|
-
true
|
30
|
-
rescue
|
31
|
-
alert("Unrecognized date format: " + text)
|
32
|
-
false
|
33
|
-
end }
|
34
|
-
@edited_block = nil
|
35
|
-
self.signal_connect('edited') do |ren, path, text|
|
36
|
-
next unless iter = @view.model.get_iter(path)
|
37
|
-
if @validate_block.call(text, @model_sym, @view.vr_row(iter), @view)
|
38
|
-
iter[@model_col] = DateTime.strptime(text, @date_format)
|
39
|
-
@edited_callback.call(@model_sym, @view.vr_row(iter)) if @edited_callback
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module VR
|
2
|
-
|
3
|
-
# This class is a helper to VR::ListView and VR::TreeView. When
|
4
|
-
# colums are created, this class is used as the renderer because
|
5
|
-
# it adds functionality to the Gtk Renderer.
|
6
|
-
#
|
7
|
-
# When you call ListView#render(model_col) an instance of this class
|
8
|
-
# will be returned. It is a subclass of
|
9
|
-
#
|
10
|
-
# {Gtk::CellRendererText}[http://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk%3A%3ACellRendererText]
|
11
|
-
#
|
12
|
-
# So it has all the functionality of its parent, plus the methods listed here.
|
13
|
-
|
14
|
-
class CellRendererPhone < Gtk::CellRendererText
|
15
|
-
|
16
|
-
attr_accessor :phone_format, :edited_callback, :model_col, :column, :model_sym
|
17
|
-
|
18
|
-
def initialize(model_col, column, view, model_sym) # :nodoc:
|
19
|
-
super()
|
20
|
-
@model_col = model_col
|
21
|
-
@column = column
|
22
|
-
@view = view
|
23
|
-
@model_sym = model_sym
|
24
|
-
@view.model.set_sort_func(@model_col) { |m,x,y| x[@model_col] <=> y[@model_col] }
|
25
|
-
@phone_format = "%3-%3-%4"
|
26
|
-
@validate_block = Proc.new { |text, model_sym, row, view|
|
27
|
-
only_numbers = text.gsub(/[^0-9]/, "")
|
28
|
-
if (only_numbers.size == 10)
|
29
|
-
true
|
30
|
-
else
|
31
|
-
alert("Unrecognized phone number: " + text)
|
32
|
-
false
|
33
|
-
end }
|
34
|
-
@edited_block = nil
|
35
|
-
self.signal_connect('edited') do |ren, path, text|
|
36
|
-
next unless iter = @view.model.get_iter(path)
|
37
|
-
if @validate_block.call(text, @model_sym, @view.vr_row(iter), @view)
|
38
|
-
iter[@model_col] = DateTime.strptime(text, @date_format)
|
39
|
-
@edited_callback.call(@model_sym, @view.vr_row(iter)) if @edited_callback
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module VR
|
2
|
-
|
3
|
-
class CellRendererPixbuf < Gtk::CellRendererPixbuf # :nodoc:
|
4
|
-
|
5
|
-
attr_reader :model_col, :column, :model_sym
|
6
|
-
|
7
|
-
def initialize(model_col, column, view, model_sym)
|
8
|
-
super()
|
9
|
-
@column = column
|
10
|
-
@model_col = model_col
|
11
|
-
@model_sym = model_sym
|
12
|
-
@view = view
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
module VR
|
4
|
-
|
5
|
-
class DateCol
|
6
|
-
|
7
|
-
attr_accessor :date
|
8
|
-
|
9
|
-
def initialize(date, format = "%Y-%m-%d")
|
10
|
-
set_date(date, format)
|
11
|
-
end
|
12
|
-
|
13
|
-
def set_date(date, format = "%Y-%m-%d")
|
14
|
-
@date = date
|
15
|
-
# gsub!(self, @date.strftime(format))
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
|
2
|
-
class ProjectChooserView < VR::ListView
|
3
|
-
|
4
|
-
PIX = Gdk::Pixbuf.new(File.dirname(__FILE__) + "/../../img/folder.png")
|
5
|
-
|
6
|
-
def initialize()
|
7
|
-
super(:folder => {:pix => Gdk::Pixbuf, :file_name => String}, :modified => DateTime)
|
8
|
-
ren_xalign(:modified => 1)
|
9
|
-
col_xalign(:modified => 1)
|
10
|
-
col_sort_column_id(:modified => id(:modified), :pix => id(:file_name))
|
11
|
-
end
|
12
|
-
|
13
|
-
def refresh(show_backup = false)
|
14
|
-
# model.set_sort_column_id(1, :ascending)
|
15
|
-
self.model.clear
|
16
|
-
pattern = ""
|
17
|
-
backup_path = Dir.pwd.gsub(ENV["HOME"], File.join(ENV["HOME"], "visualruby_backup"))
|
18
|
-
backup_ar = File.split(backup_path)
|
19
|
-
backup_ar << ["**", VR_ENV::SETTINGS_FILE]
|
20
|
-
if show_backup
|
21
|
-
pattern = File.join(*backup_ar)
|
22
|
-
else
|
23
|
-
pattern = File.join(ENV["HOME"], "visualruby", "**", VR_ENV::SETTINGS_FILE)
|
24
|
-
end
|
25
|
-
Dir.glob(pattern, File::FNM_DOTMATCH).each do |fn|
|
26
|
-
next if not show_backup and fn =~ / Backup /
|
27
|
-
next if show_backup and not fn =~ / Backup /
|
28
|
-
t = File.stat(fn).mtime
|
29
|
-
row = add_row()
|
30
|
-
row[:pix] = PIX
|
31
|
-
row[:file_name] = File.dirname(fn)
|
32
|
-
row[:modified] = DateTime.parse(t.to_s)
|
33
|
-
end
|
34
|
-
|
35
|
-
# model.set_sort_column_id(id(:modified), :descending)
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
|