From d4d182578c2a6669f144a1fea1aff63f34a42172 Mon Sep 17 00:00:00 2001 From: nagai Date: Fri, 1 Apr 2005 17:22:02 +0000 Subject: * ext/tk/lib/tk.rb (TkWindow.initialize): accept 'without_creating' option without 'widgetname' option to allow creating a widget object which is used as an argument of Tcl/Tk's widget allocation commands. * ext/tk/lib/tk/image.rb (TkImage.initialize): accept 'imagename' option to create a image object by the given name. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@8237 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/tk/lib/tkextlib/blt/component.rb | 72 +++++++++++---- ext/tk/lib/tkextlib/blt/tree.rb | 174 ++++++++++++++++++++++------------- ext/tk/lib/tkextlib/blt/treeview.rb | 46 +++++---- 3 files changed, 189 insertions(+), 103 deletions(-) (limited to 'ext/tk/lib/tkextlib') diff --git a/ext/tk/lib/tkextlib/blt/component.rb b/ext/tk/lib/tkextlib/blt/component.rb index 13452f31dd..eee4f6ab4d 100644 --- a/ext/tk/lib/tkextlib/blt/component.rb +++ b/ext/tk/lib/tkextlib/blt/component.rb @@ -350,6 +350,7 @@ module Tk::BLT @axis = @id = OBJ_ID.join(TkCore::INTERP._ip_id_).freeze OBJ_ID[1].succ! end + @path = @id @parent = @chart = chart @cpath = @chart.path Axis::OBJ_TBL[@cpath][@axis] = self @@ -442,14 +443,15 @@ module Tk::BLT @cpath = @chart.path Crosshairs::OBJ_TBL[@cpath] = self @chart.crosshair_configure(keys) unless keys.empty? + @path = @id = 'crosshairs' end def id - 'crosshairs' + @id end def to_eval - 'crosshairs' + @id end def cget(option) @@ -531,6 +533,7 @@ module Tk::BLT @element = @id = OBJ_ID.join(TkCore::INTERP._ip_id_).freeze OBJ_ID[1].succ! end + @path = @id @parent = @chart = chart @cpath = @chart.path @typename = self.class::ElementTypeName @@ -570,7 +573,6 @@ module Tk::BLT def activate(*args) @chart.element_activate(@id, *args) - self end def closest(x, y, var, keys={}) @@ -625,14 +627,15 @@ module Tk::BLT @cpath = @chart.path GridLine::OBJ_TBL[@cpath] = self @chart.gridline_configure(keys) unless keys.empty? + @path = @id = 'grid' end def id - 'grid' + @id end def to_eval - 'grid' + @id end def cget(option) @@ -678,14 +681,15 @@ module Tk::BLT @cpath = @chart.path Crosshairs::OBJ_TBL[@cpath] = self @chart.crosshair_configure(keys) unless keys.empty? + @path = @id = 'legend' end def id - 'legend' + @id end def to_eval - 'legend' + @id end def cget(option) @@ -704,12 +708,10 @@ module Tk::BLT def activate(*args) @chart.legend_activate(*args) - self end def deactivate(*args) @chart.legend_deactivate(*args) - self end def get(pos, y=nil) @@ -750,6 +752,7 @@ module Tk::BLT @pen = @id = OBJ_ID.join(TkCore::INTERP._ip_id_).freeze OBJ_ID[1].succ! end + @path = @id @parent = @chart = chart @cpath = @chart.path Pen::OBJ_TBL[@cpath][@pen] = self @@ -807,14 +810,15 @@ module Tk::BLT @cpath = @chart.path Postscript::OBJ_TBL[@cpath] = self @chart.postscript_configure(keys) unless keys.empty? + @path = @id = 'postscript' end def id - 'postscript' + @id end def to_eval - 'postscript' + @id end def cget(option) @@ -925,25 +929,25 @@ module Tk::BLT obj = self.allocate obj.instance_eval{ @parent = @chart = chart - @path = chart.path + @cpath = chart.path @id = id - unless Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@path] - Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@path] = {} + unless Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath] + Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath] = {} end - Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@path][@id] = self + Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath][@id] = self } obj end def initialize(parent, *args) @parent = @chart = parent - @path = parent.path + @cpath = parent.path - @id = create_self(*args) # an integer number as 'item id' - unless Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@path] - Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@path] = {} + @path = @id = create_self(*args) # an integer number as 'item id' + unless Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath] + Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath] = {} end - Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@path][@id] = self + Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath][@id] = self end def create_self(*args) self.class.create(@chart, *args) # return an integer as 'item id' @@ -1397,6 +1401,34 @@ module Tk::BLT ################### + def legend_window_create(parent=nil, keys=nil) + if parent.kind_of?(Hash) + keys = _symbolkey2str(parent) + parent = keys.delete('parent') + widgetname = keys.delete('widgetname') + keys.delete('without_creating') + elsif keys + keys = _symbolkey2str(keys) + widgetname = keys.delete('widgetname') + keys.delete('without_creating') + end + + legend = self.class.new(parent, :without_creating=>true, + :widgetname=>widgetname) + class << legend + def __destroy_hook__ + TkCore::INTERP.tk_windows.delete(@path) + end + end + + if keys + self.legend_configure(keys.update('position'=>legend)) + else + self.legend_configure('position'=>legend) + end + legend + end + def legend_activate(*pats) list(tk_send('legend', 'activate', *(pats.collect{|pat| tagid(pat)}))).collect{|elem| diff --git a/ext/tk/lib/tkextlib/blt/tree.rb b/ext/tk/lib/tkextlib/blt/tree.rb index a5975898e9..07dc7ef7e8 100644 --- a/ext/tk/lib/tkextlib/blt/tree.rb +++ b/ext/tk/lib/tkextlib/blt/tree.rb @@ -12,7 +12,7 @@ module Tk::BLT ################################### - class Node < TkObject + class Node < TkObject TreeNodeID_TBL = TkCore::INTERP.create_table TkCore::INTERP.init_ip_env{ TreeNodeID_TBL.clear } @@ -271,6 +271,10 @@ module Tk::BLT TreeTagID_TBL[@tpath][@id] = self end + def id + @id + end + def add(*nodes) tk_call(@tpath, 'tag', 'add', @id, *nodes) self @@ -368,6 +372,10 @@ module Tk::BLT @path = @id = tk_call(@tpath, 'notify', 'create', *args) end + def id + @id + end + def delete() tk_call(@tpath, 'notify', 'delete', @id) NotifyID_TBL[tpath].delete(@id) @@ -445,6 +453,10 @@ module Tk::BLT }) end + def id + @id + end + def delete() tk_call(@tpath, 'trace', 'delete', @id) TraceID_TBL[tpath].delete(@id) @@ -524,6 +536,17 @@ module Tk::BLT Tk::BLT::Tree::Trace::TraceID_TBL.delete(@path) end + def tagid(tag) + if tag.kind_of?(Tk::BLT::Tree::Node) || + tag.kind_of?(Tk::BLT::Tree::Tag) || + tag.kind_of?(Tk::BLT::Tree::Notify) || + tag.kind_of?(Tk::BLT::Tree::Trace) + tag.id + else + tag # maybe an Array of configure paramters + end + end + def destroy() tk_call('::blt::tree', 'destroy', @id) self @@ -531,11 +554,11 @@ module Tk::BLT def ancestor(node1, node2) Tk::BLT::Tree::Node.id2obj(self, tk_call('::blt::tree', 'ancestor', - node1, node2)) + tagid(node1), tagid(node2))) end def apply(node, keys={}) - tk_call('::blt::tree', 'apply', node, __conv_keyonly_opts(keys)) + tk_call('::blt::tree', 'apply', tagid(node), __conv_keyonly_opts(keys)) self end @@ -545,30 +568,30 @@ module Tk::BLT end def children(node) - simplelist(tk_call('::blt::tree', 'children', node)).collect{|n| + simplelist(tk_call('::blt::tree', 'children', tagid(node))).collect{|n| Tk::BLT::Tree::Node.id2obj(self, n) } end def copy(src, parent, keys={}) - id = tk_call('::blt::tree', 'copy', src, parent, + id = tk_call('::blt::tree', 'copy', tagid(src), tagid(parent), __conv_keyonly_opts(keys)) Tk::BLT::Tree::Node.new(self, nil, 'node'=>id) end def copy_to(src, dest_tree, parent, keys={}) return copy(src, parent, keys={}) unless dest_tree - id = tk_call('::blt::tree', 'copy', src, dest_tree, parent, - __conv_keyonly_opts(keys)) + id = tk_call('::blt::tree', 'copy', tagid(src), dest_tree, + tagid(parent), __conv_keyonly_opts(keys)) Tk::BLT::Tree::Node.new(dest_tree, nil, 'node'=>id) end def degree(node) - number(tk_call('::blt::tree', 'degree', node)) + number(tk_call('::blt::tree', 'degree', tagid(node))) end def delete(*nodes) - tk_call('::blt::tree', 'delete', *nodes) + tk_call('::blt::tree', 'delete', *(nodes.collect{|node| tagid(node)})) nodes.each{|node| if node.kind_of?(Tk::BLT::Tree::Node) Tk::BLT::Tree::Node::TreeNodeID_TBL[@path].delete(node.id) @@ -580,78 +603,82 @@ module Tk::BLT end def depth(node) - number(tk_call('::blt::tree', 'depth', node)) + number(tk_call('::blt::tree', 'depth', tagid(node))) end def dump(node) - simplelist(tk_call('::blt::tree', 'dump', node)).collect{|n| + simplelist(tk_call('::blt::tree', 'dump', tagid(node))).collect{|n| simplelist(n) } end def dump_to_file(node, file) - tk_call('::blt::tree', 'dumpfile', node, file) + tk_call('::blt::tree', 'dumpfile', tagid(node), file) self end def exist?(node, key=None) - bool(tk_call('::blt::tree', 'exists', node, key)) + bool(tk_call('::blt::tree', 'exists', tagid(node), key)) end def find(node, keys={}) - simplelist(tk_call('::blt::tree', 'find', node, + simplelist(tk_call('::blt::tree', 'find', tagid(node), __conv_keyonly_opts(keys))).collect{|n| Tk::BLT::Tree::Node.id2obj(self, n) } end def find_child(node, label) - ret = tk_call('::blt::tree', 'findchild', node, label) + ret = tk_call('::blt::tree', 'findchild', tagid(node), label) (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret) end def first_child(node) - ret = tk_call('::blt::tree', 'firstchild', node) + ret = tk_call('::blt::tree', 'firstchild', tagid(node)) (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret) end def get(node) - Hash[*simplelist(tk_call('::blt::tree', 'get', node))] + Hash[*simplelist(tk_call('::blt::tree', 'get', tagid(node)))] end def get_value(node, key, default_val=None) - tk_call('::blt::tree', 'get', node, key, default_val) + tk_call('::blt::tree', 'get', tagid(node), key, default_val) end def index(node) - Tk::BLT::Tree::Node.id2obj(self, tk_call('::blt::tree', 'index', node)) + Tk::BLT::Tree::Node.id2obj(self, + tk_call('::blt::tree', 'index', tagid(node))) end def insert(parent, keys={}) - id = tk_call('::blt::tree', 'insert', parent, keys) + id = tk_call('::blt::tree', 'insert', tagid(parent), keys) Tk::BLT::Tree::Node.new(self, nil, 'node'=>id) end def ancestor?(node1, node2) - bool(tk_call('::blt::tree', 'is', 'ancestor', node1, node2)) + bool(tk_call('::blt::tree', 'is', 'ancestor', + tagid(node1), tagid(node2))) end def before?(node1, node2) - bool(tk_call('::blt::tree', 'is', 'before', node1, node2)) + bool(tk_call('::blt::tree', 'is', 'before', + tagid(node1), tagid(node2))) end def leaf?(node) - bool(tk_call('::blt::tree', 'is', 'leaf', node)) + bool(tk_call('::blt::tree', 'is', 'leaf', tagid(node))) end def link?(node) - bool(tk_call('::blt::tree', 'is', 'link', node)) + bool(tk_call('::blt::tree', 'is', 'link', tagid(node))) end def root?(node) - bool(tk_call('::blt::tree', 'is', 'root', node)) + bool(tk_call('::blt::tree', 'is', 'root', tagid(node))) end def keys(node, *nodes) if nodes.empty? - simplelist(tk_call('blt::tree', 'keys', node)) + simplelist(tk_call('blt::tree', 'keys', tagid(node))) else - simplelist(tk_call('blt::tree', 'keys', node, *nodes)).collect{|lst| + simplelist(tk_call('blt::tree', 'keys', tagid(node), + *(nodes.collect{|n| tagid(n)}))).collect{|lst| simplelist(lst) } end @@ -659,36 +686,36 @@ module Tk::BLT def label(node, text=nil) if text - tk_call('::blt::tree', 'label', node, text) + tk_call('::blt::tree', 'label', tagid(node), text) text else - tk_call('::blt::tree', 'label', node) + tk_call('::blt::tree', 'label', tagid(node)) end end def last_child(node) - ret = tk_call('::blt::tree', 'lastchild', node) + ret = tk_call('::blt::tree', 'lastchild', tagid(node)) (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret) end def link(parent, node, keys={}) - ret = tk_call('::blt::tree', 'link', parent, node, + ret = tk_call('::blt::tree', 'link', tagid(parent), tagid(node), __conv_keyonly_opts(keys)) (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret) end def move(node, dest, keys={}) - tk_call('::blt::tree', 'move', node, dest, keys) + tk_call('::blt::tree', 'move', tagid(node), tagid(dest), keys) self end def next(node) - ret = tk_call('::blt::tree', 'next', node) + ret = tk_call('::blt::tree', 'next', tagid(node)) (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret) end def next_sibling(node) - ret = tk_call('::blt::tree', 'nextsibling', node) + ret = tk_call('::blt::tree', 'nextsibling', tagid(node)) (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret) end @@ -707,7 +734,7 @@ module Tk::BLT end def notify_info(id) - lst = simplelist(tk_call(@path, 'notify', 'info', id)) + lst = simplelist(tk_call(@path, 'notify', 'info', tagid(id))) lst[0] = Tk::BLT::Tree::Notify.id2obj(self, lst[0]) lst[1] = simplelist(lst[1]).collect{|flag| flag[1..-1]} lst[2] = tk_tcl2ruby(lst[2]) @@ -721,30 +748,30 @@ module Tk::BLT end def parent(node) - ret = tk_call('::blt::tree', 'parent', node) + ret = tk_call('::blt::tree', 'parent', tagid(node)) (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret) end def fullpath(node) - tk_call('::blt::tree', 'path', node) + tk_call('::blt::tree', 'path', tagid(node)) end def position(node) - number(tk_call('::blt::tree', 'position', node)) + number(tk_call('::blt::tree', 'position', tagid(node))) end def previous(node) - ret = tk_call('::blt::tree', 'previous', node) + ret = tk_call('::blt::tree', 'previous', tagid(node)) (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret) end def prev_sibling(node) - ret = tk_call('::blt::tree', 'prevsibling', node) + ret = tk_call('::blt::tree', 'prevsibling', tagid(node)) (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret) end def restore(node, str, keys={}) - tk_call('::blt::tree', 'restore', node, str, + tk_call('::blt::tree', 'restore', tagid(node), str, __conv_keyonly_opts(keys)) self end @@ -752,12 +779,12 @@ module Tk::BLT keys = __conv_keyonly_opts(keys) keys.delete('overwrite') keys.delete(:overwrite) - tk_call('::blt::tree', 'restore', node, str, '-overwrite', keys) + tk_call('::blt::tree', 'restore', tagid(node), str, '-overwrite', keys) self end def restore_from_file(node, file, keys={}) - tk_call('::blt::tree', 'restorefile', node, file, + tk_call('::blt::tree', 'restorefile', tagid(node), file, __conv_keyonly_opts(keys)) self end @@ -765,12 +792,14 @@ module Tk::BLT keys = __conv_keyonly_opts(keys) keys.delete('overwrite') keys.delete(:overwrite) - tk_call('::blt::tree', 'restorefile', node, file, '-overwrite', keys) + tk_call('::blt::tree', 'restorefile', tagid(node), file, + '-overwrite', keys) self end def root(node=None) - Tk::BLT::Tree::Node.id2obj(self, tk_call('::blt::tree', 'root', node)) + Tk::BLT::Tree::Node.id2obj(self, tk_call('::blt::tree', 'root', + tagid(node))) end def set(node, data) @@ -779,26 +808,27 @@ module Tk::BLT end args = [] data.each{|k, v| args << k << v} - tk_call('::blt::tree', 'set', node, *args) + tk_call('::blt::tree', 'set', tagid(node), *args) self end def size(node) - number(tk_call('::blt::tree', 'size', node)) + number(tk_call('::blt::tree', 'size', tagid(node))) end def sort(node, keys={}) - tk_call('::blt::tree', 'sort', node, __conv_keyonly_opts(keys)) + tk_call('::blt::tree', 'sort', tagid(node), __conv_keyonly_opts(keys)) self end def tag_add(tag, *nodes) - tk_call(@path, 'tag', 'add', tag, *nodes) + tk_call(@path, 'tag', 'add', tagid(tag), *(nodes.collect{|n| tagid(n)})) self end def tag_delete(tag, *nodes) - tk_call(@path, 'tag', 'delete', tag, *nodes) + tk_call(@path, 'tag', 'delete', tagid(tag), + *(nodes.collect{|n| tagid(n)})) self end @@ -810,30 +840,32 @@ module Tk::BLT end def tag_get(node, *patterns) - simplelist(tk_call(@tpath, 'tag', 'get', node, *patterns)).collect{|str| + simplelist(tk_call(@tpath, 'tag', 'get', tagid(node), + *(patterns.collect{|pat| tagid(pat)}))).collect{|str| Tk::BLT::Tree::Tag.id2obj(self, str) } end def tag_names(node = None) - simplelist(tk_call(@tpath, 'tag', 'names', node)).collect{|str| + simplelist(tk_call(@tpath, 'tag', 'names', tagid(node))).collect{|str| Tk::BLT::Tree::Tag.id2obj(self, str) } end def tag_nodes(tag) - simplelist(tk_call(@tpath, 'tag', 'nodes',tag)).collect{|node| + simplelist(tk_call(@tpath, 'tag', 'nodes', tagid(tag))).collect{|node| Tk::BLT::Tree::Node.id2obj(self, node) } end def tag_set(node, *tags) - tk_call(@path, 'tag', 'set', node, *tags) + tk_call(@path, 'tag', 'set', tagid(node), *(tags.collect{|t| tagid(t)})) self end def tag_unset(node, *tags) - tk_call(@path, 'tag', 'unset', node, *tags) + tk_call(@path, 'tag', 'unset', tagid(node), + *(tags.collect{|t| tagid(t)})) self end @@ -841,18 +873,28 @@ module Tk::BLT Tk::BLT::Tree::Trace.new(self, *args, &b) end +=begin def trace_delete(*args) - if id.kind_of?(Tk::BLT::Tree::Trace) - id.delete - else - tk_call(@path, 'trace', 'delete', id) - Tk::BLT::Tree::Trace::TraceID_TBL[@path].delete(id.to_s) - end + args.each{|id| + if id.kind_of?(Tk::BLT::Tree::Trace) + id.delete + else + tk_call(@path, 'trace', 'delete', id) + Tk::BLT::Tree::Trace::TraceID_TBL[@path].delete(id.to_s) + end + self + } + end +=end + def trace_delete(*args) + args = args.collect{|id| tagid(id)} + tk_call(@path, 'trace', 'delete', *args) + args.each{|id| Tk::BLT::Tree::Trace::TraceID_TBL[@path].delete(id.to_s)} self end - def trace_info(*args) - lst = simplelist(tk_call(@path, 'trace', 'info', id)) + def trace_info(id) + lst = simplelist(tk_call(@path, 'trace', 'info', tagid(id))) lst[0] = Tk::BLT::Tree::Trace.id2obj(self, lst[0]) lst[2] = simplelist(lst[2]) lst[3] = tk_tcl2ruby(lst[3]) @@ -866,16 +908,16 @@ module Tk::BLT end def type(node, key) - tk_call('::blt::tree', 'type', node, key) + tk_call('::blt::tree', 'type', tagid(node), key) end def unset(node, *keys) - tk_call('::blt::tree', 'unset', node, *keys) + tk_call('::blt::tree', 'unset', tagid(node), *keys) self end def values(node, key=None) - simplelist(tk_call('::blt::tree', 'values', node, key)) + simplelist(tk_call('::blt::tree', 'values', tagid(node), key)) end end end diff --git a/ext/tk/lib/tkextlib/blt/treeview.rb b/ext/tk/lib/tkextlib/blt/treeview.rb index 30ee528e7d..75ce51110e 100644 --- a/ext/tk/lib/tkextlib/blt/treeview.rb +++ b/ext/tk/lib/tkextlib/blt/treeview.rb @@ -297,7 +297,7 @@ class Tk::BLT::Treeview else cmd = Proc.new end - _bind([@path, 'bind', tag], seq, cmd, *args) + _bind([@path, 'bind', tagid(tag)], seq, cmd, *args) self end def tag_bind_append(tag, seq, *args) @@ -306,15 +306,15 @@ class Tk::BLT::Treeview else cmd = Proc.new end - _bind_append([@path, 'bind', tag], seq, cmd, *args) + _bind_append([@path, 'bind', tagid(tag)], seq, cmd, *args) self end def tag_bind_remove(tag, seq) - _bind_remove([@path, 'bind', tag], seq) + _bind_remove([@path, 'bind', tagid(tag)], seq) self end def tag_bindinfo(tag, seq=nil) - _bindinfo([@path, 'bind', tag], seq) + _bindinfo([@path, 'bind', tagid(tag)], seq) end def button_activate(tag) @@ -328,7 +328,7 @@ class Tk::BLT::Treeview else cmd = Proc.new end - _bind([@path, 'button', 'bind', tag], seq, cmd, *args) + _bind([@path, 'button', 'bind', tagid(tag)], seq, cmd, *args) self end def button_bind_append(tag, seq, *args) @@ -337,15 +337,15 @@ class Tk::BLT::Treeview else cmd = Proc.new end - _bind_append([@path, 'button', 'bind', tag], seq, cmd, *args) + _bind_append([@path, 'button', 'bind', tagid(tag)], seq, cmd, *args) self end def button_bind_remove(tag, seq) - _bind_remove([@path, 'button', 'bind', tag], seq) + _bind_remove([@path, 'button', 'bind', tagid(tag)], seq) self end def button_bindinfo(tag, seq=nil) - _bindinfo([@path, 'button', 'bind', tag], seq) + _bindinfo([@path, 'button', 'bind', tagid(tag)], seq) end def close(*tags) @@ -482,7 +482,7 @@ class Tk::BLT::Treeview def find(first, last, keys={}) keys = _search_flags(keys) keys['exec'] = _find_exec_flag_value(keys['exec']) if keys.key?('exec') - args = hash_kv(keys) << '--' << first << last + args = hash_kv(keys) << '--' << tagid(first) << tagid(last) simplelist(tk_send('find', *args)).collect{|id| tagid2obj(id)} end @@ -505,7 +505,7 @@ class Tk::BLT::Treeview end keys = _search_flags(keys) args = hash_kv(keys) << '--' - args.concat(tags) + args.concat(tags.collect{|t| tagid(t)}) tk_send('hide', *args) self end @@ -530,7 +530,7 @@ class Tk::BLT::Treeview end keys = _symbolkey2str(keys) - keys['at'] = tag + keys['at'] = tagid(tag) Tk::BLT::Treeview::Node.new(pos, parent, keys) end @@ -634,7 +634,7 @@ class Tk::BLT::Treeview end keys = _search_flags(keys) args = hash_kv(keys) << '--' - args.concat(tags) + args.concat(tags.collect{|t| tagid(t)}) tk_send('show', *args) self end @@ -991,7 +991,7 @@ class Tk::BLT::Treeview::Node < TkObject if (id = keys['node']) @path = @id = id - tk_call(@tpath, 'move', @id, pos, parent) if parent + tk_call(@tpath, 'move', @id, pos, tagid(parent)) if parent else name = TreeNode_ID.join(TkCore::INTERP._ip_id_).freeze TreeNode_ID[1].succ! @@ -1004,7 +1004,7 @@ class Tk::BLT::Treeview::Node < TkObject path = [get_full(parent.id)[0], name] at = nil # ignore 'at' option else - path = [parent, name] + path = [parent.to_s, name] end else path = name @@ -1080,20 +1080,32 @@ class Tk::BLT::Treeview::Tag < TkObject TreeTagID_TBL[@tpath] = {} unless TreeTagID_TBL[@tpath] TreeTagID_TBL[@tpath][@id] = self - tk_call(@tpath, 'tag', 'add', @id, *ids) unless ids.empty? + unless ids.empty? + tk_call(@tpath, 'tag', 'add', @id, *(ids.collect{|id| tagid(id)})) + end + end + + def tagid(tag) + if tag.kind_of?(Tk::BLT::Treeview::Node) \ + || tag.kind_of?(Tk::BLT::Treeview::Tag) + tag.id + else + tag + end end + private :tagid def id @id end def add(*ids) - tk_call(@tpath, 'tag', 'add', @id, *ids) + tk_call(@tpath, 'tag', 'add', @id, *(ids{|id| tagid(id)})) self end def remove(*ids) - tk_call(@tpath, 'tag', 'delete', @id, *ids) + tk_call(@tpath, 'tag', 'delete', @id, *(ids{|id| tagid(id)})) self end -- cgit v1.2.3