From 0dc342de848a642ecce8db697b8fecd83a63e117 Mon Sep 17 00:00:00 2001 From: yugui Date: Mon, 25 Aug 2008 15:02:05 +0000 Subject: added tag v1_9_0_4 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- trunk/ext/tk/sample/tktree.rb | 103 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 trunk/ext/tk/sample/tktree.rb (limited to 'trunk/ext/tk/sample/tktree.rb') diff --git a/trunk/ext/tk/sample/tktree.rb b/trunk/ext/tk/sample/tktree.rb new file mode 100644 index 0000000000..56b7211c88 --- /dev/null +++ b/trunk/ext/tk/sample/tktree.rb @@ -0,0 +1,103 @@ +########################################################################## +# TkTree widget class +# +# see +# +# Note: optional argument '-font' of the Tcl library is changed to +# 'itemfont' on this Ruby library, because of avoiding font +# operation trouble in 'initialize' method ( see the following +# test script ). +# +########################################################################## +require 'tk' + +class TkTree < TkCanvas + TCL_SCRIPT_PATH = File.join(File.dirname(__FILE__), 'tktree.tcl') + + def create_self(keys) + args = [@path] + if keys.kind_of?(Hash) + font = keys.delete('itemfont') +# font = hash_kv(font) if font.kind_of?(Hash) + keys['font'] = font if font +# args.concat(hash_kv(keys)) + args << keys + end + begin + tk_call('::tktree::treecreate', *args) + rescue NameError, RuntimeError + Tk.load_tclscript(TkTree::TCL_SCRIPT_PATH) + tk_call('::tktree::treecreate', *args) + end + end + + def newitem(itempath, keys = nil) + if keys.kind_of?(Hash) + keys = _symbolkey2str(keys) + font = keys.delete('itemfont') +# font = hash_kv(font) if font.kind_of?(Hash) + keys['font'] = font if font +# tk_call('::tktree::newitem', @path, itempath, *hash_kv(keys)) + tk_call('::tktree::newitem', @path, itempath, keys) + else + tk_call('::tktree::newitem', @path, itempath) + end + end + + def delitem(itempath) + tk_call('::tktree::delitem', @path, itempath) + end + + def labelat(xpos, ypos) + tk_call('::tktree::delitem', @path, xpos, ypos) + end + + def getselection + tk_call('::tktree::getselection', @path) + end + + def setselection(itempath) + tk_call('::tktree::getselection', @path, itempath) + end +end + + +########################################################################## +# test script +########################################################################## +if __FILE__ == $0 + TkLabel.new(:text=><:ridge, :justify=>:left).pack + + This is a sample to use a Tcl library script on Ruby/Tk. + This sample loads tktree.tcl (see ) + and calls functions of the Tcl script. +EOL + + items = %w(/group1/item1 /group1/item2 /group1/subgroup/item1 /group2/item1 /item1) + + tr1 = TkTree.new.pack(:expand=>true, :fill=>:both) + tr1.focus + + items.each{|item| + tr1.newitem(item, + :command=>proc{Tk.messageBox(:message=>"#{item} executed")}) + } + + f = TkFrame.new.pack(:expand=>true, :fill=>:both) + tr2 = TkTree.new(f, :bg=>'black', #:itemfont=>{:family=>'Times', :size=>14}, + :textcolor=>'red', :bd=>4, :relief=>:ridge, + :selectbackground=>'darkBlue', :selectforeground=>'yellow', + :selectborderwidth=>3, :linecolor=>'yellow') { + yscrollbar(TkScrollbar.new(f, :width=>10).pack(:side=>:right, :fill=>:y)) + xscrollbar(TkScrollbar.new(f, :width=>10).pack(:side=>:bottom, :fill=>:x)) + pack(:expand=>true, :fill=>:both) + } + + items.each{|item| + tr2.newitem(item, :textcolor=>'green', :image=>'', + :itemfont=>{:family=>'Times', :size=>10}, + :command=>proc{Tk.messageBox(:message=>"#{item} executed")}) + } + + Tk.mainloop +end -- cgit v1.2.3