diff options
author | nagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-01-12 02:56:11 +0000 |
---|---|---|
committer | nagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-01-12 02:56:11 +0000 |
commit | 3866e487663fb40858c52d4efec1ecff7aa30b98 (patch) | |
tree | bb8242f37594d587d6458346ebd3ab2f68ca18f6 | |
parent | b87f44cec9b5ad1674bfd581cfa208324eac08a5 (diff) | |
download | ruby-3866e487663fb40858c52d4efec1ecff7aa30b98.tar.gz |
* ext/tk/sample/tkballoonhelp.rb: [bug fix] couldn't add to a widget
which is constructed with TkComposite module.
[new feature] support 'command' option which is called just before
popping up the balloon help.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9825 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | ext/tk/sample/tkballoonhelp.rb | 99 |
2 files changed, 111 insertions, 2 deletions
@@ -1,3 +1,10 @@ +Thu Jan 12 11:53:08 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> + + * ext/tk/sample/tkballoonhelp.rb: [bug fix] couldn't add to a widget + which is constructed with TkComposite module. + [new feature] support 'command' option which is called just before + popping up the balloon help. + Wed Jan 11 00:12:29 2006 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp> * lib/erb.rb (ERB::Compiler): add instance variable @insert_cmd to @@ -461,6 +468,13 @@ Mon Dec 12 00:33:56 2005 Yukihiro Matsumoto <matz@ruby-lang.org> be called before actual variable initialization. [ruby-dev:27986] +Sun Dec 11 23:54:07 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> + + * ext/tk/*: update to support libraries in ActiveTcl8.4.12.0 + (see ext/tk/ChangeLog.tkextlib). + + * ext/tk/sample/scrollframe.rb: add a new sample. + Sun Dec 11 22:07:58 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp> * test/rinda/test_rinda.rb (test_remote_array_and_hash): pseudo remote diff --git a/ext/tk/sample/tkballoonhelp.rb b/ext/tk/sample/tkballoonhelp.rb index d66bc35a88..c2c95f771d 100644 --- a/ext/tk/sample/tkballoonhelp.rb +++ b/ext/tk/sample/tkballoonhelp.rb @@ -24,13 +24,17 @@ class TkBalloonHelp<TkLabel @bindtag.bind('Leave', proc{@timer.stop; erase}) tags = @parent.bindtags idx = tags.index(@parent) + unless idx + ppath = TkComm.window(@parent.path) + idx = tags.index(ppath) || 0 + end tags[idx,0] = @bindtag @parent.bindtags(tags) end private :_balloon_binding def initialize(parent=nil, keys={}) - @parent = parent + @parent = parent || Tk.root @frame = TkToplevel.new(@parent) @frame.withdraw @@ -38,7 +42,13 @@ class TkBalloonHelp<TkLabel @frame.transient(TkWinfo.toplevel(@parent)) @epath = @frame.path - keys = {} unless keys + if keys + keys = _symbolkey2str(keys) + else + keys = {} + end + + @command = keys.delete('command') @interval = keys.delete('interval'){1000} _balloon_binding(@interval) @@ -60,10 +70,31 @@ class TkBalloonHelp<TkLabel end end + def command(cmd = Proc.new) + @command = cmd + self + end + def show x = TkWinfo.pointerx(@parent) y = TkWinfo.pointery(@parent) @frame.geometry("+#{x+1}+#{y+1}") + + if @command + case @command.arity + when 0 + @command.call + when 2 + @command.call(x - TkWinfo.rootx(@parent), y - TkWinfo.rooty(@parent)) + when 3 + @command.call(x - TkWinfo.rootx(@parent), y - TkWinfo.rooty(@parent), + self) + else + @command.call(x - TkWinfo.rootx(@parent), y - TkWinfo.rooty(@parent), + self, @parent) + end + end + @frame.deiconify @frame.raise @@ -95,5 +126,69 @@ if __FILE__ == $0 'interval'=>200, 'font'=>'courier', 'background'=>'gray', 'foreground'=>'red') } + + sb = TkScrollbox.new.pack(:fill=>:x) + sb.insert(:end, *%w(aaa bbb ccc ddd eee fff ggg hhh iii jjj kkk lll mmm)) +=begin + # CASE1 : command takes no arguemnt + bh = TkBalloonHelp.new(sb, :interval=>500, + :relief=>:ridge, :background=>'white', + :command=>proc{ + y = TkWinfo.pointery(sb) - TkWinfo.rooty(sb) + bh.text "current index == #{sb.nearest(y)}" + }) +=end +=begin + # CASE2 : command takes 2 arguemnts + bh = TkBalloonHelp.new(sb, :interval=>500, + :relief=>:ridge, :background=>'white', + :command=>proc{|x, y| + bh.text "current index == #{sb.nearest(y)}" + }) +=end +=begin + # CASE3 : command takes 3 arguemnts + TkBalloonHelp.new(sb, :interval=>500, + :relief=>:ridge, :background=>'white', + :command=>proc{|x, y, bhelp| + bhelp.text "current index == #{sb.nearest(y)}" + }) +=end +=begin + # CASE4a : command is a Proc object and takes 4 arguemnts + cmd = proc{|x, y, bhelp, parent| + bhelp.text "current index == #{parent.nearest(y)}" + } + + TkBalloonHelp.new(sb, :interval=>500, + :relief=>:ridge, :background=>'white', + :command=>cmd) + + sb2 = TkScrollbox.new.pack(:fill=>:x) + sb2.insert(:end, *%w(AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK LLL MMM)) + TkBalloonHelp.new(sb2, :interval=>500, + :padx=>5, :relief=>:raised, + :background=>'gray25', :foreground=>'white', + :command=>cmd) +=end +#=begin + # CASE4b : command is a Method object and takes 4 arguemnts + def set_msg(x, y, bhelp, parent) + bhelp.text "current index == #{parent.nearest(y)}" + end + cmd = self.method(:set_msg) + + TkBalloonHelp.new(sb, :interval=>500, + :relief=>:ridge, :background=>'white', + :command=>cmd) + + sb2 = TkScrollbox.new.pack(:fill=>:x) + sb2.insert(:end, *%w(AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK LLL MMM)) + TkBalloonHelp.new(sb2, :interval=>500, + :padx=>5, :relief=>:raised, + :background=>'gray25', :foreground=>'white', + :command=>cmd) +#=end + Tk.mainloop end |