1#!/usr/bin/env ruby 2# This script is a sample of MultiTkIp class 3 4require "multi-tk" 5 6# create slave interpreters 7trusted_slave = MultiTkIp.new_slave 8safe_slave1 = MultiTkIp.new_safeTk 9safe_slave2 = MultiTkIp.new_safeTk('fill'=>:none, 'expand'=>false) 10#safe_slave2 = MultiTkIp.new_safeTk('fill'=>:none) 11#safe_slave2 = MultiTkIp.new_safeTk('expand'=>false) 12 13cmd = Proc.new{|txt| 14 ##################### 15 ## from TkTimer2.rb 16 17 if TkCore::INTERP.safe? 18 # safeTk doesn't have permission to call 'wm' command 19 else 20 root = TkRoot.new(:title=>'timer sample') 21 end 22 label = TkLabel.new(:parent=>root, :relief=>:raised, :width=>10) \ 23 .pack(:side=>:bottom, :fill=>:both) 24 25 tick = proc{|aobj| 26 cnt = aobj.return_value + 5 27 label.text format("%d.%02d", *(cnt.divmod(100))) 28 cnt 29 } 30 31 timer = TkTimer.new(50, -1, tick).start(0, proc{ label.text('0.00'); 0 }) 32 33=begin 34 TkButton.new(:text=>'Start') { 35 command proc{ timer.continue unless timer.running? } 36 pack(:side=>:left, :fill=>:both, :expand=>true) 37 } 38 TkButton.new(:text=>'Restart') { 39 command proc{ timer.restart(0, proc{ label.text('0.00'); 0 }) } 40 pack('side'=>'right','fill'=>'both','expand'=>'yes') 41 } 42 TkButton.new(:text=>'Stop') { 43 command proc{ timer.stop if timer.running? } 44 pack('side'=>'right','fill'=>'both','expand'=>'yes') 45 } 46=end 47 b_start = TkButton.new(:text=>'Start', :state=>:disabled) { 48 pack(:side=>:left, :fill=>:both, :expand=>true) 49 } 50 51 b_stop = TkButton.new(:text=>'Stop', :state=>:normal) { 52 pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes') 53 } 54 55 b_start.command { 56 timer.continue 57 b_stop.state(:normal) 58 b_start.state(:disabled) 59 } 60 61 b_stop.command { 62 timer.stop 63 b_start.state(:normal) 64 b_stop.state(:disabled) 65 } 66 67 TkButton.new(:text=>'Reset', :state=>:normal) { 68 command { timer.reset } 69 pack('side'=>'right', 'fill'=>'both', 'expand'=>'yes') 70 } 71 72 ev_quit = TkVirtualEvent.new('Control-c', 'Control-q') 73 Tk.root.bind(ev_quit, proc{Tk.exit}).focus 74} 75 76# call on the default master interpreter 77trusted_slave.eval_proc(cmd, 'trusted') # label -> .w00012 78safe_slave1.eval_proc(cmd, 'safe1') # label -> .w00016 79safe_slave2.eval_proc(cmd, 'safe2') # label -> .w00020 80cmd.call('master') # label -> .w00024 81 82#second_master = MultiTkIp.new(&cmd) 83#second_master = MultiTkIp.new(:safe=>2){p [:second_master, $SAFE]} 84 85TkTimer.new(2000, -1, proc{p ['safe1', safe_slave1.deleted?]}).start 86TkTimer.new(2000, -1, proc{p ['safe2', safe_slave2.deleted?]}).start 87TkTimer.new(2000, -1, proc{p ['trusted', trusted_slave.deleted?]}).start 88 89TkTimer.new(5000, 1, 90 proc{ 91 safe_slave1.eval_proc{Tk.root.destroy} 92 safe_slave1.delete 93 print "*** The safe_slave1 is deleted by the timer.\n" 94 }).start 95 96TkTimer.new(10000, 1, 97 proc{ 98 trusted_slave.eval_proc{Tk.root.destroy} 99 trusted_slave.delete 100 print "*** The trusted_slave is deleted by the timer.\n" 101 }).start 102 103Tk.mainloop 104