mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
tk.rb :
* TkToplevel, TkFrame, TkPanedwindow, TkOptionDB : bug fix
* TkOptionDB : make it more secure to use procs defined on resourceDB
sample/tkoptdb.rb, sample/resource.ja, sample/resource.en :
* sample script how to use TkOptionDB.
resource.ja and resource.en are samples of resource definition file
which are read by tkoptdb.rb.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3998 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b60ba59429
commit
17e1936d8b
5 changed files with 203 additions and 21 deletions
12
ext/tk/sample/resource.en
Normal file
12
ext/tk/sample/resource.en
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
#
|
||||
# see Tcl/Tk's "options" manual for "Database Name" and "Database Class"
|
||||
#
|
||||
*BtnFrame.borderWidth: 5
|
||||
*BtnFrame.relief: ridge
|
||||
*BtnFrame.Button.background: wheat
|
||||
*BtnFrame.Button.foreground: red
|
||||
*hello.text: HELLO
|
||||
*quit.text: QUIT
|
||||
*BTN_CMD.show_msg: {|arg| print "($SAFE=#{$SAFE}) ";\
|
||||
print "Hello!! This is a sample of #{arg}.\n"}
|
||||
*BTN_CMD.bye_msg: {print "($SAFE=#{$SAFE}) Good-bye¡¥\n"}
|
||||
12
ext/tk/sample/resource.ja
Normal file
12
ext/tk/sample/resource.ja
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
#
|
||||
# see Tcl/Tk's "options" manual for "Database Name" and "Database Class"
|
||||
#
|
||||
*BtnFrame.borderWidth: 5
|
||||
*BtnFrame.relief: ridge
|
||||
*BtnFrame.Button.background: wheat
|
||||
*BtnFrame.Button.foreground: red
|
||||
*hello.text: こんにちは
|
||||
*quit.text: 終了
|
||||
*BTN_CMD.show_msg: {|arg| print "($SAFE=#{$SAFE}) ";\
|
||||
print "こんにちは!! #{arg} のサンプルです.\n"}
|
||||
*BTN_CMD.bye_msg: {print "($SAFE=#{$SAFE}) さようなら.\n"}
|
||||
49
ext/tk/sample/tkoptdb.rb
Normal file
49
ext/tk/sample/tkoptdb.rb
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env ruby
|
||||
#
|
||||
# sample script of TkOptionDB
|
||||
#
|
||||
# If 'LANG' environment variable's value is started by 'ja',
|
||||
# then read Japanese resource data and display Japanese button text.
|
||||
# In other case, read English resource data and display English text.
|
||||
#
|
||||
require "tk"
|
||||
|
||||
if ENV['LANG'] =~ /^ja/
|
||||
# read Japanese resource
|
||||
TkOptionDB.readfile(File.expand_path('resource.ja', File.dirname(__FILE__)))
|
||||
else
|
||||
# read English resource
|
||||
TkOptionDB.readfile(File.expand_path('resource.en', File.dirname(__FILE__)))
|
||||
end
|
||||
|
||||
# 'show_msg' and 'bye_msg' procedures can be defined on BTN_CMD resource.
|
||||
# Those procedures are called under $SAFE==2
|
||||
cmd = TkOptionDB.new_proc_class(:BTN_CMD, [:show_msg, :bye_msg], 2) {
|
||||
# If you want to check resource string (str),
|
||||
# please define __check_proc_string__(str) like this.
|
||||
class << self
|
||||
def __check_proc_string__(str)
|
||||
print "($SAFE=#{$SAFE}) check!! str.tainted?::#{str.tainted?}"
|
||||
str.untaint
|
||||
print "==>#{str.tainted?} : "
|
||||
str
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
TkFrame.new(:class=>'BtnFrame'){|f|
|
||||
pack(:padx=>5, :pady=>5)
|
||||
TkButton.new(:parent=>f, :widgetname=>'hello'){
|
||||
command proc{
|
||||
print "($SAFE=#{$SAFE}) : "
|
||||
cmd.show_msg(TkOptionDB.inspect)
|
||||
}
|
||||
pack(:fill=>:x, :padx=>10, :pady=>10)
|
||||
}
|
||||
TkButton.new(:command=>proc{print "($SAFE=#{$SAFE}) : "; cmd.bye_msg; exit},
|
||||
:parent=>f, :widgetname=>'quit'){
|
||||
pack(:fill=>:x, :padx=>10, :pady=>10)
|
||||
}
|
||||
}
|
||||
|
||||
Tk.mainloop
|
||||
Loading…
Add table
Add a link
Reference in a new issue