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