[ANN] multiple Tk interpreter support

Hi,

I added the features to support multiple Tk interpreters.
It will be inluded in the next preview release (preview5)
of Ruby 1.8.0.

Probably, it is useful to treat safeTk interpreters.
No need new notation to control some interpreters.
The following script is a sample of multi-tk.rb.
In the sample, I use only one proc object to control
3 interpreters; one default master, one normal-slave
and one safeTk. No need interpreter option for each method.

Could you try it? Bug reports are welcome.

···


Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)

============================================
#!/usr/bin/env ruby

This script is a sample of MultiTkIp class

require “multi-tk”

create slave interpreters

trusted_slave = MultiTkIp.new_slave
safe_slave = MultiTkIp.new_safeTk

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’)
safe_slave.eval_proc(cmd, ‘safe’)
cmd.call(‘master’)

Tk.mainloop