summaryrefslogtreecommitdiff
path: root/ext/tk/sample/safe-tk.rb
blob: 7050b236ebc1904e4e04e540780c29d8a21469f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env ruby
# This script is a sample of MultiTkIp class

require "multi-tk"

# create slave interpreters
trusted_slave = MultiTkIp.new_slave
safe_slave1   = MultiTkIp.new_safeTk
safe_slave2   = MultiTkIp.new_safeTk('fill'=>:none, 'expand'=>false)
#safe_slave2   = MultiTkIp.new_safeTk('fill'=>:none)
#safe_slave2   = MultiTkIp.new_safeTk('expand'=>false)


cmd = Proc.new{|txt|
  #####################
  ## from TkTimer2.rb
  begin
    root = TkRoot.new(:title=>'timer sample')
  rescue
    # safeTk doesn't have permission to call 'wm' command
  end
  label = TkLabel.new(:parent=>root, :relief=>:raised, :width=>10) \
                  .pack(:side=>:bottom, :fill=>:both)

  tick = proc{|aobj|
    cnt = aobj.return_value + 5
    label.text format("%d.%02d", *(cnt.divmod(100)))
    cnt
  }

  timer = TkTimer.new(50, -1, tick).start(0, proc{ label.text('0.00'); 0 })

  TkButton.new(:text=>'Start') {
    command proc{ timer.continue unless timer.running? }
    pack(:side=>:left, :fill=>:both, :expand=>true)
  }
  TkButton.new(:text=>'Stop') {
    command proc{ timer.stop if timer.running? }
    pack('side'=>'right','fill'=>'both','expand'=>'yes')
  }

  ev_quit = TkVirtualEvent.new('Control-c', 'Control-q')
  Tk.root.bind(ev_quit, proc{Tk.exit}).focus
}

# call on the default master interpreter
trusted_slave.eval_proc(cmd, 'trusted')  # label -> .w00012
safe_slave1.eval_proc(cmd, 'safe1')      # label -> .w00015
safe_slave2.eval_proc(cmd, 'safe2')      # label -> .w00018
cmd.call('master')                       # label -> .w00021

TkTimer.new(2000, -1, proc{p ['safe1', safe_slave1.deleted?]}).start
TkTimer.new(2000, -1, proc{p ['safe2', safe_slave2.deleted?]}).start
TkTimer.new(2000, -1, proc{p ['trusted', trusted_slave.deleted?]}).start

TkTimer.new(10000, 1, 
	    proc{
	      trusted_slave.eval_proc{Tk.root.destroy}
	      trusted_slave.delete
	      print "*** The trusted_slave is deleted by the timer.\n"
	    }).start

Tk.mainloop