summaryrefslogtreecommitdiff
path: root/ext/tk/sample/multi-ip_sample.rb
blob: fb7a8afb5bd7600afc0f9a642b1e7e421cdde534 (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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/usr/bin/env ruby
# frozen_string_literal: false
# 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

  if TkCore::INTERP.safe?
    # safeTk doesn't have permission to call 'wm' command
  else
    root = TkRoot.new(:title=>'timer sample')
  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 })

=begin
  TkButton.new(:text=>'Start') {
    command proc{ timer.continue unless timer.running? }
    pack(:side=>:left, :fill=>:both, :expand=>true)
  }
  TkButton.new(:text=>'Restart') {
    command proc{ timer.restart(0, proc{ label.text('0.00'); 0 }) }
    pack('side'=>'right','fill'=>'both','expand'=>'yes')
  }
  TkButton.new(:text=>'Stop') {
    command proc{ timer.stop if timer.running? }
    pack('side'=>'right','fill'=>'both','expand'=>'yes')
  }
=end
  b_start = TkButton.new(:text=>'Start', :state=>:disabled) {
    pack(:side=>:left, :fill=>:both, :expand=>true)
  }

  b_stop  = TkButton.new(:text=>'Stop', :state=>:normal) {
    pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes')
  }

  b_start.command {
    timer.continue
    b_stop.state(:normal)
    b_start.state(:disabled)
  }

  b_stop.command {
    timer.stop
    b_start.state(:normal)
    b_stop.state(:disabled)
  }

  TkButton.new(:text=>'Reset', :state=>:normal) {
    command { timer.reset }
    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 -> .w00016
safe_slave2.eval_proc(cmd, 'safe2')      # label -> .w00020
cmd.call('master')                       # label -> .w00024

#second_master = MultiTkIp.new(&cmd)
#second_master = MultiTkIp.new(:safe=>2){p [:second_master, $SAFE]}

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(5000, 1,
            proc{
              safe_slave1.eval_proc{Tk.root.destroy}
              safe_slave1.delete
              print "*** The safe_slave1 is deleted by the timer.\n"
            }).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