vr-corelib 0.0.36

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/Demo.rb +41 -0
  3. data/doc/images/add.png +0 -0
  4. data/doc/images/brick.png +0 -0
  5. data/doc/images/brick_link.png +0 -0
  6. data/doc/images/bug.png +0 -0
  7. data/doc/images/bullet_black.png +0 -0
  8. data/doc/images/bullet_toggle_minus.png +0 -0
  9. data/doc/images/bullet_toggle_plus.png +0 -0
  10. data/doc/images/date.png +0 -0
  11. data/doc/images/delete.png +0 -0
  12. data/doc/images/find.png +0 -0
  13. data/doc/images/macFFBgHack.png +0 -0
  14. data/doc/images/package.png +0 -0
  15. data/doc/images/page_green.png +0 -0
  16. data/doc/images/page_white_text.png +0 -0
  17. data/doc/images/page_white_width.png +0 -0
  18. data/doc/images/plugin.png +0 -0
  19. data/doc/images/ruby.png +0 -0
  20. data/doc/images/tag_blue.png +0 -0
  21. data/doc/images/tag_green.png +0 -0
  22. data/doc/images/transparent.png +0 -0
  23. data/doc/images/wrench.png +0 -0
  24. data/doc/images/wrench_orange.png +0 -0
  25. data/doc/images/zoom.png +0 -0
  26. data/glade/Demo.glade +52 -0
  27. data/img/image-x-generic.png +0 -0
  28. data/lib/Dialog.rb +157 -0
  29. data/lib/GladeGUI.rb +358 -0
  30. data/lib/IconHash.rb +22 -0
  31. data/lib/SimpleComboBoxEntry.rb +14 -0
  32. data/lib/Thread.rb +59 -0
  33. data/lib/Widget.rb +37 -0
  34. data/lib/treeview/FileTreeView.rb +91 -0
  35. data/lib/treeview/IterMethods.rb +82 -0
  36. data/lib/treeview/ListView.rb +90 -0
  37. data/lib/treeview/ModelRow.rb +31 -0
  38. data/lib/treeview/TreeIter.rb +33 -0
  39. data/lib/treeview/TreeView.rb +43 -0
  40. data/lib/treeview/ViewCommon.rb +351 -0
  41. data/lib/treeview/columns/CalendarCol.rb +88 -0
  42. data/lib/treeview/columns/CellRendererCombo.rb +66 -0
  43. data/lib/treeview/columns/CellRendererDate.rb +45 -0
  44. data/lib/treeview/columns/CellRendererObject.rb +57 -0
  45. data/lib/treeview/columns/CellRendererPhone.rb +45 -0
  46. data/lib/treeview/columns/CellRendererPixbuf.rb +16 -0
  47. data/lib/treeview/columns/CellRendererProgress.rb +17 -0
  48. data/lib/treeview/columns/CellRendererSpin.rb +37 -0
  49. data/lib/treeview/columns/CellRendererText.rb +38 -0
  50. data/lib/treeview/columns/CellRendererToggle.rb +47 -0
  51. data/lib/treeview/columns/ComboCol.rb +43 -0
  52. data/lib/treeview/columns/CurrencyCol.rb +23 -0
  53. data/lib/treeview/columns/DateCol.rb +20 -0
  54. data/lib/treeview/columns/ImageCol.rb +30 -0
  55. data/lib/treeview/columns/ProgressCol.rb +27 -0
  56. data/lib/treeview/columns/SpinCol.rb +11 -0
  57. data/lib/treeview/columns/TextCol.rb +64 -0
  58. data/lib/treeview/columns/TreeViewColumn.rb +108 -0
  59. data/lib/treeview/columns/glade/CalendarCol.glade +133 -0
  60. data/lib/treeview/columns/glade/ImageCol.glade +16 -0
  61. data/lib/treeview/columns/glade/TextCol.glade +77 -0
  62. data/main.rb +3 -0
  63. data/vr-corelib.rb +7 -0
  64. data/vrlib.rb +7 -0
  65. metadata +138 -0
@@ -0,0 +1,20 @@
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
@@ -0,0 +1,30 @@
1
+
2
+ module VR
3
+
4
+ class ImageCol #< Gdk::Pixbuf
5
+
6
+ include GladeGUI
7
+
8
+ def initialize(image)
9
+ # super(File.dirname(__FILE__) + "/../../../img/image-x-generic.png")
10
+ @image1 = image
11
+ end
12
+
13
+ def show()
14
+ load_glade(__FILE__)
15
+ set_glade_variables()
16
+ @builder["window1"].resize 500, 360
17
+ show_window()
18
+ end
19
+
20
+ def to_s
21
+ "<Img>"
22
+ end
23
+
24
+ # def visual_attributes
25
+ # { :pixbuf => self }
26
+ # end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,27 @@
1
+
2
+ # ==The VR Module hold all the classes of the vrlib gem. The most useful APIs are:
3
+ #
4
+ # ===GladeGUI -- loads glade form
5
+ # ===VR::ListView -- makes Gtk::TreeView easy!
6
+ # ===VR::Dialog -- Dialog boxes: Message Box, Ok Box, Folder selector etc.
7
+
8
+ module VR
9
+
10
+ # This class is simply a wrapper for an Integer. It signals VR::Listview's
11
+ # and VR::Treeviews constructor to make this column a progressbar using
12
+ # VR::CellRendererProgress. For example, whwn you create a VR::ListView,
13
+ # you can pass VR::Progress as a column type:
14
+ #
15
+ # @view = VR::ListView.new(String, VR::Progress, Gdk::Pixbif)
16
+ #
17
+ # This makes model_col #1 a progress bar. When you set the value of the column,
18
+ # provide an integer value from 0 to 100:
19
+ #
20
+ # @view.add_row("Hello World", 65, @pixbuf)
21
+ #
22
+ #
23
+
24
+ class ProgressCol < Integer
25
+ end
26
+
27
+ end
@@ -0,0 +1,11 @@
1
+ module VR
2
+
3
+ class SpinCol < Gtk::Adjustment
4
+
5
+ def initialize(val, min, max, step)
6
+ super(val, min, max, step, 0, 0)
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,64 @@
1
+
2
+ module VR
3
+
4
+ # The TextCol class is a simple text editor for editing strings of data:
5
+ #
6
+ # http://visualruby.net/img/textcol.jpg
7
+ #
8
+ # It is a very useful class when you want to display and edit long strings
9
+ # of data in a VR::ListView. To create a coulmn of long strings in a VR::ListView,
10
+ # simply define the column type as VR::TextCol:
11
+ #
12
+ # @view = VR::ListView.new(:name => String, :quote => VR::TextCol)
13
+ # row = @view.add_row
14
+ # row[:name] = "Eric"
15
+ # row[:quote] = VR::TextCol.new("I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth. - Umberto Eco) ")
16
+ #
17
+ # The above listview will only display the first 20 characters of the quote, so
18
+ # it won't destroy the appearance of the listview. When a user clicks on the
19
+ # quote column, a window like the one above will appear.
20
+ #
21
+ # See the example project, "listview_objects" for more.
22
+
23
+ class TextCol
24
+
25
+ include GladeGUI
26
+
27
+ attr_accessor :text, :length_to_display
28
+ #
29
+ # - text - String value of the field
30
+ # - length_to_display - Integer number of characters to display in the listview. Default: 20
31
+ #
32
+ def initialize(text, length_to_display = 20)
33
+ @length_to_display = length_to_display
34
+ @text = text
35
+ end
36
+
37
+ def show()
38
+ load_glade(__FILE__)
39
+ set_glade_variables()
40
+ @builder["window1"].resize 650, 360
41
+ show_window()
42
+ end
43
+
44
+ # The to_s method outputs the string that is shown in the VR::ListView. By default
45
+ # it will display the first 20 characters of the string. If you
46
+ # want to change the number of characters it displays, change the
47
+ # value of the length_to_display variable.
48
+
49
+ def to_s
50
+ (@text.size > @length_to_display ? @text[0, @length_to_display - 4] + "..." : @text).gsub("\n"," ")
51
+ end
52
+
53
+ def buttonSave__clicked(*args) # :nodoc:
54
+ get_glade_variables()
55
+ destroy_window()
56
+ end
57
+
58
+ def <=>(text_col)
59
+ self.text <=> text_col.text
60
+ end
61
+
62
+ end
63
+
64
+ end
@@ -0,0 +1,108 @@
1
+ module VR
2
+
3
+ class TreeViewColumn < Gtk::TreeViewColumn
4
+
5
+ def initialize(view, model_col, sym, type)
6
+ super()
7
+ self.title = sym.to_s.gsub("_", " ").split(' ').map {|w| w.capitalize }.join(' ') # My Title
8
+ @view = view
9
+ self.resizable = true
10
+ cols = (type.is_a? Hash) ? type : {sym => type}
11
+ cols.each_pair do |symb, type|
12
+ a = [model_col, self, @view, symb]
13
+ if type == Gdk::Pixbuf
14
+ ren = VR::CellRendererPixbuf.new(*a)
15
+ self.pack_start( ren, false )
16
+ self.add_attribute( ren, :pixbuf, model_col)
17
+ elsif type == TrueClass
18
+ ren = VR::CellRendererToggle.new(*a)
19
+ self.pack_start( ren, false )
20
+ self.add_attribute( ren, :active, model_col)
21
+ elsif type == VR::SpinCol
22
+ ren = VR::CellRendererSpin.new(*a)
23
+ self.pack_start( ren, false )
24
+ self.add_attribute( ren, :adjustment, model_col)
25
+ self.set_cell_data_func(ren) do |col, renderer, model, iter|
26
+ fmt = "%.#{renderer.digits}f"
27
+ renderer.text = fmt % iter[renderer.model_col].value
28
+ end
29
+ elsif type == VR::ComboCol
30
+ r = VR::CellRendererCombo.new(*a)
31
+ self.pack_start( r, false )
32
+ self.set_cell_data_func(r) do |col, ren, model, iter|
33
+ ren.text = iter[ren.model_col].selected.to_s
34
+ end
35
+ elsif type == VR::ProgressCol
36
+ r = VR::CellRendererProgress.new(*a)
37
+ self.pack_start( r, false )
38
+ self.add_attribute( r, :value, model_col)
39
+ elsif type == DateTime
40
+ r = VR::CellRendererDate.new(*a)
41
+ self.pack_start( r, false )
42
+ self.set_cell_data_func(r) do |col, ren, model, iter|
43
+ ren.text = iter[ren.model_col].strftime(ren.date_format)
44
+ end
45
+ elsif type == String or type == Float or type == Integer or type == Fixnum
46
+ r = VR::CellRendererText.new(*a)
47
+ self.pack_start( r, false )
48
+ self.add_attribute( r, :text, model_col)
49
+ else #user defined object
50
+ r = VR::CellRendererObject.new(*a)
51
+ self.pack_start( r, false )
52
+ self.set_cell_data_func(r) do |col, ren, model, iter|
53
+ ren.render_object(iter)
54
+ end
55
+ end
56
+ model_col = model_col + 1
57
+ end
58
+ end
59
+
60
+ def width=(w) #pixels
61
+ self.sizing = Gtk::TreeViewColumn::FIXED
62
+ self.fixed_width = w
63
+ end
64
+
65
+ def sortable=(is_sortable)
66
+ self.sort_column_id = cell_renderers[0].model_col
67
+ self.clickable = is_sortable
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+ #class VR::TreeViewColumn < Gtk::TreeViewColumn
74
+
75
+ # TYPES = {
76
+ # Gdk::Pixbuf => VR::CellRendererPixbuf,
77
+ # TrueClass => VR::CellRendererToggle,
78
+ # Gtk::Adjustment => VR::CellRendererSpin,
79
+ # VR::Combo => VR::CellRendererCombo,
80
+ # VR::Progress => VR::CellRendererProgress
81
+ # }
82
+ #
83
+ # ATTR = {
84
+ # VR::CellRendererPixbuf => "pixbuf",
85
+ # VR::CellRendererToggle => "active",
86
+ # VR::CellRendererSpin => "adjustment",
87
+ # VR::CellRendererText => "text",
88
+ # VR::CellRendererProgress => "value"
89
+ # }
90
+
91
+
92
+ # def initialize(view, model_col, *args)
93
+ # super()
94
+ # self.resizable = true
95
+ # args = args.flatten
96
+ # args.each do |type|
97
+ # t = TYPES.key?(type) ? TYPES[type] : VR::CellRendererText
98
+ # ren = t.new(model_col, view)
99
+ # self.pack_start( ren, false )
100
+ # self.add_attribute( ren, ATTR[t], model_col) if ATTR.key?(t)
101
+ # model_col = model_col + 1
102
+ # if t.is_a VR::Cell
103
+ # end
104
+ # end
105
+ #end
106
+
107
+
108
+ #end
@@ -0,0 +1,133 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <interface>
3
+ <requires lib="gtk+" version="2.16"/>
4
+ <!-- interface-naming-policy project-wide -->
5
+ <object class="GtkAdjustment" id="hour">
6
+ <property name="lower">1</property>
7
+ <property name="upper">12</property>
8
+ <property name="step_increment">1</property>
9
+ </object>
10
+ <object class="GtkAdjustment" id="minute">
11
+ <property name="upper">59</property>
12
+ <property name="step_increment">1</property>
13
+ </object>
14
+ <object class="GtkWindow" id="window1">
15
+ <property name="modal">True</property>
16
+ <property name="window_position">center-always</property>
17
+ <property name="decorated">False</property>
18
+ <signal name="destroy" handler="destroy_window"/>
19
+ <child>
20
+ <object class="GtkVBox" id="vbox2">
21
+ <property name="visible">True</property>
22
+ <child>
23
+ <object class="GtkCalendar" id="date">
24
+ <property name="visible">True</property>
25
+ <property name="can_focus">True</property>
26
+ <property name="year">2012</property>
27
+ <property name="month">2</property>
28
+ <property name="day">11</property>
29
+ </object>
30
+ <packing>
31
+ <property name="position">0</property>
32
+ </packing>
33
+ </child>
34
+ <child>
35
+ <object class="GtkHBox" id="hboxTime">
36
+ <property name="visible">True</property>
37
+ <child>
38
+ <object class="GtkSpinButton" id="spinbutton1">
39
+ <property name="visible">True</property>
40
+ <property name="can_focus">True</property>
41
+ <property name="invisible_char">•</property>
42
+ <property name="adjustment">hour</property>
43
+ <property name="climb_rate">1</property>
44
+ <property name="numeric">True</property>
45
+ </object>
46
+ <packing>
47
+ <property name="position">0</property>
48
+ </packing>
49
+ </child>
50
+ <child>
51
+ <object class="GtkSpinButton" id="spinbutton2">
52
+ <property name="visible">True</property>
53
+ <property name="can_focus">True</property>
54
+ <property name="invisible_char">•</property>
55
+ <property name="adjustment">minute</property>
56
+ <property name="numeric">True</property>
57
+ </object>
58
+ <packing>
59
+ <property name="padding">5</property>
60
+ <property name="position">1</property>
61
+ </packing>
62
+ </child>
63
+ <child>
64
+ <object class="GtkCheckButton" id="am">
65
+ <property name="label" translatable="yes">am</property>
66
+ <property name="visible">True</property>
67
+ <property name="can_focus">True</property>
68
+ <property name="receives_default">False</property>
69
+ <property name="draw_indicator">True</property>
70
+ </object>
71
+ <packing>
72
+ <property name="position">2</property>
73
+ </packing>
74
+ </child>
75
+ <child>
76
+ <object class="GtkCheckButton" id="pm">
77
+ <property name="label" translatable="yes">pm</property>
78
+ <property name="visible">True</property>
79
+ <property name="can_focus">True</property>
80
+ <property name="receives_default">False</property>
81
+ <property name="draw_indicator">True</property>
82
+ </object>
83
+ <packing>
84
+ <property name="position">3</property>
85
+ </packing>
86
+ </child>
87
+ </object>
88
+ <packing>
89
+ <property name="padding">5</property>
90
+ <property name="position">1</property>
91
+ </packing>
92
+ </child>
93
+ <child>
94
+ <object class="GtkHButtonBox" id="hbuttonbox1">
95
+ <property name="visible">True</property>
96
+ <property name="spacing">8</property>
97
+ <property name="layout_style">center</property>
98
+ <child>
99
+ <object class="GtkButton" id="buttonSave">
100
+ <property name="label" translatable="yes">Save</property>
101
+ <property name="visible">True</property>
102
+ <property name="can_focus">True</property>
103
+ <property name="receives_default">True</property>
104
+ </object>
105
+ <packing>
106
+ <property name="expand">False</property>
107
+ <property name="fill">False</property>
108
+ <property name="position">0</property>
109
+ </packing>
110
+ </child>
111
+ <child>
112
+ <object class="GtkButton" id="buttonCancel">
113
+ <property name="label" translatable="yes">Cancel</property>
114
+ <property name="visible">True</property>
115
+ <property name="can_focus">True</property>
116
+ <property name="receives_default">True</property>
117
+ </object>
118
+ <packing>
119
+ <property name="expand">False</property>
120
+ <property name="fill">False</property>
121
+ <property name="position">1</property>
122
+ </packing>
123
+ </child>
124
+ </object>
125
+ <packing>
126
+ <property name="padding">5</property>
127
+ <property name="position">2</property>
128
+ </packing>
129
+ </child>
130
+ </object>
131
+ </child>
132
+ </object>
133
+ </interface>
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <interface>
3
+ <requires lib="gtk+" version="2.16"/>
4
+ <!-- interface-naming-policy project-wide -->
5
+ <object class="GtkWindow" id="window1">
6
+ <property name="visible">True</property>
7
+ <property name="modal">True</property>
8
+ <signal name="destroy" handler="destroy_window"/>
9
+ <child>
10
+ <object class="GtkImage" id="image1">
11
+ <property name="visible">True</property>
12
+ <property name="stock">gtk-missing-image</property>
13
+ </object>
14
+ </child>
15
+ </object>
16
+ </interface>
@@ -0,0 +1,77 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <interface>
3
+ <requires lib="gtk+" version="2.16"/>
4
+ <!-- interface-naming-policy project-wide -->
5
+ <object class="GtkWindow" id="window1">
6
+ <property name="title" translatable="yes">Edit Text</property>
7
+ <property name="modal">True</property>
8
+ <property name="window_position">center-always</property>
9
+ <property name="type_hint">menu</property>
10
+ <signal name="destroy" handler="destroy_window"/>
11
+ <child>
12
+ <object class="GtkHBox" id="hbox1">
13
+ <property name="visible">True</property>
14
+ <child>
15
+ <object class="GtkVBox" id="vbox1">
16
+ <property name="visible">True</property>
17
+ <child>
18
+ <object class="GtkTextView" id="text">
19
+ <property name="visible">True</property>
20
+ <property name="can_focus">True</property>
21
+ <property name="wrap_mode">word</property>
22
+ </object>
23
+ <packing>
24
+ <property name="padding">6</property>
25
+ <property name="position">0</property>
26
+ </packing>
27
+ </child>
28
+ <child>
29
+ <object class="GtkHButtonBox" id="hbuttonbox1">
30
+ <property name="visible">True</property>
31
+ <property name="spacing">7</property>
32
+ <property name="layout_style">end</property>
33
+ <child>
34
+ <object class="GtkButton" id="buttonSave">
35
+ <property name="label" translatable="yes">Save</property>
36
+ <property name="visible">True</property>
37
+ <property name="can_focus">True</property>
38
+ <property name="receives_default">True</property>
39
+ </object>
40
+ <packing>
41
+ <property name="expand">False</property>
42
+ <property name="fill">False</property>
43
+ <property name="position">0</property>
44
+ </packing>
45
+ </child>
46
+ <child>
47
+ <object class="GtkButton" id="buttonCancel">
48
+ <property name="label" translatable="yes">Cancel</property>
49
+ <property name="visible">True</property>
50
+ <property name="can_focus">True</property>
51
+ <property name="receives_default">True</property>
52
+ <signal name="clicked" handler="destroy_window"/>
53
+ </object>
54
+ <packing>
55
+ <property name="expand">False</property>
56
+ <property name="fill">False</property>
57
+ <property name="position">1</property>
58
+ </packing>
59
+ </child>
60
+ </object>
61
+ <packing>
62
+ <property name="expand">False</property>
63
+ <property name="fill">False</property>
64
+ <property name="padding">5</property>
65
+ <property name="position">1</property>
66
+ </packing>
67
+ </child>
68
+ </object>
69
+ <packing>
70
+ <property name="padding">7</property>
71
+ <property name="position">0</property>
72
+ </packing>
73
+ </child>
74
+ </object>
75
+ </child>
76
+ </object>
77
+ </interface>