From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/ext/tk/sample/tkoptdb.rb | 106 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 jni/ruby/ext/tk/sample/tkoptdb.rb (limited to 'jni/ruby/ext/tk/sample/tkoptdb.rb') diff --git a/jni/ruby/ext/tk/sample/tkoptdb.rb b/jni/ruby/ext/tk/sample/tkoptdb.rb new file mode 100644 index 0000000..0171e46 --- /dev/null +++ b/jni/ruby/ext/tk/sample/tkoptdb.rb @@ -0,0 +1,106 @@ +#!/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 __FILE__ == $0 || !TkCore::INTERP.safe? + if ENV['LANG'] =~ /^ja/ + # read Japanese resource + TkOptionDB.read_with_encoding(File.expand_path('resource.ja', + File.dirname(__FILE__)), + 'utf-8') + else + # read English resource + TkOptionDB.readfile(File.expand_path('resource.en', + File.dirname(__FILE__))) + end +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], 3) { + # 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?} (<<< $SAFE=#{$SAFE}): " + str + end + private :__check_proc_string__ + end +} + +# following two frame widgets use same database entry +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) + print "(<<< $SAFE=#{$SAFE})" + } + pack(:fill=>:x, :padx=>10, :pady=>10) + } + TkButton.new(:command=>proc{ + print "($SAFE=#{$SAFE} >>>) : " + cmd.bye_msg + print "(<<< $SAFE=#{$SAFE} ) : " + exit + }, + :parent=>f, :widgetname=>'quit'){ + pack(:fill=>:x, :padx=>10, :pady=>10) + } +} + +class BtnFrame < TkFrame; end +BtnFrame.new{|f| + pack(:padx=>5, :pady=>5) + TkButton.new(:parent=>f, :widgetname=>'hello'){ + command proc{ + print "($SAFE=#{$SAFE} >>>) : " + cmd.show_msg(TkOptionDB.inspect) + print "(<<< $SAFE=#{$SAFE})" + } + pack(:fill=>:x, :padx=>10, :pady=>10) + } + TkButton.new(:command=>proc{ + print "($SAFE=#{$SAFE} >>>) : " + cmd.bye_msg + print "(<<< $SAFE=#{$SAFE})" + exit + }, + :parent=>f, :widgetname=>'quit'){ + pack(:fill=>:x, :padx=>10, :pady=>10) + } +} + +# if unknown class, use default option values +TkFrame.new(:class=>'BtnFrame2'){|f| + pack(:padx=>5, :pady=>5) + TkButton.new(:parent=>f, :widgetname=>'hello'){ + command proc{ + print "($SAFE=#{$SAFE} >>>) : " + cmd.show_msg(TkOptionDB.inspect) + print "(<<< $SAFE=#{$SAFE})" + } + pack(:fill=>:x, :padx=>10, :pady=>10) + } + TkButton.new(:command=>proc{ + print "($SAFE=#{$SAFE} >>>) : " + cmd.bye_msg + print "(<<< $SAFE=#{$SAFE})" + exit + }, + :parent=>f, :widgetname=>'quit'){ + pack(:fill=>:x, :padx=>10, :pady=>10) + } +} + +Tk.mainloop -- cgit v1.2.3