extract-curves 0.1.1-mswin32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. data/Changelog +21 -0
  2. data/bin/ec_rect2polar +22 -0
  3. data/bin/ec_rect2polar.rb +22 -0
  4. data/bin/ec_rev_lines +5 -0
  5. data/bin/ec_rev_lines.rb +5 -0
  6. data/bin/ec_sph_area +30 -0
  7. data/bin/ec_sph_area.rb +30 -0
  8. data/bin/extract_curves +1670 -0
  9. data/bin/extract_curves.rb +1670 -0
  10. data/ruby_ext/pav/extconf.rb +22 -0
  11. data/ruby_ext/pav/pav.dll +0 -0
  12. data/ruby_libs/pav/attr_cache.rb +211 -0
  13. data/ruby_libs/pav/attr_cache.t1.rb +32 -0
  14. data/ruby_libs/pav/cache.rb +31 -0
  15. data/ruby_libs/pav/collection/std.rb +58 -0
  16. data/ruby_libs/pav/dbg_log.rb +458 -0
  17. data/ruby_libs/pav/floatsio.rb +53 -0
  18. data/ruby_libs/pav/generator_cache.rb +165 -0
  19. data/ruby_libs/pav/graph/node.rb +602 -0
  20. data/ruby_libs/pav/graph/node_grp.rb +865 -0
  21. data/ruby_libs/pav/gtk.rb +6 -0
  22. data/ruby_libs/pav/gtk/button.rb +118 -0
  23. data/ruby_libs/pav/gtk/dialog.rb +29 -0
  24. data/ruby_libs/pav/gtk/guiobj.rb +772 -0
  25. data/ruby_libs/pav/gtk/icons.rb +124 -0
  26. data/ruby_libs/pav/gtk/rulers.rb +264 -0
  27. data/ruby_libs/pav/gtk/toolbar.rb +189 -0
  28. data/ruby_libs/pav/guiobj.rb +2 -0
  29. data/ruby_libs/pav/guiobj/info_asm.rb +41 -0
  30. data/ruby_libs/pav/guiobj/method.rb +211 -0
  31. data/ruby_libs/pav/guiobj/obj.rb +134 -0
  32. data/ruby_libs/pav/guiobj/signals.rb +9 -0
  33. data/ruby_libs/pav/heap.rb +54 -0
  34. data/ruby_libs/pav/icons/alt_handle.xpm +3832 -0
  35. data/ruby_libs/pav/icons/alt_handle_hover.xpm +3368 -0
  36. data/ruby_libs/pav/icons/alt_handle_pressed.xpm +3828 -0
  37. data/ruby_libs/pav/icons/blob.gif +0 -0
  38. data/ruby_libs/pav/icons/contour.gif +0 -0
  39. data/ruby_libs/pav/icons/contour_carpet.gif +0 -0
  40. data/ruby_libs/pav/icons/curve.gif +0 -0
  41. data/ruby_libs/pav/icons/curve_carpet.gif +0 -0
  42. data/ruby_libs/pav/icons/expand_closed.xpm +1791 -0
  43. data/ruby_libs/pav/icons/expand_closed_hover.xpm +1775 -0
  44. data/ruby_libs/pav/icons/expand_open.xpm +1788 -0
  45. data/ruby_libs/pav/icons/expand_open_hover.xpm +1752 -0
  46. data/ruby_libs/pav/icons/extract_curves/extract_curves-icon-rgb.ppm +14 -0
  47. data/ruby_libs/pav/icons/extract_curves/extract_curves-logo-rgb.gif +0 -0
  48. data/ruby_libs/pav/icons/extract_curves/trace_mark.xpm +38 -0
  49. data/ruby_libs/pav/icons/handle.xpm +213 -0
  50. data/ruby_libs/pav/icons/loop.gif +0 -0
  51. data/ruby_libs/pav/icons/loop_carpet.gif +0 -0
  52. data/ruby_libs/pav/icons/next.xpm +29 -0
  53. data/ruby_libs/pav/icons/next_hover.xpm +315 -0
  54. data/ruby_libs/pav/icons/next_pressed.xpm +144 -0
  55. data/ruby_libs/pav/icons/prev.xpm +29 -0
  56. data/ruby_libs/pav/icons/prev_hover.xpm +315 -0
  57. data/ruby_libs/pav/icons/prev_pressed.xpm +144 -0
  58. data/ruby_libs/pav/icons/shaved-core.gif +0 -0
  59. data/ruby_libs/pav/icons/vnext.xpm +29 -0
  60. data/ruby_libs/pav/icons/vprev.xpm +29 -0
  61. data/ruby_libs/pav/numeric/ext.rb +21 -0
  62. data/ruby_libs/pav/patterns/hsep.gif +0 -0
  63. data/ruby_libs/pav/patterns/tnode.gif +0 -0
  64. data/ruby_libs/pav/patterns/tnode_w_link.gif +0 -0
  65. data/ruby_libs/pav/patterns/vlink.gif +0 -0
  66. data/ruby_libs/pav/patterns/vsep.gif +0 -0
  67. data/ruby_libs/pav/patterns/yg_hrope.xpm +492 -0
  68. data/ruby_libs/pav/patterns/yg_hrope_thick.xpm +1904 -0
  69. data/ruby_libs/pav/patterns/yg_hrope_thin.xpm +130 -0
  70. data/ruby_libs/pav/patterns/yg_tnode.xpm +180 -0
  71. data/ruby_libs/pav/patterns/yg_tnode_thick.xpm +615 -0
  72. data/ruby_libs/pav/patterns/yg_tnode_thin.xpm +55 -0
  73. data/ruby_libs/pav/patterns/yg_tnode_w_link.xpm +190 -0
  74. data/ruby_libs/pav/patterns/yg_tnode_w_link_thick.xpm +676 -0
  75. data/ruby_libs/pav/patterns/yg_tnode_w_link_thin.xpm +62 -0
  76. data/ruby_libs/pav/patterns/yg_vrope.xpm +563 -0
  77. data/ruby_libs/pav/patterns/yg_vrope_thick.xpm +2047 -0
  78. data/ruby_libs/pav/patterns/yg_vrope_thin.xpm +166 -0
  79. data/ruby_libs/pav/pav_find.rb +90 -0
  80. data/ruby_libs/pav/pix.rb +402 -0
  81. data/ruby_libs/pav/pix/aapix.rb +378 -0
  82. data/ruby_libs/pav/pix/blob.rb +678 -0
  83. data/ruby_libs/pav/pix/circle.rb +73 -0
  84. data/ruby_libs/pav/pix/contour.rb +676 -0
  85. data/ruby_libs/pav/pix/contour/calc_situations.rb +9 -0
  86. data/ruby_libs/pav/pix/contour/carp_calc.rb +212 -0
  87. data/ruby_libs/pav/pix/contour/situations.dmp +0 -0
  88. data/ruby_libs/pav/pix/contour/situations.rb +21 -0
  89. data/ruby_libs/pav/pix/curve.rb +1544 -0
  90. data/ruby_libs/pav/pix/img_obj.rb +865 -0
  91. data/ruby_libs/pav/pix/node.rb +159 -0
  92. data/ruby_libs/pav/pix/shaved_core.rb +697 -0
  93. data/ruby_libs/pav/pix/subpix.rb +212 -0
  94. data/ruby_libs/pav/rand_accessible.rb +16 -0
  95. data/ruby_libs/pav/rangeset.rb +63 -0
  96. data/ruby_libs/pav/search.rb +210 -0
  97. data/ruby_libs/pav/set.rb +130 -0
  98. data/ruby_libs/pav/string/bits.rb +523 -0
  99. data/ruby_libs/pav/string/ext.rb +58 -0
  100. data/ruby_libs/pav/string/observable.rb +155 -0
  101. data/ruby_libs/pav/string/text.rb +79 -0
  102. data/ruby_libs/pav/string/words.rb +42 -0
  103. data/ruby_libs/pav/sub_arr.rb +56 -0
  104. data/ruby_libs/pav/traced_obj.rb +79 -0
  105. data/web/index.html +280 -0
  106. data/web/media/icons/alt_handle.xpm +3832 -0
  107. data/web/media/icons/alt_handle_hover.xpm +3368 -0
  108. data/web/media/icons/alt_handle_pressed.xpm +3828 -0
  109. data/web/media/icons/blob.gif +0 -0
  110. data/web/media/icons/contour.gif +0 -0
  111. data/web/media/icons/contour_carpet.gif +0 -0
  112. data/web/media/icons/curve.gif +0 -0
  113. data/web/media/icons/curve_carpet.gif +0 -0
  114. data/web/media/icons/expand_closed.xpm +1791 -0
  115. data/web/media/icons/expand_closed_hover.xpm +1775 -0
  116. data/web/media/icons/expand_open.xpm +1788 -0
  117. data/web/media/icons/expand_open_hover.xpm +1752 -0
  118. data/web/media/icons/extract_curves/extract_curves-icon-rgb.ppm +14 -0
  119. data/web/media/icons/extract_curves/extract_curves-logo-rgb.gif +0 -0
  120. data/web/media/icons/extract_curves/trace_mark.xpm +38 -0
  121. data/web/media/icons/handle.xpm +213 -0
  122. data/web/media/icons/loop.gif +0 -0
  123. data/web/media/icons/loop_carpet.gif +0 -0
  124. data/web/media/icons/next.xpm +29 -0
  125. data/web/media/icons/next_hover.xpm +315 -0
  126. data/web/media/icons/next_pressed.xpm +144 -0
  127. data/web/media/icons/prev.xpm +29 -0
  128. data/web/media/icons/prev_hover.xpm +315 -0
  129. data/web/media/icons/prev_pressed.xpm +144 -0
  130. data/web/media/icons/shaved-core.gif +0 -0
  131. data/web/media/icons/vnext.xpm +29 -0
  132. data/web/media/icons/vprev.xpm +29 -0
  133. data/web/media/title.jpeg +0 -0
  134. data/web/stylesheets/default.css +20 -0
  135. metadata +192 -0
@@ -0,0 +1,124 @@
1
+ require 'gtk2'
2
+ require 'pav/pav_find'
3
+ require 'pav/string/ext'
4
+
5
+ module PGtk
6
+
7
+ pgtk_symbs = [[:"pgtk-handle", 'Handle', 'alt_handle.xpm'],
8
+ [:"pgtk-handle-hover", 'Handle', 'alt_handle_hover.xpm'],
9
+ [:"pgtk-handle-pressed", 'Handle', 'alt_handle_pressed.xpm'],
10
+ [:"pgtk-previous", 'Previous', 'prev.xpm'],
11
+ [:"pgtk-previous-hover", 'Previous', 'prev_hover.xpm'],
12
+ [:"pgtk-previous-pressed", 'Previous', 'prev_pressed.xpm'],
13
+ [:"pgtk-next", 'Next', 'next.xpm'],
14
+ [:"pgtk-next-hover", 'Next', 'next_hover.xpm'],
15
+ [:"pgtk-next-pressed", 'Next', 'next_pressed.xpm'],
16
+ [:"pgtk-vertical-previous", 'Vertical previous', 'vprev.xpm'],
17
+ [:"pgtk-vertical-next", 'Vertical next', 'vnext.xpm'],
18
+ [:"pgtk-blob", 'Blob', 'blob.gif'],
19
+ [:"pgtk-contour", 'Contour', 'contour.gif'],
20
+ [:"pgtk-contour-carpet", 'Contour carpet', 'contour_carpet.gif'],
21
+ [:"pgtk-curve", 'Curve', 'curve.gif'],
22
+ [:"pgtk-curve-carpet", 'Curve carpet', 'curve_carpet.gif'],
23
+ [:"pgtk-loop", 'Loop', 'loop.gif'],
24
+ [:"pgtk-loop-carpet", 'Loop carpet', 'loop_carpet.gif'],
25
+ [:"pgtk-shaved-core", 'Shaved core', 'shaved_core.gif'],
26
+ [:"pgtk-collapse", 'Collapse', 'expand_open.xpm'],
27
+ [:"pgtk-collapse-hover", 'Collapse', 'expand_open_hover.xpm'],
28
+ [:"pgtk-expand", 'Expand', 'expand_closed.xpm'],
29
+ [:"pgtk-expand-hover", 'Expand', 'expand_closed_hover.xpm']]
30
+ pgtk_symbs.each { |s| Gtk::Stock.add(s[0], s[1]) }
31
+ ifactory = Gtk::IconFactory.new
32
+ ifactory.add_default
33
+ pb_handle = pb_vhandle = nil
34
+ found_cnt = 0
35
+ PavFind.pfind($:) { |path|
36
+ pgtk_symbs.each { |s|
37
+ if path.ends_with("pav/icons/" + s[2]) && !s[3]
38
+ s[3] = Gdk::Pixbuf.new(path)
39
+ break if (found_cnt += 1) >= pgtk_symbs.length
40
+ end
41
+ }
42
+ break if found_cnt >= pgtk_symbs.length
43
+ }
44
+ pgtk_symbs.each { |s| ifactory.add(s[0].to_s, Gtk::IconSet.new(s[3])) }
45
+
46
+ @icon_cache = {}
47
+
48
+ def self.find_icon_file(fpath)
49
+ PavFind.pfind($:) { |path|
50
+ return path if path.ends_with(fpath)
51
+ }
52
+ end
53
+
54
+ def self.image_from_file(fpath)
55
+ Gtk::Image.new(self.find_icon_file(fpath))
56
+ end
57
+
58
+ def self.stock_pixbuf_of_size(stock_id, w, h)
59
+ if (tmp = @icon_cache[[stock_id, w, h]])
60
+ return tmp if tmp.kind_of?(Gdk::Pixbuf)
61
+ end
62
+ icon_set = Gtk::IconFactory.lookup_default(stock_id.to_s) ||
63
+ Gtk::IcontFactory.lookup_default("gtk-missing-image")
64
+ max_size = nil
65
+ max_sz = [0,0]
66
+ found_size = nil
67
+ icon_set.sizes.each { |size|
68
+ if (sz=Gtk::IconSize.lookup(size)) == [w, h]
69
+ found_size = size
70
+ end
71
+ if sz[0]*sz[1] > max_sz[0]*max_sz[1]
72
+ max_size = size
73
+ max_sz = Gtk::IconSize.lookup(max_size)
74
+ end
75
+ }
76
+ if found_size
77
+ wd = Gtk::Window.new
78
+ pb=wd.render_icon(stock_id, found_size,
79
+ stock_id.to_s + ":#{w}x#{h}")
80
+ wd.destroy
81
+ @icon_cache[[stock_id, w, h]] = pb
82
+ else
83
+ wd = Gtk::Window.new
84
+ pb=wd.render_icon(stock_id,max_size,stock_id.to_s+":#{w}x#{h}").
85
+ scale(w, h, Gdk::Pixbuf::INTERP_BILINEAR)
86
+ wd.destroy
87
+ (@icon_cache[[stock_id, w, h]] = pb)
88
+ end
89
+ end
90
+
91
+ def self.stock_image_of_size(stock_id, w, h)
92
+ Gtk::Image.new(self.stock_pixbuf_of_size(stock_id, w, h))
93
+ end
94
+
95
+ def self.stock_icon_btn_of_size(window, stock_id, w, h)
96
+ res = Gtk::Button.new << self.stock_image_of_size(stock_id, w-10, h-10)
97
+ res.set_size_request(w, h)
98
+ res
99
+ end
100
+
101
+ def self.stock_icon_tool_btn_of_size(window, stock_id, w, h)
102
+ res = Gtk::ToolButton.new("")
103
+ res.icon_widget = self.stock_image_of_size(stock_id, w-10, h-10)
104
+ res.set_size_request(w, h)
105
+ res
106
+ end
107
+
108
+ def self.image_new(spec, deflt_size=Gtk::IconSize::BUTTON, deflt_padding_x=3,
109
+ deflt_padding_y=3)
110
+ if spec.kind_of?(Gtk::Image)
111
+ return spec
112
+ elsif spec.kind_of?(Gdk::Pixbuf)
113
+ img = Gtk::Image.new(icon)
114
+ img.set_padding(deflt_padding_x, deflt_padding_y)
115
+ return img
116
+ elsif spec.kind_of?(String) || spec.kind_of?(Symbol)
117
+ img = Gtk::Image.new(spec, deflt_size)
118
+ img.set_padding(deflt_padding_x, deflt_padding_y)
119
+ return img
120
+ end
121
+ nil
122
+ end
123
+
124
+ end
@@ -0,0 +1,264 @@
1
+ require 'pav/gtk/icons'
2
+
3
+ module PGtk
4
+
5
+ module MHSep
6
+ @@hpat_pixbuf = Gdk::Pixbuf.new(PGtk.find_icon_file(
7
+ 'patterns/yg_hrope_thin.xpm'))
8
+
9
+ def hsep_pixbuf=(pixbuf)
10
+ @hsep_pixbuf = pixbuf
11
+ @hsep_pb_width = @hsep_pixbuf.width
12
+ @hsep_pb_height = @hsep_pixbuf.height
13
+ self.set_size_request(-1, @hsep_pb_height)
14
+ end
15
+
16
+ def hsep_init(pixbuf=@@hpat_pixbuf)
17
+ self.hsep_pixbuf = pixbuf
18
+ @hsep_expose_cb = proc { |wgt, event|
19
+ x = event.area.x
20
+ ((x / @hsep_pb_width) * @hsep_pb_width).
21
+ step(x+event.area.width, @hsep_pb_width) { |x0|
22
+ wgt.window.draw_pixbuf(wgt.style.black_gc,
23
+ @hsep_pixbuf, 0, 0, x0, 0,
24
+ @hsep_pb_width, @hsep_pb_height,
25
+ Gdk::RGB::Dither::NORMAL, 0, 0)
26
+ }
27
+ }
28
+ end
29
+ end
30
+
31
+ class HSep < Gtk::DrawingArea
32
+ include MHSep
33
+
34
+ def initialize
35
+ super()
36
+ self.hsep_init
37
+ self.signal_connect('expose_event', &@hsep_expose_cb)
38
+ end
39
+
40
+ def pixbuf=(pixbuf)
41
+ self.hsep_pixbuf = pixbuf
42
+ self.queue_draw
43
+ end
44
+ end
45
+
46
+ module MVSep
47
+ @@vpat_pixbuf = Gdk::Pixbuf.new(PGtk.find_icon_file(
48
+ 'patterns/yg_vrope_thin.xpm'))
49
+
50
+ def vsep_pixbuf=(pixbuf)
51
+ @vsep_pixbuf = pixbuf
52
+ @vsep_pb_width = @vsep_pixbuf.width
53
+ @vsep_pb_height = @vsep_pixbuf.height
54
+ self.set_size_request(@vsep_pb_width, -1)
55
+ end
56
+
57
+ def vsep_init(pixbuf=@@vpat_pixbuf)
58
+ self.vsep_pixbuf = pixbuf
59
+ @vsep_expose_cb = proc { |wgt, event|
60
+ y = event.area.y
61
+ ((y / @vsep_pb_height) * @vsep_pb_height).
62
+ step(y+event.area.height, @vsep_pb_height) { |y0|
63
+ wgt.window.draw_pixbuf(wgt.style.black_gc,
64
+ @vsep_pixbuf, 0, 0, 0, y0,
65
+ @vsep_pb_width, @vsep_pb_height,
66
+ Gdk::RGB::Dither::NORMAL, 0, 0)
67
+ }
68
+ }
69
+ end
70
+ end
71
+
72
+ class VSep < Gtk::DrawingArea
73
+ include MVSep
74
+
75
+ def initialize
76
+ super()
77
+ self.vsep_init
78
+ self.signal_connect('expose_event', &@vsep_expose_cb)
79
+ end
80
+
81
+ def pixbuf=(pixbuf)
82
+ self.vsep_pixbuf = pixbuf
83
+ self.queue_draw
84
+ end
85
+ end
86
+
87
+ class Sep < Gtk::DrawingArea
88
+ attr_reader :orientation
89
+ include MHSep
90
+ include MVSep
91
+
92
+ def initialize(orient=Gtk::Orientation::HORIZONTAL)
93
+ @orientation = orient
94
+ super()
95
+ self.hsep_init
96
+ self.vsep_init
97
+ if orient == Gtk::Orientation::HORIZONTAL
98
+ @expose_cb_id = self.signal_connect('expose_event',
99
+ &@hsep_expose_cb)
100
+ else
101
+ @expose_cb_id = self.signal_connect('expose_event',
102
+ &@vsep_expose_cb)
103
+ end
104
+ end
105
+
106
+ def orientation=(orient)
107
+ if orient == Gtk::Orientation::HORIZONTAL
108
+ return if @orientation == Gtk::Orientation::HORIZONTAL
109
+ self.signal_handler_disconnect(@expose_cb_id)
110
+ @expose_cb_id = self.signal_connect('expose_event',
111
+ &@hsep_expose_cb)
112
+ @orientation = Gtk::Orientation::HORIZONTAL
113
+ else
114
+ return if @orientation == Gtk::Orientation::VERTICAL
115
+ self.signal_handler_disconnect(@expose_cb_id)
116
+ @expose_cb_id = self.signal_connect('expose_event',
117
+ &@vsep_expose_cb)
118
+ @orientation = Gtk::Orientation::VERTICAL
119
+ end
120
+ self.queue_draw
121
+ end
122
+
123
+ def pixbuf=(pixbuf)
124
+ if @orientation == Gtk::Orientation::HORIZONTAL
125
+ self.hsep_pixbuf = pixbuf
126
+ else
127
+ self.vsep_pixbuf = pixbuf
128
+ end
129
+ self.queue_draw
130
+ end
131
+ end
132
+
133
+ module MTreeLink
134
+ @@tlink_pixbuf = Gdk::Pixbuf.new(PGtk.find_icon_file(
135
+ 'patterns/yg_vrope.xpm'))
136
+
137
+ def tlink_pixbuf=(pixbuf)
138
+ @tlink_pixbuf = pixbuf
139
+ @tlink_pb_width = @tlink_pixbuf.width
140
+ @tlink_pb_height = @tlink_pixbuf.height
141
+ self.set_size_request(@tlink_pb_width, -1)
142
+ end
143
+
144
+ def tlink_init(pixbuf=@@tlink_pixbuf)
145
+ self.tlink_pixbuf = pixbuf
146
+ @tlink_expose_cb = proc { |wgt, event|
147
+ y = event.area.y
148
+ ((y / @tlink_pb_height) * @tlink_pb_height).
149
+ step(y+event.area.height, @tlink_pb_height) { |y0|
150
+ wgt.window.draw_pixbuf(wgt.style.black_gc,
151
+ @tlink_pixbuf, 0, 0, 0, y0,
152
+ @tlink_pb_width, @tlink_pb_height,
153
+ Gdk::RGB::Dither::NORMAL, 0, 0)
154
+ }
155
+ }
156
+ end
157
+ end
158
+
159
+ module MTreeEndNode
160
+ @@tend_node_pixbuf = Gdk::Pixbuf.new(
161
+ PGtk.find_icon_file('patterns/yg_tnode.xpm'))
162
+ end
163
+
164
+ module MTreeLinkNode
165
+ @@tlink_node_pixbuf = Gdk::Pixbuf.new(
166
+ PGtk.find_icon_file('patterns/yg_tnode_w_link.xpm'))
167
+ end
168
+
169
+ class TreeLink < Gtk::DrawingArea
170
+ include MTreeLink
171
+
172
+ def initialize
173
+ super()
174
+ self.tlink_init
175
+ @expose_cb_id =
176
+ self.signal_connect('expose_event', &@tlink_expose_cb)
177
+ @enabled = true
178
+ end
179
+
180
+ def disable
181
+ return unless @enabled
182
+ self.signal_handler_disconnect(@expose_cb_id)
183
+ @enabled = false
184
+ self.queue_draw
185
+ end
186
+
187
+ def enable
188
+ return if @enabled
189
+ @expose_cb_id =
190
+ self.signal_connect('expose_event', &@tlink_expose_cb)
191
+ @enabled = true
192
+ self.queue_draw
193
+ end
194
+
195
+ def pixbuf=(pixbuf)
196
+ self.tlink_pixbuf = pixbuf
197
+ self.signal_handler_disconnect(@expose_cb_id)
198
+ @expose_cb_id =
199
+ self.signal_connect('expose_event', &@tlink_expose_cb)
200
+ self.queue_draw
201
+ end
202
+ end
203
+
204
+ class TreeNodePadding < Gtk::VBox
205
+ include MTreeEndNode
206
+ include MTreeLinkNode
207
+
208
+ attr_reader :end_node, :expand_btn, :title_box, :end_node_pixbuf,
209
+ :link_node_pixbuf
210
+
211
+ def initialize(end_node=false)
212
+ super(false, 0)
213
+ self.pack_start(@title_box=Gtk::HBox.new(false,0),false,false,0)
214
+ @end_node_pixbuf = @@tend_node_pixbuf
215
+ @link_node_pixbuf = @@tlink_node_pixbuf
216
+ @title_box.pack_start(@node_img=Gtk::Image.new(
217
+ end_node ? @end_node_pixbuf : @link_node_pixbuf),
218
+ false, false, 0)
219
+ self.pack_start(@link_wgt=TreeLink.new, true, true, 0)
220
+ @link_wgt.hide
221
+ if end_node
222
+ @link_wgt.disable
223
+ end
224
+ self.end_node = end_node
225
+ end
226
+
227
+ def end_node=(end_node)
228
+ if end_node
229
+ return if @end_node
230
+ @node_img.set_pixbuf(@end_node_pixbuf)
231
+ @link_wgt.disable
232
+ @end_node = true
233
+ else
234
+ return unless @end_node
235
+ @node_img.set_pixbuf(@link_node_pixbuf)
236
+ @link_wgt.enable
237
+ @end_node = false
238
+ end
239
+ end
240
+
241
+ def end_node?
242
+ @end_node
243
+ end
244
+
245
+ def add_title_widget(wgt)
246
+ @title_box.pack_start(wgt, false, 0)
247
+ end
248
+
249
+ def end_node_pixbuf=(pixbuf)
250
+ @end_node_pixbuf = pixbuf
251
+ if @end_node
252
+ @node_img.set_pixbuf(@end_node_pixbuf)
253
+ end
254
+ end
255
+
256
+ def link_node_pixbuf=(pixbuf)
257
+ @link_node_pixbuf = pixbuf
258
+ unless @end_node
259
+ @node_img.set_pixbuf(@link_node_pixbuf)
260
+ end
261
+ end
262
+ end
263
+
264
+ end
@@ -0,0 +1,189 @@
1
+ require 'gtk2'
2
+ require 'find'
3
+ require 'pav/gtk/button'
4
+
5
+ module PGtk
6
+
7
+ class Toolbar < Gtk::Table
8
+ attr_reader :toolbar, :ctrl_bar, :spaces_at, :iconized
9
+
10
+ def initialize
11
+ @toolbar = Gtk::Toolbar.new
12
+ @ctrl_bar = Gtk::Toolbar.new
13
+ btn_sz = Gtk::IconSize.lookup(Gtk::IconSize::MENU)
14
+ btn_sz[0] = (btn_sz[0])/2.3; btn_sz[1] = (btn_sz[1])/2.3
15
+ #@handle_btn = Toolbar.stock_icon_tool_btn_of_size(@toolbar,
16
+ # :"pgtk-handle", btn_sz[0], btn_sz[1])
17
+ @handle_btn = Button.new(:"pgtk-handle", btn_sz[0], btn_sz[1],
18
+ :"pgtk-handle-hover", :"pgtk-handle-pressed") { |wgt,ev|
19
+ self.iconized ^= true }
20
+ @l_fwd_btn = Button.new(:"pgtk-next", btn_sz[0], btn_sz[1],
21
+ :"pgtk-next-hover", :"pgtk-next-pressed") { |wgt, ev|
22
+ self.scroll_fwd; false }
23
+ @l_bck_btn = Button.new(:"pgtk-previous", btn_sz[0], btn_sz[1],
24
+ :"pgtk-previous-hover", :"pgtk-previous-pressed") {
25
+ |wgt, ev| self.scroll_back; false }
26
+ @ctrl_bar.append(Gtk::HBox.new << @handle_btn)
27
+ @ctrl_bar.append(Gtk::HBox.new << @l_bck_btn)
28
+ @ctrl_bar.append(Gtk::HBox.new << @l_fwd_btn)
29
+ @ctrl_bar.orientation = 1
30
+ @hadj = Gtk::Adjustment.new(0,0,1.0,1,10,0)
31
+ @vadj = Gtk::Adjustment.new(0,0,1.0,1,10,0)
32
+ @viewport = Gtk::Viewport.new(@hadj, @vadj)
33
+ @viewport.add(@toolbar)
34
+ @viewport.shadow_type = Gtk::SHADOW_NONE
35
+ super(2, 2)
36
+ self.attach(@ctrl_bar, 0,1, 0,1, 0, 0, 0,0)
37
+ self.attach(@viewport, 1,2, 0,1, Gtk::FILL|Gtk::EXPAND, 0, 0,0)
38
+ @spaces_at = []
39
+ end
40
+
41
+ def iconized?
42
+ @iconized
43
+ end
44
+
45
+ def iconized=(val)
46
+ if val
47
+ return if @iconized
48
+ @iconized = true
49
+ self.remove(@viewport)
50
+ @l_fwd_btn.hide
51
+ @l_bck_btn.hide
52
+ else
53
+ return unless @iconized
54
+ @iconized = false
55
+ @l_fwd_btn.show
56
+ @l_bck_btn.show
57
+ if @toolbar.orientation == Gtk::ORIENTATION_HORIZONTAL
58
+ self.attach(@viewport, 1,2, 0,1,
59
+ Gtk::FILL|Gtk::EXPAND,0, 0,0)
60
+ else
61
+ self.attach(@viewport, 0,1, 1,2,0,
62
+ Gtk::FILL|Gtk::EXPAND,0, 0)
63
+ end
64
+ end
65
+ end
66
+
67
+ def dir_size_request=(val)
68
+ if @toolbar.orientation==Gtk::ORIENTATION_HORIZONTAL
69
+ @viewport.width_request = val-@ctrl_bar.allocation.width
70
+ else
71
+ @viewport.height_request=val-@ctrl_bar.allocation.height
72
+ end
73
+ end
74
+
75
+ def method_missing(id, *args, &block)
76
+ @toolbar.send(id, *args, &block)
77
+ end
78
+
79
+ def append_space(*args, &block)
80
+ @spaces_at << @toolbar.children.length + @spaces_at.length
81
+ @toolbar.append_space(*args, &block)
82
+ end
83
+
84
+ def insert_space(i)
85
+ @spaces_at << i
86
+ @spaces_at.sort!
87
+ @toolbar.insert_space(i)
88
+ end
89
+
90
+ def set_orientation(o)
91
+ @toolbar.set_orientation(o)
92
+ if o == Gtk::ORIENTATION_HORIZONTAL
93
+ @ctrl_bar.set_orientation(Gtk::ORIENTATION_VERTICAL)
94
+ h = @ctrl_bar.allocation.height
95
+ self.get_tool_sizes.each { |s| h = s if s > h }
96
+ self.remove(@viewport)
97
+ self.attach(@viewport, 1,2, 0,1,
98
+ Gtk::FILL|Gtk::EXPAND,0, 0,0)
99
+ self.height_request = h
100
+ else
101
+ @ctrl_bar.set_orientation(Gtk::ORIENTATION_HORIZONTAL)
102
+ w = @ctrl_bar.allocation.width
103
+ self.get_tool_sizes.each { |s| w = s if s > w }
104
+ self.remove(@viewport)
105
+ self.attach(@viewport, 0,1, 1,2, 0,
106
+ Gtk::FILL|Gtk::EXPAND, 0,0)
107
+ self.width_request = w
108
+ end
109
+ end
110
+
111
+ alias_method :orientation=, :set_orientation
112
+
113
+ def get_tool_sizes
114
+ if @toolbar.orientation == Gtk::ORIENTATION_HORIZONTAL
115
+ @toolbar.children.collect { |c| c.allocation.width }
116
+ else
117
+ @toolbar.children.collect { |c| c.allocation.height }
118
+ end
119
+ end
120
+
121
+ def get_scroll_adj
122
+ @toolbar.orientation == Gtk::ORIENTATION_HORIZONTAL ? @hadj :
123
+ @vadj
124
+ end
125
+
126
+ def get_win_size
127
+ if @toolbar.orientation == Gtk::ORIENTATION_HORIZONTAL
128
+ @viewport.allocation.width
129
+ else
130
+ @viewport.allocation.height
131
+ end
132
+ end
133
+
134
+ def get_toolbar_size
135
+ @toolbar.orientation == Gtk::ORIENTATION_HORIZONTAL ?
136
+ @toolbar.allocation.width : @toolbar.allocation.height
137
+ #size = 14*@spaces_at.length
138
+ #self.get_tool_sizes.each { |s| size += s }
139
+ #size
140
+ end
141
+
142
+ def scroll_fwd(*args)
143
+ adj = self.get_scroll_adj
144
+ sizes = self.get_tool_sizes
145
+ size = self.get_toolbar_size
146
+ win_size = self.get_win_size
147
+ start_x = adj.value
148
+ end_x = start_x + win_size
149
+ dspc_i = spc_i = size_i = 0
150
+ new_end_x = 0
151
+ while new_end_x <= end_x && size_i < sizes.length
152
+ while spc_i < @spaces_at.length &&
153
+ @spaces_at[spc_i] - dspc_i <= size_i
154
+ new_end_x += 14
155
+ spc_i += 1; dspc_i += 1
156
+ end
157
+ new_end_x += sizes[size_i]
158
+ size_i += 1
159
+ end
160
+ new_end_x = size if new_end_x > size
161
+ start_x = new_end_x - win_size
162
+ adj.value = start_x >= 0 ? start_x : 0
163
+ end
164
+
165
+ def scroll_back(*args)
166
+ adj = self.get_scroll_adj
167
+ sizes = self.get_tool_sizes
168
+ size = self.get_toolbar_size
169
+ win_size = self.get_win_size
170
+ start_x = adj.value
171
+ end_x = start_x + win_size
172
+ dspc_i = spc_i = size_i = 0
173
+ o_new_start_x = new_start_x = 0
174
+ while size_i < sizes.length
175
+ while spc_i < @spaces_at.length &&
176
+ @spaces_at[spc_i] - dspc_i <= size_i
177
+ new_start_x += 14
178
+ spc_i += 1; dspc_i += 1
179
+ end
180
+ break if new_start_x + sizes[size_i] >= start_x
181
+ o_new_start_x = new_start_x
182
+ new_start_x += sizes[size_i]
183
+ size_i += 1
184
+ end
185
+ adj.value = o_new_start_x
186
+ end
187
+ end
188
+
189
+ end