1# 2# tk/listbox.rb : treat listbox widget 3# 4require 'tk' 5require 'tk/itemconfig' 6require 'tk/scrollable' 7require 'tk/txtwin_abst' 8 9module TkListItemConfig 10 include TkItemConfigMethod 11 12 def __item_listval_optkeys(id) 13 [] 14 end 15 private :__item_listval_optkeys 16end 17 18class Tk::Listbox<TkTextWin 19 include TkListItemConfig 20 include Scrollable 21 22 TkCommandNames = ['listbox'.freeze].freeze 23 WidgetClassName = 'Listbox'.freeze 24 WidgetClassNames[WidgetClassName] ||= self 25 26 #def create_self(keys) 27 # if keys and keys != None 28 # tk_call_without_enc('listbox', @path, *hash_kv(keys, true)) 29 # else 30 # tk_call_without_enc('listbox', @path) 31 # end 32 #end 33 #private :create_self 34 35 def __tkvariable_optkeys 36 super() << 'listvariable' 37 end 38 private :__tkvariable_optkeys 39 40 def tagid(id) 41 #id.to_s 42 _get_eval_string(id) 43 end 44 45 def activate(y) 46 tk_send_without_enc('activate', y) 47 self 48 end 49 def curselection 50 list(tk_send_without_enc('curselection')) 51 end 52 def get(first, last=nil) 53 if last 54 # tk_split_simplelist(_fromUTF8(tk_send_without_enc('get', first, last))) 55 tk_split_simplelist(tk_send_without_enc('get', first, last), false, true) 56 else 57 _fromUTF8(tk_send_without_enc('get', first)) 58 end 59 end 60 def nearest(y) 61 tk_send_without_enc('nearest', y).to_i 62 end 63 def size 64 tk_send_without_enc('size').to_i 65 end 66 def selection_anchor(index) 67 tk_send_without_enc('selection', 'anchor', index) 68 self 69 end 70 def selection_clear(first, last=None) 71 tk_send_without_enc('selection', 'clear', first, last) 72 self 73 end 74 def selection_includes(index) 75 bool(tk_send_without_enc('selection', 'includes', index)) 76 end 77 def selection_set(first, last=None) 78 tk_send_without_enc('selection', 'set', first, last) 79 self 80 end 81 82 def index(idx) 83 tk_send_without_enc('index', idx).to_i 84 end 85 86 def value 87 get('0', 'end') 88 end 89 90 def value= (vals) 91 unless vals.kind_of?(Array) 92 fail ArgumentError, 'an Array is expected' 93 end 94 tk_send_without_enc('delete', '0', 'end') 95 tk_send_without_enc('insert', '0', 96 *(vals.collect{|v| _get_eval_enc_str(v)})) 97 vals 98 end 99 100 def clear 101 tk_send_without_enc('delete', '0', 'end') 102 self 103 end 104 alias erase clear 105 106=begin 107 def itemcget(index, key) 108 case key.to_s 109 when 'text', 'label', 'show' 110 _fromUTF8(tk_send_without_enc('itemcget', index, "-#{key}")) 111 when 'font', 'kanjifont' 112 #fnt = tk_tcl2ruby(tk_send('itemcget', index, "-#{key}")) 113 fnt = tk_tcl2ruby(_fromUTF8(tk_send_without_enc('itemcget', index, 114 '-font'))) 115 unless fnt.kind_of?(TkFont) 116 fnt = tagfontobj(index, fnt) 117 end 118 if key.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/ 119 # obsolete; just for compatibility 120 fnt.kanji_font 121 else 122 fnt 123 end 124 else 125 tk_tcl2ruby(_fromUTF8(tk_send_without_enc('itemcget', index, "-#{key}"))) 126 end 127 end 128 def itemconfigure(index, key, val=None) 129 if key.kind_of? Hash 130 if (key['font'] || key[:font] || 131 key['kanjifont'] || key[:kanjifont] || 132 key['latinfont'] || key[:latinfont] || 133 key['asciifont'] || key[:asciifont] ) 134 tagfont_configure(index, _symbolkey2str(key)) 135 else 136 tk_send_without_enc('itemconfigure', index, *hash_kv(key, true)) 137 end 138 139 else 140 if (key == 'font' || key == :font || 141 key == 'kanjifont' || key == :kanjifont || 142 key == 'latinfont' || key == :latinfont || 143 key == 'asciifont' || key == :asciifont ) 144 if val == None 145 tagfontobj(index) 146 else 147 tagfont_configure(index, {key=>val}) 148 end 149 else 150 tk_call('itemconfigure', index, "-#{key}", val) 151 end 152 end 153 self 154 end 155 156 def itemconfiginfo(index, key=nil) 157 if TkComm::GET_CONFIGINFO_AS_ARRAY 158 if key 159 case key.to_s 160 when 'text', 'label', 'show' 161 conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}"))) 162 when 'font', 'kanjifont' 163 conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}"))) 164 conf[4] = tagfont_configinfo(index, conf[4]) 165 else 166 conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}"))) 167 end 168 conf[0] = conf[0][1..-1] 169 conf 170 else 171 ret = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', index))).collect{|conflist| 172 conf = tk_split_simplelist(conflist) 173 conf[0] = conf[0][1..-1] 174 case conf[0] 175 when 'text', 'label', 'show' 176 else 177 if conf[3] 178 if conf[3].index('{') 179 conf[3] = tk_split_list(conf[3]) 180 else 181 conf[3] = tk_tcl2ruby(conf[3]) 182 end 183 end 184 if conf[4] 185 if conf[4].index('{') 186 conf[4] = tk_split_list(conf[4]) 187 else 188 conf[4] = tk_tcl2ruby(conf[4]) 189 end 190 end 191 end 192 conf[1] = conf[1][1..-1] if conf.size == 2 # alias info 193 conf 194 } 195 fontconf = ret.assoc('font') 196 if fontconf 197 ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'} 198 fontconf[4] = tagfont_configinfo(index, fontconf[4]) 199 ret.push(fontconf) 200 else 201 ret 202 end 203 end 204 else # ! TkComm::GET_CONFIGINFO_AS_ARRAY 205 if key 206 case key.to_s 207 when 'text', 'label', 'show' 208 conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}"))) 209 when 'font', 'kanjifont' 210 conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}"))) 211 conf[4] = tagfont_configinfo(index, conf[4]) 212 else 213 conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}"))) 214 end 215 key = conf.shift[1..-1] 216 { key => conf } 217 else 218 ret = {} 219 tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', index))).each{|conflist| 220 conf = tk_split_simplelist(conflist) 221 key = conf.shift[1..-1] 222 case key 223 when 'text', 'label', 'show' 224 else 225 if conf[2] 226 if conf[2].index('{') 227 conf[2] = tk_split_list(conf[2]) 228 else 229 conf[2] = tk_tcl2ruby(conf[2]) 230 end 231 end 232 if conf[3] 233 if conf[3].index('{') 234 conf[3] = tk_split_list(conf[3]) 235 else 236 conf[3] = tk_tcl2ruby(conf[3]) 237 end 238 end 239 end 240 if conf.size == 1 241 ret[key] = conf[0][1..-1] # alias info 242 else 243 ret[key] = conf 244 end 245 } 246 fontconf = ret['font'] 247 if fontconf 248 ret.delete('font') 249 ret.delete('kanjifont') 250 fontconf[3] = tagfont_configinfo(index, fontconf[3]) 251 ret['font'] = fontconf 252 end 253 ret 254 end 255 end 256 end 257 258 def current_itemconfiginfo(index, key=nil) 259 if TkComm::GET_CONFIGINFO_AS_ARRAY 260 if key 261 conf = itemconfiginfo(index, key) 262 {conf[0] => conf[4]} 263 else 264 ret = {} 265 itemconfiginfo(index).each{|conf| 266 ret[conf[0]] = conf[4] if conf.size > 2 267 } 268 ret 269 end 270 else # ! TkComm::GET_CONFIGINFO_AS_ARRAY 271 ret = {} 272 itemconfiginfo(index, key).each{|k, conf| 273 ret[k] = conf[-1] if conf.kind_of?(Array) 274 } 275 ret 276 end 277 end 278=end 279end 280 281#TkListbox = Tk::Listbox unless Object.const_defined? :TkListbox 282#Tk.__set_toplevel_aliases__(:Tk, Tk::Listbox, :TkListbox) 283Tk.__set_loaded_toplevel_aliases__('tk/listbox.rb', :Tk, Tk::Listbox, 284 :TkListbox) 285