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