TkCommandNames = ['tkwait'.freeze].freeze
TkVar_CB_TBL = {} TkVar_ID_TBL = {}
def ::callback
# File tk/lib/tk/variable.rb, line 56 def TkVariable.callback(id, name1, name2, op) #name1,name2,op = tk_split_list(args) #name1,name2,op = tk_split_simplelist(args) if cb_obj = TkVar_CB_TBL[id] #_get_eval_string(TkVar_CB_TBL[name1].trace_callback(name2,op)) begin _get_eval_string(cb_obj.trace_callback(name2, op)) rescue SystemExit exit(0) rescue Interrupt exit!(1) rescue Exception => e begin msg = _toUTF8(e.class.inspect) + ': ' + _toUTF8(e.message) + "\n" + "\n---< backtrace of Ruby side >-----\n" + _toUTF8(e.backtrace.join("\n")) + "\n---< backtrace of Tk side >-------" if TkCore::WITH_ENCODING msg.force_encoding('utf-8') else msg.instance_variable_set(:@encoding, 'utf-8') end rescue Exception msg = e.class.inspect + ': ' + e.message + "\n" + "\n---< backtrace of Ruby side >-----\n" + e.backtrace.join("\n") + "\n---< backtrace of Tk side >-------" end fail(e, msg) end begin raise 'check backtrace' rescue # ignore backtrace before 'callback' pos = -($!.backtrace.size) end begin _get_eval_string(TkVar_CB_TBL[name1].trace_callback(name2,op)) rescue trace = $!.backtrace raise $!, "\n#{trace[0]}: #{$!.message} (#{$!.class})\n" + "\tfrom #{trace[1..pos].join("\n\tfrom ")}" end else '' end end
# File tk/lib/tk/variable.rb, line 283 def initialize(val="", type=nil) # @id = Tk_VARIABLE_ID.join('') begin Tk_VARIABLE_ID.mutex.synchronize{ @id = Tk_VARIABLE_ID.join(TkCore::INTERP._ip_id_) Tk_VARIABLE_ID[1].succ! } end until INTERP._invoke_without_enc('info', 'globals', @id).empty? TkVar_ID_TBL.mutex.synchronize{ TkVar_ID_TBL[@id] = self } @var = @id @elem = nil @def_default = false @default_val = nil @trace_var = nil @trace_elem = nil @trace_opts = nil @type = nil var = self @element_type = Hash.new{|k,v| var.default_value_type } self.default_value_type = type # teach Tk-ip that @id is global var INTERP._invoke_without_enc('global', @id) #INTERP._invoke('global', @id) # create and init if val.kind_of?(Hash) # assoc-array variable self[''] = 0 self.clear end self.value = val if val == [] # INTERP._eval(format('global %s; set %s(0) 0; unset %s(0)', # @id, @id, @id)) elsif val.kind_of?(Array) a = [] # val.each_with_index{|e,i| a.push(i); a.push(array2tk_list(e))} # s = '"' + a.join(" ").gsub(/[\[\]$"]/, '\\\\\&') + '"' val.each_with_index{|e,i| a.push(i); a.push(e)} #s = '"' + array2tk_list(a).gsub(/[\[\]$"]/, '\\\\\&') + '"' s = '"' + array2tk_list(a).gsub(/[\[\]$"\\]/, '\\\\\&') + '"' INTERP._eval(format('global %s; array set %s %s', @id, @id, s)) elsif val.kind_of?(Hash) #s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\ # .gsub(/[\[\]$"]/, '\\\\\&') + '"' s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\ .gsub(/[\[\]$"\\]/, '\\\\\&') + '"' INTERP._eval(format('global %s; array set %s %s', @id, @id, s)) else #s = '"' + _get_eval_string(val).gsub(/[\[\]$"]/, '\\\\\&') + '"' s = '"' + _get_eval_string(val).gsub(/[\[\]$"\\]/, '\\\\\&') + '"' INTERP._eval(format('global %s; set %s %s', @id, @id, s)) end if val.kind_of?(Hash) #s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\ # .gsub(/[\[\]$"]/, '\\\\\&') + '"' s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\ .gsub(/[\[\]$"\\]/, '\\\\\&') + '"' INTERP._eval(Kernel.format('global %s; array set %s %s', @id, @id, s)) else #s = '"' + _get_eval_string(val).gsub(/[\[\]$"]/, '\\\\\&') + '"' s = '"' + _get_eval_string(val).gsub(/[\[\]$"\\]/, '\\\\\&') + '"' INTERP._eval(Kernel.format('global %s; set %s %s', @id, @id, s)) end end
# File tk/lib/tk/variable.rb, line 1227 def %(other) num_or_str(self._value) % other #begin # number(self._value) % other #rescue # self._value % other #end end
# File tk/lib/tk/variable.rb, line 1181 def &(other) if other.kind_of?(Array) self.to_a & other.to_a else self.to_i & other.to_i end end
# File tk/lib/tk/variable.rb, line 1216 def *(other) num_or_str(self._value) * other #begin # number(self._value) * other #rescue # self._value * other #end end
# File tk/lib/tk/variable.rb, line 1235 def **(other) number(self._value) ** other end
# File tk/lib/tk/variable.rb, line 1195 def +(other) case other when Array self.to_a + other when String self._value + other else begin number(self._value) + other rescue self._value + other.to_s end end end
# File tk/lib/tk/variable.rb, line 1209 def -(other) if other.kind_of?(Array) self.to_a - other else number(self._value) - other end end
# File tk/lib/tk/variable.rb, line 1224 def /(other) number(self._value) / other end
# File tk/lib/tk/variable.rb, line 1281 def <=>(other) if other.kind_of?(TkVariable) begin val = other.numeric other = val rescue other = other._value end elsif other.kind_of?(Numeric) begin return self.numeric <=> other rescue return self._value <=> other.to_s end elsif other.kind_of?(Array) return self.list <=> other else return self._value <=> other end end
# File tk/lib/tk/variable.rb, line 1242 def ==(other) case other when TkVariable #self.equal?(other) self._value == other._value when String self.to_s == other when Symbol self.to_sym == other when Integer self.to_i == other when Float self.to_f == other when Array self.to_a == other when Hash # false if self is not an assoc array self._value == other else # false self._value == _get_eval_string(other) end end
# File tk/lib/tk/variable.rb, line 1266 def ===(other) if other.kind_of?(TkVariable) self.id == other.id else super end end
# File tk/lib/tk/variable.rb, line 1238 def =~(other) self._value =~ other end
# File tk/lib/tk/variable.rb, line 686 def [](*idxs) _to_default_element_type(idxs, _element_value(*idxs)) end
# File tk/lib/tk/variable.rb, line 530 def []=(*args) val = args.pop type = default_element_value_type(args) val = val._value if !type && type != :variable && val.kind_of?(TkVariable) index = args.collect{|idx| _get_eval_string(idx, true)}.join(',') _fromUTF8(INTERP._set_global_var2(@id, index, _get_eval_string(val, true))) #_fromUTF8(INTERP._set_global_var2(@id, _toUTF8(_get_eval_string(index)), # _toUTF8(_get_eval_string(val)))) #_fromUTF8(INTERP._set_global_var2(@id, _get_eval_string(index, true), # _get_eval_string(val, true))) end
# File tk/lib/tk/variable.rb, line 775 def bool TkComm.bool(_value) # see Tcl_GetBoolean man-page case _value.downcase when '0', 'false', 'no', 'off' false else true end end
# File tk/lib/tk/variable.rb, line 787 def bool_element(*idxs) TkComm.bool(_element_value(*idxs)) end
# File tk/lib/tk/variable.rb, line 443 def clear if (is_scalar?) fail RuntimeError, 'cannot clear a scalar variable' end keys.each{|k| unset(k)} self end
# File tk/lib/tk/variable.rb, line 1157 def coerce(other) case other when TkVariable [other._value, self._value] when String [other, self.to_s] when Symbol [other, self.to_sym] when Numeric [other, self.numeric] when Array [other, self.to_a] else [other, self._value] end end
# File tk/lib/tk/variable.rb, line 149 def default_element_value_type(idxs) if idxs.kind_of?(Array) index = idxs.collect{|idx| _get_eval_string(idx, true)}.join(',') else index = _get_eval_string(idxs, true) end @element_type[index] end
# File tk/lib/tk/variable.rb, line 134 def default_proc(cmd = Proc.new) @def_default = :proc @default_val = cmd self end
#default_value is available only when the variable is an assoc array.
# File tk/lib/tk/variable.rb, line 118 def default_value(val=nil, &b) if b @def_default = :proc @default_val = proc(&b) else @def_default = :val @default_val = val end self end
# File tk/lib/tk/variable.rb, line 146 def default_value_type @type end
# File tk/lib/tk/variable.rb, line 1104 def element_lappend(idxs, *elems) if idxs.kind_of?(Array) idxs = idxs.collect{|idx| _get_eval_string(idx, true)}.join(',') end tk_call('lappend', "#{@id}(#{idxs})", *elems) self end
# File tk/lib/tk/variable.rb, line 1136 def element_lget_f(elem_idxs, idx) number(element_lget(elem_idxs, idx)).to_f end
# File tk/lib/tk/variable.rb, line 1129 def element_lget_i(elem_idxs, idx) number(element_lget(elem_idxs, idx)).to_i end
# File tk/lib/tk/variable.rb, line 1116 def element_lindex(elem_idxs, idx) if elem_idxs.kind_of?(Array) val = _element_value(*elem_idxs) else val = _element_value(elem_idxs) end tk_call('lindex', val, idx) end
# File tk/lib/tk/variable.rb, line 1144 def element_lset(elem_idxs, idx, val) if elem_idxs.kind_of?(Array) idxs = elem_idxs.collect{|i| _get_eval_string(i, true)}.join(',') end tk_call('lset', "#{@id}(#{idxs})", idx, val) self end
# File tk/lib/tk/variable.rb, line 951 def element_to_f(*idxs) number(_element_value(*idxs)).to_f end
# File tk/lib/tk/variable.rb, line 944 def element_to_i(*idxs) number(_element_value(*idxs)).to_i end
# File tk/lib/tk/variable.rb, line 961 def element_to_s(*idxs) _element_value(*idxs) end
# File tk/lib/tk/variable.rb, line 997 def element_to_sym(*idxs) _element_value(*idxs).intern end
# File tk/lib/tk/variable.rb, line 388 def eventloop_tkwait wait(false, true) end
# File tk/lib/tk/variable.rb, line 379 def eventloop_wait(check_root = false) wait(false, check_root) end
# File tk/lib/tk/variable.rb, line 415 def exist?(*elems) INTERP._invoke_without_enc('global', @id) if elems.empty? TkComm.bool(tk_call('info', 'exist', @id)) else # array index = elems.collect{|idx| _get_eval_string(idx, true)}.join(',') TkComm.bool(tk_call('info', 'exist', "#{@id}")) && TkComm.bool(tk_call('info', 'exist', "#{@id}(#{index})")) end end
# File tk/lib/tk/variable.rb, line 1152 def inspect #Kernel.format "#<TkVariable: %s>", @id '#<TkVariable: ' + @id + '>' end
# File tk/lib/tk/variable.rb, line 404 def is_hash? #ITNERP._eval("global #{@id}; array exist #{@id}") == '1' INTERP._invoke_without_enc('global', @id) # INTERP._invoke_without_enc('array', 'exist', @id) == '1' TkComm.bool(INTERP._invoke_without_enc('array', 'exist', @id)) end
# File tk/lib/tk/variable.rb, line 411 def is_scalar? ! is_hash? end
# File tk/lib/tk/variable.rb, line 427 def keys if (is_scalar?) fail RuntimeError, 'cannot get keys from a scalar variable' end #tk_split_simplelist(INTERP._eval("global #{@id}; array get #{@id}")) INTERP._invoke_without_enc('global', @id) #tk_split_simplelist(INTERP._fromUTF8(INTERP._invoke_without_enc('array', 'names', @id))) tk_split_simplelist(INTERP._invoke_without_enc('array', 'names', @id), false, true) end
# File tk/lib/tk/variable.rb, line 1100 def lappend(*elems) tk_call('lappend', @id, *elems) self end
# File tk/lib/tk/variable.rb, line 1133 def lget_f(idx) number(lget(idx)).to_f end
# File tk/lib/tk/variable.rb, line 1126 def lget_i(idx) number(lget(idx)).to_i end
# File tk/lib/tk/variable.rb, line 1112 def lindex(idx) tk_call('lindex', self._value, idx) end
# File tk/lib/tk/variable.rb, line 1027 def list #tk_split_list(value) tk_split_simplelist(_value) end
# File tk/lib/tk/variable.rb, line 1033 def list_element(*idxs) tk_split_simplelist(_element_value(*idxs)) end
# File tk/lib/tk/variable.rb, line 1140 def lset(idx, val) tk_call('lset', @id, idx, val) self end
# File tk/lib/tk/variable.rb, line 1277 def nonzero? !(numeric.zero?) end
# File tk/lib/tk/variable.rb, line 730 def numeric number(_value) end
# File tk/lib/tk/variable.rb, line 733 def numeric_element(*idxs) number(_element_value(*idxs)) end
# File tk/lib/tk/variable.rb, line 1038 def numlist list.collect!{|val| number(val)} end
# File tk/lib/tk/variable.rb, line 1041 def numlist_element(*idxs) list_element(*idxs).collect!{|val| number(val)} end
# File tk/lib/tk/variable.rb, line 899 def procedure TkComm.procedure(self._value) end
# File tk/lib/tk/variable.rb, line 902 def procedure_element(*idxs) TkComm.procedure(_element_value(*idxs)) end
# File tk/lib/tk/variable.rb, line 399 def ref(*idxs) # "#{@id}(#{idxs.collect{|idx| _get_eval_string(idx)}.join(',')})" TkVarAccess.new("#{@id}(#{idxs.collect{|idx| _get_eval_string(idx)}.join(',')})") end
# File tk/lib/tk/variable.rb, line 790 def set_bool(val) if ! val self.value = '0' else case val.to_s.downcase when 'false', '0', 'no', 'off' self.value = '0' else self.value = '1' end end self end
# File tk/lib/tk/variable.rb, line 804 def set_bool_element(idxs, val) if ! val val = '0' else case val.to_s.downcase when 'false', '0', 'no', 'off' val = '0' else val = '1' end end if idxs.kind_of?(Array) self[*idxs]=val else self[idxs]=val end self end
# File tk/lib/tk/variable.rb, line 828 def set_bool_element_type(idxs, val) self.set_default_element_value_type(idxs, :bool) self.set_bool_element(idxs, val) end
# File tk/lib/tk/variable.rb, line 822 def set_bool_type(val) @type = :bool self.bool=(val) self end
# File tk/lib/tk/variable.rb, line 227 def set_default_element_value_type(idxs, type) _set_default_value_type_core(type, idxs) self end
# File tk/lib/tk/variable.rb, line 128 def set_default_value(val) @def_default = :val @default_val = val self end
# File tk/lib/tk/variable.rb, line 221 def set_default_value_type(type) _set_default_value_type_core(type, nil) self end
# File tk/lib/tk/variable.rb, line 703 def set_element_value(idxs, val) if idxs.kind_of?(Array) self[*idxs]=val else self[idxs]=val end self end
# File tk/lib/tk/variable.rb, line 720 def set_element_value_type(idxs, val) self.set_default_element_value_type(idxs, val.class) if idxs.kind_of?(Array) self[*idxs]=val else self[idxs]=val end self end
# File tk/lib/tk/variable.rb, line 1045 def set_list(val) case val when Array self.value=(val) when TkVariable self.value=(val.list) else raise ArgumentError, "Array is expected" end self end
# File tk/lib/tk/variable.rb, line 1061 def set_list_element(idxs, val) case val when Array val when TkVariable val = val.list else raise ArgumentError, "Array is expected" end if idxs.kind_of?(Array) self[*idxs]=val else self[idxs]=val end self end
# File tk/lib/tk/variable.rb, line 1085 def set_list_element_type(idxs, val) self.set_default_element_value_type(idxs, :list) self.set_list_element(idxs, val) end
# File tk/lib/tk/variable.rb, line 1079 def set_list_type(val) @type = :list self.list=(val) self end
# File tk/lib/tk/variable.rb, line 736 def set_numeric(val) case val when Numeric self.value=(val) when TkVariable self.value=(val.numeric) else raise ArgumentError, "Numeric is expected" end self end
# File tk/lib/tk/variable.rb, line 748 def set_numeric_element(idxs, val) case val when Numeric val when TkVariable val = val.numeric else raise ArgumentError, "Numeric is expected" end if idxs.kind_of?(Array) self[*idxs]=val else self[idxs]=val end self end
# File tk/lib/tk/variable.rb, line 770 def set_numeric_element_type(idxs, val) self.set_default_element_value_type(idxs, :numeric) self.set_numeric_element(idxs, val) end
# File tk/lib/tk/variable.rb, line 764 def set_numeric_type(val) @type = :numeric self.numeric=(val) self end
# File tk/lib/tk/variable.rb, line 1095 def set_numlist_element_type(idxs, val) self.set_default_element_value_type(idxs, :numlist) self.set_numlist_element(idxs, val) end
# File tk/lib/tk/variable.rb, line 1089 def set_numlist_type(val) @type = :numlist self.numlist=(val) self end
# File tk/lib/tk/variable.rb, line 905 def set_procedure(cmd) self.value = cmd self end
# File tk/lib/tk/variable.rb, line 910 def set_procedure_element(idxs, cmd) cmd = cmd._value if cmd.kind_of?(TkVariable) if idxs.kind_of?(Array) self[*idxs]=cmd else self[idxs]=cmd end self end
# File tk/lib/tk/variable.rb, line 925 def set_procedure_element_type(idxs, cmd) self.set_default_element_value_type(idxs, :procedure) self.set_proceure_element(idxs, cmd) end
# File tk/lib/tk/variable.rb, line 919 def set_procedure_type(cmd) @type = :procedure self.procedure=(cmd) self end
# File tk/lib/tk/variable.rb, line 967 def set_string(val) val = val._value if val.kind_of?(TkVariable) self.value=val self end
# File tk/lib/tk/variable.rb, line 973 def set_string_element(idxs, val) val = val._value if val.kind_of?(TkVariable) if idxs.kind_of?(Array) self[*idxs]=val else self[idxs]=val end self end
# File tk/lib/tk/variable.rb, line 988 def set_string_element_type(idxs, val) self.set_default_element_value_type(idxs, :string) self.set_string_element(idxs, val) end
# File tk/lib/tk/variable.rb, line 982 def set_string_type(val) @type = :string self.string=(val) self end
# File tk/lib/tk/variable.rb, line 1001 def set_symbol(val) val = val._value if val.kind_of?(TkVariable) self.value=val self end
# File tk/lib/tk/variable.rb, line 1007 def set_symbol_element(idxs, val) val = val._value if val.kind_of?(TkVariable) if idxs.kind_of?(Array) self[*idxs]=val else self[idxs]=val end self end
# File tk/lib/tk/variable.rb, line 1022 def set_symbol_element_type(idxs, val) self.set_default_element_value_type(idxs, :symbol) self.set_symbol_element(idxs, val) end
# File tk/lib/tk/variable.rb, line 1016 def set_symbol_type(val) @type = :symbol self.value=(val) self end
# File tk/lib/tk/variable.rb, line 690 def set_value(val) self.value = val self end
# File tk/lib/tk/variable.rb, line 712 def set_value_type(val) self.default_value_type = val.class self.value = val self end
# File tk/lib/tk/variable.rb, line 840 def set_variable(var) var = var.id if var.kind_of?(TkVariable) self.value = var self end
# File tk/lib/tk/variable.rb, line 846 def set_variable_element(idxs, var) var = var.id if var.kind_of?(TkVariable) if idxs.kind_of?(Array) self[*idxs]=var else self[idxs]=var end self end
# File tk/lib/tk/variable.rb, line 862 def set_variable_element_type(idxs, var) self.set_default_element_value_type(idxs, :variable) self.set_variable_element(idxs, var) end
# File tk/lib/tk/variable.rb, line 855 def set_variable_type(var) @type = :variable var = var.id if var.kind_of?(TkVariable) self.value = var self end
# File tk/lib/tk/variable.rb, line 873 def set_window(win) win = win._value if win.kind_of?(TkVariable) self.value = win self end
# File tk/lib/tk/variable.rb, line 879 def set_window_element(idxs, win) win = win._value if win.kind_of?(TkVariable) if idxs.kind_of?(Array) self[*idxs]=win else self[idxs]=win end self end
# File tk/lib/tk/variable.rb, line 894 def set_window_element_type(idxs, win) self.set_default_element_value_type(idxs, :window) self.set_window_element(idxs, win) end
# File tk/lib/tk/variable.rb, line 888 def set_window_type(win) @type = :window self.window=(win) self end
# File tk/lib/tk/variable.rb, line 438 def size INTERP._invoke_without_enc('global', @id) TkComm.number(INTERP._invoke_without_enc('array', 'size', @id)) end
# File tk/lib/tk/variable.rb, line 964 def string_element(*idxs) _element_value(*idxs) end
# File tk/lib/tk/variable.rb, line 391 def thread_tkwait wait(true, true) end
# File tk/lib/tk/variable.rb, line 382 def thread_wait(check_root = false) wait(true, check_root) end
# File tk/lib/tk/variable.rb, line 385 def tkwait(on_thread = true) wait(on_thread, true) end
# File tk/lib/tk/variable.rb, line 948 def to_f number(_value).to_f end
# File tk/lib/tk/variable.rb, line 695 def to_hash hash = {} self.keys.each{|k| hash[k] = self[k] } hash end
# File tk/lib/tk/variable.rb, line 940 def to_i number(_value).to_i end
# File tk/lib/tk/variable.rb, line 930 def to_proc cmd = self.procedure if cmd.respond_to?(:call) cmd else # cmd is a String cmd.to_sym.to_proc end end
# File tk/lib/tk/variable.rb, line 955 def to_s #string(value).to_s _value end
# File tk/lib/tk/variable.rb, line 993 def to_sym _value.intern end
# File tk/lib/tk/variable.rb, line 1375 def trace(opts, cmd = Proc.new) opts = _check_trace_opt(opts) (@trace_var ||= []).unshift([opts,cmd]) if @trace_opts == nil TkVar_CB_TBL[@id] = self @trace_opts = opts.dup if USE_OLD_TRACE_OPTION_STYLE Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var ' << @id) else Tk.tk_call_without_enc('trace', 'add', 'variable', @id, @trace_opts, 'rb_var ' << @id) end else newopts = @trace_opts.dup if USE_OLD_TRACE_OPTION_STYLE opts.each_byte{|c| newopts.concat(c.chr) unless newopts.index(c.chr)} if newopts != @trace_opts Tk.tk_call_without_enc('trace', 'vdelete', @id, @trace_opts, 'rb_var ' << @id) @trace_opts.replace(newopts) Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var ' << @id) end else newopts |= opts unless (newopts - @trace_opts).empty? Tk.tk_call_without_enc('trace', 'remove', 'variable', @id, @trace_opts, 'rb_var ' << @id) @trace_opts.replace(newopts) Tk.tk_call_without_enc('trace', 'add', 'variable', @id, @trace_opts, 'rb_var ' << @id) end end end self end
# File tk/lib/tk/variable.rb, line 1306 def trace_callback(elem, op) if @trace_var.kind_of? Array @trace_var.each{|m,e| e.call(self,elem,op) if m.index(op)} end if elem.kind_of?(String) && elem != '' if @trace_elem.kind_of?(Hash) && @trace_elem[elem].kind_of?(Array) @trace_elem[elem].each{|m,e| e.call(self,elem,op) if m.index(op)} end end end
# File tk/lib/tk/variable.rb, line 1415 def trace_element(elem, opts, cmd = Proc.new) if @elem fail(RuntimeError, "invalid for a TkVariable which denotes an element of Tcl's array") end opts = _check_trace_opt(opts) ((@trace_elem ||= {})[elem] ||= []).unshift([opts,cmd]) if @trace_opts == nil TkVar_CB_TBL[@id] = self @trace_opts = opts.dup if USE_OLD_TRACE_OPTION_STYLE Tk.tk_call_without_enc('trace', 'add', 'variable', @id, @trace_opts, 'rb_var ' << @id) else Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var ' << @id) end else newopts = @trace_opts.dup if USE_OLD_TRACE_OPTION_STYLE opts.each_byte{|c| newopts.concat(c.chr) unless newopts.index(c.chr)} if newopts != @trace_opts Tk.tk_call_without_enc('trace', 'vdelete', @id, @trace_opts, 'rb_var ' << @id) @trace_opts.replace(newopts) Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var ' << @id) end else newopts |= opts unless (newopts - @trace_opts).empty? Tk.tk_call_without_enc('trace', 'remove', 'variable', @id, @trace_opts, 'rb_var ' << @id) @trace_opts.replace(newopts) Tk.tk_call_without_enc('trace', 'add', 'variable', @id, @trace_opts, 'rb_var ' << @id) end end end self end
# File tk/lib/tk/variable.rb, line 1461 def trace_info return [] unless @trace_var @trace_var.dup end
# File tk/lib/tk/variable.rb, line 1467 def trace_info_for_element(elem) if @elem fail(RuntimeError, "invalid for a TkVariable which denotes an element of Tcl's array") end return [] unless @trace_elem return [] unless @trace_elem[elem] @trace_elem[elem].dup end
# File tk/lib/tk/variable.rb, line 1478 def trace_remove(opts,cmd) return self unless @trace_var.kind_of? Array opts = _check_trace_opt(opts) idx = -1 if USE_OLD_TRACE_OPTION_STYLE newopts = '' @trace_var.each_with_index{|e, i| if idx < 0 && e[1] == cmd diff = false ['a', 'r', 'w', 'u'].each{|c| break if (diff = e[0].index(c) ^ opts.index(c)) } unless diff #find idx = i next end end e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c.chr)} } else newopts = [] @trace_var.each_with_index{|e, i| if idx < 0 && e[1] == cmd && e[0].size == opts.size && (e[0] - opts).empty? # find idx = i next end newopts |= e[0] } end if idx >= 0 @trace_var.delete_at(idx) else return self end (@trace_elem ||= {}).each{|elem| @trace_elem[elem].each{|e| if USE_OLD_TRACE_OPTION_STYLE e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c.chr)} else newopts |= e[0] end } } if USE_OLD_TRACE_OPTION_STYLE diff = false @trace_opts.each_byte{|c| break if (diff = ! newopts.index(c))} if diff Tk.tk_call_without_enc('trace', 'vdelete', @id, @trace_opts, 'rb_var ' << @id) @trace_opts.replace(newopts) unless @trace_opts.empty? Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var ' << @id) end end else unless (@trace_opts - newopts).empty? Tk.tk_call_without_enc('trace', 'remove', 'variable', @id, @trace_opts, 'rb_var ' << @id) @trace_opts.replace(newopts) unless @trace_opts.empty? Tk.tk_call_without_enc('trace', 'add', 'variable', @id, @trace_opts, 'rb_var ' << @id) end end end self end
# File tk/lib/tk/variable.rb, line 1558 def trace_remove_for_element(elem,opts,cmd) if @elem fail(RuntimeError, "invalid for a TkVariable which denotes an element of Tcl's array") end return self unless @trace_elem.kind_of? Hash return self unless @trace_elem[elem].kind_of? Array opts = _check_trace_opt(opts) idx = -1 if USE_OLD_TRACE_OPTION_STYLE @trace_elem[elem].each_with_index{|e, i| if idx < 0 && e[1] == cmd diff = false ['a', 'r', 'w', 'u'].each{|c| break if (diff = e[0].index(c) ^ opts.index(c)) } unless diff #find idx = i next end end } else @trace_elem[elem].each_with_index{|e, i| if idx < 0 && e[1] == cmd && e[0].size == opts.size && (e[0] - opts).empty? # find idx = i next end } end if idx >= 0 @trace_elem[elem].delete_at(idx) else return self end if USE_OLD_TRACE_OPTION_STYLE newopts = '' @trace_var.each{|e| e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c.chr)} } @trace_elem.each{|elem| @trace_elem[elem].each{|e| e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c.chr)} } } else newopts = [] @trace_var.each{|e| newopts |= e[0] } @trace_elem.each{|elem| @trace_elem[elem].each{|e| e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c.chr)} } } end if USE_OLD_TRACE_OPTION_STYLE diff = false @trace_opts.each_byte{|c| break if (diff = ! newopts.index(c))} if diff Tk.tk_call_without_enc('trace', 'vdelete', @id, @trace_opts, 'rb_var ' << @id) @trace_opts.replace(newopts) unless @trace_opts.empty? Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var ' << @id) end end else unless (@trace_opts - newopts).empty? Tk.tk_call_without_enc('trace', 'remove', 'variable', @id, @trace_opts, 'rb_var ' << @id) @trace_opts.replace(newopts) unless @trace_opts.empty? Tk.tk_call_without_enc('trace', 'add', 'variable', @id, @trace_opts, 'rb_var ' << @id) end end end self end
# File tk/lib/tk/variable.rb, line 140 def undef_default @default_val = nil @def_default = false self end
# File tk/lib/tk/variable.rb, line 542 def unset(*elems) if elems.empty? INTERP._unset_global_var(@id) else index = elems.collect{|idx| _get_eval_string(idx, true)}.join(',') INTERP._unset_global_var2(@id, index) end end
# File tk/lib/tk/variable.rb, line 451 def update(hash) if (is_scalar?) fail RuntimeError, 'cannot update a scalar variable' end hash.each{|k,v| self[k] = v} self end
# File tk/lib/tk/variable.rb, line 682 def value _to_default_type(_value) end
# File tk/lib/tk/variable.rb, line 480 def value=(val) val = val._value if !@type && @type != :variable && val.kind_of?(TkVariable) if val.kind_of?(Hash) self.clear val.each{|k, v| #INTERP._set_global_var2(@id, _toUTF8(_get_eval_string(k)), # _toUTF8(_get_eval_string(v))) INTERP._set_global_var2(@id, _get_eval_string(k, true), _get_eval_string(v, true)) } self.value # elsif val.kind_of?(Array) INTERP._set_global_var(@id, '') val.each{|v| #INTERP._set_variable(@id, _toUTF8(_get_eval_string(v)), INTERP._set_variable(@id, _get_eval_string(v, true), TclTkLib::VarAccessFlag::GLOBAL_ONLY | TclTkLib::VarAccessFlag::LEAVE_ERR_MSG | TclTkLib::VarAccessFlag::APPEND_VALUE | TclTkLib::VarAccessFlag::LIST_ELEMENT) } self.value # _fromUTF8(INTERP._set_global_var(@id, array2tk_list(val, true))) else #_fromUTF8(INTERP._set_global_var(@id, _toUTF8(_get_eval_string(val)))) _fromUTF8(INTERP._set_global_var(@id, _get_eval_string(val, true))) end end
# File tk/lib/tk/variable.rb, line 833 def variable # keeps a Tcl's variable name TkVarAccess.new(self._value) end
# File tk/lib/tk/variable.rb, line 837 def variable_element(*idxs) TkVarAccess.new(_element_value(*idxs)) end
# File tk/lib/tk/variable.rb, line 363 def wait(on_thread = false, check_root = false) on_thread &= (Thread.list.size != 1) if on_thread if check_root INTERP._thread_tkwait('variable', @id) else INTERP._thread_vwait(@id) end else if check_root INTERP._invoke_without_enc('tkwait', 'variable', @id) else INTERP._invoke_without_enc('vwait', @id) end end end
# File tk/lib/tk/variable.rb, line 867 def window TkComm.window(self._value) end
# File tk/lib/tk/variable.rb, line 511 def _element_value(*idxs) index = idxs.collect{|idx| _get_eval_string(idx, true)}.join(',') begin _fromUTF8(INTERP._get_global_var2(@id, index)) rescue => e case @def_default when :proc @default_val.call(self, *idxs) when :val @default_val else fail e end end #_fromUTF8(INTERP._get_global_var2(@id, index)) #_fromUTF8(INTERP._get_global_var2(@id, _toUTF8(_get_eval_string(index)))) #_fromUTF8(INTERP._get_global_var2(@id, _get_eval_string(index, true))) end
use Tcl function version of set tkvariable
# File tk/lib/tk/variable.rb, line 468 def _value #if INTERP._eval("global #{@id}; array exist #{@id}") == '1' INTERP._invoke_without_enc('global', @id) # if INTERP._invoke('array', 'exist', @id) == '1' if TkComm.bool(INTERP._invoke('array', 'exist', @id)) #Hash[*tk_split_simplelist(INTERP._eval("global #{@id}; array get #{@id}"))] Hash[*tk_split_simplelist(INTERP._invoke('array', 'get', @id))] else _fromUTF8(INTERP._get_global_var(@id)) end end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.