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