1 #
2 # tk/scrollable.rb : module for scrollable widget
3 #
4 require 'tk'
5
6 module Tk
7 module XScrollable
8 def xscrollcommand(cmd=Proc.new)
9 configure_cmd 'xscrollcommand', cmd
10 # Tk.update # avoid scrollbar trouble
11 self
12 end
13
14 def xview(*index)
15 if index.size == 0
16 list(tk_send_without_enc('xview'))
17 else
18 tk_send_without_enc('xview', *index)
19 self
20 end
21 end
22 def xview_moveto(*index)
23 xview('moveto', *index)
24 end
25 def xview_scroll(*index)
26 xview('scroll', *index)
27 end
28
29 def xscrollbar(bar=nil)
30 if bar
31 @xscrollbar = bar
32 @xscrollbar.orient 'horizontal'
33 self.xscrollcommand {|*arg| @xscrollbar.set(*arg)}
34 @xscrollbar.command {|*arg| self.xview(*arg)}
35 Tk.update # avoid scrollbar trouble
36 end
37 @xscrollbar
38 end
39 end
40
41 module YScrollable
42 def yscrollcommand(cmd=Proc.new)
43 configure_cmd 'yscrollcommand', cmd
44 # Tk.update # avoid scrollbar trouble
45 self
46 end
47
48 def yview(*index)
49 if index.size == 0
50 list(tk_send_without_enc('yview'))
51 else
52 tk_send_without_enc('yview', *index)
53 self
54 end
55 end
56 def yview_moveto(*index)
57 yview('moveto', *index)
58 end
59 def yview_scroll(*index)
60 yview('scroll', *index)
61 end
62
63 def yscrollbar(bar=nil)
64 if bar
65 @yscrollbar = bar
66 @yscrollbar.orient 'vertical'
67 self.yscrollcommand {|*arg| @yscrollbar.set(*arg)}
68 @yscrollbar.command {|*arg| self.yview(*arg)}
69 Tk.update # avoid scrollbar trouble
70 end
71 @yscrollbar
72 end
73 end
74
75 X_Scrollable = XScrollable
76 Y_Scrollable = YScrollable
77
78 module Scrollable
79 include XScrollable
80 include YScrollable
81 end
82 end