1#
2#  ttk::spinbox widget  (Tcl/Tk 8.6b1 or later)
3#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
4#
5require 'tk'
6require 'tkextlib/tile.rb'
7
8module Tk
9  module Tile
10    class TSpinbox < Tk::Tile::TEntry
11    end
12    Spinbox = TSpinbox
13  end
14end
15
16class Tk::Tile::TSpinbox < Tk::Tile::TEntry
17  include Tk::Tile::TileWidget
18
19  if Tk::Tile::USE_TTK_NAMESPACE
20    TkCommandNames = ['::ttk::spinbox'.freeze].freeze
21  else
22    TkCommandNames = ['::tspinbox'.freeze].freeze
23  end
24  WidgetClassName = 'TSpinbox'.freeze
25  WidgetClassNames[WidgetClassName] ||= self
26
27  class SpinCommand < TkValidateCommand
28    class ValidateArgs < TkUtil::CallbackSubst
29      KEY_TBL = [
30        [ ?d, ?s, :direction ],
31        [ ?s, ?e, :current ],
32        [ ?W, ?w, :widget ],
33        nil
34      ]
35
36      PROC_TBL = [
37        [ ?s, TkComm.method(:string) ],
38        [ ?w, TkComm.method(:window) ],
39
40        [ ?e, proc{|val|
41            #enc = Tk.encoding
42            enc = ((Tk.encoding)? Tk.encoding : Tk.encoding_system)
43            if enc
44              Tk.fromUTF8(TkComm::string(val), enc)
45            else
46              TkComm::string(val)
47            end
48          }
49        ],
50
51        nil
52      ]
53
54      _setup_subst_table(KEY_TBL, PROC_TBL);
55
56      def self.ret_val(val)
57        (val)? '1': '0'
58      end
59    end
60
61    def self._config_keys
62      ['command']
63    end
64  end
65
66  def __validation_class_list
67    super() << SpinCommand
68  end
69
70  Tk::ValidateConfigure.__def_validcmd(binding, SpinCommand)
71
72  def __boolval_optkeys
73    super() << 'wrap'
74  end
75  private :__boolval_optkeys
76
77  def __strval_optkeys
78    super() << 'buttonbackground' << 'format'
79  end
80  private :__strval_optkeys
81
82  def __listval_optkeys
83    super() << 'values'
84  end
85  private :__listval_optkeys
86
87  def self.style(*args)
88    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')
89  end
90
91  def current
92    number(tk_send_without_enc('current'))
93  end
94  def current=(idx)
95    tk_send('current', idx)
96  end
97
98  def set(val)
99    tk_send('set', val)
100  end
101
102  alias identify ttk_identify
103end
104
105#Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Spinbox, :TkSpinbox)
106Tk.__set_loaded_toplevel_aliases__('tkextlib/tile/tspinbox.rb',
107                                   :Ttk, Tk::Tile::Spinbox, :TkSpinbox)
108