* (IMPORTANT BUG FIX) scan of event keywords doesn't work on recent

versions of Tck/Tk
* (bug fix) initialize error of instance variable on TkComposite
* (bug fix) initialize error on encoding-system on MultiTkIp
* (bug fix) trouble on destroying widgets
* (new) add JP and EN version of Ruby/Tk widget demos


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nagai 2003-07-31 20:52:40 +00:00
parent 0cdf0d99c1
commit 75362fbd47
141 changed files with 19495 additions and 25 deletions

View file

@ -174,6 +174,8 @@ class MultiTkIp
@@DEFAULT_MASTER = self.allocate
@@DEFAULT_MASTER.instance_eval{
@encoding = []
@tk_windows = {}
@tk_table_list = []
@ -433,6 +435,8 @@ class MultiTkIp
fail ArgumentError, "expecting a Hash object for the 2nd argument"
end
@encoding = []
@tk_windows = {}
@tk_table_list = []
@ -792,6 +796,10 @@ end
# class methods to delegate to TclTkIp
class << MultiTkIp
def method_missing(id, *args)
__getip.send(id, *args)
end
def make_safe
__getip.make_safe
end
@ -1141,6 +1149,41 @@ class MultiTkIp
end
end
# encoding convert
class MultiTkIp
# from tkencoding.rb by ttate@jaist.ac.jp
alias __eval _eval
alias __invoke _invoke
private :__eval
private :__invoke
def encoding
@encoding[0]
end
def encoding=(enc)
@encoding[0] = enc
end
def _eval(cmd)
if @encoding[0] != nil
_fromUTF8(__eval(_toUTF8(cmd, @encoding[0])), @encoding[0])
else
__eval(cmd)
end
end
def _invoke(*cmds)
if defined?(@encoding[0]) && @encoding[0] != nil
cmds = cmds.collect{|cmd| _toUTF8(cmd, @encoding[0])}
_fromUTF8(__invoke(*cmds), @encoding[0])
else
__invoke(*cmds)
end
end
end
# end of MultiTkIp definition
MultiTkIp.freeze # defend against modification

View file

@ -407,7 +407,13 @@ module TkComm
if num = EV_KEY.index($1)
case EV_TYPE[num]
when ?n
arg_cnv << TkComm::number(arg_val[idx])
begin
val = TkComm::number(arg_val[idx])
rescue ArgumentError
# ignore --> no convert
val = TkComm::string(arg_val[idx])
end
arg_cnv << val
when ?s
arg_cnv << TkComm::string(arg_val[idx])
when ?b
@ -3748,24 +3754,28 @@ class TkWindow<TkObject
self
end
def _destroy_children
def destroy
super
children = []
rexp = /^#{self.path}\.[^.]+$/
TkCore::INTERP.tk_windows.each{|path, obj|
children << obj if path =~ rexp
children << [path, obj] if path =~ rexp
}
children.each{|obj| obj.destroy}
end
private :_destroy_children
def destroy
super
_destroy_children
if defined?(@cmdtbl)
for id in @cmdtbl
uninstall_cmd id
end
end
children.each{|path, obj|
if defined?(@cmdtbl)
for id in @cmdtbl
uninstall_cmd id
end
end
TkCore::INTERP.tk_windows.delete(path)
}
tk_call 'destroy', epath
uninstall_win
end
@ -5020,6 +5030,9 @@ module TkComposite
extend Tk
def initialize(parent=nil, *args)
@delegates = {}
@delegates['DEFAULT'] = @frame
if parent.kind_of? Hash
keys = _symbolkey2str(parent)
parent = keys['parent']
@ -5031,10 +5044,6 @@ module TkComposite
@path = @epath = @frame.path
initialize_composite(*args)
end
unless defined? @delegates
@delegates = {}
@delegates['DEFAULT'] = @frame
end
end
def epath
@ -5148,21 +5157,17 @@ end
# widget_destroy_hook
require 'tkvirtevent'
TkBindTag::ALL.bind(TkVirtualEvent.new('Destroy'), proc{|widget|
if widget.respond_to?(:path)
w = widget.path
else
w = widget.to_s
end
if widget.respond_to?(:__destroy_hook__)
begin
if TkCore::INTERP._invoke('winfo','exist',w) == '1'
TkBindTag::ALL.bind(TkVirtualEvent.new('Destroy'), proc{|xpath|
path = xpath[1..-1]
if (widget = TkCore::INTERP.tk_windows[path])
if widget.respond_to?(:__destroy_hook__)
begin
widget.__destroy_hook__
rescue Exception
end
rescue Exception
end
end
}, '%W')
}, 'x%W')
# autoload
autoload :TkCanvas, 'tkcanvas'