vr-corelib 0.0.36
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 +7 -0
- data/Demo.rb +41 -0
- data/doc/images/add.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/glade/Demo.glade +52 -0
- data/img/image-x-generic.png +0 -0
- data/lib/Dialog.rb +157 -0
- data/lib/GladeGUI.rb +358 -0
- data/lib/IconHash.rb +22 -0
- data/lib/SimpleComboBoxEntry.rb +14 -0
- data/lib/Thread.rb +59 -0
- data/lib/Widget.rb +37 -0
- data/lib/treeview/FileTreeView.rb +91 -0
- data/lib/treeview/IterMethods.rb +82 -0
- data/lib/treeview/ListView.rb +90 -0
- data/lib/treeview/ModelRow.rb +31 -0
- data/lib/treeview/TreeIter.rb +33 -0
- data/lib/treeview/TreeView.rb +43 -0
- data/lib/treeview/ViewCommon.rb +351 -0
- data/lib/treeview/columns/CalendarCol.rb +88 -0
- data/lib/treeview/columns/CellRendererCombo.rb +66 -0
- data/lib/treeview/columns/CellRendererDate.rb +45 -0
- data/lib/treeview/columns/CellRendererObject.rb +57 -0
- data/lib/treeview/columns/CellRendererPhone.rb +45 -0
- data/lib/treeview/columns/CellRendererPixbuf.rb +16 -0
- data/lib/treeview/columns/CellRendererProgress.rb +17 -0
- data/lib/treeview/columns/CellRendererSpin.rb +37 -0
- data/lib/treeview/columns/CellRendererText.rb +38 -0
- data/lib/treeview/columns/CellRendererToggle.rb +47 -0
- data/lib/treeview/columns/ComboCol.rb +43 -0
- data/lib/treeview/columns/CurrencyCol.rb +23 -0
- data/lib/treeview/columns/DateCol.rb +20 -0
- data/lib/treeview/columns/ImageCol.rb +30 -0
- data/lib/treeview/columns/ProgressCol.rb +27 -0
- data/lib/treeview/columns/SpinCol.rb +11 -0
- data/lib/treeview/columns/TextCol.rb +64 -0
- data/lib/treeview/columns/TreeViewColumn.rb +108 -0
- data/lib/treeview/columns/glade/CalendarCol.glade +133 -0
- data/lib/treeview/columns/glade/ImageCol.glade +16 -0
- data/lib/treeview/columns/glade/TextCol.glade +77 -0
- data/main.rb +3 -0
- data/vr-corelib.rb +7 -0
- data/vrlib.rb +7 -0
- metadata +138 -0
@@ -0,0 +1,66 @@
|
|
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::CellRendererCombo}[http://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk%3A%3ACellRendererCombo]
|
11
|
+
#
|
12
|
+
# So it has all the functionality of its parent, plus the methods listed here.
|
13
|
+
#
|
14
|
+
|
15
|
+
|
16
|
+
class CellRendererCombo < Gtk::CellRendererCombo
|
17
|
+
|
18
|
+
attr_accessor :edited_callback, :validate_block
|
19
|
+
attr_reader :model_col, :column, :model_sym
|
20
|
+
|
21
|
+
def initialize(model_col, column, view, model_sym) # :nodoc:
|
22
|
+
super()
|
23
|
+
@model_col = model_col
|
24
|
+
@column = column
|
25
|
+
@view = view
|
26
|
+
@model_sym = model_sym
|
27
|
+
@view.model.set_sort_func(@model_col) { |x,y| x[@model_col].selected <=> y[@model_col].selected }
|
28
|
+
@validate_block = Proc.new { |text, model_sym, row, view | true }
|
29
|
+
self.editable = true
|
30
|
+
self.has_entry = false
|
31
|
+
@edited_callback = nil
|
32
|
+
self.signal_connect('edited') do |ren, path, text| # iter for
|
33
|
+
iter = @view.model.get_iter(path)
|
34
|
+
if @validate_block.call(text, @model_sym, @view.vr_row(iter), @view)
|
35
|
+
iter[@model_col].selected = text
|
36
|
+
@edited_callback.call(@model_sym, @view.vr_row(iter)) if @edited_callback
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# This sets the renderer's "editable" property to true, and makes it save
|
42
|
+
# the edited value to the model. When a user edits a row in the ListView
|
43
|
+
# the value isn't automatically saved by Gtk. This method groups both actions
|
44
|
+
# together, so setting edit_save=true, allows both editing and saving of
|
45
|
+
# the field.
|
46
|
+
#
|
47
|
+
# Also, you can use VR::ListView and VR::TreeView's convenience methods to
|
48
|
+
# envoke call this method:
|
49
|
+
#
|
50
|
+
# NAME = 0
|
51
|
+
# ADDR = 1
|
52
|
+
# @view.set_attr([NAME, ADDR], :edit_save => true) #sets model_col = 0, 1
|
53
|
+
# @view.set_edit_save( 0 => true, 1 => false)
|
54
|
+
#
|
55
|
+
# is_editable = boolean
|
56
|
+
#
|
57
|
+
|
58
|
+
def set_model(vr_combo) # :nodoc:
|
59
|
+
self.model = Gtk::ListStore.new(String)
|
60
|
+
vr_combo.selections.each { |s| r = self.model.append ; r[0] = s }
|
61
|
+
self.text_column = 0
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,45 @@
|
|
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) { |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
|
+
VR.msg("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
|
@@ -0,0 +1,57 @@
|
|
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 CellRendererObject < Gtk::CellRendererText
|
15
|
+
|
16
|
+
attr_accessor :model_col, :column, :edited_callback, :visual_attributes_method, :model_sym
|
17
|
+
|
18
|
+
def initialize(model_col, column, view, model_sym) # :nodoc:
|
19
|
+
super()
|
20
|
+
@model_col = model_col
|
21
|
+
@model_sym = model_sym
|
22
|
+
@view = view
|
23
|
+
@column = column
|
24
|
+
@edit = true
|
25
|
+
@edited_callback = nil
|
26
|
+
@visual_attributes_method = "visual_attributes"
|
27
|
+
@view.model.set_sort_func(@model_col) { |x,y| x[@model_col] <=> y[@model_col] }
|
28
|
+
@show_block = Proc.new { |obj| obj.show() if obj.respond_to? "show" }
|
29
|
+
@view.signal_connect("row_activated") do | view, path, col |
|
30
|
+
next if !@edit or !col.eql? @column
|
31
|
+
iter = @view.model.get_iter(path)
|
32
|
+
obj = iter[@model_col]
|
33
|
+
@show_block.call(obj)
|
34
|
+
block = @edited_callback ? @edited_callback.call(@model_sym, @view.vr_row(iter)) : true
|
35
|
+
@view.signal_emit_stop("row_activated") if block
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
alias :set_editable :editable=
|
40
|
+
def editable=(e)
|
41
|
+
@edit = e
|
42
|
+
end
|
43
|
+
|
44
|
+
def render_object(iter)
|
45
|
+
obj = iter[@model_col]
|
46
|
+
self.text = obj.respond_to?(:to_s) ? obj.to_s : "Define to_s!"
|
47
|
+
if obj.respond_to? @visual_attributes_method
|
48
|
+
return unless attrib = obj.send(@visual_attributes_method)
|
49
|
+
attrib.each_pair do | key, val |
|
50
|
+
self.send( key.to_s + "=", val)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,45 @@
|
|
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) { |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
|
+
VR.msg("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
|
@@ -0,0 +1,16 @@
|
|
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
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module VR
|
2
|
+
|
3
|
+
class CellRendererProgress < Gtk::CellRendererProgress # :nodoc:
|
4
|
+
|
5
|
+
attr_reader :model_col, :column, :model_sym
|
6
|
+
|
7
|
+
def initialize(model_col, column, view, model_sym)
|
8
|
+
super()
|
9
|
+
@model_col = model_col
|
10
|
+
@model_sym = model_sym
|
11
|
+
@column = column
|
12
|
+
@view = view
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,37 @@
|
|
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(column_id) an instance of this class
|
8
|
+
# will be returned. It is a subclass of
|
9
|
+
#
|
10
|
+
# GtkCellRendererSpin
|
11
|
+
#
|
12
|
+
# So it has all the functionality of its parent, plus the methods listed here.
|
13
|
+
|
14
|
+
class CellRendererSpin < Gtk::CellRendererSpin
|
15
|
+
|
16
|
+
attr_reader :model_col, :column, :model_sym
|
17
|
+
attr_accessor :edited_callback
|
18
|
+
|
19
|
+
def initialize(model_col, column, view, model_sym) # :nodoc:
|
20
|
+
super()
|
21
|
+
@model_col = model_col
|
22
|
+
@model_sym = model_sym
|
23
|
+
@column = column
|
24
|
+
@view = view
|
25
|
+
self.editable = true
|
26
|
+
@view.model.set_sort_func(@model_col) { |x,y| x[model_col].value <=> y[model_col].value }
|
27
|
+
@edited_callback = nil
|
28
|
+
self.signal_connect('edited') do |ren, path, text|
|
29
|
+
next unless iter = @view.model.get_iter(path)
|
30
|
+
iter[@model_col].value = text.to_f if (iter)
|
31
|
+
@edited_callback.call(@model_sym, @view.vr_row(iter)) if @edited_callback
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,38 @@
|
|
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 CellRendererText < Gtk::CellRendererText
|
15
|
+
|
16
|
+
attr_accessor :validate_block, :edited_callback
|
17
|
+
attr_reader :model_col, :column, :model_sym
|
18
|
+
|
19
|
+
def initialize(model_col, column, view, model_sym) # :nodoc:
|
20
|
+
super()
|
21
|
+
@column = column
|
22
|
+
@model_sym = model_sym
|
23
|
+
@model_col = model_col
|
24
|
+
@view = view
|
25
|
+
@validate_block = Proc.new { |text, model_sym, row, view| true }
|
26
|
+
@edited_callback = nil
|
27
|
+
self.signal_connect('edited') do |ren, path, text|
|
28
|
+
next unless iter = @view.model.get_iter(path)
|
29
|
+
if @validate_block.call(text, @model_sym, @view.vr_row(iter), @view)
|
30
|
+
iter[@model_col] = (iter[@model_col].is_a? String) ? text : text.to_f
|
31
|
+
@edited_callback.call(@model_sym, @view.vr_row(iter)) if @edited_callback
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module VR
|
2
|
+
|
3
|
+
#
|
4
|
+
# This renderer has a slightly different validate_block than the others. Its validate_block will be called with three
|
5
|
+
# parameters:
|
6
|
+
#
|
7
|
+
# @view.renderer(:name).validate_block = Proc.new { | model_sym, row, view |
|
8
|
+
# (row[:name].length < 3)
|
9
|
+
# }
|
10
|
+
#
|
11
|
+
# Also, you can use the VR::CellRendererToggle#edited= method to allow editing.
|
12
|
+
#
|
13
|
+
|
14
|
+
class CellRendererToggle < Gtk::CellRendererToggle
|
15
|
+
|
16
|
+
attr_accessor :validate_block, :edited_callback
|
17
|
+
attr_reader :model_col, :column, :model_sym
|
18
|
+
|
19
|
+
def initialize(model_col, column, view, model_sym)
|
20
|
+
super()
|
21
|
+
@model_col = model_col
|
22
|
+
@model_sym = model_sym
|
23
|
+
@column = column
|
24
|
+
@view = view
|
25
|
+
@edited_callback = nil
|
26
|
+
@validate_block = Proc.new { |model_sym, row, view | true }
|
27
|
+
self.signal_connect('toggled') do |ren, path|
|
28
|
+
@view.model.each { |mod, path, iter| iter[@model_col] = false } if self.radio?
|
29
|
+
next unless iter = @view.model.get_iter(path)
|
30
|
+
if @validate_block.call(@model_sym, @view.vr_row(iter), @view)
|
31
|
+
iter[model_col] = !iter[model_col]
|
32
|
+
@edited_callback.call(@model_col, iter) if @edited_callback
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def editable=(is_editable)
|
38
|
+
self.sensitive = is_editable
|
39
|
+
end
|
40
|
+
|
41
|
+
def set_editable(is_editable)
|
42
|
+
self.sensitive = is_editable
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module VR
|
4
|
+
|
5
|
+
# The Combo class is for use with VR::ListView and VR::TreeView. It
|
6
|
+
# simply holds the values for a combobox to be displayed in the view.
|
7
|
+
# It is not a visual component, it just holds data.
|
8
|
+
#
|
9
|
+
# It is one of the data types that you can pass to the constructors for VR::ListView and
|
10
|
+
# VR::TreeView. For example, to make the second column render as a combobox:
|
11
|
+
#
|
12
|
+
# @view = VR::Treeview.new(Gdk::Pixbuf, VR::Combo, String)
|
13
|
+
#
|
14
|
+
# Then when you add data to the model:
|
15
|
+
#
|
16
|
+
# @view.add_row(@pixbuf, VR::Combo.new("Mr", "Mr", "Mrs", "Ms"), "Hello World")
|
17
|
+
#
|
18
|
+
# This would set the combobox for this row so that "Mr" is selected, and "Mr", "Mrs", and "Ms" are the choices.
|
19
|
+
|
20
|
+
|
21
|
+
class ComboCol # can't subclass String tried twice!!!
|
22
|
+
|
23
|
+
attr_accessor :selected, :selections
|
24
|
+
|
25
|
+
# This defines a combobox for a row in VR::ListView or VR::TreeView. You pass three or more strings
|
26
|
+
# to the constructor, and the first string is the selected value that appears in the row in the
|
27
|
+
# view.
|
28
|
+
#
|
29
|
+
# - current_selection (type String)
|
30
|
+
# - selections (comma separated list of Strings)
|
31
|
+
#
|
32
|
+
def initialize(current_selection, *selections)
|
33
|
+
@selected = current_selection
|
34
|
+
@selections = selections
|
35
|
+
end
|
36
|
+
|
37
|
+
def valid?(str)
|
38
|
+
@selections.include?(str)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
module VR
|
3
|
+
|
4
|
+
class CurrencyCol
|
5
|
+
|
6
|
+
attr_accessor :value, :format
|
7
|
+
|
8
|
+
def initialize(value, format = "$%.2f")
|
9
|
+
set_value(value, format)
|
10
|
+
end
|
11
|
+
|
12
|
+
def set_value(value, format = "$%.2f")
|
13
|
+
@value = value
|
14
|
+
@format = format
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
format % @value.to_f
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|