1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
#
# tk/scrollbar.rb : treat scrollbar widget
#
require 'tk'
class Tk::Scrollbar<TkWindow
TkCommandNames = ['scrollbar'.freeze].freeze
WidgetClassName = 'Scrollbar'.freeze
WidgetClassNames[WidgetClassName] = self
def create_self(keys)
@assigned = []
@scroll_proc = proc{|*args|
if self.orient == 'horizontal'
@assigned.each{|w| w.xview(*args)}
else # 'vertical'
@assigned.each{|w| w.yview(*args)}
end
}
if keys and keys != None
#tk_call_without_enc('scrollbar', @path, *hash_kv(keys, true))
tk_call_without_enc(self.class::TkCommandNames[0], @path,
*hash_kv(keys, true))
else
#tk_call_without_enc('scrollbar', @path)
tk_call_without_enc(self.class::TkCommandNames[0], @path)
end
end
private :create_self
def propagate_set(src_win, first, last)
self.set(first, last)
if self.orient == 'horizontal'
@assigned.each{|w| w.xview('moveto', first) if w != src_win}
else # 'vertical'
@assigned.each{|w| w.yview('moveto', first) if w != src_win}
end
end
def assign(*wins)
begin
self.command(@scroll_proc) if self.cget('command').cmd != @scroll_proc
rescue Exception
self.command(@scroll_proc)
end
orient = self.orient
wins.each{|w|
@assigned << w unless @assigned.index(w)
if orient == 'horizontal'
w.xscrollcommand proc{|first, last| self.propagate_set(w, first, last)}
else # 'vertical'
w.yscrollcommand proc{|first, last| self.propagate_set(w, first, last)}
end
}
Tk.update # avoid scrollbar trouble
self
end
def assigned_list
begin
return @assigned.dup if self.cget('command').cmd == @scroll_proc
rescue Exception
end
fail RuntimeError, "not depend on the assigned_list"
end
def configure(*args)
ret = super(*args)
# Tk.update # avoid scrollbar trouble
ret
end
#def delta(deltax=None, deltay=None)
def delta(deltax, deltay)
number(tk_send_without_enc('delta', deltax, deltay))
end
#def fraction(x=None, y=None)
def fraction(x, y)
number(tk_send_without_enc('fraction', x, y))
end
def identify(x, y)
tk_send_without_enc('identify', x, y)
end
def get
#ary1 = tk_send('get').split
#ary2 = []
#for i in ary1
# ary2.push number(i)
#end
#ary2
list(tk_send_without_enc('get'))
end
def set(first, last)
tk_send_without_enc('set', first, last)
self
end
def activate(element=None)
tk_send_without_enc('activate', element)
end
end
TkScrollbar = Tk::Scrollbar unless Object.const_defined? :TkScrollbar
class Tk::XScrollbar<TkScrollbar
def create_self(keys)
keys = {} unless keys
keys['orient'] = 'horizontal'
super(keys)
end
private :create_self
end
TkXScrollbar = Tk::XScrollbar unless Object.const_defined? :TkXScrollbar
class Tk::YScrollbar<TkScrollbar
def create_self(keys)
keys = {} unless keys
keys['orient'] = 'vertical'
super(keys)
end
private :create_self
end
TkYScrollbar = Tk::YScrollbar unless Object.const_defined? :TkYScrollbar
|