1 #
2 # tk/itemconfig.rb : control item/tag configuration of widget
3 #
4 require 'tk'
5 require 'tkutil'
6 require 'tk/itemfont.rb'
7
8 module TkItemConfigOptkeys
9 include TkUtil
10
11 def __item_optkey_aliases(id)
12 {}
13 end
14 private :__item_optkey_aliases
15
16 def __item_numval_optkeys(id)
17 []
18 end
19 private :__item_numval_optkeys
20
21 def __item_numstrval_optkeys(id)
22 []
23 end
24 private :__item_numstrval_optkeys
25
26 def __item_boolval_optkeys(id)
27 ['exportselection', 'jump', 'setgrid', 'takefocus']
28 end
29 private :__item_boolval_optkeys
30
31 def __item_strval_optkeys(id)
32 # maybe need to override
33 [
34 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile',
35 'activebackground', 'activeforeground', 'background',
36 'disabledforeground', 'disabledbackground', 'foreground',
37 'highlightbackground', 'highlightcolor', 'insertbackground',
38 'selectbackground', 'selectforeground', 'troughcolor'
39 ]
40 end
41 private :__item_strval_optkeys
42
43 def __item_listval_optkeys(id)
44 []
45 end
46 private :__item_listval_optkeys
47
48 def __item_numlistval_optkeys(id)
49 # maybe need to override
50 ['dash', 'activedash', 'disableddash']
51 end
52 private :__item_numlistval_optkeys
53
54 def __item_tkvariable_optkeys(id)
55 ['variable', 'textvariable']
56 end
57 private :__item_tkvariable_optkeys
58
59 def __item_val2ruby_optkeys(id) # { key=>method, ... }
60 # The method is used to convert a opt-value to a ruby's object.
61 # When get the value of the option "key", "method.call(id, val)" is called.
62 {}
63 end
64 private :__item_val2ruby_optkeys
65
66 def __item_ruby2val_optkeys(id) # { key=>method, ... }
67 # The method is used to convert a ruby's object to a opt-value.
68 # When set the value of the option "key", "method.call(id, val)" is called.
69 # That is, "-#{key} #{method.call(id, value)}".
70 {}
71 end
72 private :__item_ruby2val_optkeys
73
74 def __item_methodcall_optkeys(id) # { key=>method, ... }
75 # Use the method for both of get and set.
76 # Usually, the 'key' will not be a widget option.
77 #
78 # maybe need to override
79 # {'coords'=>'coords'}
80 {}
81 end
82 private :__item_methodcall_optkeys
83
84 ################################################
85
86 def __item_keyonly_optkeys(id) # { def_key=>(undef_key|nil), ... }
87 # maybe need to override
88 {}
89 end
90 private :__item_keyonly_optkeys
91
92
93 def __conv_item_keyonly_opts(id, keys)
94 return keys unless keys.kind_of?(Hash)
95 keyonly = __item_keyonly_optkeys(id)
96 keys2 = {}
97 keys.each{|k, v|
98 optkey = keyonly.find{|kk,vv| kk.to_s == k.to_s}
99 if optkey
100 defkey, undefkey = optkey
101 if v
102 keys2[defkey.to_s] = None
103 else
104 keys2[undefkey.to_s] = None
105 end
106 else
107 keys2[k.to_s] = v
108 end
109 }
110 keys2
111 end
112
113 def itemconfig_hash_kv(id, keys, enc_mode = nil, conf = nil)
114 hash_kv(__conv_item_keyonly_opts(id, keys), enc_mode, conf)
115 end
116 end
117
118 module TkItemConfigMethod
119 include TkUtil
120 include TkTreatItemFont
121 include TkItemConfigOptkeys
122
123 def TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
124 @mode || false
125 end
126 def TkItemConfigMethod.__set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode)
127 fail SecurityError, "can't change the mode" if $SAFE>=4
128 @mode = (mode)? true: false
129 end
130
131 def __item_cget_cmd(id)
132 # maybe need to override
133 [self.path, 'itemcget', id]
134 end
135 private :__item_cget_cmd
136
137 def __item_config_cmd(id)
138 # maybe need to override
139 [self.path, 'itemconfigure', id]
140 end
141 private :__item_config_cmd
142
143 def __item_confinfo_cmd(id)
144 # maybe need to override
145 __item_config_cmd(id)
146 end
147 private :__item_confinfo_cmd
148
149 def __item_configinfo_struct(id)
150 # maybe need to override
151 {:key=>0, :alias=>1, :db_name=>1, :db_class=>2,
152 :default_value=>3, :current_value=>4}
153 end
154 private :__item_configinfo_struct
155
156 ################################################
157
158 def tagid(tagOrId)
159 # maybe need to override
160 tagOrId
161 end
162
163 ################################################
164
165 def __itemcget_core(tagOrId, option)
166 orig_opt = option
167 option = option.to_s
168
169 if option.length == 0
170 fail ArgumentError, "Invalid option `#{orig_opt.inspect}'"
171 end
172
173 alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == option}
174 if real_name
175 option = real_name.to_s
176 end
177
178 if ( method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[option] )
179 optval = tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}"))
180 begin
181 return method.call(tagOrId, optval)
182 rescue => e
183 warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
184 return optval
185 end
186 end
187
188 if ( method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[option] )
189 return self.__send__(method, tagOrId)
190 end
191
192 case option
193 when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/
194 begin
195 number(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")))
196 rescue
197 nil
198 end
199
200 when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/
201 num_or_str(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")))
202
203 when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/
204 begin
205 bool(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")))
206 rescue
207 nil
208 end
209
210 when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/
211 simplelist(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")))
212
213 when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/
214 conf = tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}"))
215 if conf =~ /^[0-9]/
216 list(conf)
217 else
218 conf
219 end
220
221 when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/
222 v = tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}"))
223 (v.empty?)? nil: TkVarAccess.new(v)
224
225 when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/
226 _fromUTF8(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")))
227
228 when /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/
229 fontcode = $1
230 fontkey = $2
231 fnt = tk_tcl2ruby(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{fontkey}")), true)
232 unless fnt.kind_of?(TkFont)
233 fnt = tagfontobj(tagid(tagOrId), fontkey)
234 end
235 if fontcode == 'kanji' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/
236 # obsolete; just for compatibility
237 fnt.kanji_font
238 else
239 fnt
240 end
241 else
242 tk_tcl2ruby(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")), true)
243 end
244 end
245 private :__itemcget_core
246
247 def itemcget(tagOrId, option)
248 unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
249 __itemcget_core(tagOrId, option)
250 else
251 begin
252 __itemcget_core(tagOrId, option)
253 rescue => e
254 begin
255 if __current_itemconfiginfo(tagOrId).has_key?(option.to_s)
256 # not tag error & option is known -> error on known option
257 fail e
258 else
259 # not tag error & option is unknown
260 nil
261 end
262 rescue
263 fail e # tag error
264 end
265 end
266 end
267 end
268 def itemcget_strict(tagOrId, option)
269 # never use TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
270 __itemcget_core(tagOrId, option)
271 end
272
273 def __itemconfigure_core(tagOrId, slot, value=None)
274 if slot.kind_of? Hash
275 slot = _symbolkey2str(slot)
276
277 __item_optkey_aliases(tagid(tagOrId)).each{|alias_name, real_name|
278 alias_name = alias_name.to_s
279 if slot.has_key?(alias_name)
280 slot[real_name.to_s] = slot.delete(alias_name)
281 end
282 }
283
284 __item_methodcall_optkeys(tagid(tagOrId)).each{|key, method|
285 value = slot.delete(key.to_s)
286 self.__send__(method, tagOrId, value) if value
287 }
288
289 __item_ruby2val_optkeys(tagid(tagOrId)).each{|key, method|
290 key = key.to_s
291 slot[key] = method.call(tagOrId, slot[key]) if slot.has_key?(key)
292 }
293
294 __item_keyonly_optkeys(tagid(tagOrId)).each{|defkey, undefkey|
295 conf = slot.find{|kk, vv| kk == defkey.to_s}
296 if conf
297 k, v = conf
298 if v
299 slot[k] = None
300 else
301 slot[undefkey.to_s] = None if undefkey
302 slot.delete(k)
303 end
304 end
305 }
306
307 if (slot.find{|k, v| k =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/})
308 tagfont_configure(tagid(tagOrId), slot)
309 elsif slot.size > 0
310 tk_call(*(__item_config_cmd(tagid(tagOrId)).concat(hash_kv(slot))))
311 end
312
313 else
314 orig_slot = slot
315 slot = slot.to_s
316 if slot.length == 0
317 fail ArgumentError, "Invalid option `#{orig_slot.inspect}'"
318 end
319
320 alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == slot}
321 if real_name
322 slot = real_name.to_s
323 end
324
325 if ( conf = __item_keyonly_optkeys(tagid(tagOrId)).find{|k, v| k.to_s == slot } )
326 defkey, undefkey = conf
327 if value
328 tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{defkey}"))
329 elsif undefkey
330 tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{undefkey}"))
331 end
332 elsif ( method = _symbolkey2str(__item_ruby2val_optkeys(tagid(tagOrId)))[slot] )
333 tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}" << method.call(tagOrId, value)))
334 elsif ( method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot] )
335 self.__send__(method, tagOrId, value)
336 elsif (slot =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/)
337 if value == None
338 tagfontobj(tagid(tagOrId), $2)
339 else
340 tagfont_configure(tagid(tagOrId), {slot=>value})
341 end
342 else
343 tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}" << value))
344 end
345 end
346 self
347 end
348 private :__itemconfigure_core
349
350 def __check_available_itemconfigure_options(tagOrId, keys)
351 id = tagid(tagOrId)
352
353 availables = self.__current_itemconfiginfo(id).keys
354
355 # add non-standard keys
356 availables |= __font_optkeys.map{|k|
357 [k.to_s, "latin#{k}", "ascii#{k}", "kanji#{k}"]
358 }.flatten
359 availables |= __item_methodcall_optkeys(id).keys.map{|k| k.to_s}
360 availables |= __item_keyonly_optkeys(id).keys.map{|k| k.to_s}
361
362 keys = _symbolkey2str(keys)
363
364 keys.delete_if{|k, v| !(availables.include?(k))}
365 end
366
367 def itemconfigure(tagOrId, slot, value=None)
368 unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
369 __itemconfigure_core(tagOrId, slot, value)
370 else
371 if slot.kind_of?(Hash)
372 begin
373 __itemconfigure_core(tagOrId, slot)
374 rescue
375 slot = __check_available_itemconfigure_options(tagOrId, slot)
376 __itemconfigure_core(tagOrId, slot) unless slot.empty?
377 end
378 else
379 begin
380 __itemconfigure_core(tagOrId, slot, value)
381 rescue => e
382 begin
383 if __current_itemconfiginfo(tagOrId).has_key?(slot.to_s)
384 # not tag error & option is known -> error on known option
385 fail e
386 else
387 # not tag error & option is unknown
388 nil
389 end
390 rescue
391 fail e # tag error
392 end
393 end
394 end
395 end
396 self
397 end
398
399 def __itemconfiginfo_core(tagOrId, slot = nil)
400 if TkComm::GET_CONFIGINFO_AS_ARRAY
401 if (slot && slot.to_s =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/)
402 fontkey = $2
403 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{fontkey}"))))
404 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{fontkey}")), false, true)
405 conf[__item_configinfo_struct(tagid(tagOrId))[:key]] =
406 conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
407 if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \
408 || conf.size > __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
409 fnt = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
410 if TkFont.is_system_font?(fnt)
411 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkNamedFont.new(fnt)
412 end
413 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), fontkey)
414 elsif ( __item_configinfo_struct(tagid(tagOrId))[:alias] \
415 && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 \
416 && conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- )
417 conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] =
418 conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]
419 end
420 conf
421 else
422 if slot
423 slot = slot.to_s
424
425 alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == slot}
426 if real_name
427 slot = real_name.to_s
428 end
429
430 case slot
431 when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/
432 method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[slot]
433 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
434 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
435 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
436 optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
437 begin
438 val = method.call(tagOrId, optval)
439 rescue => e
440 warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
441 val = optval
442 end
443 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val
444 end
445 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
446 optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
447 begin
448 val = method.call(tagOrId, optval)
449 rescue => e
450 warn("Warning:: #{e.message} (when #{method}lcall(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
451 val = optval
452 end
453 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val
454 end
455
456 when /^(#{__item_methodcall_optkeys(tagid(tagOrId)).keys.join('|')})$/
457 method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot]
458 return [slot, '', '', '', self.__send__(method, tagOrId)]
459
460 when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/
461 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
462 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
463
464 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
465 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
466 begin
467 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
468 number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
469 rescue
470 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
471 end
472 end
473 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
474 begin
475 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
476 number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
477 rescue
478 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
479 end
480 end
481
482 when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/
483 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
484 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
485
486 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
487 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
488 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
489 num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
490 end
491 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
492 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
493 num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
494 end
495
496 when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/
497 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
498 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
499
500 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
501 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
502 begin
503 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
504 bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
505 rescue
506 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
507 end
508 end
509 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
510 begin
511 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
512 bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
513 rescue
514 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
515 end
516 end
517
518 when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/
519 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
520 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
521
522 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
523 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
524 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
525 simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
526 end
527 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
528 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
529 simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
530 end
531
532 when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/
533 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
534 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
535
536 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
537 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \
538 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ )
539 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
540 list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
541 end
542 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \
543 && conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ )
544 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
545 list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
546 end
547
548 when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/
549 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
550 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
551
552 when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/
553 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
554
555 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
556 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
557 v = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
558 if v.empty?
559 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
560 else
561 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkVarAccess.new(v)
562 end
563 end
564 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
565 v = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
566 if v.empty?
567 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
568 else
569 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = TkVarAccess.new(v)
570 end
571 end
572
573 else
574 # conf = tk_split_list(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
575 conf = tk_split_list(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), 0, false, true)
576 end
577 conf[__item_configinfo_struct(tagid(tagOrId))[:key]] =
578 conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
579
580 if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \
581 && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 \
582 && conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- )
583 conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] =
584 conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]
585 end
586
587 conf
588
589 else
590 # ret = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))))).collect{|conflist|
591 # conf = tk_split_simplelist(conflist)
592 ret = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))), false, false).collect{|conflist|
593 conf = tk_split_simplelist(conflist, false, true)
594 conf[__item_configinfo_struct(tagid(tagOrId))[:key]] =
595 conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
596
597 optkey = conf[__item_configinfo_struct(tagid(tagOrId))[:key]]
598 case optkey
599 when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/
600 method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[optkey]
601 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
602 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
603 optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
604 begin
605 val = method(tagOrId, optval)
606 rescue => e
607 warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
608 val = optval
609 end
610 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val
611 end
612 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
613 optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
614 begin
615 val = method.call(tagOrId, optval)
616 rescue => e
617 warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
618 val = optval
619 end
620 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val
621 end
622
623 when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/
624 # do nothing
625
626 when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/
627 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
628 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
629 begin
630 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
631 number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
632 rescue
633 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
634 end
635 end
636 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
637 begin
638 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
639 number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
640 rescue
641 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
642 end
643 end
644
645 when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/
646 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
647 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
648 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
649 num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
650 end
651 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
652 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
653 num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
654 end
655
656 when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/
657 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
658 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
659 begin
660 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
661 bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
662 rescue
663 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
664 end
665 end
666 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
667 begin
668 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
669 bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
670 rescue
671 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
672 end
673 end
674
675 when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/
676 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
677 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
678 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
679 simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
680 end
681 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
682 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
683 simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
684 end
685
686 when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/
687 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
688 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \
689 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ )
690 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
691 list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
692 end
693 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \
694 && conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ )
695 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
696 list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
697 end
698
699 when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/
700 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
701 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
702 v = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
703 if v.empty?
704 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
705 else
706 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkVarAccess.new(v)
707 end
708 end
709 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
710 v = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
711 if v.empty?
712 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
713 else
714 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = TkVarAccess.new(v)
715 end
716 end
717
718 else
719 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
720 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
721 if conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]].index('{')
722 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
723 tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
724 else
725 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
726 tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
727 end
728 end
729 if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
730 if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]].index('{')
731 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
732 tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
733 else
734 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
735 tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
736 end
737 end
738 end
739
740 if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \
741 && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 \
742 && conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- )
743 conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] =
744 conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]
745 end
746
747 conf
748 }
749
750 __item_font_optkeys(tagid(tagOrId)).each{|optkey|
751 optkey = optkey.to_s
752 fontconf = ret.assoc(optkey)
753 if fontconf && fontconf.size > 2
754 ret.delete_if{|inf| inf[0] =~ /^(|latin|ascii|kanji)#{optkey}$/}
755 fnt = fontconf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
756 if TkFont.is_system_font?(fnt)
757 fontconf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkNamedFont.new(fnt)
758 end
759 fontconf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), optkey)
760 ret.push(fontconf)
761 end
762 }
763
764 __item_methodcall_optkeys(tagid(tagOrId)).each{|optkey, method|
765 ret << [optkey.to_s, '', '', '', self.__send__(method, tagOrId)]
766 }
767
768 ret
769 end
770 end
771
772 else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
773 if (slot && slot.to_s =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/)
774 fontkey = $2
775 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{fontkey}"))))
776 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{fontkey}")), false, true)
777 conf[__item_configinfo_struct(tagid(tagOrId))[:key]] =
778 conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
779
780 if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \
781 || conf.size > __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
782 fnt = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
783 if TkFont.is_system_font?(fnt)
784 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkNamedFont.new(fnt)
785 end
786 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), fontkey)
787 { conf.shift => conf }
788 elsif ( __item_configinfo_struct(tagid(tagOrId))[:alias] \
789 && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
790 if conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?-
791 conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] =
792 conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]
793 end
794 { conf[0] => conf[1] }
795 else
796 { conf.shift => conf }
797 end
798 else
799 if slot
800 slot = slot.to_s
801
802 alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == slot}
803 if real_name
804 slot = real_name.to_s
805 end
806
807 case slot
808 when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/
809 method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[slot]
810 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
811 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
812 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
813 optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
814 begin
815 val = method.call(tagOrId, optval)
816 rescue => e
817 warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
818 val = optval
819 end
820 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val
821 end
822 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
823 optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
824 begin
825 val = method.call(tagOrId, optval)
826 rescue => e
827 warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
828 val = optval
829 end
830 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val
831 end
832
833 when /^(#{__item_methodcall_optkeys(tagid(tagOrId)).keys.join('|')})$/
834 method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot]
835 return {slot => ['', '', '', self.__send__(method, tagOrId)]}
836
837 when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/
838 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
839 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
840
841 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
842 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
843 begin
844 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
845 number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
846 rescue
847 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
848 end
849 end
850 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
851 begin
852 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
853 number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
854 rescue
855 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
856 end
857 end
858
859 when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/
860 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
861 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
862
863 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
864 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
865 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
866 num_or_stre(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
867 end
868 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
869 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
870 num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
871 end
872
873 when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/
874 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
875 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
876
877 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
878 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
879 begin
880 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
881 bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
882 rescue
883 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
884 end
885 end
886 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
887 begin
888 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
889 bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
890 rescue
891 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
892 end
893 end
894
895 when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/
896 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
897 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
898
899 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
900 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
901 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
902 simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
903 end
904 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
905 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
906 simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
907 end
908
909 when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/
910 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
911 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
912
913 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
914 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \
915 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ )
916 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
917 list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
918 end
919 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \
920 && conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ )
921 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
922 list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
923 end
924
925 when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/
926 # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
927 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
928
929 when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/
930 conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
931
932 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
933 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
934 v = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
935 if v.empty?
936 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
937 else
938 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkVarAccess.new(v)
939 end
940 end
941 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
942 v = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
943 if v.empty?
944 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
945 else
946 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = TkVarAccess.new(v)
947 end
948 end
949
950 else
951 # conf = tk_split_list(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
952 conf = tk_split_list(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), 0, false, true)
953 end
954 conf[__item_configinfo_struct(tagid(tagOrId))[:key]] =
955 conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
956
957 if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \
958 && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
959 if conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?-
960 conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] =
961 conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]
962 end
963 { conf[0] => conf[1] }
964 else
965 { conf.shift => conf }
966 end
967
968 else
969 ret = {}
970 # tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))))).each{|conflist|
971 # conf = tk_split_simplelist(conflist)
972 tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))), false, false).each{|conflist|
973 conf = tk_split_simplelist(conflist, false, true)
974 conf[__item_configinfo_struct(tagid(tagOrId))[:key]] =
975 conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
976
977 optkey = conf[__item_configinfo_struct(tagid(tagOrId))[:key]]
978 case optkey
979 when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/
980 method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[optkey]
981 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
982 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
983 optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
984 begin
985 val = method.call(tagOrId, optval)
986 rescue => e
987 warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
988 val = optval
989 end
990 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val
991 end
992 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
993 optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
994 begin
995 val = method.call(tagOrId, optval)
996 rescue => e
997 warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
998 val = optval
999 end
1000 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val
1001 end
1002
1003 when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/
1004 # do nothing
1005
1006 when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/
1007 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1008 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
1009 begin
1010 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
1011 number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1012 rescue
1013 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
1014 end
1015 end
1016 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
1017 begin
1018 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
1019 number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1020 rescue
1021 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
1022 end
1023 end
1024
1025 when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/
1026 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1027 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
1028 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
1029 num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1030 end
1031 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
1032 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
1033 num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1034 end
1035
1036 when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/
1037 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1038 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
1039 begin
1040 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
1041 bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1042 rescue
1043 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
1044 end
1045 end
1046 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
1047 begin
1048 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
1049 bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1050 rescue
1051 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
1052 end
1053 end
1054
1055 when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/
1056 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1057 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
1058 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
1059 simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1060 end
1061 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
1062 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
1063 simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1064 end
1065
1066 when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/
1067 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1068 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \
1069 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ )
1070 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
1071 list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1072 end
1073 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \
1074 && conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ )
1075 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
1076 list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1077 end
1078
1079 when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/
1080 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1081 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
1082 v = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
1083 if v.empty?
1084 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
1085 else
1086 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkVarAccess.new(v)
1087 end
1088 end
1089 if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
1090 v = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
1091 if v.empty?
1092 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
1093 else
1094 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = TkVarAccess.new(v)
1095 end
1096 end
1097
1098 else
1099 if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1100 && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
1101 if conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]].index('{')
1102 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
1103 tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1104 else
1105 conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =
1106 tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1107 end
1108 end
1109 if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
1110 if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]].index('{')
1111 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
1112 tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1113 else
1114 conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =
1115 tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1116 end
1117 end
1118 end
1119
1120 if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \
1121 && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
1122 if conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?-
1123 conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] =
1124 conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]
1125 end
1126 ret[conf[0]] = conf[1]
1127 else
1128 ret[conf.shift] = conf
1129 end
1130 }
1131
1132 __item_font_optkeys(tagid(tagOrId)).each{|optkey|
1133 optkey = optkey.to_s
1134 fontconf = ret[optkey]
1135 if fontconf.kind_of?(Array)
1136 ret.delete(optkey)
1137 ret.delete('latin' << optkey)
1138 ret.delete('ascii' << optkey)
1139 ret.delete('kanji' << optkey)
1140 fnt = fontconf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
1141 if TkFont.is_system_font?(fnt)
1142 fontconf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkNamedFont.new(fnt)
1143 end
1144 fontconf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), optkey)
1145 ret[optkey] = fontconf
1146 end
1147 }
1148
1149 __item_methodcall_optkeys(tagid(tagOrId)).each{|optkey, method|
1150 ret[optkey.to_s] = ['', '', '', self.__send__(method, tagOrId)]
1151 }
1152
1153 ret
1154 end
1155 end
1156 end
1157 end
1158 private :__itemconfiginfo_core
1159
1160 def itemconfiginfo(tagOrId, slot = nil)
1161 if slot && TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
1162 begin
1163 __itemconfiginfo_core(tagOrId, slot)
1164 rescue => e
1165 begin
1166 __itemconfiginfo_core(tagOrId)
1167 # not tag error -> option is unknown
1168 Array.new(__item_configinfo_struct.values.max).unshift(slot.to_s)
1169 rescue
1170 fail e # tag error
1171 end
1172 end
1173 else
1174 __itemconfiginfo_core(tagOrId, slot)
1175 end
1176 end
1177
1178 def __current_itemconfiginfo(tagOrId, slot = nil)
1179 if TkComm::GET_CONFIGINFO_AS_ARRAY
1180 if slot
1181 org_slot = slot
1182 begin
1183 conf = __itemconfiginfo_core(tagOrId, slot)
1184 if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \
1185 || conf.size > __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
1186 return {conf[0] => conf[-1]}
1187 end
1188 slot = conf[__item_configinfo_struct(tagid(tagOrId))[:alias]]
1189 end while(org_slot != slot)
1190 fail RuntimeError,
1191 "there is a configure alias loop about '#{org_slot}'"
1192 else
1193 ret = {}
1194 __itemconfiginfo_core(tagOrId).each{|conf|
1195 if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \
1196 || conf.size > __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
1197 ret[conf[0]] = conf[-1]
1198 end
1199 }
1200
1201 ret
1202 end
1203 else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
1204 ret = {}
1205 __itemconfiginfo_core(tagOrId, slot).each{|key, conf|
1206 ret[key] = conf[-1] if conf.kind_of?(Array)
1207 }
1208 ret
1209 end
1210 end
1211
1212 def current_itemconfiginfo(tagOrId, slot = nil)
1213 __current_itemconfiginfo(tagOrId, slot)
1214 end
1215 end