# File tk/lib/tkextlib/blt/treeview.rb, line 1057
def self.id2obj(tree, id)
tpath = tree.path
TreeNodeID_TBL.mutex.synchronize{
if TreeNodeID_TBL[tpath]
if TreeNodeID_TBL[tpath][id]
TreeNodeID_TBL[tpath][id]
else
begin
# self.new(tree, nil, nil, 'node'=>Integer(id))
unless (tk_call(@tpath, 'get', id)).empty?
id = Integer(id)
(obj = self.allocate).instance_eval{
@parent = @tree = tree
@tpath = @parent.path
@path = @id = id
TreeNodeID_TBL[@tpath] ||= {}
TreeNodeID_TBL[@tpath][@id] = self
}
obj
else
id
end
rescue
id
end
end
else
id
end
}
end
# File tk/lib/tkextlib/blt/treeview.rb, line 1089
def self.new(tree, pos, parent=nil, keys={})
if parent.kind_of?(Hash)
keys = parent
parent = nil
end
keys = _symbolkey2str(keys)
tpath = tree.path
TreeNodeID_TBL.mutex.synchronize{
TreeNodeID_TBL[tpath] ||= {}
if (id = keys['node']) && (obj = TreeNodeID_TBL[tpath][id])
keys.delete('node')
tk_call(tree.path, 'move', id, pos, parent) if parent
return obj
end
#super(tree, pos, parent, keys)
(obj = self.allocate).instance_eval{
initialize(tree, pos, parent, keys)
TreeNodeID_TBL[tpath][@id] = self
}
obj
}
end
# File tk/lib/tkextlib/blt/treeview.rb, line 1115
def initialize(tree, pos, parent, keys)
@parent = @tree = tree
@tpath = @parent.path
if (id = keys['node'])
# if tk_call(@tpath, 'get', id).empty?
# fail RuntimeError, "not exist the node '#{id}'"
# end
@path = @id = id
tk_call(@tpath, 'move', @id, pos, tagid(parent)) if parent
configure(keys) if keys && ! keys.empty?
else
name = nil
TreeNode_ID.mutex.synchronize{
name = TreeNode_ID.join(TkCore::INTERP._ip_id_).freeze
TreeNode_ID[1].succ!
}
at = keys.delete['at']
if parent
if parent.kind_of?(Tk::BLT::Treeview::Node) ||
parent.kind_of?(Tk::BLT::Treeview::Tag)
path = [get_full(parent.id)[0], name]
at = nil # ignore 'at' option
else
path = [parent.to_s, name]
end
else
path = name
end
if at
@id = tk_call(@tpath, 'insert', '-at', tagid(at), pos, path, keys)
else
@id = tk_call(@tpath, 'insert', pos, path, keys)
end
@path = @id
end
end