1 #
2 # tk/scale.rb : treat scale widget
3 #
4 require 'tk'
5
6 class Tk::Scale<TkWindow
7 TkCommandNames = ['scale'.freeze].freeze
8 WidgetClassName = 'Scale'.freeze
9 WidgetClassNames[WidgetClassName] = self
10
11 def create_self(keys)
12 if keys and keys != None
13 if keys.key?('command') && ! keys['command'].kind_of?(String)
14 cmd = keys.delete('command')
15 keys['command'] = proc{|val| cmd.call(val.to_f)}
16 end
17 unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
18 #tk_call_without_enc('scale', @path, *hash_kv(keys, true))
19 tk_call_without_enc(self.class::TkCommandNames[0], @path,
20 *hash_kv(keys, true))
21 else
22 begin
23 tk_call_without_enc(self.class::TkCommandNames[0], @path,
24 *hash_kv(keys, true))
25 rescue
26 tk_call_without_enc(self.class::TkCommandNames[0], @path)
27 keys = __check_available_configure_options(keys)
28 unless keys.empty?
29 begin
30 tk_call_without_enc('destroy', @path)
31 rescue
32 # cannot destroy
33 configure(keys)
34 else
35 # re-create widget
36 tk_call_without_enc(self.class::TkCommandNames[0], @path,
37 *hash_kv(keys, true))
38 end
39 end
40 end
41 end
42 else
43 #tk_call_without_enc('scale', @path)
44 tk_call_without_enc(self.class::TkCommandNames[0], @path)
45 end
46 end
47 private :create_self
48
49 def __strval_optkeys
50 super() << 'label'
51 end
52 private :__strval_optkeys
53
54 def _wrap_command_arg(cmd)
55 proc{|val|
56 if val.kind_of?(String)
57 cmd.call(number(val))
58 else
59 cmd.call(val)
60 end
61 }
62 end
63 private :_wrap_command_arg
64
65 def configure_cmd(slot, value)
66 configure(slot=>value)
67 end
68
69 def configure(slot, value=None)
70 if (slot == 'command' || slot == :command)
71 configure('command'=>value)
72 elsif slot.kind_of?(Hash) &&
73 (slot.key?('command') || slot.key?(:command))
74 slot = _symbolkey2str(slot)
75 slot['command'] = _wrap_command_arg(slot.delete('command'))
76 end
77 super(slot, value)
78 end
79
80 def command(cmd=Proc.new)
81 configure('command'=>cmd)
82 end
83
84 def get(x=None, y=None)
85 number(tk_send_without_enc('get', x, y))
86 end
87
88 def coords(val=None)
89 tk_split_list(tk_send_without_enc('coords', val))
90 end
91
92 def identify(x, y)
93 tk_send_without_enc('identify', x, y)
94 end
95
96 def set(val)
97 tk_send_without_enc('set', val)
98 end
99
100 def value
101 get
102 end
103
104 def value= (val)
105 set(val)
106 val
107 end
108 end
109
110 #TkScale = Tk::Scale unless Object.const_defined? :TkScale
111 Tk.__set_toplevel_aliases__(:Tk, Tk::Scale, :TkScale)