1#
2#  tkextlib/iwidgets/spinner.rb
3#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
4#
5
6require 'tk'
7require 'tkextlib/iwidgets.rb'
8
9module Tk
10  module Iwidgets
11    class  Spinner < Tk::Iwidgets::Labeledwidget
12    end
13  end
14end
15
16class Tk::Iwidgets::Spinner
17  TkCommandNames = ['::iwidgets::spinner'.freeze].freeze
18  WidgetClassName = 'Spinner'.freeze
19  WidgetClassNames[WidgetClassName] ||= self
20
21  ####################################
22
23  include Tk::ValidateConfigure
24
25  class EntryfieldValidate < TkValidateCommand
26    #class CalCmdArgs < TkUtil::CallbackSubst
27    class ValidateArgs < TkUtil::CallbackSubst
28      KEY_TBL  = [
29        [ ?c, ?s, :char ],
30        [ ?P, ?s, :post ],
31        [ ?S, ?s, :current ],
32        [ ?W, ?w, :widget ],
33        nil
34      ]
35      PROC_TBL = [
36        [ ?s, TkComm.method(:string) ],
37        [ ?w, TkComm.method(:window) ],
38        nil
39      ]
40
41=begin
42      # for Ruby m17n :: ?x --> String --> char-code ( getbyte(0) )
43      KEY_TBL.map!{|inf|
44        if inf.kind_of?(Array)
45          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)
46          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)
47        end
48        inf
49      }
50
51      PROC_TBL.map!{|inf|
52        if inf.kind_of?(Array)
53          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)
54        end
55        inf
56      }
57=end
58
59      _setup_subst_table(KEY_TBL, PROC_TBL);
60    end
61
62    def self._config_keys
63      ['validate', 'invalid']
64    end
65  end
66
67  def __validation_class_list
68    super() << EntryfieldValidate
69  end
70
71  Tk::ValidateConfigure.__def_validcmd(binding, EntryfieldValidate)
72
73  ####################################
74
75  def up
76    tk_call_without_enc(@path, 'up')
77    self
78  end
79
80  def down
81    tk_call_without_enc(@path, 'down')
82    self
83  end
84
85  def clear
86    tk_call_without_enc(@path, 'clear')
87    self
88  end
89
90  def delete(first, last=None)
91    tk_send_without_enc('delete', first, last)
92    self
93  end
94
95  def value
96    _fromUTF8(tk_send_without_enc('get'))
97  end
98  def value= (val)
99    tk_send_without_enc('delete', 0, 'end')
100    tk_send_without_enc('insert', 0, _get_eval_enc_str(val))
101    val
102  end
103  alias get value
104  alias set value=
105
106  def cursor=(index)
107    tk_send_without_enc('icursor', index)
108    #self
109    index
110  end
111  alias icursor cursor=
112
113  def index(idx)
114    number(tk_send_without_enc('index', idx))
115  end
116
117  def insert(pos,text)
118    tk_send_without_enc('insert', pos, _get_eval_enc_str(text))
119    self
120  end
121
122  def mark(pos)
123    tk_send_without_enc('scan', 'mark', pos)
124    self
125  end
126  def dragto(pos)
127    tk_send_without_enc('scan', 'dragto', pos)
128    self
129  end
130  def selection_adjust(index)
131    tk_send_without_enc('selection', 'adjust', index)
132    self
133  end
134  def selection_clear
135    tk_send_without_enc('selection', 'clear')
136    self
137  end
138  def selection_from(index)
139    tk_send_without_enc('selection', 'from', index)
140    self
141  end
142  def selection_present()
143    bool(tk_send_without_enc('selection', 'present'))
144  end
145  def selection_range(s, e)
146    tk_send_without_enc('selection', 'range', s, e)
147    self
148  end
149  def selection_to(index)
150    tk_send_without_enc('selection', 'to', index)
151    self
152  end
153
154  # based on tk/scrollable.rb
155  def xview(*index)
156    if index.size == 0
157      list(tk_send_without_enc('xview'))
158    else
159      tk_send_without_enc('xview', *index)
160      self
161    end
162  end
163  def xview_moveto(*index)
164    xview('moveto', *index)
165  end
166  def xview_scroll(*index)
167    xview('scroll', *index)
168  end
169end
170