diff options
Diffstat (limited to 'ext/tk/lib')
255 files changed, 0 insertions, 35528 deletions
diff --git a/ext/tk/lib/README b/ext/tk/lib/README deleted file mode 100644 index 5918fe4bf0..0000000000 --- a/ext/tk/lib/README +++ /dev/null @@ -1,30 +0,0 @@ -README this file -multi-tk.rb multiple Tk interpreter (included safe-Tk) support -remotei-tk.rb control remote Tk interpreter on the other process support -tk.rb Tk interface - -tk/ library files construct Ruby/Tk - -tkextlib/ non-standard Tcl/Tk extension support libraries - -********************************************************************* -*** The followings exists for backward compatibility only. -*** The only thing which they work is that requires current -*** library files ( tk/*.rb ). -********************************************************************* -tkafter.rb handles Tcl after -tkbgerror.rb Tk error module -tkcanvas.rb Tk canvas interface -tkclass.rb provides generic names for Tk classes -tkconsole.rb console command support -tkdialog.rb Tk dialog class -tkentry.rb Tk entry class -tkfont.rb Tk font support -tkmacpkg.rb Mac resource support -tkmenubar.rb TK menubar utility -tkmngfocus.rb focus manager -tkpalette.rb pallete support -tkscrollbox.rb scroll box, also example of compound widget -tktext.rb text classes -tkvirtevent.rb virtual event support -tkwinpkg.rb Win DDE and registry support diff --git a/ext/tk/lib/multi-tk.rb b/ext/tk/lib/multi-tk.rb deleted file mode 100644 index 38e4b28dec..0000000000 --- a/ext/tk/lib/multi-tk.rb +++ /dev/null @@ -1,2381 +0,0 @@ -# -# multi-tk.rb - supports multi Tk interpreters -# by Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> - -require 'tcltklib' -require 'tkutil' -require 'thread' - -if defined? Tk - fail RuntimeError, "'multi-tk' library must be required before requiring 'tk'" -end - -################################################ -# ignore exception on the mainloop? - -TclTkLib.mainloop_abort_on_exception = true -# TclTkLib.mainloop_abort_on_exception = false -# TclTkLib.mainloop_abort_on_exception = nil - - -################################################ -# add ThreadGroup check to TclTkIp.new -class << TclTkIp - alias __new__ new - private :__new__ - - def new(*args) - if Thread.current.group != ThreadGroup::Default - raise SecurityError, 'only ThreadGroup::Default can call TclTkIp.new' - end - __new__(*args) - end -end - - -################################################ -# exceptiopn to treat the return value from IP -class MultiTkIp_OK < Exception - def self.send(thread, ret=nil) - thread.raise self.new(ret) - end - - def initialize(ret=nil) - super('succeed') - @return_value = ret - end - - attr_reader :return_value - alias value return_value -end -MultiTkIp_OK.freeze - - -################################################ -# methods for construction -class MultiTkIp - SLAVE_IP_ID = ['slave'.freeze, '0'.taint].freeze - - @@IP_TABLE = {}.taint unless defined?(@@IP_TABLE) - - @@INIT_IP_ENV = [].taint unless defined?(@@INIT_IP_ENV) # table of Procs - @@ADD_TK_PROCS = [].taint unless defined?(@@ADD_TK_PROCS) # table of [name, args, body] - - @@TK_TABLE_LIST = [].taint unless defined?(@@TK_TABLE_LIST) - - @@TK_CMD_TBL = {}.taint unless defined?(@@TK_CMD_TBL) - - ###################################### - - @@CB_ENTRY_CLASS = Class.new(TkCallbackEntry){|c| - def initialize(ip, cmd) - @ip = ip - @cmd = cmd - end - attr_reader :ip, :cmd - def inspect - cmd.inspect - end - def call(*args) - begin - unless @ip.deleted? - @ip.cb_eval(@cmd, *args) - end - rescue TkCallbackBreak, TkCallbackContinue => e - fail e - rescue Exception => e - if @ip.safe? - # ignore - else - fail e - end - end - end - }.freeze - - ###################################### - - def _keys2opts(src_keys) - return nil if src_keys == nil - keys = {}; src_keys.each{|k, v| keys[k.to_s] = v} - #keys.collect{|k,v| "-#{k} #{v}"}.join(' ') - keys.collect{|k,v| "-#{k} #{TclTkLib._conv_listelement(TkComm::_get_eval_string(v))}"}.join(' ') - end - private :_keys2opts - - def _check_and_return(thread, exception, wait=0) - unless thread - unless exception.kind_of?(MultiTkIp_OK) || safe? - msg = "#{exception.class}: #{exception.message}" - begin - if @interp.deleted? - warn('Warning: ' + msg) - elsif @interp._eval_without_enc('info command bgerror').size != 0 - @interp._eval(@interp._merge_tklist('bgerror', msg)) - else - warn('Warning: ' + msg) - end - rescue Exception => e - warn('Warning: ' + msg) - warn('Warning: ' + e.message) - end - end - return nil - end - - if wait == 0 - # no wait - Thread.pass - if thread.stop? - thread.raise exception - end - return thread - end - - # wait to stop the caller thread - wait.times{ - if thread.stop? - # ready to send exception - thread.raise exception - return thread - end - - # wait - Thread.pass - } - - # unexpected error - thread.raise RuntimeError, "the thread may not wait for the return value" - return thread - end - - ###################################### - - def set_safe_level(safe) - if safe > @safe_level[0] - @safe_level[0] = safe - @cmd_queue.enq([@system, 'set_safe_level', safe]) - end - @safe_level[0] - end - def safe_level=(safe) - set_safe_level(safe) - end - def self.set_safe_level(safe) - __getip.set_safe_level(safe) - end - def self.safe_level=(safe) - self.set_safe_level(safe) - end - def safe_level - @safe_level[0] - end - def self.safe_level - __getip.safe_level - end - - def wait_on_mainloop? - @wait_on_mainloop[0] - end - def wait_on_mainloop=(bool) - @wait_on_mainloop[0] = bool - end - - def running_mainloop? - @wait_on_mainloop[1] - end - - def _destroy_slaves_of_slaveIP(ip) - unless ip.deleted? - ip._split_tklist(ip._invoke('interp', 'slaves')).each{|name| - begin - ip._eval_without_enc("#{name} eval {foreach i [after info] {after cancel $i}}") - rescue Exception - end - begin - # ip._invoke('interp', 'eval', name, 'destroy', '.') - ip._invoke(name, 'eval', 'destroy', '.') - rescue Exception - end - - # safe_base? - if ip._eval_without_enc("catch {::safe::interpConfigure #{name}}") == '0' - begin - ip._eval_without_enc("::safe::interpDelete #{name}") - rescue Exception - end - end -=begin - if ip._invoke('interp', 'exists', name) == '1' - begin - ip._invoke(name, 'eval', 'exit') - rescue Exception - end - end -=end - unless ip.deleted? - if ip._invoke('interp', 'exists', name) == '1' - begin - ip._invoke('interp', 'delete', name) - rescue Exception - end - end - end - } - end - end - - def _receiver_eval_proc_core(safe_level, thread, cmd, *args) - begin - #ret = proc{$SAFE = safe_level; cmd.call(*args)}.call - ret = cmd.call(safe_level, *args) - - rescue SystemExit => e - # delete IP - unless @interp.deleted? - @slave_ip_tbl.each{|name, subip| - _destroy_slaves_of_slaveIP(subip) - begin - subip._eval_without_enc("foreach i [after info] {after cancel $i}") - rescue Exception - end -=begin - begin - subip._invoke('destroy', '.') unless subip.deleted? - rescue Exception - end -=end - # safe_base? - if @interp._eval_without_enc("catch {::safe::interpConfigure #{name}}") == '0' - begin - @interp._eval_without_enc("::safe::interpDelete #{name}") - rescue Exception - else - next if subip.deleted? - end - end - if subip.respond_to?(:safe_base?) && subip.safe_base? && - !subip.deleted? - # do 'exit' to call the delete_hook procedure - begin - subip._eval_without_enc('exit') - rescue Exception - end - else - begin - subip.delete unless subip.deleted? - rescue Exception - end - end - } - - begin - @interp._eval_without_enc("foreach i [after info] {after cancel $i}") - rescue Exception - end - begin - @interp._invoke('destroy', '.') unless @interp.deleted? - rescue Exception - end - if @safe_base && !@interp.deleted? - # do 'exit' to call the delete_hook procedure - @interp._eval_without_enc('exit') - else - @interp.delete unless @interp.deleted? - end - end - - if e.backtrace[0] =~ /^(.+?):(\d+):in `(exit|exit!|abort)'/ - _check_and_return(thread, MultiTkIp_OK.new($3 == 'exit')) - else - _check_and_return(thread, MultiTkIp_OK.new(nil)) - end - - if master? && !safe? && allow_ruby_exit? -=begin - ObjectSpace.each_object(TclTkIp){|obj| - obj.delete unless obj.deleted? - } -=end - #exit(e.status) - fail e - end - # break - - rescue SecurityError => e - # in 'exit', 'exit!', and 'abort' : security error --> delete IP - if e.backtrace[0] =~ /^(.+?):(\d+):in `(exit|exit!|abort)'/ - ret = ($3 == 'exit') - unless @interp.deleted? - @slave_ip_tbl.each{|name, subip| - _destroy_slaves_of_slaveIP(subip) - begin - subip._eval_without_enc("foreach i [after info] {after cancel $i}") - rescue Exception - end -=begin - begin - subip._invoke('destroy', '.') unless subip.deleted? - rescue Exception - end -=end - # safe_base? - if @interp._eval_without_enc("catch {::safe::interpConfigure #{name}}") == '0' - begin - @interp._eval_without_enc("::safe::interpDelete #{name}") - rescue Exception - else - next if subip.deleted? - end - end - if subip.respond_to?(:safe_base?) && subip.safe_base? && - !subip.deleted? - # do 'exit' to call the delete_hook procedure - begin - subip._eval_without_enc('exit') - rescue Exception - end - else - begin - subip.delete unless subip.deleted? - rescue Exception - end - end - } - - begin - @interp._eval_without_enc("foreach i [after info] {after cancel $i}") - rescue Exception - end -=begin - begin - @interp._invoke('destroy', '.') unless @interp.deleted? - rescue Exception - end -=end - if @safe_base && !@interp.deleted? - # do 'exit' to call the delete_hook procedure - @interp._eval_without_enc('exit') - else - @interp.delete unless @interp.deleted? - end - end - _check_and_return(thread, MultiTkIp_OK.new(ret)) - # break - - else - # raise security error - _check_and_return(thread, e) - end - - rescue Exception => e - # raise exception - _check_and_return(thread, e) - - else - # no exception - _check_and_return(thread, MultiTkIp_OK.new(ret)) - end - end - - def _receiver_eval_proc(last_thread, safe_level, thread, cmd, *args) - if thread - Thread.new{ - last_thread.join if last_thread - unless @interp.deleted? - _receiver_eval_proc_core(safe_level, thread, cmd, *args) - end - } - else - Thread.new{ - unless @interp.deleted? - _receiver_eval_proc_core(safe_level, thread, cmd, *args) - end - } - last_thread - end - end - - private :_receiver_eval_proc, :_receiver_eval_proc_core - - def _receiver_mainloop(check_root) - Thread.new{ - while !@interp.deleted? - break if @interp._invoke_without_enc('info', 'command', '.').size == 0 - sleep 0.5 - end - } - end - - def _create_receiver_and_watchdog(lvl = $SAFE) - lvl = $SAFE if lvl < $SAFE - - # command-procedures receiver - receiver = Thread.new(lvl){|safe_level| - last_thread = nil - - loop do - break if @interp.deleted? - thread, cmd, *args = @cmd_queue.deq - if thread == @system - # control command - case cmd - when 'set_safe_level' - begin - safe_level = args[0] if safe_level < args[0] - rescue Exception - end - when 'call_mainloop' - thread = args.shift - _check_and_return(thread, - MultiTkIp_OK.new(_receiver_mainloop(*args))) - else - # ignore - end - - else - # procedure - last_thread = _receiver_eval_proc(last_thread, safe_level, - thread, cmd, *args) - end - end - } - - # watchdog of receiver - watchdog = Thread.new{ - begin - loop do - sleep 1 - break unless receiver.alive? - end - rescue Exception - # ignore all kind of Exception - end - # receiver is dead - loop do - thread, cmd, *args = @cmd_queue.deq - next unless thread - if thread.alive? - if @interp.deleted? - thread.raise RuntimeError, 'the interpreter is already deleted' - else - thread.raise RuntimeError, - 'the interpreter no longer receives command procedures' - end - end - end - } - - # return threads - [receiver, watchdog] - end - private :_check_and_return, :_create_receiver_and_watchdog - - ###################################### - - if self.const_defined? :DEFAULT_MASTER_NAME - name = DEFAULT_MASTER_NAME.to_s - else - name = nil - end - if self.const_defined?(:DEFAULT_MASTER_OPTS) && - DEFAULT_MASTER_OPTS.kind_of?(Hash) - keys = DEFAULT_MASTER_OPTS - else - keys = {} - end - - @@DEFAULT_MASTER = self.allocate - @@DEFAULT_MASTER.instance_eval{ - @tk_windows = {}.taint - - @tk_table_list = [].taint - - @slave_ip_tbl = {}.taint - - @slave_ip_top = {}.taint - - unless keys.kind_of? Hash - fail ArgumentError, "expecting a Hash object for the 2nd argument" - end - - @interp = TclTkIp.new(name, _keys2opts(keys)) - @ip_name = nil - - @system = Object.new - - @wait_on_mainloop = [true, false] - - @threadgroup = Thread.current.group - - @safe_base = false - - @safe_level = [$SAFE] - - @cmd_queue = Queue.new - - @cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog(@safe_level[0]) - - @threadgroup.add @cmd_receiver - @threadgroup.add @receiver_watchdog - - # NOT enclose @threadgroup for @@DEFAULT_MASTER - - @@IP_TABLE[ThreadGroup::Default] = self - @@IP_TABLE[@threadgroup] = self - - ################################# - - @assign_request = Class.new(Exception){ - def self.new(target, ret) - obj = super() - obj.target = target - obj.ret = ret - obj - end - attr_accessor :target, :ret - } - - @assign_thread = Thread.new{ - loop do - begin - Thread.stop - rescue @assign_request=>req - begin - req.ret[0] = req.target.instance_eval{ - @cmd_receiver, @receiver_watchdog = - _create_receiver_and_watchdog(@safe_level[0]) - @threadgroup.add @cmd_receiver - @threadgroup.add @receiver_watchdog - @threadgroup.enclose - true - } - rescue Exception=>e - begin - req.ret[0] = e - rescue Exception - # ignore - end - end - rescue Exception - # ignore - end - end - } - - def self.assign_receiver_and_watchdog(target) - ret = [nil] - @assign_thread.raise(@assign_request.new(target, ret)) - while ret[0] == nil - unless @assign_thread.alive? - raise RuntimeError, 'lost the thread to assign a receiver and a watchdog thread' - end - end - if ret[0].kind_of?(Exception) - raise ret[0] - else - ret[0] - end - end - - ################################# - - class << self - undef :instance_eval - end - } - @@DEFAULT_MASTER.freeze # defend against modification - - ###################################### - - def self.inherited(subclass) - # trust if on ThreadGroup::Default or @@DEFAULT_MASTER's ThreadGroup - if @@IP_TABLE[Thread.current.group] == @@DEFAULT_MASTER - begin - class << subclass - self.methods.each{|m| - begin - unless m == '__id__' || m == '__send__' || m == 'freeze' - undef_method(m) - end - rescue Exception - # ignore all exceptions - end - } - end - ensure - subclass.freeze - fail SecurityError, - "cannot create subclass of MultiTkIp on a untrusted ThreadGroup" - end - end - end - - ###################################### - - SAFE_OPT_LIST = [ - 'accessPath'.freeze, - 'statics'.freeze, - 'nested'.freeze, - 'deleteHook'.freeze - ].freeze - - def _parse_slaveopts(keys) - name = nil - safe = false - safe_opts = {} - tk_opts = {} - - keys.each{|k,v| - k_str = k.to_s - if k_str == 'name' - name = v - elsif k_str == 'safe' - safe = v - elsif SAFE_OPT_LIST.member?(k_str) - safe_opts[k_str] = v - else - tk_opts[k_str] = v - end - } - - if keys['without_tk'] || keys[:without_tk] - [name, safe, safe_opts, nil] - else - [name, safe, safe_opts, tk_opts] - end - end - private :_parse_slaveopts - - def _create_slave_ip_name - name = SLAVE_IP_ID.join('') - SLAVE_IP_ID[1].succ! - name - end - private :_create_slave_ip_name - - ###################################### - - def __check_safetk_optkeys(optkeys) - # based on 'safetk.tcl' - new_keys = {} - optkeys.each{|k,v| new_keys[k.to_s] = v} - - # check 'display' - if !new_keys.key?('display') - begin - #new_keys['display'] = @interp._invoke('winfo screen .') - new_keys['display'] = @interp._invoke('winfo', 'screen', '.') - rescue - if ENV[DISPLAY] - new_keys['display'] = ENV[DISPLAY] - elsif !new_keys.key?('use') - warn "Warning: no screen info or ENV[DISPLAY], so use ':0.0'" - new_keys['display'] = ':0.0' - end - end - end - - # check 'use' - if new_keys.key?('use') - # given 'use' - case new_keys['use'] - when TkWindow - new_keys['use'] = TkWinfo.id(new_keys['use']) - #assoc_display = @interp._eval('winfo screen .') - assoc_display = @interp._invoke('winfo', 'screen', '.') - when /^\..*/ - new_keys['use'] = @interp._invoke('winfo', 'id', new_keys['use']) - assoc_display = @interp._invoke('winfo', 'screen', new_keys['use']) - else - begin - pathname = @interp._invoke('winfo', 'pathname', new_keys['use']) - assco_display = @interp._invoke('winfo', 'screen', pathname) - rescue - assoc_display = new_keys['display'] - end - end - - # match display? - if assoc_display != new_keys['display'] - if optkeys.keys?(:display) || optkeys.keys?('display') - fail RuntimeError, - "conflicting 'display'=>#{new_keys['display']} " + - "and display '#{assoc_display}' on 'use'=>#{new_keys['use']}" - else - new_keys['display'] = assoc_display - end - end - end - - # return - new_keys - end - private :__check_safetk_optkeys - - def __create_safetk_frame(slave_ip, slave_name, app_name, keys) - # display option is used by ::safe::loadTk - loadTk_keys = {} - loadTk_keys['display'] = keys['display'] - dup_keys = keys.dup - - # keys for toplevel : allow followings - toplevel_keys = {} - ['height', 'width', 'background', 'menu'].each{|k| - toplevel_keys[k] = dup_keys.delete(k) if dup_keys.key?(k) - } - toplevel_keys['classname'] = 'SafeTk' - toplevel_keys['screen'] = dup_keys.delete('display') - - # other keys used by pack option of container frame - - # create toplevel widget - begin - top = TkToplevel.new(toplevel_keys) - rescue NameError - fail unless @interp.safe? - fail SecurityError, "unable create toplevel on the safe interpreter" - end - msg = "Untrusted Ruby/Tk applet (#{slave_name})" - if app_name.kind_of?(String) - top.title "#{app_name} (#{slave_name})" - else - top.title msg - end - - # procedure to delete slave interpreter - slave_delete_proc = proc{ - unless slave_ip.deleted? - #if slave_ip._invoke('info', 'command', '.') != "" - # slave_ip._invoke('destroy', '.') - #end - #slave_ip.delete - slave_ip._eval_without_enc('exit') - end - top.destroy if top.winfo_exist? - } - tag = TkBindTag.new.bind('Destroy', slave_delete_proc) - - top.bindtags = top.bindtags.unshift(tag) - - # create control frame - TkFrame.new(top, :bg=>'red', :borderwidth=>3, :relief=>'ridge') {|fc| - fc.bindtags = fc.bindtags.unshift(tag) - - TkFrame.new(fc, :bd=>0){|f| - TkButton.new(f, - :text=>'Delete', :bd=>1, :padx=>2, :pady=>0, - :highlightthickness=>0, :command=>slave_delete_proc - ).pack(:side=>:right, :fill=>:both) - f.pack(:side=>:right, :fill=>:both, :expand=>true) - } - - TkLabel.new(fc, :text=>msg, :padx=>2, :pady=>0, - :anchor=>:w).pack(:side=>:left, :fill=>:both, :expand=>true) - - fc.pack(:side=>:bottom, :fill=>:x) - } - - # container frame for slave interpreter - dup_keys['fill'] = :both unless dup_keys.key?('fill') - dup_keys['expand'] = true unless dup_keys.key?('expand') - c = TkFrame.new(top, :container=>true).pack(dup_keys) - - # return keys - loadTk_keys['use'] = TkWinfo.id(c) - [loadTk_keys, top.path] - end - private :__create_safetk_frame - - def __create_safe_slave_obj(safe_opts, app_name, tk_opts) - # safe interpreter - ip_name = _create_slave_ip_name - slave_ip = @interp.create_slave(ip_name, true) - @slave_ip_tbl[ip_name] = slave_ip - def slave_ip.safe_base? - true - end - - @interp._eval("::safe::interpInit #{ip_name}") - - slave_ip._invoke('set', 'argv0', app_name) if app_name.kind_of?(String) - - if tk_opts - tk_opts = __check_safetk_optkeys(tk_opts) - if tk_opts.key?('use') - @slave_ip_top[ip_name] = '' - else - tk_opts, top_path = __create_safetk_frame(slave_ip, ip_name, app_name, - tk_opts) - @slave_ip_top[ip_name] = top_path - end - @interp._eval("::safe::loadTk #{ip_name} #{_keys2opts(tk_opts)}") - else - @slave_ip_top[ip_name] = nil - end - - if safe_opts.key?('deleteHook') || safe_opts.key?(:deleteHook) - @interp._eval("::safe::interpConfigure #{ip_name} " + - _keys2opts(safe_opts)) - else - @interp._eval("::safe::interpConfigure #{ip_name} " + - _keys2opts(safe_opts) + '-deleteHook {' + - TkComm._get_eval_string(proc{|slave| - self._default_delete_hook(slave) - }) + '}') - end - - [slave_ip, ip_name] - end - - def __create_trusted_slave_obj(name, keys) - ip_name = _create_slave_ip_name - slave_ip = @interp.create_slave(ip_name, false) - slave_ip._invoke('set', 'argv0', name) if name.kind_of?(String) - slave_ip._invoke('set', 'argv', _keys2opts(keys)) - @interp._invoke('load', '', 'Tk', ip_name) - @slave_ip_tbl[ip_name] = slave_ip - [slave_ip, ip_name] - end - - ###################################### - - def _create_slave_object(keys={}) - ip = MultiTkIp.new_slave(self, keys={}) - @slave_ip_tbl[ip.name] = ip - end - - ###################################### - - def initialize(master, safeip=true, keys={}) - if $SAFE >= 4 - fail SecurityError, "cannot create a new interpreter at level #{$SAFE}" - end - - if safeip == nil && $SAFE >= 2 - fail SecurityError, "cannot create a master-ip at level #{$SAFE}" - end - - if !master.master? && master.safe? - fail SecurityError, "safe-slave-ip cannot create a new interpreter" - end - - if safeip == nil && !master.master? - fail SecurityError, "slave-ip cannot create a master-ip" - end - - unless keys.kind_of? Hash - fail ArgumentError, "expecting a Hash object for the 2nd argument" - end - - @tk_windows = {} - @tk_table_list = [] - @slave_ip_tbl = {} - @slave_ip_top = {} - - @tk_windows.taint unless @tk_windows.tainted? - @tk_table_list.taint unless @tk_table_list.tainted? - @slave_ip_tbl.taint unless @slave_ip_tbl.tainted? - @slave_ip_top.taint unless @slave_ip_top.tainted? - - name, safe, safe_opts, tk_opts = _parse_slaveopts(keys) - - safe = 4 if safe && !safe.kind_of?(Fixnum) - - @safe_base = false - - if safeip == nil - # create master-ip - @interp = TclTkIp.new(name, _keys2opts(tk_opts)) - - @ip_name = nil - if safe - safe = $SAFE if safe < $SAFE - @safe_level = [safe] - else - @safe_level = [$SAFE] - end - else - # create slave-ip - if safeip || master.safe? - @safe_base = true - @interp, @ip_name = master.__create_safe_slave_obj(safe_opts, - name, tk_opts) - if safe - safe = master.safe_level if safe < master.safe_level - @safe_level = [safe] - else - @safe_level = [4] - end - else - @interp, @ip_name = master.__create_trusted_slave_obj(name, tk_opts) - if safe - safe = master.safe_level if safe < master.safe_level - @safe_level = [safe] - else - @safe_level = [master.safe_level] - end - end - @set_alias_proc = proc{|name| - master._invoke('interp', 'alias', @ip_name, name, '', name) - }.freeze - end - - @system = Object.new - - @wait_on_mainloop = [true, false] - - @threadgroup = ThreadGroup.new - - @cmd_queue = Queue.new - -=begin - @cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog(@safe_level[0]) - - @threadgroup.add @cmd_receiver - @threadgroup.add @receiver_watchdog - - @threadgroup.enclose -=end - @@DEFAULT_MASTER.assign_receiver_and_watchdog(self) - - @@IP_TABLE[@threadgroup] = self - _init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS) - @@TK_TABLE_LIST.size.times{ - (tbl = {}).tainted? || tbl.taint - @tk_table_list << tbl - } - - class << self - undef :instance_eval - end - - self.freeze # defend against modification - end - - ###################################### - - def _default_delete_hook(slave) - if @slave_ip_top[slave].kind_of?(String) - # call default hook of safetk.tcl (ignore exceptions) - if @slave_ip_top[slave] == '' - begin - @interp._eval("::safe::disallowTk #{slave}") - rescue - warn("Waring: fail to call '::safe::disallowTk'") if $DEBUG - end - else # toplevel path - begin - @interp._eval("::safe::tkDelete {} #{@slave_ip_top[slave]} #{slave}") - rescue - warn("Waring: fail to call '::safe::tkDelete'") if $DEBUG - begin - @interp._eval("destroy #{@slave_ip_top[slave]}") - rescue - warn("Waring: fail to destroy toplevel") if $DEBUG - end - end - end - end - @slave_ip_tbl.delete(slave) - @slave_ip_top.delete(slave) - end -end - - -# get target IP -class MultiTkIp - def self._ip_id_ - __getip._ip_id_ - end - def _ip_id_ - '' - end - - def self.__getip - if Thread.current.group == ThreadGroup::Default - @@DEFAULT_MASTER - else - ip = @@IP_TABLE[Thread.current.group] - unless ip - fail SecurityError, - "cannot call Tk methods on #{Thread.current.inspect}" - end - ip - end - end -end - - -# aliases of constructor -class << MultiTkIp - alias __new new - private :__new - - - def new_master(safe=nil, keys={}) - if safe.kind_of?(Hash) - keys = safe - elsif safe.kind_of?(Integer) - raise ArgumentError, "unexpected argument(s)" unless keys.kind_of?(Hash) - if !keys.key?(:safe) && !keys.key?('safe') - keys[:safe] = safe - end - elsif safe == nil - # do nothing - else - raise ArgumentError, "unexpected argument(s)" - end - - ip = __new(__getip, nil, keys) - ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given? - ip - end - - alias new new_master - - def new_slave(safe=nil, keys={}) - if safe.kind_of?(Hash) - keys = safe - elsif safe.kind_of?(Integer) - raise ArgumentError, "unexpected argument(s)" unless keys.kind_of?(Hash) - if !keys.key?(:safe) && !keys.key?('safe') - keys[:safe] = safe - end - elsif safe == nil - # do nothing - else - raise ArgumentError, "unexpected argument(s)" - end - - ip = __new(__getip, false, keys) - ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given? - ip - end - alias new_trusted_slave new_slave - - def new_safe_slave(safe=4, keys={}) - if safe.kind_of?(Hash) - keys = safe - elsif safe.kind_of?(Integer) - raise ArgumentError, "unexpected argument(s)" unless keys.kind_of?(Hash) - if !keys.key?(:safe) && !keys.key?('safe') - keys[:safe] = safe - end - else - raise ArgumentError, "unexpected argument(s)" - end - - ip = __new(__getip, true, keys) - ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given? - ip - end - alias new_safeTk new_safe_slave -end - - -# get info -class MultiTkIp - def inspect - s = self.to_s.chop! - if master? - s << ':master' - else - if @interp.safe? - s << ':safe-slave' - else - s << ':trusted-slave' - end - end - s << '>' - end - - def master? - if @ip_name - false - else - true - end - end - def self.master? - __getip.master? - end - - def slave? - not master? - end - def self.slave? - not self.master? - end - - def alive? - begin - return false unless @cmd_receiver.alive? - return false if @interp.deleted? - return false if @interp._invoke('interp', 'exists', '') == '0' - rescue Exception - return false - end - true - end - def self.alive? - __getip.alive? - end - - def path - @ip_name || '' - end - def self.path - __getip.path - end - def ip_name - @ip_name || '' - end - def self.ip_name - __getip.ip_name - end - def to_eval - @ip_name || '' - end - def self.to_eval - __getip.to_eval - end - - def slaves(all = false) - @interp._invoke('interp','slaves').split.map!{|name| - if @slave_ip_tbl.key?(name) - @slave_ip_tbl[name] - elsif all - name - else - nil - end - }.compact! - end - def self.slaves(all = false) - __getip.slaves(all) - end -end - - -# instance methods to treat tables -class MultiTkIp - def _tk_cmd_tbl - tbl = {} - MultiTkIp.tk_cmd_tbl.each{|id, ent| tbl[id] = ent if ent.ip == self } - tbl - end - - def _tk_windows - @tk_windows - end - - def _tk_table_list - @tk_table_list - end - - def _add_new_tables - (@@TK_TABLE_LIST.size - @tk_table_list.size).times{ - (tbl = {}).tainted? || tbl.taint - @tk_table_list << tbl - } - end - - def _init_ip_env(script) - script.call(self) - end - - def _add_tk_procs(name, args, body) - return if slave? - @interp._invoke('proc', name, args, body) if args && body - @interp._invoke('interp', 'slaves').split.each{|slave| - @interp._invoke('interp', 'alias', slave, name, '', name) - } - end - - def _init_ip_internal(init_ip_env, add_tk_procs) - init_ip_env.each{|script| script.call(self)} - add_tk_procs.each{|name, args, body| - if master? - @interp._invoke('proc', name, args, body) if args && body - else - @set_alias_proc.call(name) - end - } - end -end - - -# class methods to treat tables -class MultiTkIp - def self.tk_cmd_tbl - @@TK_CMD_TBL - end - def self.tk_windows - __getip._tk_windows - end - def self.tk_object_table(id) - __getip._tk_table_list[id] - end - def self.create_table - #if __getip.slave? - # raise SecurityError, "slave-IP has no permission creating a new table" - #end - id = @@TK_TABLE_LIST.size - obj = Object.new - @@TK_TABLE_LIST << obj - obj.instance_eval <<-EOD - def self.method_missing(m, *args) - MultiTkIp.tk_object_table(#{id}).__send__(m, *args) - end - EOD - obj.freeze - @@IP_TABLE.each{|tg, ip| ip._add_new_tables } - return obj - end - - def self.init_ip_env(script = Proc.new) - @@INIT_IP_ENV << script - @@IP_TABLE.each{|tg, ip| - ip._init_ip_env(script) - } - end - - def self.add_tk_procs(name, args=nil, body=nil) - @@ADD_TK_PROCS << [name, args, body] - @@IP_TABLE.each{|tg, ip| - ip._add_tk_procs(name, args, body) - } - end - - def self.init_ip_internal - __getip._init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS) - end -end - - -# for callback operation -class MultiTkIp - def self.get_cb_entry(cmd) - @@CB_ENTRY_CLASS.new(__getip, cmd).freeze - end - - def cb_eval(cmd, *args) - #self.eval_callback{ TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *args)) } - #ret = self.eval_callback{ TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *args)) } - ret = self.eval_callback(*args){|safe, *params| - $SAFE=safe; TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *params)) - } - if ret.kind_of?(Exception) - raise ret - end - end -end - - -# evaluate a procedure on the proper interpreter -class MultiTkIp - # instance method - def eval_proc_core(req_val, cmd, *args) - # check - unless cmd.kind_of?(Proc) || cmd.kind_of?(Method) - raise RuntimeError, "A Proc/Method object is expected for the 'cmd' argument" - end - - # on IP thread - if (@cmd_receiver == Thread.current) - begin - ret = cmd.call(*args) - rescue SystemExit - # exit IP - warn("Warning: "+ $! + " on " + self.inspect) if $DEBUG - begin - self._eval_without_enc('exit') - rescue Exception - end - self.delete - ret = nil - rescue Exception => e - if $DEBUG - warn("Warning: " + e.class.inspect + - ((e.message.length > 0)? ' "' + e.message + '"': '') + - " on " + self.inspect) - end - ret = e - end - return ret - end - - # send cmd to the proc-queue - unless req_val - begin - @cmd_queue.enq([nil, cmd, *args]) - rescue Exception => e - # ignore - if $DEBUG || true - warn("Warning: " + e.class.inspect + - ((e.message.length > 0)? ' "' + e.message + '"': '') + - " on " + self.inspect) - end - return e - end - return nil - end - - # send and get return value by exception - begin - @cmd_queue.enq([Thread.current, cmd, *args]) - Thread.stop - rescue MultiTkIp_OK => ret - # return value - return ret.value - rescue SystemExit => e - # exit IP - warn("Warning: " + $! + " on " + self.inspect) if $DEBUG - begin - self._eval_without_enc('exit') - rescue Exception - end - if !safe? && allow_ruby_exit? - self.delete - fail e - else - self.delete - end - rescue Exception => e - if $DEBUG - warn("Warning: " + e.class.inspect + - ((e.message.length > 0)? ' "' + e.message + '"': '') + - " on " + self.inspect) - end - return e - end - return nil - end - private :eval_proc_core - -=begin - def eval_callback(*args) - if block_given? - eval_proc_core(false, proc{$SAFE=@safe_level[0]; Proc.new}.call, *args) - else - eval_proc_core(false, *args) - end - end -=end - def eval_callback(*args) - if block_given? - eval_proc_core(false, Proc.new, *args) - else - eval_proc_core(false, *args) - end - end - -=begin - def eval_proc(*args) - if block_given? - eval_proc_core(true, proc{$SAFE=@safe_level[0]; Proc.new}.call, *args) - else - eval_proc_core(true, *args) - end - end -=end - def eval_proc(*args) - # The scope of the eval-block of 'eval_proc' method is different from - # the enternal. If you want to pass local values to the eval-block, - # use arguments of eval_proc method. They are passed to block-arguments. - if block_given? - cmd = Proc.new - else - unless (cmd = args.shift) - fail ArgumentError, "A Proc or Method object is expected for 1st argument" - end - end - eval_proc_core(true, - proc{|safe, *params| - $SAFE=safe; Thread.new(*params, &cmd).value - }, - *args) - end - alias call eval_proc - - def bg_eval_proc(*args) - if block_given? - cmd = Proc.new - else - unless (cmd = args.shift) - fail ArgumentError, "A Proc or Method object is expected for 1st argument" - end - end - Thread.new{ - eval_proc_core(false, - proc{|safe, *params| - $SAFE=safe; Thread.new(*params, &cmd).value - }, - *args) - } - end - alias background_eval_proc bg_eval_proc - alias bg_call bg_eval_proc - alias background_call bg_eval_proc - - def eval_string(cmd, *eval_args) - # cmd string ==> proc - unless cmd.kind_of?(String) - raise RuntimeError, "A String object is expected for the 'cmd' argument" - end - - eval_proc_core(true, proc{|safe| $SAFE=safe; Kernel.eval(cmd, *eval_args)}) - end - alias eval_str eval_string - - def bg_eval_string(*args) - # cmd string ==> proc - unless cmd.kind_of?(String) - raise RuntimeError, "A String object is expected for the 'cmd' argument" - end - Thread.new{ - eval_proc_core(true, - proc{|safe| $SAFE=safe; Kernel.eval(cmd, *eval_args)}) - } - end - alias background_eval_string bg_eval_string - alias bg_eval_str bg_eval_string - alias background_eval_str bg_eval_string -end - -class << MultiTkIp - # class method -=begin - def eval_proc(cmd = proc{$SAFE=__getip.safe_level; Proc.new}.call, *args) - # class ==> interp object - __getip.eval_proc(cmd, *args) - end -=end -=begin - def eval_proc(*args) - # class ==> interp object - if block_given? - __getip.eval_proc(proc{$SAFE=__getip.safe_level; Proc.new}.call, *args) - else - __getip.eval_proc(*args) - end - end -=end -#=begin - def eval_proc(*args, &blk) - # class ==> interp object - __getip.eval_proc(*args, &blk) - end -#=end - alias call eval_proc - alias eval_string eval_proc -end - - -# event loop -# all master/slave IPs are controled by only one event-loop -class << MultiTkIp - def mainloop(check_root = true) - __getip.mainloop(check_root) - end - def mainloop_watchdog(check_root = true) - __getip.mainloop_watchdog(check_root) - end - def do_one_event(flag = TclTkLib::EventFlag::ALL) - __getip.do_one_event(flag) - end - def mainloop_abort_on_exception - # __getip.mainloop_abort_on_exception - TclTkLib.mainloop_abort_on_exception - end - def mainloop_abort_on_exception=(mode) - # __getip.mainloop_abort_on_exception=(mode) - TclTkLib.mainloop_abort_on_exception=(mode) - end - def set_eventloop_tick(tick) - __getip.set_eventloop_tick(tick) - end - def get_eventloop_tick - __getip.get_eventloop_tick - end - def set_no_event_wait(tick) - __getip.set_no_event_wait(tick) - end - def get_no_event_wait - __getip.get_no_event_wait - end - def set_eventloop_weight(loop_max, no_event_tick) - __getip.set_eventloop_weight(loop_max, no_event_tick) - end - def get_eventloop_weight - __getip.get_eventloop_weight - end -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 - - def safe? - __getip.safe? - end - - def safe_base? - begin - __getip.safe_base? - rescue - false - end - end - - def allow_ruby_exit? - __getip.allow_ruby_exit? - end - - def allow_ruby_exit= (mode) - __getip.allow_ruby_exit = mode - end - - def delete - __getip.delete - end - - def deleteed? - __getip.deleted? - end - - def abort(msg = nil) - __getip.abort(msg) - end - - def exit(st = true) - __getip.exit(st) - end - - def exit!(st = false) - __getip.exit!(st) - end - - def restart(app_name = nil, keys = {}) - init_ip_internal - - __getip._invoke('set', 'argv0', app_name) if app_name - if keys.kind_of?(Hash) - __getip._invoke('set', 'argv', _keys2opts(keys)) - end - - __getip.restart - end - - def _eval(str) - __getip._eval(str) - end - - def _invoke(*args) - __getip._invoke(*args) - end - - def _eval_without_enc(str) - __getip._eval_without_enc(str) - end - - def _invoke_without_enc(*args) - __getip._invoke_without_enc(*args) - end - - def _eval_with_enc(str) - __getip._eval_with_enc(str) - end - - def _invoke_with_enc(*args) - __getip._invoke_with_enc(*args) - end - - def _toUTF8(str, encoding) - __getip._toUTF8(str, encoding) - end - - def _fromUTF8(str, encoding) - __getip._fromUTF8(str, encoding) - end - - def _thread_vwait(var) - __getip._thread_vwait(var) - end - - def _thread_tkwait(mode, target) - __getip._thread_tkwait(mode, target) - end - - def _return_value - __getip._return_value - end - - def _get_variable(var, flag) - __getip._get_variable(var, flag) - end - def _get_variable2(var, idx, flag) - __getip._get_variable2(var, idx, flag) - end - def _set_variable(var, value, flag) - __getip._set_variable(var, value, flag) - end - def _set_variable2(var, idx, value, flag) - __getip._set_variable2(var, idx, value, flag) - end - def _unset_variable(var, flag) - __getip._unset_variable(var, flag) - end - def _unset_variable2(var, idx, flag) - __getip._unset_variable2(var, idx, flag) - end - - def _get_global_var(var) - __getip._get_global_var(var) - end - def _get_global_var2(var, idx) - __getip._get_global_var2(var, idx) - end - def _set_global_var(var, value) - __getip._set_global_var(var, value) - end - def _set_global_var2(var, idx, value) - __getip._set_global_var2(var, idx, value) - end - def _unset_global_var(var) - __getip._unset_global_var(var) - end - def _unset_global_var2(var, idx) - __getip._unset_global_var2(var, idx) - end - - def _split_tklist(str) - __getip._split_tklist(str) - end - def _merge_tklist(*args) - __getip._merge_tklist(*args) - end - def _conv_listelement(arg) - __getip._conv_listelement(arg) - end -end - - -# wrap methods on TclTkLib : not permit calling TclTkLib module methods -class << TclTkLib - def mainloop(check_root = true) - MultiTkIp.mainloop(check_root) - end - def mainloop_watchdog(check_root = true) - MultiTkIp.mainloop_watchdog(check_root) - end - def do_one_event(flag = TclTkLib::EventFlag::ALL) - MultiTkIp.do_one_event(flag) - end - #def mainloop_abort_on_exception - # MultiTkIp.mainloop_abort_on_exception - #end - #def mainloop_abort_on_exception=(mode) - # MultiTkIp.mainloop_abort_on_exception=(mode) - #end - def set_eventloop_tick(tick) - MultiTkIp.set_eventloop_tick(tick) - end - def get_eventloop_tick - MultiTkIp.get_eventloop_tick - end - def set_no_event_wait(tick) - MultiTkIp.set_no_event_wait(tick) - end - def get_no_event_wait - MultiTkIp.get_no_event_wait - end - def set_eventloop_weight(loop_max, no_event_tick) - MultiTkIp.set_eventloop_weight(loop_max, no_event_tick) - end - def get_eventloop_weight - MultiTkIp.get_eventloop_weight - end - def restart(*args) - MultiTkIp.restart(*args) - end - - def _merge_tklist(*args) - MultiTkIp._merge_tklist(*args) - end - def _conv_listelement(arg) - MultiTkIp._conv_listelement(arg) - end -end - - -# depend on TclTkIp -class MultiTkIp - def mainloop(check_root = true, restart_on_dead = false) - #return self if self.slave? - #return self if self != @@DEFAULT_MASTER - if self != @@DEFAULT_MASTER - if @wait_on_mainloop[0] - begin - @wait_on_mainloop[1] = true - @cmd_queue.enq([@system, 'call_mainloop', - Thread.current, check_root]) - Thread.stop - rescue MultiTkIp_OK => ret - # return value - @wait_on_mainloop[1] = false - return ret.value.value - rescue SystemExit - # exit IP - warn("Warning: " + $! + " on " + self.inspect) if $DEBUG - @wait_on_mainloop[1] = false - begin - self._eval_without_enc('exit') - rescue Exception - end - self.delete - rescue Exception => e - if $DEBUG - warn("Warning: " + e.class.inspect + - ((e.message.length > 0)? ' "' + e.message + '"': '') + - " on " + self.inspect) - end - @wait_on_mainloop[1] = false - return e - ensure - @wait_on_mainloop[1] = false - end - end - return - end - - unless restart_on_dead - @wait_on_mainloop[1] = true - @interp.mainloop(check_root) - @wait_on_mainloop[1] = false - else - begin - @wait_on_mainloop[1] = true - loop do - break unless self.alive? - if check_root - begin - break if TclTkLib.num_of_mainwindows == 0 - rescue Exception - break - end - end - @interp.mainloop(check_root) - end - #rescue StandardError - rescue Exception - if TclTkLib.mainloop_abort_on_exception != nil - STDERR.print("Warning: Tk mainloop receives ", $!.class.inspect, - " exception (ignore) : ", $!.message, "\n"); - end - retry - ensure - @wait_on_mainloop[1] = false - end - end - self - end - - def make_safe - @interp.make_safe - end - - def safe? - @interp.safe? - end - - def safe_base? - @safe_base - end - - def allow_ruby_exit? - @interp.allow_ruby_exit? - end - - def allow_ruby_exit= (mode) - @interp.allow_ruby_exit = mode - end - - def delete - @slave_ip_tbl.each{|name, subip| - _destroy_slaves_of_slaveIP(subip) -=begin - begin - subip._invoke('destroy', '.') unless subip.deleted? - rescue Exception - end -=end - begin - subip._eval_without_enc("foreach i [after info] {after cancel $i}") - rescue Exception - end - - # safe_base? - if @interp._eval_without_enc("catch {::safe::interpConfigure #{name}}") == '0' - begin - @interp._eval_without_enc("::safe::interpDelete #{name}") - rescue Exception - else - next if subip.deleted? - end - end - if subip.respond_to?(:safe_base?) && subip.safe_base? && - !subip.deleted? - # do 'exit' to call the delete_hook procedure - begin - subip._eval_without_enc('exit') - rescue Exception - end - else - begin - subip.delete unless subip.deleted? - rescue Exception - end - end - } - - begin - @interp._eval_without_enc("foreach i [after info] {after cancel $i}") - rescue Exception - end -=begin - begin - @interp._invoke('destroy', '.') unless @interp.deleted? - rescue Exception - end -=end - if @safe_base && !@interp.deleted? - # do 'exit' to call the delete_hook procedure - @interp._eval_without_enc('exit') - else - @interp.delete unless @interp.deleted? - end - self - end - - def deleted? - @interp.deleted? - end - - def abort(msg = nil) - if master? - if msg - Kernel.abort(msg) - else - Kernel.abort - end - else - # ignore msg - delete - 1 - end - end - - def exit(st = true) - if master? - Kernel.exit(st) - else - delete - st - end - end - - def exit!(st = false) - if master? && !safe? && allow_ruby_exit? - Kernel.exit!(st) - else - delete - st - end - end - - def restart(app_name = nil, keys = {}) - _init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS) - - @interp._invoke('set', 'argv0', app_name) if app_name - if keys.kind_of?(Hash) - @interp._invoke('set', 'argv', _keys2opts(keys)) - end - - @interp.restart - end - - def __eval(str) - @interp.__eval(str) - end - - def __invoke(*args) - @interp.__invoke(*args) - end - - def _eval(str) - @interp._eval(str) - end - - def _invoke(*args) - @interp._invoke(*args) - end - - def _eval_without_enc(str) - @interp._eval_without_enc(str) - end - - def _invoke_without_enc(*args) - @interp._invoke_without_enc(*args) - end - - def _eval_with_enc(str) - @interp._eval_with_enc(str) - end - - def _invoke_with_enc(*args) - @interp._invoke_with_enc(*args) - end - - def _toUTF8(str, encoding) - @interp._toUTF8(str, encoding) - end - - def _fromUTF8(str, encoding) - @interp._fromUTF8(str, encoding) - end - - def _thread_vwait(var) - @interp._thread_vwait(var) - end - - def _thread_tkwait(mode, target) - @interp._thread_tkwait(mode, target) - end - - def _return_value - @interp._return_value - end - - def _get_variable(var, flag) - @interp._get_variable(var, flag) - end - def _get_variable2(var, idx, flag) - @interp._get_variable2(var, idx, flag) - end - def _set_variable(var, value, flag) - @interp._set_variable(var, value, flag) - end - def _set_variable2(var, idx, value, flag) - @interp._set_variable2(var, idx, value, flag) - end - def _unset_variable(var, flag) - @interp._unset_variable(var, flag) - end - def _unset_variable2(var, idx, flag) - @interp._unset_variable2(var, idx, flag) - end - - def _get_global_var(var) - @interp._get_global_var(var) - end - def _get_global_var2(var, idx) - @interp._get_global_var2(var, idx) - end - def _set_global_var(var, value) - @interp._set_global_var(var, value) - end - def _set_global_var2(var, idx, value) - @interp._set_global_var2(var, idx, value) - end - def _unset_global_var(var) - @interp._unset_global_var(var) - end - def _unset_global_var2(var, idx) - @interp._unset_global_var2(var, idx) - end - - def _split_tklist(str) - @interp._split_tklist(str) - end - def _merge_tklist(*args) - @interp._merge_tklist(*args) - end - def _conv_listelement(arg) - @interp._conv_listelement(arg) - end -end - - -# interp command support -class MultiTkIp - def _lst2ary(str) - return [] if str == "" - idx = str.index('{') - while idx and idx > 0 and str[idx-1] == ?\\ - idx = str.index('{', idx+1) - end - return str.split unless idx - - list = str[0,idx].split - str = str[idx+1..-1] - i = -1 - brace = 1 - str.each_byte {|c| - i += 1 - brace += 1 if c == ?{ - brace -= 1 if c == ?} - break if brace == 0 - } - if i == 0 - list.push '' - elsif str[0, i] == ' ' - list.push ' ' - else - list.push str[0..i-1] - end - #list += _lst2ary(str[i+1..-1]) - list.concat(_lst2ary(str[i+1..-1])) - list - end - private :_lst2ary - - def _slavearg(slave) - if slave.kind_of?(MultiTkIp) - slave.path - elsif slave.kind_of?(String) - slave - else - cmd_name.to_s - end - end - private :_slavearg - - def alias_info(slave, cmd_name) - _lst2ary(@interp._invoke('interp', 'alias', _slavearg(slave), cmd_name)) - end - def self.alias_info(slave, cmd_name) - __getip.alias_info(slave, cmd_name) - end - - def alias_delete(slave, cmd_name) - @interp._invoke('interp', 'alias', _slavearg(slave), cmd_name, '') - self - end - def self.alias_delete(slave, cmd_name) - __getip.alias_delete(slave, cmd_name) - self - end - - def def_alias(slave, new_cmd, org_cmd, *args) - ret = @interp._invoke('interp', 'alias', _slavearg(slave), new_cmd, - '', org_cmd, *args) - (ret == new_cmd)? self: nil - end - def self.def_alias(slave, new_cmd, org_cmd, *args) - ret = __getip.def_alias(slave, new_cmd, org_cmd, *args) - (ret == new_cmd)? self: nil - end - - def aliases(slave = '') - _lst2ary(@interp._invoke('interp', 'aliases', _slavearg(slave))) - end - def self.aliases(slave = '') - __getip.aliases(slave) - end - - def delete_slaves(*args) - slaves = args.collect{|s| _slavearg(s)} - @interp._invoke('interp', 'delete', *slaves) if slaves.size > 0 - self - end - def self.delete_slaves(*args) - __getip.delete_slaves(*args) - self - end - - def exist?(slave = '') - ret = @interp._invoke('interp', 'exists', _slavearg(slave)) - (ret == '1')? true: false - end - def self.exist?(slave = '') - __getip.exist?(slave) - end - - def delete_cmd(slave, cmd) - slave_invoke = @interp._invoke('list', 'rename', cmd, '') - @interp._invoke('interp', 'eval', _slavearg(slave), slave_invoke) - self - end - def self.delete_cmd(slave, cmd) - __getip.delete_cmd(slave, cmd) - self - end - - def expose_cmd(slave, cmd, aliasname = nil) - if aliasname - @interp._invoke('interp', 'expose', _slavearg(slave), cmd, aliasname) - else - @interp._invoke('interp', 'expose', _slavearg(slave), cmd) - end - self - end - def self.expose_cmd(slave, cmd, aliasname = nil) - __getip.expose_cmd(slave, cmd, aliasname) - self - end - - def hide_cmd(slave, cmd, aliasname = nil) - if aliasname - @interp._invoke('interp', 'hide', _slavearg(slave), cmd, aliasname) - else - @interp._invoke('interp', 'hide', _slavearg(slave), cmd) - end - self - end - def self.hide_cmd(slave, cmd, aliasname = nil) - __getip.hide_cmd(slave, cmd, aliasname) - self - end - - def hidden_cmds(slave = '') - _lst2ary(@interp._invoke('interp', 'hidden', _slavearg(slave))) - end - def self.hidden_cmds(slave = '') - __getip.hidden_cmds(slave) - end - - def invoke_hidden(slave, cmd, *args) - @interp._invoke('interp', 'invokehidden', _slavearg(slave), cmd, *args) - end - def self.invoke_hidden(slave, cmd, *args) - __getip.invoke_hidden(slave, cmd, *args) - end - - def invoke_hidden_on_global(slave, cmd, *args) - @interp._invoke('interp', 'invokehidden', _slavearg(slave), - '-global', cmd, *args) - end - def self.invoke_hidden_on_global(slave, cmd, *args) - __getip.invoke_hidden_on_global(slave, cmd, *args) - end - - def mark_trusted(slave = '') - @interp._invoke('interp', 'marktrusted', _slavearg(slave)) - self - end - def self.mark_trusted(slave = '') - __getip.mark_trusted(slave) - self - end - - def recursion_limit(slave = '', limit = None) - number(@interp._invoke('interp', 'recursionlimit', - _slavearg(slave), limit)) - end - def self.recursion_limit(slave = '', limit = None) - __getip.recursion_limit(slave) - end - - def alias_target(aliascmd, slave = '') - @interp._invoke('interp', 'target', _slavearg(slave), aliascmd) - end - def self.alias_target(aliascmd, slave = '') - __getip.alias_target(aliascmd, slave) - end - - def share_stdin(dist, src = '') - @interp._invoke('interp', 'share', src, 'stdin', dist) - self - end - def self.share_stdin(dist, src = '') - __getip.share_stdin(dist, src) - self - end - - def share_stdout(dist, src = '') - @interp._invoke('interp', 'share', src, 'stdout', dist) - self - end - def self.share_stdout(dist, src = '') - __getip.share_stdout(dist, src) - self - end - - def share_stderr(dist, src = '') - @interp._invoke('interp', 'share', src, 'stderr', dist) - self - end - def self.share_stderr(dist, src = '') - __getip.share_stderr(dist, src) - self - end - - def transfer_stdin(dist, src = '') - @interp._invoke('interp', 'transfer', src, 'stdin', dist) - self - end - def self.transfer_stdin(dist, src = '') - __getip.transfer_stdin(dist, src) - self - end - - def transfer_stdout(dist, src = '') - @interp._invoke('interp', 'transfer', src, 'stdout', dist) - self - end - def self.transfer_stdout(dist, src = '') - __getip.transfer_stdout(dist, src) - self - end - - def transfer_stderr(dist, src = '') - @interp._invoke('interp', 'transfer', src, 'stderr', dist) - self - end - def self.transfer_stderr(dist, src = '') - __getip.transfer_stderr(dist, src) - self - end - - def share_stdio(dist, src = '') - @interp._invoke('interp', 'share', src, 'stdin', dist) - @interp._invoke('interp', 'share', src, 'stdout', dist) - @interp._invoke('interp', 'share', src, 'stderr', dist) - self - end - def self.share_stdio(dist, src = '') - __getip.share_stdio(dist, src) - self - end - - def transfer_stdio(dist, src = '') - @interp._invoke('interp', 'transfer', src, 'stdin', dist) - @interp._invoke('interp', 'transfer', src, 'stdout', dist) - @interp._invoke('interp', 'transfer', src, 'stderr', dist) - self - end - def self.transfer_stdio(dist, src = '') - __getip.transfer_stdio(dist, src) - self - end -end - - -# Safe Base :: manipulating safe interpreter -class MultiTkIp - def safeip_configure(slot, value=None) - # use for '-noStatics' option ==> {statics=>false} - # for '-nestedLoadOk' option ==> {nested=>true} - if slot.kind_of?(Hash) - ip = MultiTkIp.__getip - ip._eval('::safe::interpConfigure ' + @ip_name + ' ' + _keys2opts(slot)) - else - ip._eval('::safe::interpConfigure ' + @ip_name + ' ' + - "-#{slot} #{_get_eval_string(value)}") - end - self - end - - def safeip_configinfo(slot = nil) - ip = MultiTkIp.__getip - ret = {} - if slot - conf = _lst2ary(ip._eval("::safe::interpConfigure " + - @ip_name + " -#{slot}")) - if conf[0] == '-deleteHook' - if conf[1] =~ /^rb_out\S* (c(_\d+_)?\d+)/ - ret[conf[0][1..-1]] = MultiTkIp._tk_cmd_tbl[$1] - else - ret[conf[0][1..-1]] = conf[1] - end - else - ret[conf[0][1..-1]] = conf[1] - end - else - Hash[*_lst2ary(ip._eval("::safe::interpConfigure " + - @ip_name))].each{|k, v| - if k == '-deleteHook' - if v =~ /^rb_out\S* (c(_\d+_)?\d+)/ - ret[k[1..-1]] = MultiTkIp._tk_cmd_tbl[$1] - else - ret[k[1..-1]] = v - end - else - ret[k[1..-1]] = v - end - } - end - ret - end - - def safeip_delete - ip = MultiTkIp.__getip - ip._eval("::safe::interpDelete " + @ip_name) - end - - def safeip_add_to_access_path(dir) - ip = MultiTkIp.__getip - ip._eval("::safe::interpAddToAccessPath #{@ip_name} #{dir}") - end - - def safeip_find_in_access_path(dir) - ip = MultiTkIp.__getip - ip._eval("::safe::interpFindInAccessPath #{@ip_name} #{dir}") - end - - def safeip_set_log_cmd(cmd = Proc.new) - ip = MultiTkIp.__getip - ip._eval("::safe::setLogCmd #{@ip_name} #{_get_eval_string(cmd)}") - end -end - - -# encoding convert -class MultiTkIp - def encoding - @interp.encoding - end - def encoding=(enc) - @interp.encoding = enc - end - - def encoding_convertfrom(str, enc=None) - @interp.encoding_convertfrom(str, enc) - end - alias encoding_convert_from encoding_convertfrom - - def encoding_convertto(str, enc=None) - @interp.encoding_convertto(str, enc) - end - alias encoding_convert_to encoding_convertto -end - - -# remove methods for security -class MultiTkIp - # undef_method :instance_eval - undef_method :instance_variable_get - undef_method :instance_variable_set -end - - -# end of MultiTkIp definition - -# defend against modification -#MultiTkIp.freeze -#TclTkLib.freeze - -######################################## -# start Tk which depends on MultiTkIp -module TkCore - INTERP = MultiTkIp -end -require 'tk' diff --git a/ext/tk/lib/remote-tk.rb b/ext/tk/lib/remote-tk.rb deleted file mode 100644 index 1ef5310bde..0000000000 --- a/ext/tk/lib/remote-tk.rb +++ /dev/null @@ -1,468 +0,0 @@ -# -# remote-tk.rb - supports to control remote Tk interpreters -# by Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> - -if defined? MultiTkIp - fail RuntimeError, "'remote-tk' library must be required before requiring 'multi-tk'" -end - -class MultiTkIp; end -class RemoteTkIp < MultiTkIp; end - -class MultiTkIp - @@IP_TABLE = {}.taint unless defined?(@@IP_TABLE) - @@TK_TABLE_LIST = [].taint unless defined?(@@TK_TABLE_LIST) - def self._IP_TABLE; @@IP_TABLE; end - def self._TK_TABLE_LIST; @@TK_TABLE_LIST; end - - @flag = true - def self._DEFAULT_MASTER - # work only once - if @flag - @flag = nil - @@DEFAULT_MASTER - else - nil - end - end -end -class RemoteTkIp - @@IP_TABLE = MultiTkIp._IP_TABLE unless defined?(@@IP_TABLE) - @@TK_TABLE_LIST = MultiTkIp._TK_TABLE_LIST unless defined?(@@TK_TABLE_LIST) -end -class << MultiTkIp - undef _IP_TABLE - undef _TK_TABLE_LIST -end - -require 'multi-tk' - -class RemoteTkIp - if defined?(@@DEFAULT_MASTER) - MultiTkIp._DEFAULT_MASTER - else - @@DEFAULT_MASTER = MultiTkIp._DEFAULT_MASTER - end -end - - -############################### - -class << RemoteTkIp - undef new_master, new_slave, new_safe_slave - undef new_trusted_slave, new_safeTk - - def new(*args, &b) - ip = __new(*args) - ip.eval_proc(&b) if b - ip - end -end - -class RemoteTkIp - include TkUtil - - def initialize(remote_ip, displayof=nil, timeout=5) - if $SAFE >= 4 - fail SecurityError, "cannot access another interpreter at level #{$SAFE}" - end - - @interp = MultiTkIp.__getip - @interp.allow_ruby_exit = false - @appname = @interp._invoke('tk', 'appname') - @remote = remote_ip.dup.freeze - if displayof.kind_of?(TkWindow) - @displayof = displayof.path.dup.freeze - else - @displayof = nil - end - if self.deleted? - fail RuntimeError, "no Tk application named \"#{@remote}\"" - end - - @tk_windows = {} - @tk_table_list = [] - @slave_ip_tbl = {} - @slave_ip_top = {} - - @tk_windows.taint unless @tk_windows.tainted? - @tk_table_list.taint unless @tk_table_list.tainted? - @slave_ip_tbl.taint unless @slave_ip_tbl.tainted? - @slave_ip_top.taint unless @slave_ip_top.tainted? - - @system = Object.new - - @threadgroup = ThreadGroup.new - - @safe_level = [$SAFE] - - @wait_on_mainloop = [true, false] - - @cmd_queue = Queue.new - -=begin - @cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog() - - @threadgroup.add @cmd_receiver - @threadgroup.add @receiver_watchdog - - @threadgroup.enclose -=end - @@DEFAULT_MASTER.assign_receiver_and_watchdog(self) - - @@IP_TABLE[@threadgroup] = self - @@TK_TABLE_LIST.size.times{ - (tbl = {}).tainted? || tbl.taint - @tk_table_list << tbl - } - - @ret_val = TkVariable.new - if timeout > 0 && ! _available_check(timeout) - fail RuntimeError, "cannot create connection" - end - @ip_id = _create_connection - - class << self - undef :instance_eval - end - - self.freeze # defend against modification - end - - def _ip_id_ - @ip_id - end - - def _available_check(timeout = 5) - return nil if timeout < 1 - @ret_val.value = '' - @interp._invoke('send', '-async', @remote, - 'send', '-async', Tk.appname, - "set #{@ret_val.id} ready") - Tk.update - if @ret_val != 'ready' - (1..(timeout*5)).each{ - sleep 0.2 - Tk.update - break if @ret_val == 'ready' - } - end - @ret_val.value == 'ready' - end - private :_available_check - - def _create_connection - ip_id = '_' + @interp._invoke('send', @remote, <<-'EOS') + '_' - if {[catch {set _rubytk_control_ip_id_} ret] != 0} { - set _rubytk_control_ip_id_ 0 - } else { - set _rubytk_control_ip_id_ [expr $ret + 1] - } - return $_rubytk_control_ip_id_ - EOS - - @interp._invoke('send', @remote, <<-EOS) - proc rb_out#{ip_id} args { - send #{@appname} rb_out \$args - } - EOS - - ip_id - end - private :_create_connection - - def _appsend(enc_mode, async, *cmds) - p ['_appsend', [@remote, @displayof], enc_mode, async, cmds] if $DEBUG - if $SAFE >= 4 - fail SecurityError, "cannot send commands at level 4" - elsif $SAFE >= 1 && cmds.find{|obj| obj.tainted?} - fail SecurityError, "cannot send tainted commands at level #{$SAFE}" - end - - cmds = @interp._merge_tklist(*_conv_args([], enc_mode, *cmds)) - if @displayof - if async - @interp.__invoke('send', '-async', '-displayof', @displayof, - '--', @remote, *cmds) - else - @interp.__invoke('send', '-displayof', @displayof, - '--', @remote, *cmds) - end - else - if async - @interp.__invoke('send', '-async', '--', @remote, *cmds) - else - @interp.__invoke('send', '--', @remote, *cmds) - end - end - end - private :_appsend - - def ready?(timeout=5) - if timeout < 0 - fail ArgumentError, "timeout must be positive number" - end - _available_check(timeout) - end - - def is_rubytk? - return false if _appsend(false, false, 'info', 'command', 'ruby') == "" - [ _appsend(false, false, 'ruby', 'RUBY_VERSION'), - _appsend(false, false, 'set', 'tk_patchLevel') ] - end - - def appsend(async, *args) - if async != true && async != false && async != nil - args.unshift(async) - async = false - end - if @displayof - Tk.appsend_displayof(@remote, @displayof, async, *args) - else - Tk.appsend(@remote, async, *args) - end - end - - def rb_appsend(async, *args) - if async != true && async != false && async != nil - args.unshift(async) - async = false - end - if @displayof - Tk.rb_appsend_displayof(@remote, @displayof, async, *args) - else - Tk.rb_appsend(@remote, async, *args) - end - end - - def create_slave(name, safe=false) - if safe - safe_opt = '' - else - safe_opt = '-safe' - end - _appsend(false, false, "interp create #{safe_opt} -- #{name}") - end - - def make_safe - fail RuntimeError, 'cannot change safe mode of the remote interpreter' - end - - def safe? - _appsend(false, false, 'interp issafe') - end - - def safe_base? - false - end - - def allow_ruby_exit? - false - end - - def allow_ruby_exit= (mode) - fail RuntimeError, 'cannot change mode of the remote interpreter' - end - - def delete - _appsend(false, true, 'exit') - end - - def deleted? - if @displayof - lst = @interp._invoke_without_enc('winfo', 'interps', - '-displayof', @displayof) - else - lst = @interp._invoke_without_enc('winfo', 'interps') - end - unless @interp._split_tklist(lst).index(@remote) - true - else - false - end - end - - def restart - fail RuntimeError, 'cannot restart the remote interpreter' - end - - def __eval(str) - _appsend(false, false, str) - end - def _eval(str) - _appsend(nil, false, str) - end - def _eval_without_enc(str) - _appsend(false, false, str) - end - def _eval_with_enc(str) - _appsend(true, false, str) - end - - def _invoke(*args) - _appsend(nil, false, *args) - end - - def __invoke(*args) - _appsend(false, false, *args) - end - def _invoke(*args) - _appsend(nil, false, *args) - end - def _invoke_without_enc(*args) - _appsend(false, false, *args) - end - def _invoke_with_enc(*args) - _appsend(true, false, *args) - end - - def _toUTF8(str, encoding) - @interp._toUTF8(str, encoding) - end - - def _fromUTF8(str, encoding) - @interp._fromUTF8(str, encoding) - end - - def _thread_vwait(var_name) - _appsend(false, 'thread_vwait', varname) - end - - def _thread_tkwait(mode, target) - _appsend(false, 'thread_tkwait', mode, target) - end - - def _return_value - @interp._return_value - end - - def _get_variable(var_name, flag) - # ignore flag - _appsend(false, 'set', _get_eval_string(var_name)) - end - def _get_variable2(var_name, index_name, flag) - # ignore flag - _appsend(false, 'set', "#{_get_eval_string(var_name)}(#{_get_eval_string(index_name)})") - end - - def _set_variable(var_name, value, flag) - # ignore flag - _appsend(false, 'set', _get_eval_string(var_name), _get_eval_string(value)) - end - def _set_variable2(var_name, index_name, value, flag) - # ignore flag - _appsend(false, 'set', "#{_get_eval_string(var_name)}(#{_get_eval_string(index_name)})", _get_eval_string(value)) - end - - def _unset_variable(var_name, flag) - # ignore flag - _appsend(false, 'unset', _get_eval_string(var_name)) - end - def _unset_variable2(var_name, index_name, flag) - # ignore flag - _appsend(false, 'unset', "#{var_name}(#{index_name})") - end - - def _get_global_var(var_name) - _appsend(false, 'set', _get_eval_string(var_name)) - end - def _get_global_var2(var_name, index_name) - _appsend(false, 'set', "#{_get_eval_string(var_name)}(#{_get_eval_string(index_name)})") - end - - def _set_global_var(var_name, value) - _appsend(false, 'set', _get_eval_string(var_name), _get_eval_string(value)) - end - def _set_global_var2(var_name, index_name, value) - _appsend(false, 'set', "#{_get_eval_string(var_name)}(#{_get_eval_string(index_name)})", _get_eval_string(value)) - end - - def _unset_global_var(var_name) - _appsend(false, 'unset', _get_eval_string(var_name)) - end - def _unset_global_var2(var_name, index_name) - _appsend(false, 'unset', "#{var_name}(#{index_name})") - end - - def _split_tklist(str) - @interp._split_tklist(str) - end - - def _merge_tklist(*args) - @interp._merge_tklist(*args) - end - - def _conv_listelement(str) - @interp._conv_listelement(str) - end - - def mainloop - fail RuntimeError, 'not support "mainloop" on the remote interpreter' - end - def mainloop_watchdog - fail RuntimeError, 'not support "mainloop_watchdog" on the remote interpreter' - end - def do_one_evant(flag = nil) - fail RuntimeError, 'not support "do_one_event" on the remote interpreter' - end - def mainloop_abort_on_exception - fail RuntimeError, 'not support "mainloop_abort_on_exception" on the remote interpreter' - end - def mainloop_abort_on_exception=(mode) - fail RuntimeError, 'not support "mainloop_abort_on_exception=" on the remote interpreter' - end - def set_eventloop_tick(*args) - fail RuntimeError, 'not support "set_eventloop_tick" on the remote interpreter' - end - def get_eventloop_tick - fail RuntimeError, 'not support "get_eventloop_tick" on the remote interpreter' - end - def set_no_event_wait(*args) - fail RuntimeError, 'not support "set_no_event_wait" on the remote interpreter' - end - def get_no_event_wait - fail RuntimeError, 'not support "get_no_event_wait" on the remote interpreter' - end - def set_eventloop_weight(*args) - fail RuntimeError, 'not support "set_eventloop_weight" on the remote interpreter' - end - def get_eventloop_weight - fail RuntimeError, 'not support "get_eventloop_weight" on the remote interpreter' - end -end - -class << RemoteTkIp - def mainloop(*args) - fail RuntimeError, 'not support "mainloop" on the remote interpreter' - end - def mainloop_watchdog(*args) - fail RuntimeError, 'not support "mainloop_watchdog" on the remote interpreter' - end - def do_one_evant(flag = nil) - fail RuntimeError, 'not support "do_one_event" on the remote interpreter' - end - def mainloop_abort_on_exception - fail RuntimeError, 'not support "mainloop_abort_on_exception" on the remote interpreter' - end - def mainloop_abort_on_exception=(mode) - fail RuntimeError, 'not support "mainloop_abort_on_exception=" on the remote interpreter' - end - def set_eventloop_tick(*args) - fail RuntimeError, 'not support "set_eventloop_tick" on the remote interpreter' - end - def get_eventloop_tick - fail RuntimeError, 'not support "get_eventloop_tick" on the remote interpreter' - end - def set_no_event_wait(*args) - fail RuntimeError, 'not support "set_no_event_wait" on the remote interpreter' - end - def get_no_event_wait - fail RuntimeError, 'not support "get_no_event_wait" on the remote interpreter' - end - def set_eventloop_weight(*args) - fail RuntimeError, 'not support "set_eventloop_weight" on the remote interpreter' - end - def get_eventloop_weight - fail RuntimeError, 'not support "get_eventloop_weight" on the remote interpreter' - end -end diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb deleted file mode 100644 index 5fa4665922..0000000000 --- a/ext/tk/lib/tk.rb +++ /dev/null @@ -1,3862 +0,0 @@ -# -# tk.rb - Tk interface module using tcltklib -# $Date$ -# by Yukihiro Matsumoto <matz@netlab.jp> - -# use Shigehiro's tcltklib -require 'tcltklib' -require 'tkutil' - -# autoload -require 'tk/autoload' - -class TclTkIp - # backup original (without encoding) _eval and _invoke - alias _eval_without_enc _eval - alias _invoke_without_enc _invoke - - def _ip_id_ - '' - end -end - -# define TkComm module (step 1: basic functions) -module TkComm - include TkUtil - extend TkUtil - - WidgetClassNames = {}.taint - TkExtlibAutoloadModule = [].taint - - # None = Object.new ### --> definition is moved to TkUtil module - # def None.to_s - # 'None' - # end - # None.freeze - - #Tk_CMDTBL = {} - #Tk_WINDOWS = {} - Tk_IDs = ["00000".taint, "00000".taint].freeze # [0]-cmdid, [1]-winid - - # for backward compatibility - Tk_CMDTBL = Object.new - def Tk_CMDTBL.method_missing(id, *args) - TkCore::INTERP.tk_cmd_tbl.__send__(id, *args) - end - Tk_CMDTBL.freeze - Tk_WINDOWS = Object.new - def Tk_WINDOWS.method_missing(id, *args) - TkCore::INTERP.tk_windows.__send__(id, *args) - end - Tk_WINDOWS.freeze - - self.instance_eval{ - @cmdtbl = [].taint - } - - unless const_defined?(:GET_CONFIGINFO_AS_ARRAY) - # GET_CONFIGINFO_AS_ARRAY = false => returns a Hash { opt =>val, ... } - # true => returns an Array [[opt,val], ... ] - # val is a list which includes resource info. - GET_CONFIGINFO_AS_ARRAY = true - end - unless const_defined?(:GET_CONFIGINFOwoRES_AS_ARRAY) - # for configinfo without resource info; list of [opt, value] pair - # false => returns a Hash { opt=>val, ... } - # true => returns an Array [[opt,val], ... ] - GET_CONFIGINFOwoRES_AS_ARRAY = true - end - # *** ATTENTION *** - # 'current_configinfo' method always returns a Hash under all cases of above. - - def error_at - frames = caller() - frames.delete_if do |c| - c =~ %r!/tk(|core|thcore|canvas|text|entry|scrollbox)\.rb:\d+! - end - frames - end - private :error_at - - def _genobj_for_tkwidget(path) - return TkRoot.new if path == '.' - - begin - #tk_class = TkCore::INTERP._invoke('winfo', 'class', path) - tk_class = Tk.ip_invoke_without_enc('winfo', 'class', path) - rescue - return path - end - - if ruby_class = WidgetClassNames[tk_class] - ruby_class_name = ruby_class.name - # gen_class_name = ruby_class_name + 'GeneratedOnTk' - gen_class_name = ruby_class_name - classname_def = '' - else # ruby_class == nil - mods = TkExtlibAutoloadModule.find_all{|m| m.const_defined?(tk_class)} - mods.each{|mod| - begin - mod.const_get(tk_class) # auto_load - break if (ruby_class = WidgetClassNames[tk_class]) - rescue LoadError - # ignore load error - end - } - - unless ruby_class - std_class = 'Tk' << tk_class - if Object.const_defined?(std_class) - Object.const_get(std_class) # auto_load - ruby_class = WidgetClassNames[tk_class] - end - end - - if ruby_class - # found - ruby_class_name = ruby_class.name - gen_class_name = ruby_class_name - classname_def = '' - else - # unknown - ruby_class_name = 'TkWindow' - gen_class_name = 'TkWidget_' + tk_class - classname_def = "WidgetClassName = '#{tk_class}'.freeze" - end - end - -################################### -=begin - if ruby_class = WidgetClassNames[tk_class] - ruby_class_name = ruby_class.name - # gen_class_name = ruby_class_name + 'GeneratedOnTk' - gen_class_name = ruby_class_name - classname_def = '' - else - mod = TkExtlibAutoloadModule.find{|m| m.const_defined?(tk_class)} - if mod - ruby_class_name = mod.name + '::' + tk_class - gen_class_name = ruby_class_name - classname_def = '' - elsif Object.const_defined?('Tk' + tk_class) - ruby_class_name = 'Tk' + tk_class - # gen_class_name = ruby_class_name + 'GeneratedOnTk' - gen_class_name = ruby_class_name - classname_def = '' - else - ruby_class_name = 'TkWindow' - # gen_class_name = ruby_class_name + tk_class + 'GeneratedOnTk' - gen_class_name = 'TkWidget_' + tk_class - classname_def = "WidgetClassName = '#{tk_class}'.freeze" - end - end -=end - -=begin - unless Object.const_defined? gen_class_name - Object.class_eval "class #{gen_class_name}<#{ruby_class_name} - #{classname_def} - end" - end - Object.class_eval "#{gen_class_name}.new('widgetname'=>'#{path}', - 'without_creating'=>true)" -=end - base = Object - gen_class_name.split('::').each{|klass| - next if klass == '' - if base.const_defined?(klass) - base = base.class_eval klass - else - base = base.class_eval "class #{klass}<#{ruby_class_name} - #{classname_def} - end - #{klass}" - end - } - base.class_eval "#{gen_class_name}.new('widgetname'=>'#{path}', - 'without_creating'=>true)" - end - private :_genobj_for_tkwidget - module_function :_genobj_for_tkwidget - - def _at(x,y) - "@#{Integer(x)},#{Integer(y)}" - end - module_function :_at - - def tk_tcl2ruby(val, enc_mode = false, listobj = true) - if val =~ /^rb_out\S* (c(_\d+_)?\d+)/ - #return Tk_CMDTBL[$1] - return TkCore::INTERP.tk_cmd_tbl[$1] - #cmd_obj = TkCore::INTERP.tk_cmd_tbl[$1] - #if cmd_obj.kind_of?(Proc) || cmd_obj.kind_of?(Method) - # cmd_obj - #else - # cmd_obj.cmd - #end - end - #if val.include? ?\s - # return val.split.collect{|v| tk_tcl2ruby(v)} - #end - case val - when /^@font/ - TkFont.get_obj(val) - when /^-?\d+$/ - val.to_i - when /^\./ - #Tk_WINDOWS[val] ? Tk_WINDOWS[val] : _genobj_for_tkwidget(val) - TkCore::INTERP.tk_windows[val]? - TkCore::INTERP.tk_windows[val] : _genobj_for_tkwidget(val) - when /^i(_\d+_)?\d+$/ - TkImage::Tk_IMGTBL[val]? TkImage::Tk_IMGTBL[val] : val - when /^-?\d+\.?\d*(e[-+]?\d+)?$/ - val.to_f - when /\\ / - val.gsub(/\\ /, ' ') - when /[^\\] / - if listobj - tk_split_escstr(val).collect{|elt| - tk_tcl2ruby(elt, enc_mode, listobj) - } - elsif enc_mode - _fromUTF8(val) - else - val - end - else - if enc_mode - _fromUTF8(val) - else - val - end - end - end - - private :tk_tcl2ruby - module_function :tk_tcl2ruby - #private_class_method :tk_tcl2ruby - -unless const_defined?(:USE_TCLs_LIST_FUNCTIONS) - USE_TCLs_LIST_FUNCTIONS = true -end - -if USE_TCLs_LIST_FUNCTIONS - ########################################################################### - # use Tcl function version of split_list - ########################################################################### - - def tk_split_escstr(str) - TkCore::INTERP._split_tklist(str) - end - - def tk_split_sublist(str, depth=-1) - # return [] if str == "" - # list = TkCore::INTERP._split_tklist(str) - if depth == 0 - return "" if str == "" - list = [str] - else - return [] if str == "" - list = TkCore::INTERP._split_tklist(str) - end - if list.size == 1 - tk_tcl2ruby(list[0], nil, false) - else - list.collect{|token| tk_split_sublist(token, depth - 1)} - end - end - - def tk_split_list(str, depth=0) - return [] if str == "" - TkCore::INTERP._split_tklist(str).collect{|token| - tk_split_sublist(token, depth - 1) - } - end - - def tk_split_simplelist(str) - #lst = TkCore::INTERP._split_tklist(str) - #if (lst.size == 1 && lst =~ /^\{.*\}$/) - # TkCore::INTERP._split_tklist(str[1..-2]) - #else - # lst - #end - TkCore::INTERP._split_tklist(str) - end - - def array2tk_list(ary) - return "" if ary.size == 0 - - dst = ary.collect{|e| - if e.kind_of? Array - array2tk_list(e) - elsif e.kind_of? Hash - tmp_ary = [] - #e.each{|k,v| tmp_ary << k << v } - e.each{|k,v| tmp_ary << "-#{_get_eval_string(k)}" << v } - array2tk_list(tmp_ary) - else - _get_eval_string(e) - end - } - TkCore::INTERP._merge_tklist(*dst) - end - -else - ########################################################################### - # use Ruby script version of split_list (traditional methods) - ########################################################################### - - def tk_split_escstr(str) - return [] if str == "" - list = [] - token = nil - escape = false - brace = 0 - str.split('').each {|c| - brace += 1 if c == '{' && !escape - brace -= 1 if c == '}' && !escape - if brace == 0 && c == ' ' && !escape - list << token.gsub(/^\{(.*)\}$/, '\1') if token - token = nil - else - token = (token || "") << c - end - escape = (c == '\\' && !escape) - } - list << token.gsub(/^\{(.*)\}$/, '\1') if token - list - end - - def tk_split_sublist(str, depth=-1) - #return [] if str == "" - #return [tk_split_sublist(str[1..-2])] if str =~ /^\{.*\}$/ - #list = tk_split_escstr(str) - if depth == 0 - return "" if str == "" - str = str[1..-2] if str =~ /^\{.*\}$/ - list = [str] - else - return [] if str == [] - return [tk_split_sublist(str[1..-2], depth - 1)] if str =~ /^\{.*\}$/ - list = tk_split_escstr(str) - end - if list.size == 1 - tk_tcl2ruby(list[0], nil, false) - else - list.collect{|token| tk_split_sublist(token, depth - 1)} - end - end - - def tk_split_list(str, depth=0) - return [] if str == "" - tk_split_escstr(str).collect{|token| tk_split_sublist(token, depth - 1)} - end -=begin - def tk_split_list(str) - return [] if str == "" - idx = str.index('{') - while idx and idx > 0 and str[idx-1] == ?\\ - idx = str.index('{', idx+1) - end - unless idx - list = tk_tcl2ruby(str) - unless Array === list - list = [list] - end - return list - end - - list = tk_tcl2ruby(str[0,idx]) - list = [] if list == "" - str = str[idx+1..-1] - i = -1 - escape = false - brace = 1 - str.each_byte {|c| - i += 1 - brace += 1 if c == ?{ && !escape - brace -= 1 if c == ?} && !escape - escape = (c == ?\\) - break if brace == 0 - } - if str.size == i + 1 - return tk_split_list(str[0, i]) - end - if str[0, i] == ' ' - list.push ' ' - else - list.push tk_split_list(str[0, i]) - end - list += tk_split_list(str[i+1..-1]) - list - end -=end - - def tk_split_simplelist(str) - return [] if str == "" - list = [] - token = nil - escape = false - brace = 0 - str.split('').each {|c| - if c == '\\' && !escape - escape = true - token = (token || "") << c if brace > 0 - next - end - brace += 1 if c == '{' && !escape - brace -= 1 if c == '}' && !escape - if brace == 0 && c == ' ' && !escape - list << token.gsub(/^\{(.*)\}$/, '\1') if token - token = nil - else - token = (token || "") << c - end - escape = false - } - list << token.gsub(/^\{(.*)\}$/, '\1') if token - list - end - - def array2tk_list(ary) - ary.collect{|e| - if e.kind_of? Array - "{#{array2tk_list(e)}}" - elsif e.kind_of? Hash - # "{#{e.to_a.collect{|ee| array2tk_list(ee)}.join(' ')}}" - e.each{|k,v| tmp_ary << "-#{_get_eval_string(k)}" << v } - array2tk_list(tmp_ary) - else - s = _get_eval_string(e) - (s.index(/\s/) || s.size == 0)? "{#{s}}": s - end - }.join(" ") - end -end - - private :tk_split_escstr, :tk_split_sublist - private :tk_split_list, :tk_split_simplelist - private :array2tk_list - - module_function :tk_split_escstr, :tk_split_sublist - module_function :tk_split_list, :tk_split_simplelist - module_function :array2tk_list - - private_class_method :tk_split_escstr, :tk_split_sublist - private_class_method :tk_split_list, :tk_split_simplelist - private_class_method :array2tk_list - -=begin - ### --> definition is moved to TkUtil module - def _symbolkey2str(keys) - h = {} - keys.each{|key,value| h[key.to_s] = value} - h - end - private :_symbolkey2str - module_function :_symbolkey2str -=end - -=begin - ### --> definition is moved to TkUtil module - # def hash_kv(keys, enc_mode = nil, conf = [], flat = false) - def hash_kv(keys, enc_mode = nil, conf = nil) - # Hash {key=>val, key=>val, ... } or Array [ [key, val], [key, val], ... ] - # ==> Array ['-key', val, '-key', val, ... ] - dst = [] - if keys and keys != None - keys.each{|k, v| - #dst.push("-#{k}") - dst.push('-' + k.to_s) - if v != None - # v = _get_eval_string(v, enc_mode) if (enc_mode || flat) - v = _get_eval_string(v, enc_mode) if enc_mode - dst.push(v) - end - } - end - if conf - conf + dst - else - dst - end - end - private :hash_kv - module_function :hash_kv -=end - -=begin - ### --> definition is moved to TkUtil module - def bool(val) - case val - when "1", 1, 'yes', 'true' - true - else - false - end - end - - def number(val) - case val - when /^-?\d+$/ - val.to_i - when /^-?\d+\.?\d*(e[-+]?\d+)?$/ - val.to_f - else - fail(ArgumentError, "invalid value for Number:'#{val}'") - end - end - def string(val) - if val == "{}" - '' - elsif val[0] == ?{ && val[-1] == ?} - val[1..-2] - else - val - end - end - def num_or_str(val) - begin - number(val) - rescue ArgumentError - string(val) - end - end -=end - - def list(val, depth=0) - tk_split_list(val, depth) - end - def simplelist(val) - tk_split_simplelist(val) - end - def window(val) - if val =~ /^\./ - #Tk_WINDOWS[val]? Tk_WINDOWS[val] : _genobj_for_tkwidget(val) - TkCore::INTERP.tk_windows[val]? - TkCore::INTERP.tk_windows[val] : _genobj_for_tkwidget(val) - else - nil - end - end - def image_obj(val) - if val =~ /^i(_\d+_)?\d+$/ - TkImage::Tk_IMGTBL[val]? TkImage::Tk_IMGTBL[val] : val - else - val - end - end - def procedure(val) - if val =~ /^rb_out\S* (c(_\d+_)?\d+)/ - #Tk_CMDTBL[$1] - #TkCore::INTERP.tk_cmd_tbl[$1] - TkCore::INTERP.tk_cmd_tbl[$1].cmd - else - #nil - val - end - end - private :bool, :number, :string, :num_or_str - private :list, :simplelist, :window, :procedure - module_function :bool, :number, :num_or_str, :string - module_function :list, :simplelist, :window, :image_obj, :procedure - - def _toUTF8(str, encoding = nil) - TkCore::INTERP._toUTF8(str, encoding) - end - def _fromUTF8(str, encoding = nil) - TkCore::INTERP._fromUTF8(str, encoding) - end - private :_toUTF8, :_fromUTF8 - module_function :_toUTF8, :_fromUTF8 - -=begin - ### --> definition is moved to TkUtil module - def _get_eval_string(str, enc_mode = nil) - return nil if str == None - if str.kind_of?(TkObject) - str = str.path - elsif str.kind_of?(String) - str = _toUTF8(str) if enc_mode - elsif str.kind_of?(Symbol) - str = str.id2name - str = _toUTF8(str) if enc_mode - elsif str.kind_of?(Hash) - str = hash_kv(str, enc_mode).join(" ") - elsif str.kind_of?(Array) - str = array2tk_list(str) - str = _toUTF8(str) if enc_mode - elsif str.kind_of?(Proc) - str = install_cmd(str) - elsif str == nil - str = "" - elsif str == false - str = "0" - elsif str == true - str = "1" - elsif (str.respond_to?(:to_eval)) - str = str.to_eval() - str = _toUTF8(str) if enc_mode - else - str = str.to_s() || '' - unless str.kind_of? String - fail RuntimeError, "fail to convert the object to a string" - end - str = _toUTF8(str) if enc_mode - end - return str - end -=end -=begin - def _get_eval_string(obj, enc_mode = nil) - case obj - when Numeric - obj.to_s - when String - (enc_mode)? _toUTF8(obj): obj - when Symbol - (enc_mode)? _toUTF8(obj.id2name): obj.id2name - when TkObject - obj.path - when Hash - hash_kv(obj, enc_mode).join(' ') - when Array - (enc_mode)? _toUTF8(array2tk_list(obj)): array2tk_list(obj) - when Proc, Method, TkCallbackEntry - install_cmd(obj) - when false - '0' - when true - '1' - when nil - '' - when None - nil - else - if (obj.respond_to?(:to_eval)) - (enc_mode)? _toUTF8(obj.to_eval): obj.to_eval - else - begin - obj = obj.to_s || '' - rescue - fail RuntimeError, "fail to convert object '#{obj}' to string" - end - (enc_mode)? _toUTF8(obj): obj - end - end - end - private :_get_eval_string - module_function :_get_eval_string -=end - -=begin - ### --> definition is moved to TkUtil module - def _get_eval_enc_str(obj) - return obj if obj == None - _get_eval_string(obj, true) - end - private :_get_eval_enc_str - module_function :_get_eval_enc_str -=end - -=begin - ### --> obsolete - def ruby2tcl(v, enc_mode = nil) - if v.kind_of?(Hash) - v = hash_kv(v) - v.flatten! - v.collect{|e|ruby2tcl(e, enc_mode)} - else - _get_eval_string(v, enc_mode) - end - end - private :ruby2tcl -=end - -=begin - ### --> definition is moved to TkUtil module - def _conv_args(args, enc_mode, *src_args) - conv_args = [] - src_args.each{|arg| - conv_args << _get_eval_string(arg, enc_mode) unless arg == None - # if arg.kind_of?(Hash) - # arg.each{|k, v| - # args << '-' + k.to_s - # args << _get_eval_string(v, enc_mode) - # } - # elsif arg != None - # args << _get_eval_string(arg, enc_mode) - # end - } - args + conv_args - end - private :_conv_args -=end - - def _curr_cmd_id - #id = format("c%.4d", Tk_IDs[0]) - id = "c" + TkCore::INTERP._ip_id_ + TkComm::Tk_IDs[0] - end - def _next_cmd_id - id = _curr_cmd_id - #Tk_IDs[0] += 1 - TkComm::Tk_IDs[0].succ! - id - end - private :_curr_cmd_id, :_next_cmd_id - module_function :_curr_cmd_id, :_next_cmd_id - - def install_cmd(cmd) - return '' if cmd == '' - id = _next_cmd_id - #Tk_CMDTBL[id] = cmd - if cmd.kind_of?(TkCallbackEntry) - TkCore::INTERP.tk_cmd_tbl[id] = cmd - else - TkCore::INTERP.tk_cmd_tbl[id] = TkCore::INTERP.get_cb_entry(cmd) - end - @cmdtbl = [] unless defined? @cmdtbl - @cmdtbl.taint unless @cmdtbl.tainted? - @cmdtbl.push id - #return Kernel.format("rb_out %s", id); - return 'rb_out' + TkCore::INTERP._ip_id_ + ' ' + id - end - def uninstall_cmd(id) - id = $1 if /rb_out\S* (c(_\d+_)?\d+)/ =~ id - #Tk_CMDTBL.delete(id) - TkCore::INTERP.tk_cmd_tbl.delete(id) - end - # private :install_cmd, :uninstall_cmd - module_function :install_cmd, :uninstall_cmd - -=begin - def install_win(ppath,name=nil) - if !name or name == '' - #name = format("w%.4d", Tk_IDs[1]) - #Tk_IDs[1] += 1 - name = "w" + Tk_IDs[1] - Tk_IDs[1].succ! - end - if name[0] == ?. - @path = name.dup - elsif !ppath or ppath == "." - @path = Kernel.format(".%s", name); - else - @path = Kernel.format("%s.%s", ppath, name) - end - #Tk_WINDOWS[@path] = self - TkCore::INTERP.tk_windows[@path] = self - end -=end - def install_win(ppath,name=nil) - if name - if name == '' - raise ArgumentError, "invalid wiget-name '#{name}'" - end - if name[0] == ?. - @path = '' + name - @path.freeze - return TkCore::INTERP.tk_windows[@path] = self - end - else - name = "w" + TkCore::INTERP._ip_id_ + Tk_IDs[1] - Tk_IDs[1].succ! - end - if !ppath or ppath == '.' - @path = '.' + name - else - @path = ppath + '.' + name - end - @path.freeze - TkCore::INTERP.tk_windows[@path] = self - end - - def uninstall_win() - #Tk_WINDOWS.delete(@path) - TkCore::INTERP.tk_windows.delete(@path) - end - private :install_win, :uninstall_win - - def _epath(win) - if win.kind_of?(TkObject) - win.epath - elsif win.respond_to?(:epath) - win.epath - else - win - end - end - private :_epath -end - -# define TkComm module (step 2: event binding) -module TkComm - include TkEvent - extend TkEvent - - def tk_event_sequence(context) - if context.kind_of? TkVirtualEvent - context = context.path - end - if context.kind_of? Array - context = context.collect{|ev| - if ev.kind_of? TkVirtualEvent - ev.path - else - ev - end - }.join("><") - end - if /,/ =~ context - context = context.split(/\s*,\s*/).join("><") - else - context - end - end - - def _bind_core(mode, what, context, cmd, args=nil) - id = install_bind(cmd, args) if cmd - begin - tk_call_without_enc(*(what + ["<#{tk_event_sequence(context)}>", - mode + id])) - rescue - uninstall_cmd(id) if cmd - fail - end - end - - def _bind(what, context, cmd, args=nil) - _bind_core('', what, context, cmd, args) - end - - def _bind_append(what, context, cmd, args=nil) - _bind_core('+', what, context, cmd, args) - end - - def _bind_remove(what, context) - tk_call_without_enc(*(what + ["<#{tk_event_sequence(context)}>", ''])) - end - - def _bindinfo(what, context=nil) - if context - tk_call_without_enc(*what+["<#{tk_event_sequence(context)}>"]) .collect {|cmdline| - if cmdline =~ /^rb_out\S* (c(?:_\d+_)?\d+)\s+(.*)$/ - #[Tk_CMDTBL[$1], $2] - [TkCore::INTERP.tk_cmd_tbl[$1], $2] - else - cmdline - end - } - else - tk_split_simplelist(tk_call_without_enc(*what)).collect!{|seq| - l = seq.scan(/<*[^<>]+>*/).collect!{|subseq| - case (subseq) - when /^<<[^<>]+>>$/ - TkVirtualEvent.getobj(subseq[1..-2]) - when /^<[^<>]+>$/ - subseq[1..-2] - else - subseq.split('') - end - }.flatten - (l.size == 1) ? l[0] : l - } - end - end - - def _bind_core_for_event_class(klass, mode, what, context, cmd, args=nil) - id = install_bind_for_event_class(klass, cmd, args) if cmd - begin - tk_call_without_enc(*(what + ["<#{tk_event_sequence(context)}>", - mode + id])) - rescue - uninstall_cmd(id) if cmd - fail - end - end - - def _bind_for_event_class(klass, what, context, cmd, args=nil) - _bind_core_for_event_class(klass, '', what, context, cmd, args) - end - - def _bind_append_for_event_class(klass, what, context, cmd, args=nil) - _bind_core_for_event_class(klass, '+', what, context, cmd, args) - end - - def _bind_remove_for_event_class(klass, what, context) - _bind_remove(what, context) - end - - def _bindinfo_for_event_class(klass, what, context=nil) - _bindinfo(what, context) - end - - private :tk_event_sequence - private :_bind_core, :_bind, :_bind_append, :_bind_remove, :_bindinfo - private :_bind_core_for_event_class, :_bind_for_event_class, - :_bind_append_for_event_class, :_bind_remove_for_event_class, - :_bindinfo_for_event_class - - def bind(tagOrClass, context, cmd=Proc.new, args=nil) - _bind(["bind", tagOrClass], context, cmd, args) - tagOrClass - end - - def bind_append(tagOrClass, context, cmd=Proc.new, args=nil) - _bind_append(["bind", tagOrClass], context, cmd, args) - tagOrClass - end - - def bind_remove(tagOrClass, context) - _bind_remove(['bind', tagOrClass], context) - tagOrClass - end - - def bindinfo(tagOrClass, context=nil) - _bindinfo(['bind', tagOrClass], context) - end - - def bind_all(context, cmd=Proc.new, args=nil) - _bind(['bind', 'all'], context, cmd, args) - TkBindTag::ALL - end - - def bind_append_all(context, cmd=Proc.new, args=nil) - _bind_append(['bind', 'all'], context, cmd, args) - TkBindTag::ALL - end - - def bind_remove_all(context) - _bind_remove(['bind', 'all'], context) - TkBindTag::ALL - end - - def bindinfo_all(context=nil) - _bindinfo(['bind', 'all'], context) - end -end - - -module TkCore - include TkComm - extend TkComm - - unless self.const_defined? :INTERP - if self.const_defined? :IP_NAME - name = IP_NAME.to_s - else - #name = nil - name = $0 - end - if self.const_defined? :IP_OPTS - if IP_OPTS.kind_of?(Hash) - opts = hash_kv(IP_OPTS).join(' ') - else - opts = IP_OPTS.to_s - end - else - opts = '' - end - - INTERP = TclTkIp.new(name, opts) - - def INTERP.__getip - self - end - - INTERP.instance_eval{ - @tk_cmd_tbl = {}.taint - @tk_windows = {}.taint - - @tk_table_list = [].taint - - @init_ip_env = [].taint # table of Procs - @add_tk_procs = [].taint # table of [name, args, body] - - @cb_entry_class = Class.new(TkCallbackEntry){|c| - class << c - def inspect - sprintf("#<Class(TkCallbackEntry):%0x>", self.__id__) - end - alias to_s inspect - end - - def initialize(ip, cmd) - @ip = ip - @cmd = cmd - end - attr_reader :ip, :cmd - def call(*args) - @ip.cb_eval(@cmd, *args) - end - def inspect - sprintf("#<cb_entry:%0x>", self.__id__) - end - alias to_s inspect - }.freeze - } - - def INTERP.cb_entry_class - @cb_entry_class - end - def INTERP.tk_cmd_tbl - @tk_cmd_tbl - end - def INTERP.tk_windows - @tk_windows - end - - class Tk_OBJECT_TABLE - def initialize(id) - @id = id - end - def method_missing(m, *args, &b) - TkCore::INTERP.tk_object_table(@id).__send__(m, *args, &b) - end - end - - def INTERP.tk_object_table(id) - @tk_table_list[id] - end - def INTERP.create_table - id = @tk_table_list.size - (tbl = {}).tainted? || tbl.taint - @tk_table_list << tbl -# obj = Object.new -# obj.instance_eval <<-EOD -# def self.method_missing(m, *args) -# TkCore::INTERP.tk_object_table(#{id}).send(m, *args) -# end -# EOD -# return obj - Tk_OBJECT_TABLE.new(id) - end - - def INTERP.get_cb_entry(cmd) - @cb_entry_class.new(__getip, cmd).freeze - end - def INTERP.cb_eval(cmd, *args) - TkUtil._get_eval_string(TkUtil.eval_cmd(cmd, *args)) - end - - def INTERP.init_ip_env(script = Proc.new) - @init_ip_env << script - script.call(self) - end - def INTERP.add_tk_procs(name, args = nil, body = nil) - @add_tk_procs << [name, args, body] - self._invoke('proc', name, args, body) if args && body - end - def INTERP.init_ip_internal - ip = self - @init_ip_env.each{|script| script.call(ip)} - @add_tk_procs.each{|name,args,body| ip._invoke('proc',name,args,body)} - end - end - - WIDGET_DESTROY_HOOK = '<WIDGET_DESTROY_HOOK>' - INTERP._invoke_without_enc('event', 'add', - "<#{WIDGET_DESTROY_HOOK}>", 'Destroy') - INTERP._invoke_without_enc('bind', 'all', "<#{WIDGET_DESTROY_HOOK}>", - install_bind(proc{|xpath| - path = xpath[1..-1] - unless TkCore::INTERP.deleted? - if (widget = TkCore::INTERP.tk_windows[path]) - if widget.respond_to?(:__destroy_hook__) - begin - widget.__destroy_hook__ - rescue Exception - end - end - end - end - }, 'x%W')) - INTERP.add_tk_procs(TclTkLib::FINALIZE_PROC_NAME, '', - "bind all <#{WIDGET_DESTROY_HOOK}> {}") - - INTERP.add_tk_procs('rb_out', 'args', <<-'EOL') - if {[set st [catch {eval {ruby_cmd TkCore callback} $args} ret]] != 0} { - #return -code $st $ret - set idx [string first "\n\n" $ret] - if {$idx > 0} { - return -code $st \ - -errorinfo [string range $ret [expr $idx + 2] \ - [string length $ret]] \ - [string range $ret 0 [expr $idx - 1]] - } else { - return -code $st $ret - } - } else { - return $ret - } - EOL -=begin - INTERP.add_tk_procs('rb_out', 'args', <<-'EOL') - #regsub -all {\\} $args {\\\\} args - #regsub -all {!} $args {\\!} args - #regsub -all "{" $args "\\{" args - regsub -all {(\\|!|\{|\})} $args {\\\1} args - if {[set st [catch {ruby [format "TkCore.callback %%Q!%s!" $args]} ret]] != 0} { - #return -code $st $ret - set idx [string first "\n\n" $ret] - if {$idx > 0} { - return -code $st \ - -errorinfo [string range $ret [expr $idx + 2] \ - [string length $ret]] \ - [string range $ret 0 [expr $idx - 1]] - } else { - return -code $st $ret - } - } else { - return $ret - } - EOL -=end - - EventFlag = TclTkLib::EventFlag - - def callback_break - fail TkCallbackBreak, "Tk callback returns 'break' status" - end - - def callback_continue - fail TkCallbackContinue, "Tk callback returns 'continue' status" - end - - def TkCore.callback(*arg) - begin - TkCore::INTERP.tk_cmd_tbl[arg.shift].call(*arg) - rescue SystemExit - exit(0) - rescue Interrupt - exit!(1) - rescue Exception => e - begin - msg = _toUTF8(e.class.inspect) + ': ' + - _toUTF8(e.message) + "\n" + - "\n---< backtrace of Ruby side >-----\n" + - _toUTF8(e.backtrace.join("\n")) + - "\n---< backtrace of Tk side >-------" - msg.instance_variable_set(:@encoding, 'utf-8') - rescue Exception - msg = e.class.inspect + ': ' + e.message + "\n" + - "\n---< backtrace of Ruby side >-----\n" + - e.backtrace.join("\n") + - "\n---< backtrace of Tk side >-------" - end - fail(e, msg) - end - end -=begin - def TkCore.callback(arg_str) - # arg = tk_split_list(arg_str) - arg = tk_split_simplelist(arg_str) - #_get_eval_string(TkUtil.eval_cmd(Tk_CMDTBL[arg.shift], *arg)) - #_get_eval_string(TkUtil.eval_cmd(TkCore::INTERP.tk_cmd_tbl[arg.shift], - # *arg)) - # TkCore::INTERP.tk_cmd_tbl[arg.shift].call(*arg) - begin - TkCore::INTERP.tk_cmd_tbl[arg.shift].call(*arg) - rescue Exception => e - raise(e, e.class.inspect + ': ' + e.message + "\n" + - "\n---< backtrace of Ruby side >-----\n" + - e.backtrace.join("\n") + - "\n---< backtrace of Tk side >-------") - end -#=begin -# cb_obj = TkCore::INTERP.tk_cmd_tbl[arg.shift] -# unless $DEBUG -# cb_obj.call(*arg) -# else -# begin -# raise 'check backtrace' -# rescue -# # ignore backtrace before 'callback' -# pos = -($!.backtrace.size) -# end -# begin -# cb_obj.call(*arg) -# rescue -# trace = $!.backtrace -# raise $!, "\n#{trace[0]}: #{$!.message} (#{$!.class})\n" + -# "\tfrom #{trace[1..pos].join("\n\tfrom ")}" -# end -# end -#=end - end -=end - - def load_cmd_on_ip(tk_cmd) - bool(tk_call('auto_load', tk_cmd)) - end - - def after(ms, cmd=Proc.new) - crit_bup = Thread.critical - Thread.critical = true - - myid = _curr_cmd_id - cmdid = install_cmd(proc{ret = cmd.call;uninstall_cmd(myid); ret}) - - Thread.critical = crit_bup - - tk_call_without_enc("after",ms,cmdid) # return id -# return -# if false #defined? Thread -# Thread.start do -# ms = Float(ms)/1000 -# ms = 10 if ms == 0 -# sleep ms/1000 -# cmd.call -# end -# else -# cmdid = install_cmd(cmd) -# tk_call("after",ms,cmdid) -# end - end - - def after_idle(cmd=Proc.new) - crit_bup = Thread.critical - Thread.critical = true - - myid = _curr_cmd_id - cmdid = install_cmd(proc{ret = cmd.call;uninstall_cmd(myid); ret}) - - Thread.critical = crit_bup - - tk_call_without_enc('after','idle',cmdid) - end - - def windowingsystem - tk_call_without_enc('tk', 'windowingsystem') - end - - def scaling(scale=nil) - if scale - tk_call_without_enc('tk', 'scaling', scale) - else - Float(number(tk_call_without_enc('tk', 'scaling'))) - end - end - def scaling_displayof(win, scale=nil) - if scale - tk_call_without_enc('tk', 'scaling', '-displayof', win, scale) - else - Float(number(tk_call_without_enc('tk', '-displayof', win, 'scaling'))) - end - end - - def appname(name=None) - tk_call('tk', 'appname', name) - end - - def appsend_deny - tk_call('rename', 'send', '') - end - - def appsend(interp, async, *args) - if $SAFE >= 4 - fail SecurityError, "cannot send Tk commands at level 4" - elsif $SAFE >= 1 && args.find{|obj| obj.tainted?} - fail SecurityError, "cannot send tainted Tk commands at level #{$SAFE}" - end - if async != true && async != false && async != nil - args.unshift(async) - async = false - end - if async - tk_call('send', '-async', '--', interp, *args) - else - tk_call('send', '--', interp, *args) - end - end - - def rb_appsend(interp, async, *args) - if $SAFE >= 4 - fail SecurityError, "cannot send Ruby commands at level 4" - elsif $SAFE >= 1 && args.find{|obj| obj.tainted?} - fail SecurityError, "cannot send tainted Ruby commands at level #{$SAFE}" - end - if async != true && async != false && async != nil - args.unshift(async) - async = false - end - #args = args.collect!{|c| _get_eval_string(c).gsub(/[\[\]$"]/, '\\\\\&')} - args = args.collect!{|c| _get_eval_string(c).gsub(/[\[\]$"\\]/, '\\\\\&')} - # args.push(').to_s"') - # appsend(interp, async, 'ruby "(', *args) - args.push('}.call)"') - appsend(interp, async, 'ruby "TkComm._get_eval_string(proc{', *args) - end - - def appsend_displayof(interp, win, async, *args) - if $SAFE >= 4 - fail SecurityError, "cannot send Tk commands at level 4" - elsif $SAFE >= 1 && args.find{|obj| obj.tainted?} - fail SecurityError, "cannot send tainted Tk commands at level #{$SAFE}" - end - win = '.' if win == nil - if async != true && async != false && async != nil - args.unshift(async) - async = false - end - if async - tk_call('send', '-async', '-displayof', win, '--', interp, *args) - else - tk_call('send', '-displayor', win, '--', interp, *args) - end - end - - def rb_appsend_displayof(interp, win, async, *args) - if $SAFE >= 4 - fail SecurityError, "cannot send Ruby commands at level 4" - elsif $SAFE >= 1 && args.find{|obj| obj.tainted?} - fail SecurityError, "cannot send tainted Ruby commands at level #{$SAFE}" - end - win = '.' if win == nil - if async != true && async != false && async != nil - args.unshift(async) - async = false - end - #args = args.collect!{|c| _get_eval_string(c).gsub(/[\[\]$"]/, '\\\\\&')} - args = args.collect!{|c| _get_eval_string(c).gsub(/[\[\]$"\\]/, '\\\\\&')} - # args.push(').to_s"') - # appsend_displayof(interp, win, async, 'ruby "(', *args) - args.push('}.call)"') - appsend(interp, win, async, 'ruby "TkComm._get_eval_string(proc{', *args) - end - - def info(*args) - tk_call('info', *args) - end - - def mainloop(check_root = true) - TclTkLib.mainloop(check_root) - end - - def mainloop_watchdog(check_root = true) - # watchdog restarts mainloop when mainloop is dead - TclTkLib.mainloop_watchdog(check_root) - end - - def do_one_event(flag = TclTkLib::EventFlag::ALL) - TclTkLib.do_one_event(flag) - end - - def set_eventloop_tick(timer_tick) - TclTkLib.set_eventloop_tick(timer_tick) - end - - def get_eventloop_tick() - TclTkLib.get_eventloop_tick - end - - def set_no_event_wait(wait) - TclTkLib.set_no_even_wait(wait) - end - - def get_no_event_wait() - TclTkLib.get_no_eventloop_wait - end - - def set_eventloop_weight(loop_max, no_event_tick) - TclTkLib.set_eventloop_weight(loop_max, no_event_tick) - end - - def get_eventloop_weight() - TclTkLib.get_eventloop_weight - end - - def restart(app_name = nil, keys = {}) - TkCore::INTERP.init_ip_internal - - tk_call('set', 'argv0', app_name) if app_name - if keys.kind_of?(Hash) - # tk_call('set', 'argc', keys.size * 2) - tk_call('set', 'argv', hash_kv(keys).join(' ')) - end - - INTERP.restart - nil - end - - def event_generate(window, context, keys=nil) - #window = window.path if window.kind_of?(TkObject) - if keys - tk_call_without_enc('event', 'generate', window, - "<#{tk_event_sequence(context)}>", - *hash_kv(keys, true)) - else - tk_call_without_enc('event', 'generate', window, - "<#{tk_event_sequence(context)}>") - end - nil - end - - def messageBox(keys) - tk_call('tk_messageBox', *hash_kv(keys)) - end - - def getOpenFile(keys = nil) - tk_call('tk_getOpenFile', *hash_kv(keys)) - end - - def getSaveFile(keys = nil) - tk_call('tk_getSaveFile', *hash_kv(keys)) - end - - def chooseColor(keys = nil) - tk_call('tk_chooseColor', *hash_kv(keys)) - end - - def chooseDirectory(keys = nil) - tk_call('tk_chooseDirectory', *hash_kv(keys)) - end - - def _ip_eval_core(enc_mode, cmd_string) - case enc_mode - when nil - res = INTERP._eval(cmd_string) - when false - res = INTERP._eval_without_enc(cmd_string) - when true - res = INTERP._eval_with_enc(cmd_string) - end - if INTERP._return_value() != 0 - fail RuntimeError, res, error_at - end - return res - end - private :_ip_eval_core - - def ip_eval(cmd_string) - _ip_eval_core(nil, cmd_string) - end - - def ip_eval_without_enc(cmd_string) - _ip_eval_core(false, cmd_string) - end - - def ip_eval_with_enc(cmd_string) - _ip_eval_core(true, cmd_string) - end - - def _ip_invoke_core(enc_mode, *args) - case enc_mode - when false - res = INTERP._invoke_without_enc(*args) - when nil - res = INTERP._invoke(*args) - when true - res = INTERP._invoke_with_enc(*args) - end - if INTERP._return_value() != 0 - fail RuntimeError, res, error_at - end - return res - end - private :_ip_invoke_core - - def ip_invoke(*args) - _ip_invoke_core(nil, *args) - end - - def ip_invoke_without_enc(*args) - _ip_invoke_core(false, *args) - end - - def ip_invoke_with_enc(*args) - _ip_invoke_core(true, *args) - end - - def _tk_call_core(enc_mode, *args) - ### puts args.inspect if $DEBUG - #args.collect! {|x|ruby2tcl(x, enc_mode)} - #args.compact! - #args.flatten! - args = _conv_args([], enc_mode, *args) - puts 'invoke args => ' + args.inspect if $DEBUG - ### print "=> ", args.join(" ").inspect, "\n" if $DEBUG - begin - # res = INTERP._invoke(*args).taint - # res = INTERP._invoke(enc_mode, *args) - res = _ip_invoke_core(enc_mode, *args) - # >>>>> _invoke returns a TAINTED string <<<<< - rescue NameError => err - # err = $! - begin - args.unshift "unknown" - #res = INTERP._invoke(*args).taint - #res = INTERP._invoke(enc_mode, *args) - res = _ip_invoke_core(enc_mode, *args) - # >>>>> _invoke returns a TAINTED string <<<<< - rescue StandardError => err2 - fail err2 unless /^invalid command/ =~ err2.message - fail err - end - end - if INTERP._return_value() != 0 - fail RuntimeError, res, error_at - end - ### print "==> ", res.inspect, "\n" if $DEBUG - return res - end - private :_tk_call_core - - def tk_call(*args) - _tk_call_core(nil, *args) - end - - def tk_call_without_enc(*args) - _tk_call_core(false, *args) - end - - def tk_call_with_enc(*args) - _tk_call_core(true, *args) - end -end - - -module Tk - include TkCore - extend Tk - - TCL_VERSION = INTERP._invoke_without_enc("info", "tclversion").freeze - TCL_PATCHLEVEL = INTERP._invoke_without_enc("info", "patchlevel").freeze - - major, minor = TCL_VERSION.split('.') - TCL_MAJOR_VERSION = major.to_i - TCL_MINOR_VERSION = minor.to_i - - TK_VERSION = INTERP._invoke_without_enc("set", "tk_version").freeze - TK_PATCHLEVEL = INTERP._invoke_without_enc("set", "tk_patchLevel").freeze - - major, minor = TK_VERSION.split('.') - TK_MAJOR_VERSION = major.to_i - TK_MINOR_VERSION = minor.to_i - - JAPANIZED_TK = (INTERP._invoke_without_enc("info", "commands", - "kanji") != "").freeze - - def Tk.const_missing(sym) - case(sym) - when :TCL_LIBRARY - INTERP._invoke_without_enc('global', 'tcl_library') - INTERP._invoke("set", "tcl_library").freeze - - when :TK_LIBRARY - INTERP._invoke_without_enc('global', 'tk_library') - INTERP._invoke("set", "tk_library").freeze - - when :LIBRARY - INTERP._invoke("info", "library").freeze - - #when :PKG_PATH, :PACKAGE_PATH, :TCL_PACKAGE_PATH - # INTERP._invoke_without_enc('global', 'tcl_pkgPath') - # tk_split_simplelist(INTERP._invoke('set', 'tcl_pkgPath')) - - #when :LIB_PATH, :LIBRARY_PATH, :TCL_LIBRARY_PATH - # INTERP._invoke_without_enc('global', 'tcl_libPath') - # tk_split_simplelist(INTERP._invoke('set', 'tcl_libPath')) - - when :PLATFORM, :TCL_PLATFORM - if $SAFE >= 4 - fail SecurityError, "can't get #{sym} when $SAFE >= 4" - end - INTERP._invoke_without_enc('global', 'tcl_platform') - Hash[*tk_split_simplelist(INTERP._invoke_without_enc('array', 'get', - 'tcl_platform'))] - - when :ENV - INTERP._invoke_without_enc('global', 'env') - Hash[*tk_split_simplelist(INTERP._invoke('array', 'get', 'env'))] - - #when :AUTO_PATH #<=== - # tk_split_simplelist(INTERP._invoke('set', 'auto_path')) - - #when :AUTO_OLDPATH - # tk_split_simplelist(INTERP._invoke('set', 'auto_oldpath')) - - when :AUTO_INDEX - INTERP._invoke_without_enc('global', 'auto_index') - Hash[*tk_split_simplelist(INTERP._invoke('array', 'get', 'auto_index'))] - - when :PRIV, :PRIVATE, :TK_PRIV - priv = {} - if INTERP._invoke_without_enc('info', 'vars', 'tk::Priv') != "" - var_nam = 'tk::Priv' - else - var_nam = 'tkPriv' - end - INTERP._invoke_without_enc('global', var_nam) - Hash[*tk_split_simplelist(INTERP._invoke('array', 'get', - var_nam))].each{|k,v| - k.freeze - case v - when /^-?\d+$/ - priv[k] = v.to_i - when /^-?\d+\.?\d*(e[-+]?\d+)?$/ - priv[k] = v.to_f - else - priv[k] = v.freeze - end - } - priv - - else - raise NameError, 'uninitialized constant Tk::' + sym.id2name - end - end - - def Tk.errorInfo - INTERP._invoke_without_enc('global', 'errorInfo') - INTERP._invoke_without_enc('set', 'errorInfo') - end - - def Tk.errorCode - INTERP._invoke_without_enc('global', 'errorCode') - code = tk_split_simplelist(INTERP._invoke_without_enc('set', 'errorCode')) - case code[0] - when 'CHILDKILLED', 'CHILDSTATUS', 'CHILDSUSP' - begin - pid = Integer(code[1]) - code[1] = pid - rescue - end - end - code - end - - def root - TkRoot.new - end - - def Tk.load_tclscript(file, enc=nil) - if enc - # TCL_VERSION >= 8.5 - tk_call('source', '-encoding', enc, file) - else - tk_call('source', file) - end - end - - def Tk.load_tcllibrary(file, pkg_name=None, interp=None) - tk_call('load', file, pkg_name, interp) - end - - def Tk.unload_tcllibrary(*args) - if args[-1].kind_of?(Hash) - keys = _symbolkey2str(args.pop) - nocomp = (keys['nocomplain'])? '-nocomplain': None - keeplib = (keys['keeplibrary'])? '-keeplibrary': None - tk_call('unload', nocomp, keeplib, '--', *args) - else - tk_call('unload', *args) - end - end - - def Tk.bell(nice = false) - if nice - tk_call_without_enc('bell', '-nice') - else - tk_call_without_enc('bell') - end - nil - end - - def Tk.bell_on_display(win, nice = false) - if nice - tk_call_without_enc('bell', '-displayof', win, '-nice') - else - tk_call_without_enc('bell', '-displayof', win) - end - nil - end - - def Tk.destroy(*wins) - tk_call_without_enc('destroy', *wins) - end - - def Tk.exit - tk_call_without_enc('destroy', '.') - end - - def Tk.pack(*args) - #TkPack.configure(*args) - TkPack(*args) - end - - def Tk.grid(*args) - TkGrid.configure(*args) - end - - def Tk.update(idle=nil) - if idle - tk_call_without_enc('update', 'idletasks') - else - tk_call_without_enc('update') - end - end - def Tk.update_idletasks - update(true) - end - def update(idle=nil) - # only for backward compatibility (This never be recommended to use) - Tk.update(idle) - self - end - -=begin - # See tcltklib.c for the reason of why the following methods are disabled. - def Tk.thread_update(idle=nil) - if idle - tk_call_without_enc('thread_update', 'idletasks') - else - tk_call_without_enc('thread_update') - end - end - def Tk.thread_update_idletasks - thread_update(true) - end -=end - - def Tk.current_grabs(win = nil) - if win - window(tk_call_without_enc('grab', 'current', win)) - else - tk_split_list(tk_call_without_enc('grab', 'current')) - end - end - - def Tk.focus(display=nil) - if display == nil - window(tk_call_without_enc('focus')) - else - window(tk_call_without_enc('focus', '-displayof', display)) - end - end - - def Tk.focus_to(win, force=false) - if force - tk_call_without_enc('focus', '-force', win) - else - tk_call_without_enc('focus', win) - end - end - - def Tk.focus_lastfor(win) - window(tk_call_without_enc('focus', '-lastfor', win)) - end - - def Tk.focus_next(win) - TkManageFocus.next(win) - end - - def Tk.focus_prev(win) - TkManageFocus.prev(win) - end - - def Tk.strictMotif(bool=None) - bool(tk_call_without_enc('set', 'tk_strictMotif', bool)) - end - - def Tk.show_kinsoku(mode='both') - begin - if /^8\.*/ === TK_VERSION && JAPANIZED_TK - tk_split_simplelist(tk_call('kinsoku', 'show', mode)) - end - rescue - end - end - def Tk.add_kinsoku(chars, mode='both') - begin - if /^8\.*/ === TK_VERSION && JAPANIZED_TK - tk_split_simplelist(tk_call('kinsoku', 'add', mode, - *(chars.split('')))) - else - [] - end - rescue - [] - end - end - def Tk.delete_kinsoku(chars, mode='both') - begin - if /^8\.*/ === TK_VERSION && JAPANIZED_TK - tk_split_simplelist(tk_call('kinsoku', 'delete', mode, - *(chars.split('')))) - end - rescue - end - end - - def Tk.toUTF8(str, encoding = nil) - _toUTF8(str, encoding) - end - - def Tk.fromUTF8(str, encoding = nil) - _fromUTF8(str, encoding) - end -end - -########################################### -# string with Tcl's encoding -########################################### -module Tk - def Tk.subst_utf_backslash(str) - Tk::EncodedString.subst_utf_backslash(str) - end - def Tk.subst_tk_backslash(str) - Tk::EncodedString.subst_tk_backslash(str) - end - def Tk.utf_to_backslash_sequence(str) - Tk::EncodedString.utf_to_backslash_sequence(str) - end - def Tk.utf_to_backslash(str) - Tk::EncodedString.utf_to_backslash_sequence(str) - end - def Tk.to_backslash_sequence(str) - Tk::EncodedString.to_backslash_sequence(str) - end -end - - -########################################### -# convert kanji string to/from utf-8 -########################################### -if (/^(8\.[1-9]|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION && !Tk::JAPANIZED_TK) - class TclTkIp - # from tkencoding.rb by ttate@jaist.ac.jp - attr_accessor :encoding - - alias __eval _eval - alias __invoke _invoke - - alias __toUTF8 _toUTF8 - alias __fromUTF8 _fromUTF8 - -=begin - #### --> definition is moved to TclTkIp module - - def _toUTF8(str, encoding = nil) - # decide encoding - if encoding - encoding = encoding.to_s - elsif str.kind_of?(Tk::EncodedString) && str.encoding != nil - encoding = str.encoding.to_s - elsif str.instance_variable_get(:@encoding) - encoding = str.instance_variable_get(:@encoding).to_s - elsif defined?(@encoding) && @encoding != nil - encoding = @encoding.to_s - else - encoding = __invoke('encoding', 'system') - end - - # convert - case encoding - when 'utf-8', 'binary' - str - else - __toUTF8(str, encoding) - end - end - - def _fromUTF8(str, encoding = nil) - unless encoding - if defined?(@encoding) && @encoding != nil - encoding = @encoding.to_s - else - encoding = __invoke('encoding', 'system') - end - end - - if str.kind_of?(Tk::EncodedString) - if str.encoding == 'binary' - str - else - __fromUTF8(str, encoding) - end - elsif str.instance_variable_get(:@encoding).to_s == 'binary' - str - else - __fromUTF8(str, encoding) - end - end -=end - - def _eval(cmd) - _fromUTF8(__eval(_toUTF8(cmd))) - end - - def _invoke(*cmds) - _fromUTF8(__invoke(*(cmds.collect{|cmd| _toUTF8(cmd)}))) - end - - alias _eval_with_enc _eval - alias _invoke_with_enc _invoke - -=begin - def _eval(cmd) - if defined?(@encoding) && @encoding != 'utf-8' - ret = if cmd.kind_of?(Tk::EncodedString) - case cmd.encoding - when 'utf-8', 'binary' - __eval(cmd) - else - __eval(_toUTF8(cmd, cmd.encoding)) - end - elsif cmd.instance_variable_get(:@encoding) == 'binary' - __eval(cmd) - else - __eval(_toUTF8(cmd, @encoding)) - end - if ret.kind_of?(String) && ret.instance_variable_get(:@encoding) == 'binary' - ret - else - _fromUTF8(ret, @encoding) - end - else - __eval(cmd) - end - end - - def _invoke(*cmds) - if defined?(@encoding) && @encoding != 'utf-8' - cmds = cmds.collect{|cmd| - if cmd.kind_of?(Tk::EncodedString) - case cmd.encoding - when 'utf-8', 'binary' - cmd - else - _toUTF8(cmd, cmd.encoding) - end - elsif cmd.instance_variable_get(:@encoding) == 'binary' - cmd - else - _toUTF8(cmd, @encoding) - end - } - ret = __invoke(*cmds) - if ret.kind_of?(String) && ret.instance_variable_get(:@encoding) == 'binary' - ret - else - _fromUTF8(ret, @encoding) - end - else - __invoke(*cmds) - end - end -=end - end - - module Tk - module Encoding - extend Encoding - - TkCommandNames = ['encoding'.freeze].freeze - - def encoding=(name) - TkCore::INTERP.encoding = name - end - - def encoding - TkCore::INTERP.encoding - end - - def encoding_names - tk_split_simplelist(tk_call('encoding', 'names')) - end - - def encoding_system - tk_call('encoding', 'system') - end - - def encoding_system=(enc) - tk_call('encoding', 'system', enc) - end - - def encoding_convertfrom(str, enc=nil) - # str must be a Tcl's internal string expression in enc. - # the return value is a UTF-8 string. - enc = encoding_system unless enc - TkCore::INTERP.__invoke('encoding', 'convertfrom', enc, str) - end - alias encoding_convert_from encoding_convertfrom - - def encoding_convertto(str, enc=nil) - # str must be a UTF-8 string. - # The return value is a Tcl's internal string expression in enc. - # To get an usual enc string, use Tk.fromUTF8(ret_val, enc). - enc = encoding_system unless enc - TkCore::INTERP.__invoke('encoding', 'convertto', enc, str) - end - alias encoding_convert_to encoding_convertto - end - - extend Encoding - end - - # estimate encoding - case $KCODE - when /^e/i # EUC - Tk.encoding = 'euc-jp' - when /^s/i # SJIS - Tk.encoding = 'shiftjis' - when /^u/i # UTF8 - Tk.encoding = 'utf-8' - else # NONE - begin - Tk.encoding = Tk.encoding_system - rescue StandardError, NameError - Tk.encoding = 'utf-8' - end - end - -else - # dummy methods - class TclTkIp - alias __eval _eval - alias __invoke _invoke - - alias _eval_with_enc _eval - alias _invoke_with_enc _invoke - end - - module Tk - module Encoding - extend Encoding - - def encoding=(name) - nil - end - def encoding - nil - end - def encoding_names - nil - end - def encoding_system - nil - end - def encoding_system=(enc) - nil - end - - def encoding_convertfrom(str, enc=None) - str - end - alias encoding_convert_from encoding_convertfrom - - def encoding_convertto(str, enc=None) - str - end - alias encoding_convert_to encoding_convertto - end - end -end - - -module TkBindCore - def bind(context, cmd=Proc.new, args=nil) - Tk.bind(self, context, cmd, args) - end - - def bind_append(context, cmd=Proc.new, args=nil) - Tk.bind_append(self, context, cmd, args) - end - - def bind_remove(context) - Tk.bind_remove(self, context) - end - - def bindinfo(context=nil) - Tk.bindinfo(self, context) - end -end - - -module TkTreatFont - def __font_optkeys - ['font'] - end - private :__font_optkeys - - def __pathname - self.path - end - private :__pathname - - ################################ - - def font_configinfo(key = nil) - optkeys = __font_optkeys - if key && !optkeys.find{|opt| opt.to_s == key.to_s} - fail ArgumentError, "unknown font option name `#{key}'" - end - - win, tag = __pathname.split(':') - - if key - pathname = [win, tag, key].join(';') - TkFont.used_on(pathname) || - TkFont.init_widget_font(pathname, *__config_cmd) - elsif optkeys.size == 1 - pathname = [win, tag, optkeys[0]].join(';') - TkFont.used_on(pathname) || - TkFont.init_widget_font(pathname, *__config_cmd) - else - fonts = {} - optkeys.each{|key| - key = key.to_s - pathname = [win, tag, key].join(';') - fonts[key] = - TkFont.used_on(pathname) || - TkFont.init_widget_font(pathname, *__config_cmd) - } - fonts - end - end - alias fontobj font_configinfo - - def font_configure(slot) - pathname = __pathname - - slot = _symbolkey2str(slot) - - __font_optkeys.each{|optkey| - optkey = optkey.to_s - l_optkey = 'latin' << optkey - a_optkey = 'ascii' << optkey - k_optkey = 'kanji' << optkey - - if slot.key?(optkey) - fnt = slot.delete(optkey) - if fnt.kind_of?(TkFont) - slot.delete(l_optkey) - slot.delete(a_optkey) - slot.delete(k_optkey) - - fnt.call_font_configure([pathname, optkey], *(__config_cmd << {})) - next - else - if fnt - if (slot.key?(l_optkey) || - slot.key?(a_optkey) || - slot.key?(k_optkey)) - fnt = TkFont.new(fnt) - - lfnt = slot.delete(l_optkey) - lfnt = slot.delete(a_optkey) if slot.key?(a_optkey) - kfnt = slot.delete(k_optkey) - - fnt.latin_replace(lfnt) if lfnt - fnt.kanji_replace(kfnt) if kfnt - - fnt.call_font_configure([pathname, optkey], - *(__config_cmd << {})) - next - else - fnt = hash_kv(fnt) if fnt.kind_of?(Hash) - tk_call(*(__config_cmd << "-#{optkey}" << fnt)) - end - end - next - end - end - - lfnt = slot.delete(l_optkey) - lfnt = slot.delete(a_optkey) if slot.key?(a_optkey) - kfnt = slot.delete(k_optkey) - - if lfnt && kfnt - TkFont.new(lfnt, kfnt).call_font_configure([pathname, optkey], - *(__config_cmd << {})) - elsif lfnt - latinfont_configure([lfnt, optkey]) - elsif kfnt - kanjifont_configure([kfnt, optkey]) - end - } - - # configure other (without font) options - tk_call(*(__config_cmd.concat(hash_kv(slot)))) if slot != {} - self - end - - def latinfont_configure(ltn, keys=nil) - if ltn.kind_of?(Array) - key = ltn[1] - ltn = ltn[0] - else - key = nil - end - - optkeys = __font_optkeys - if key && !optkeys.find{|opt| opt.to_s == key.to_s} - fail ArgumentError, "unknown font option name `#{key}'" - end - - win, tag = __pathname.split(':') - - optkeys = [key] if key - - optkeys.each{|optkey| - optkey = optkey.to_s - - pathname = [win, tag, optkey].join(';') - - if (fobj = TkFont.used_on(pathname)) - fobj = TkFont.new(fobj) # create a new TkFont object - elsif Tk::JAPANIZED_TK - fobj = fontobj # create a new TkFont object - else - ltn = hash_kv(ltn) if ltn.kind_of?(Hash) - tk_call(*(__config_cmd << "-#{optkey}" << ltn)) - next - end - - if fobj.kind_of?(TkFont) - if ltn.kind_of?(TkFont) - conf = {} - ltn.latin_configinfo.each{|key,val| conf[key] = val} - if keys - fobj.latin_configure(conf.update(keys)) - else - fobj.latin_configure(conf) - end - else - fobj.latin_replace(ltn) - end - end - - fobj.call_font_configure([pathname, optkey], *(__config_cmd << {})) - } - self - end - alias asciifont_configure latinfont_configure - - def kanjifont_configure(knj, keys=nil) - if knj.kind_of?(Array) - key = knj[1] - knj = knj[0] - else - key = nil - end - - optkeys = __font_optkeys - if key && !optkeys.find{|opt| opt.to_s == key.to_s} - fail ArgumentError, "unknown font option name `#{key}'" - end - - win, tag = __pathname.split(':') - - optkeys = [key] if key - - optkeys.each{|optkey| - optkey = optkey.to_s - - pathname = [win, tag, optkey].join(';') - - if (fobj = TkFont.used_on(pathname)) - fobj = TkFont.new(fobj) # create a new TkFont object - elsif Tk::JAPANIZED_TK - fobj = fontobj # create a new TkFont object - else - knj = hash_kv(knj) if knj.kind_of?(Hash) - tk_call(*(__config_cmd << "-#{optkey}" << knj)) - next - end - - if fobj.kind_of?(TkFont) - if knj.kind_of?(TkFont) - conf = {} - knj.kanji_configinfo.each{|key,val| conf[key] = val} - if keys - fobj.kanji_configure(conf.update(keys)) - else - fobj.kanji_configure(conf) - end - else - fobj.kanji_replace(knj) - end - end - - fobj.call_font_configure([pathname, optkey], *(__config_cmd << {})) - } - self - end - - def font_copy(window, wintag=nil, winkey=nil, targetkey=nil) - if wintag - if winkey - fnt = window.tagfontobj(wintag, winkey).dup - else - fnt = window.tagfontobj(wintag).dup - end - else - if winkey - fnt = window.fontobj(winkey).dup - else - fnt = window.fontobj.dup - end - end - - if targetkey - fnt.call_font_configure([__pathname, targetkey], *(__config_cmd << {})) - else - fnt.call_font_configure(__pathname, *(__config_cmd << {})) - end - self - end - - def latinfont_copy(window, wintag=nil, winkey=nil, targetkey=nil) - if targetkey - fontobj(targetkey).dup.call_font_configure([__pathname, targetkey], - *(__config_cmd << {})) - else - fontobj.dup.call_font_configure(__pathname, *(__config_cmd << {})) - end - - if wintag - if winkey - fontobj.latin_replace(window.tagfontobj(wintag, winkey).latin_font_id) - else - fontobj.latin_replace(window.tagfontobj(wintag).latin_font_id) - end - else - if winkey - fontobj.latin_replace(window.fontobj(winkey).latin_font_id) - else - fontobj.latin_replace(window.fontobj.latin_font_id) - end - end - self - end - alias asciifont_copy latinfont_copy - - def kanjifont_copy(window, wintag=nil, winkey=nil, targetkey=nil) - if targetkey - fontobj(targetkey).dup.call_font_configure([__pathname, targetkey], - *(__config_cmd << {})) - else - fontobj.dup.call_font_configure(__pathname, *(__config_cmd << {})) - end - - if wintag - if winkey - fontobj.kanji_replace(window.tagfontobj(wintag, winkey).kanji_font_id) - else - fontobj.kanji_replace(window.tagfontobj(wintag).kanji_font_id) - end - else - if winkey - fontobj.kanji_replace(window.fontobj(winkey).kanji_font_id) - else - fontobj.kanji_replace(window.fontobj.kanji_font_id) - end - end - self - end -end - - -module TkConfigMethod - include TkUtil - include TkTreatFont - - def __cget_cmd - [self.path, 'cget'] - end - private :__cget_cmd - - def __config_cmd - [self.path, 'configure'] - end - private :__config_cmd - - def __configinfo_struct - {:key=>0, :alias=>1, :db_name=>1, :db_class=>2, - :default_value=>3, :current_value=>4} - end - private :__configinfo_struct - - def __numval_optkeys - [] - end - private :__numval_optkeys - - def __numstrval_optkeys - [] - end - private :__numstrval_optkeys - - def __boolval_optkeys - [] - end - private :__boolval_optkeys - - def __strval_optkeys - ['text', 'label', 'show', 'data', 'file'] - end - private :__strval_optkeys - - def __listval_optkeys - [] - end - private :__listval_optkeys - - def __numlistval_optkeys - [] - end - private :__numlistval_optkeys - - def __methodcall_optkeys # { key=>method, ... } - {} - end - private :__methodcall_optkeys - - def __keyonly_optkeys # { def_key=>undef_key or nil, ... } - {} - end - private :__keyonly_optkeys - - def __conv_keyonly_opts(keys) - return keys unless keys.kind_of?(Hash) - keyonly = __keyonly_optkeys - keys2 = {} - keys.each{|k, v| - optkey = keyonly.find{|kk,vv| kk.to_s == k.to_s} - if optkey - defkey, undefkey = optkey - if v - keys2[defkey.to_s] = None - elsif undefkey - keys2[undefkey.to_s] = None - else - # remove key - end - else - keys2[k.to_s] = v - end - } - keys2 - end - - def config_hash_kv(keys, enc_mode = nil, conf = nil) - hash_kv(__conv_keyonly_opts(keys), enc_mode, conf) - end - - ################################ - - def [](id) - cget(id) - end - - def []=(id, val) - configure(id, val) - val - end - - def cget(slot) - slot = slot.to_s - - if ( method = _symbolkey2str(__methodcall_optkeys)[slot] ) - return self.__send__(method) - end - - case slot - when /^(#{__numval_optkeys.join('|')})$/ - begin - number(tk_call_without_enc(*(__cget_cmd << "-#{slot}"))) - rescue - nil - end - - when /^(#{__numstrval_optkeys.join('|')})$/ - num_or_str(tk_call_without_enc(*(__cget_cmd << "-#{slot}"))) - - when /^(#{__boolval_optkeys.join('|')})$/ - begin - bool(tk_call_without_enc(*(__cget_cmd << "-#{slot}"))) - rescue - nil - end - - when /^(#{__listval_optkeys.join('|')})$/ - simplelist(tk_call_without_enc(*(__cget_cmd << "-#{slot}"))) - - when /^(#{__numlistval_optkeys.join('|')})$/ - conf = tk_call_without_enc(*(__cget_cmd << "-#{slot}")) - if conf =~ /^[0-9+-]/ - list(conf) - else - conf - end - - when /^(#{__strval_optkeys.join('|')})$/ - _fromUTF8(tk_call_without_enc(*(__cget_cmd << "-#{slot}"))) - - when /^(|latin|ascii|kanji)(#{__font_optkeys.join('|')})$/ - fontcode = $1 - fontkey = $2 - fnt = tk_tcl2ruby(tk_call_without_enc(*(__cget_cmd << "-#{fontkey}")), true) - unless fnt.kind_of?(TkFont) - fnt = fontobj(fontkey) - end - if fontcode == 'kanji' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/ - # obsolete; just for compatibility - fnt.kanji_font - else - fnt - end - - else - tk_tcl2ruby(tk_call_without_enc(*(__cget_cmd << "-#{slot}")), true) - end - end - - def configure(slot, value=None) - if slot.kind_of? Hash - slot = _symbolkey2str(slot) - - __methodcall_optkeys.each{|key, method| - value = slot.delete(key.to_s) - self.__send__(method, value) if value - } - - __keyonly_optkeys.each{|defkey, undefkey| - conf = slot.find{|kk, vv| kk == defkey.to_s} - if conf - k, v = conf - if v - slot[k] = None - else - slot[undefkey.to_s] = None if undefkey - slot.delete(k) - end - end - } - - if (slot.find{|k, v| k =~ /^(|latin|ascii|kanji)(#{__font_optkeys.join('|')})$/}) - font_configure(slot) - elsif slot.size > 0 - tk_call(*(__config_cmd.concat(hash_kv(slot)))) - end - - else - slot = slot.to_s - if ( conf = __keyonly_optkeys.find{|k, v| k.to_s == slot} ) - defkey, undefkey = conf - if value - tk_call(*(__config_cmd << "-#{defkey}")) - elsif undefkey - tk_call(*(__config_cmd << "-#{undefkey}")) - end - elsif ( method = _symbolkey2str(__methodcall_optkeys)[slot] ) - self.__send__(method, value) - elsif (slot =~ /^(|latin|ascii|kanji)(#{__font_optkeys.join('|')})$/) - if value == None - fontobj($2) - else - font_configure({slot=>value}) - end - else - tk_call(*(__config_cmd << "-#{slot}" << value)) - end - end - self - end - - def configure_cmd(slot, value) - configure(slot, install_cmd(value)) - end - - def configinfo(slot = nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if (slot.to_s =~ /^(|latin|ascii|kanji)(#{__font_optkeys.join('|')})$/) - fontkey = $2 - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{fontkey}")))) - conf[__configinfo_struct[:key]] = - conf[__configinfo_struct[:key]][1..-1] - if ( ! __configinfo_struct[:alias] \ - || conf.size > __configinfo_struct[:alias] + 1 ) - conf[__configinfo_struct[:current_value]] = fontobj(fontkey) - elsif ( __configinfo_struct[:alias] \ - && conf.size == __configinfo_struct[:alias] + 1 \ - && conf[__configinfo_struct[:alias]][0] == ?- ) - conf[__configinfo_struct[:alias]] = - conf[__configinfo_struct[:alias]][1..-1] - end - conf - else - if slot - slot = slot.to_s - case slot - when /^(#{__methodcall_optkeys.keys.join('|')})$/ - method = _symbolkey2str(__methodcall_optkeys)[slot] - return [slot, '', '', '', self.__send__(method)] - - when /^(#{__numval_optkeys.join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]]) - begin - conf[__configinfo_struct[:default_value]] = - number(conf[__configinfo_struct[:default_value]]) - rescue - conf[__configinfo_struct[:default_value]] = nil - end - end - if ( conf[__configinfo_struct[:current_value]] ) - begin - conf[__configinfo_struct[:current_value]] = - number(conf[__configinfo_struct[:current_value]]) - rescue - conf[__configinfo_struct[:current_value]] = nil - end - end - - when /^(#{__numstrval_optkeys.join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]]) - conf[__configinfo_struct[:default_value]] = - num_or_str(conf[__configinfo_struct[:default_value]]) - end - if ( conf[__configinfo_struct[:current_value]] ) - conf[__configinfo_struct[:current_value]] = - num_or_str(conf[__configinfo_struct[:current_value]]) - end - - when /^(#{__boolval_optkeys.join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]]) - begin - conf[__configinfo_struct[:default_value]] = - bool(conf[__configinfo_struct[:default_value]]) - rescue - conf[__configinfo_struct[:default_value]] = nil - end - end - if ( conf[__configinfo_struct[:current_value]] ) - begin - conf[__configinfo_struct[:current_value]] = - bool(conf[__configinfo_struct[:current_value]]) - rescue - conf[__configinfo_struct[:current_value]] = nil - end - end - - when /^(#{__listval_optkeys.join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]]) - conf[__configinfo_struct[:default_value]] = - simplelist(conf[__configinfo_struct[:default_value]]) - end - if ( conf[__configinfo_struct[:current_value]] ) - conf[__configinfo_struct[:current_value]] = - simplelist(conf[__configinfo_struct[:current_value]]) - end - - when /^(#{__numlistval_optkeys.join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] \ - && conf[__configinfo_struct[:default_value]] =~ /^[0-9]/ ) - conf[__configinfo_struct[:default_value]] = - list(conf[__configinfo_struct[:default_value]]) - end - if ( conf[__configinfo_struct[:current_value]] \ - && conf[__configinfo_struct[:current_value]] =~ /^[0-9]/ ) - conf[__configinfo_struct[:current_value]] = - list(conf[__configinfo_struct[:current_value]]) - end - - when /^(#{__strval_optkeys.join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - else - conf = tk_split_list(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - end - conf[__configinfo_struct[:key]] = - conf[__configinfo_struct[:key]][1..-1] - - if ( __configinfo_struct[:alias] \ - && conf.size == __configinfo_struct[:alias] + 1 \ - && conf[__configinfo_struct[:alias]][0] == ?- ) - conf[__configinfo_struct[:alias]] = - conf[__configinfo_struct[:alias]][1..-1] - end - - conf - - else - ret = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*__config_cmd))).collect{|conflist| - conf = tk_split_simplelist(conflist) - conf[__configinfo_struct[:key]] = - conf[__configinfo_struct[:key]][1..-1] - - case conf[__configinfo_struct[:key]] - when /^(#{__strval_optkeys.join('|')})$/ - # do nothing - - when /^(#{__numval_optkeys.join('|')})$/ - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - begin - conf[__configinfo_struct[:default_value]] = - number(conf[__configinfo_struct[:default_value]]) - rescue - conf[__configinfo_struct[:default_value]] = nil - end - end - if ( conf[__configinfo_struct[:current_value]] ) - begin - conf[__configinfo_struct[:current_value]] = - number(conf[__configinfo_struct[:current_value]]) - rescue - conf[__configinfo_struct[:current_value]] = nil - end - end - - when /^(#{__numstrval_optkeys.join('|')})$/ - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - conf[__configinfo_struct[:default_value]] = - num_or_str(conf[__configinfo_struct[:default_value]]) - end - if ( conf[__configinfo_struct[:current_value]] ) - conf[__configinfo_struct[:current_value]] = - num_or_str(conf[__configinfo_struct[:current_value]]) - end - - when /^(#{__boolval_optkeys.join('|')})$/ - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - begin - conf[__configinfo_struct[:default_value]] = - bool(conf[__configinfo_struct[:default_value]]) - rescue - conf[__configinfo_struct[:default_value]] = nil - end - end - if ( conf[__configinfo_struct[:current_value]] ) - begin - conf[__configinfo_struct[:current_value]] = - bool(conf[__configinfo_struct[:current_value]]) - rescue - conf[__configinfo_struct[:current_value]] = nil - end - end - - when /^(#{__listval_optkeys.join('|')})$/ - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - conf[__configinfo_struct[:default_value]] = - simplelist(conf[__configinfo_struct[:default_value]]) - end - if ( conf[__configinfo_struct[:current_value]] ) - conf[__configinfo_struct[:current_value]] = - simplelist(conf[__configinfo_struct[:current_value]]) - end - - when /^(#{__numlistval_optkeys.join('|')})$/ - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] \ - && conf[__configinfo_struct[:default_value]] =~ /^[0-9]/ ) - conf[__configinfo_struct[:default_value]] = - list(conf[__configinfo_struct[:default_value]]) - end - if ( conf[__configinfo_struct[:current_value]] \ - && conf[__configinfo_struct[:current_value]] =~ /^[0-9]/ ) - conf[__configinfo_struct[:current_value]] = - list(conf[__configinfo_struct[:current_value]]) - end - - else - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - if conf[__configinfo_struct[:default_value]].index('{') - conf[__configinfo_struct[:default_value]] = - tk_split_list(conf[__configinfo_struct[:default_value]]) - else - conf[__configinfo_struct[:default_value]] = - tk_tcl2ruby(conf[__configinfo_struct[:default_value]]) - end - end - if conf[__configinfo_struct[:current_value]] - if conf[__configinfo_struct[:current_value]].index('{') - conf[__configinfo_struct[:current_value]] = - tk_split_list(conf[__configinfo_struct[:current_value]]) - else - conf[__configinfo_struct[:current_value]] = - tk_tcl2ruby(conf[__configinfo_struct[:current_value]]) - end - end - end - - if ( __configinfo_struct[:alias] \ - && conf.size == __configinfo_struct[:alias] + 1 \ - && conf[__configinfo_struct[:alias]][0] == ?- ) - conf[__configinfo_struct[:alias]] = - conf[__configinfo_struct[:alias]][1..-1] - end - - conf - } - - __font_optkeys.each{|optkey| - optkey = optkey.to_s - fontconf = ret.assoc(optkey) - if fontconf && fontconf.size > 2 - ret.delete_if{|inf| inf[0] =~ /^(|latin|ascii|kanji)#{optkey}$/} - fontconf[__configinfo_struct[:current_value]] = fontobj(optkey) - ret.push(fontconf) - end - } - - __methodcall_optkeys.each{|optkey, method| - ret << [optkey.to_s, '', '', '', self.__send__(method)] - } - - ret - end - end - - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - if (slot.to_s =~ /^(|latin|ascii|kanji)(#{__font_optkeys.join('|')})$/) - fontkey = $2 - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{fontkey}")))) - conf[__configinfo_struct[:key]] = - conf[__configinfo_struct[:key]][1..-1] - - if ( ! __configinfo_struct[:alias] \ - || conf.size > __configinfo_struct[:alias] + 1 ) - conf[__configinfo_struct[:current_value]] = fontobj(fontkey) - { conf.shift => conf } - elsif ( __configinfo_struct[:alias] \ - && conf.size == __configinfo_struct[:alias] + 1 ) - if conf[__configinfo_struct[:alias]][0] == ?- - conf[__configinfo_struct[:alias]] = - conf[__configinfo_struct[:alias]][1..-1] - end - { conf[0] => conf[1] } - else - { conf.shift => conf } - end - else - if slot - slot = slot.to_s - case slot - when /^(#{__methodcall_optkeys.keys.join('|')})$/ - method = _symbolkey2str(__methodcall_optkeys)[slot] - return {slot => ['', '', '', self.__send__(method)]} - - when /^(#{__numval_optkeys.join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - begin - conf[__configinfo_struct[:default_value]] = - number(conf[__configinfo_struct[:default_value]]) - rescue - conf[__configinfo_struct[:default_value]] = nil - end - end - if ( conf[__configinfo_struct[:current_value]] ) - begin - conf[__configinfo_struct[:current_value]] = - number(conf[__configinfo_struct[:current_value]]) - rescue - conf[__configinfo_struct[:current_value]] = nil - end - end - - when /^(#{__numstrval_optkeys.join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - conf[__configinfo_struct[:default_value]] = - num_or_str(conf[__configinfo_struct[:default_value]]) - end - if ( conf[__configinfo_struct[:current_value]] ) - conf[__configinfo_struct[:current_value]] = - num_or_str(conf[__configinfo_struct[:current_value]]) - end - - when /^(#{__boolval_optkeys.join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - begin - conf[__configinfo_struct[:default_value]] = - bool(conf[__configinfo_struct[:default_value]]) - rescue - conf[__configinfo_struct[:default_value]] = nil - end - end - if ( conf[__configinfo_struct[:current_value]] ) - begin - conf[__configinfo_struct[:current_value]] = - bool(conf[__configinfo_struct[:current_value]]) - rescue - conf[__configinfo_struct[:current_value]] = nil - end - end - - when /^(#{__listval_optkeys.join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - conf[__configinfo_struct[:default_value]] = - simplelist(conf[__configinfo_struct[:default_value]]) - end - if ( conf[__configinfo_struct[:current_value]] ) - conf[__configinfo_struct[:current_value]] = - simplelist(conf[__configinfo_struct[:current_value]]) - end - - when /^(#{__numlistval_optkeys.join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] \ - && conf[__configinfo_struct[:default_value]] =~ /^[0-9]/ ) - conf[__configinfo_struct[:default_value]] = - list(conf[__configinfo_struct[:default_value]]) - end - if ( conf[__configinfo_struct[:current_value]] \ - && conf[__configinfo_struct[:current_value]] =~ /^[0-9]/ ) - conf[__configinfo_struct[:current_value]] = - list(conf[__configinfo_struct[:current_value]]) - end - - when /^(#{__strval_optkeys.join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__config_cmd << "-#{slot}")))) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc(*(__config_cmd << "-#{slot}")))) - end - conf[__configinfo_struct[:key]] = - conf[__configinfo_struct[:key]][1..-1] - - if ( __configinfo_struct[:alias] \ - && conf.size == __configinfo_struct[:alias] + 1 ) - if conf[__configinfo_struct[:alias]][0] == ?- - conf[__configinfo_struct[:alias]] = - conf[__configinfo_struct[:alias]][1..-1] - end - { conf[0] => conf[1] } - else - { conf.shift => conf } - end - - else - ret = {} - tk_split_simplelist(_fromUTF8(tk_call_without_enc(*__config_cmd))).each{|conflist| - conf = tk_split_simplelist(conflist) - conf[__configinfo_struct[:key]] = - conf[__configinfo_struct[:key]][1..-1] - - case conf[__configinfo_struct[:key]] - when /^(#{__strval_optkeys.join('|')})$/ - # do nothing - - when /^(#{__numval_optkeys.join('|')})$/ - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - begin - conf[__configinfo_struct[:default_value]] = - number(conf[__configinfo_struct[:default_value]]) - rescue - conf[__configinfo_struct[:default_value]] = nil - end - end - if ( conf[__configinfo_struct[:current_value]] ) - begin - conf[__configinfo_struct[:current_value]] = - number(conf[__configinfo_struct[:current_value]]) - rescue - conf[__configinfo_struct[:current_value]] = nil - end - end - - when /^(#{__numstrval_optkeys.join('|')})$/ - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - conf[__configinfo_struct[:default_value]] = - num_or_str(conf[__configinfo_struct[:default_value]]) - end - if ( conf[__configinfo_struct[:current_value]] ) - conf[__configinfo_struct[:current_value]] = - num_or_str(conf[__configinfo_struct[:current_value]]) - end - - when /^(#{__boolval_optkeys.join('|')})$/ - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - begin - conf[__configinfo_struct[:default_value]] = - bool(conf[__configinfo_struct[:default_value]]) - rescue - conf[__configinfo_struct[:default_value]] = nil - end - end - if ( conf[__configinfo_struct[:current_value]] ) - begin - conf[__configinfo_struct[:current_value]] = - bool(conf[__configinfo_struct[:current_value]]) - rescue - conf[__configinfo_struct[:current_value]] = nil - end - end - - when /^(#{__listval_optkeys.join('|')})$/ - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - conf[__configinfo_struct[:default_value]] = - simplelist(conf[__configinfo_struct[:default_value]]) - end - if ( conf[__configinfo_struct[:current_value]] ) - conf[__configinfo_struct[:current_value]] = - simplelist(conf[__configinfo_struct[:current_value]]) - end - - when /^(#{__numlistval_optkeys.join('|')})$/ - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] \ - && conf[__configinfo_struct[:default_value]] =~ /^[0-9]/ ) - conf[__configinfo_struct[:default_value]] = - list(conf[__configinfo_struct[:default_value]]) - end - if ( conf[__configinfo_struct[:current_value]] \ - && conf[__configinfo_struct[:current_value]] =~ /^[0-9]/ ) - conf[__configinfo_struct[:current_value]] = - list(conf[__configinfo_struct[:current_value]]) - end - - else - if ( __configinfo_struct[:default_value] \ - && conf[__configinfo_struct[:default_value]] ) - if conf[__configinfo_struct[:default_value]].index('{') - conf[__configinfo_struct[:default_value]] = - tk_split_list(conf[__configinfo_struct[:default_value]]) - else - conf[__configinfo_struct[:default_value]] = - tk_tcl2ruby(conf[__configinfo_struct[:default_value]]) - end - end - if conf[__configinfo_struct[:current_value]] - if conf[__configinfo_struct[:current_value]].index('{') - conf[__configinfo_struct[:current_value]] = - tk_split_list(conf[__configinfo_struct[:current_value]]) - else - conf[__configinfo_struct[:current_value]] = - tk_tcl2ruby(conf[__configinfo_struct[:current_value]]) - end - end - end - - if ( __configinfo_struct[:alias] \ - && conf.size == __configinfo_struct[:alias] + 1 ) - if conf[__configinfo_struct[:alias]][0] == ?- - conf[__configinfo_struct[:alias]] = - conf[__configinfo_struct[:alias]][1..-1] - end - ret[conf[0]] = conf[1] - else - ret[conf.shift] = conf - end - } - - __font_optkeys.each{|optkey| - optkey = optkey.to_s - fontconf = ret[optkey] - if fontconf.kind_of?(Array) - ret.delete(optkey) - ret.delete('latin' << optkey) - ret.delete('ascii' << optkey) - ret.delete('kanji' << optkey) - fontconf[__configinfo_struct[:current_value]] = fontobj(optkey) - ret[optkey] = fontconf - end - } - - __methodcall_optkeys.each{|optkey, method| - ret[optkey.to_s] = ['', '', '', self.__send__(method)] - } - - ret - end - end - end - end - - def current_configinfo(slot = nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - org_slot = slot - begin - conf = configinfo(slot) - if ( ! __configinfo_struct[:alias] \ - || conf.size > __configinfo_struct[:alias] + 1 ) - return {conf[0] => conf[-1]} - end - slot = conf[__configinfo_struct[:alias]] - end while(org_slot != slot) - fail RuntimeError, - "there is a configure alias loop about '#{org_slot}'" - else - ret = {} - configinfo().each{|conf| - if ( ! __configinfo_struct[:alias] \ - || conf.size > __configinfo_struct[:alias] + 1 ) - ret[conf[0]] = conf[-1] - end - } - ret - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - ret = {} - configinfo(slot).each{|key, conf| - ret[key] = conf[-1] if conf.kind_of?(Array) - } - ret - end - end -end - -class TkObject<TkKernel - extend TkCore - include Tk - include TkConfigMethod - include TkBindCore - -### --> definition is moved to TkUtil module -# def path -# @path -# end - - def epath - @path - end - - def to_eval - @path - end - - def tk_send(cmd, *rest) - tk_call(path, cmd, *rest) - end - def tk_send_without_enc(cmd, *rest) - tk_call_without_enc(path, cmd, *rest) - end - def tk_send_with_enc(cmd, *rest) - tk_call_with_enc(path, cmd, *rest) - end - # private :tk_send, :tk_send_without_enc, :tk_send_with_enc - - def method_missing(id, *args) - name = id.id2name - case args.length - when 1 - if name[-1] == ?= - configure name[0..-2], args[0] - else - configure name, args[0] - end - when 0 - begin - cget(name) - rescue - fail NameError, - "undefined local variable or method `#{name}' for #{self.to_s}", - error_at - end - else - fail NameError, "undefined method `#{name}' for #{self.to_s}", error_at - end - end - -=begin - def [](id) - cget(id) - end - - def []=(id, val) - configure(id, val) - val - end -=end - - def event_generate(context, keys=nil) - if keys - #tk_call('event', 'generate', path, - # "<#{tk_event_sequence(context)}>", *hash_kv(keys)) - tk_call_without_enc('event', 'generate', path, - "<#{tk_event_sequence(context)}>", - *hash_kv(keys, true)) - else - #tk_call('event', 'generate', path, "<#{tk_event_sequence(context)}>") - tk_call_without_enc('event', 'generate', path, - "<#{tk_event_sequence(context)}>") - end - end - - def tk_trace_variable(v) - #unless v.kind_of?(TkVariable) - # fail(ArgumentError, "type error (#{v.class}); must be TkVariable object") - #end - v - end - private :tk_trace_variable - - def destroy - #tk_call 'trace', 'vdelete', @tk_vn, 'w', @var_id if @var_id - end -end - - -class TkWindow<TkObject - include TkWinfo - extend TkBindCore - - TkCommandNames = [].freeze - ## ==> If TkCommandNames[0] is a string (not a null string), - ## assume the string is a Tcl/Tk's create command of the widget class. - WidgetClassName = ''.freeze - # WidgetClassNames[WidgetClassName] = self - ## ==> If self is a widget class, entry to the WidgetClassNames table. - def self.to_eval - self::WidgetClassName - end - - def initialize(parent=nil, keys=nil) - if parent.kind_of? Hash - keys = _symbolkey2str(parent) - parent = keys.delete('parent') - widgetname = keys.delete('widgetname') - install_win(if parent then parent.path end, widgetname) - without_creating = keys.delete('without_creating') - if without_creating && !widgetname - fail ArgumentError, - "if set 'without_creating' to true, need to define 'widgetname'" - end - elsif keys - keys = _symbolkey2str(keys) - widgetname = keys.delete('widgetname') - install_win(if parent then parent.path end, widgetname) - without_creating = keys.delete('without_creating') - if without_creating && !widgetname - fail ArgumentError, - "if set 'without_creating' to true, need to define 'widgetname'" - end - else - install_win(if parent then parent.path end) - end - if self.method(:create_self).arity == 0 - p 'create_self has no arg' if $DEBUG - create_self unless without_creating - if keys - # tk_call @path, 'configure', *hash_kv(keys) - configure(keys) - end - else - p 'create_self has args' if $DEBUG - fontkeys = {} - methodkeys = {} - if keys - #['font', 'kanjifont', 'latinfont', 'asciifont'].each{|key| - # fontkeys[key] = keys.delete(key) if keys.key?(key) - #} - __font_optkeys.each{|key| - fkey = key.to_s - fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey) - - fkey = "kanji#{key}" - fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey) - - fkey = "latin#{key}" - fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey) - - fkey = "ascii#{key}" - fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey) - } - - __methodcall_optkeys.each{|key| - key = key.to_s - methodkeys[key] = keys.delete(key) if keys.key?(key) - } - end - if without_creating && keys - #configure(keys) - configure(__conv_keyonly_opts(keys)) - else - #create_self(keys) - create_self(__conv_keyonly_opts(keys)) - end - font_configure(fontkeys) unless fontkeys.empty? - configure(methodkeys) unless methodkeys.empty? - end - end - - def create_self(keys) - # may need to override - begin - cmd = self.class::TkCommandNames[0] - fail unless (cmd.kind_of?(String) && cmd.length > 0) - rescue - fail RuntimeError, "class #{self.class} may be an abstract class" - end - - if keys and keys != None - tk_call_without_enc(cmd, @path, *hash_kv(keys, true)) - else - tk_call_without_enc(cmd, @path) - end - end - private :create_self - - def exist? - TkWinfo.exist?(self) - end - - def bind_class - @db_class || self.class() - end - - def database_classname - TkWinfo.classname(self) - end - def database_class - name = database_classname() - if WidgetClassNames[name] - WidgetClassNames[name] - else - TkDatabaseClass.new(name) - end - end - def self.database_classname - self::WidgetClassName - end - def self.database_class - WidgetClassNames[self::WidgetClassName] - end - - def pack(keys = nil) - #tk_call_without_enc('pack', epath, *hash_kv(keys, true)) - if keys - TkPack.configure(self, keys) - else - TkPack.configure(self) - end - self - end - - def pack_in(target, keys = nil) - if keys - keys = keys.dup - keys['in'] = target - else - keys = {'in'=>target} - end - #tk_call 'pack', epath, *hash_kv(keys) - TkPack.configure(self, keys) - self - end - - def pack_forget - #tk_call_without_enc('pack', 'forget', epath) - TkPack.forget(self) - self - end - alias unpack pack_forget - - def pack_config(slot, value=None) - #if slot.kind_of? Hash - # tk_call 'pack', 'configure', epath, *hash_kv(slot) - #else - # tk_call 'pack', 'configure', epath, "-#{slot}", value - #end - if slot.kind_of? Hash - TkPack.configure(self, slot) - else - TkPack.configure(self, slot=>value) - end - end - alias pack_configure pack_config - - def pack_info() - #ilist = list(tk_call('pack', 'info', epath)) - #info = {} - #while key = ilist.shift - # info[key[1..-1]] = ilist.shift - #end - #return info - TkPack.info(self) - end - - def pack_propagate(mode=None) - #if mode == None - # bool(tk_call('pack', 'propagate', epath)) - #else - # tk_call('pack', 'propagate', epath, mode) - # self - #end - if mode == None - TkPack.propagate(self) - else - TkPack.propagate(self, mode) - self - end - end - - def pack_slaves() - #list(tk_call('pack', 'slaves', epath)) - TkPack.slaves(self) - end - - def grid(keys = nil) - #tk_call 'grid', epath, *hash_kv(keys) - if keys - TkGrid.configure(self, keys) - else - TkGrid.configure(self) - end - self - end - - def grid_in(target, keys = nil) - if keys - keys = keys.dup - keys['in'] = target - else - keys = {'in'=>target} - end - #tk_call 'grid', epath, *hash_kv(keys) - TkGrid.configure(self, keys) - self - end - - def grid_forget - #tk_call('grid', 'forget', epath) - TkGrid.forget(self) - self - end - alias ungrid grid_forget - - def grid_bbox(*args) - #list(tk_call('grid', 'bbox', epath, *args)) - TkGrid.bbox(self, *args) - end - - def grid_config(slot, value=None) - #if slot.kind_of? Hash - # tk_call 'grid', 'configure', epath, *hash_kv(slot) - #else - # tk_call 'grid', 'configure', epath, "-#{slot}", value - #end - if slot.kind_of? Hash - TkGrid.configure(self, slot) - else - TkGrid.configure(self, slot=>value) - end - end - alias grid_configure grid_config - - def grid_columnconfig(index, keys) - #tk_call('grid', 'columnconfigure', epath, index, *hash_kv(keys)) - TkGrid.columnconfigure(self, index, keys) - end - alias grid_columnconfigure grid_columnconfig - - def grid_rowconfig(index, keys) - #tk_call('grid', 'rowconfigure', epath, index, *hash_kv(keys)) - TkGrid.rowconfigure(self, index, keys) - end - alias grid_rowconfigure grid_rowconfig - - def grid_columnconfiginfo(index, slot=nil) - #if slot - # tk_call('grid', 'columnconfigure', epath, index, "-#{slot}").to_i - #else - # ilist = list(tk_call('grid', 'columnconfigure', epath, index)) - # info = {} - # while key = ilist.shift - # info[key[1..-1]] = ilist.shift - # end - # info - #end - TkGrid.columnconfiginfo(self, index, slot) - end - - def grid_rowconfiginfo(index, slot=nil) - #if slot - # tk_call('grid', 'rowconfigure', epath, index, "-#{slot}").to_i - #else - # ilist = list(tk_call('grid', 'rowconfigure', epath, index)) - # info = {} - # while key = ilist.shift - # info[key[1..-1]] = ilist.shift - # end - # info - #end - TkGrid.rowconfiginfo(self, index, slot) - end - - def grid_info() - #list(tk_call('grid', 'info', epath)) - TkGrid.info(self) - end - - def grid_location(x, y) - #list(tk_call('grid', 'location', epath, x, y)) - TkGrid.location(self, x, y) - end - - def grid_propagate(mode=None) - #if mode == None - # bool(tk_call('grid', 'propagate', epath)) - #else - # tk_call('grid', 'propagate', epath, mode) - # self - #end - if mode == None - TkGrid.propagete(self) - else - TkGrid.propagete(self, mode) - self - end - end - - def grid_remove() - #tk_call 'grid', 'remove', epath - TkGrid.remove(self) - self - end - - def grid_size() - #list(tk_call('grid', 'size', epath)) - TkGrid.size(self) - end - - def grid_slaves(args) - #list(tk_call('grid', 'slaves', epath, *hash_kv(args))) - TkGrid.slaves(self, args) - end - - def place(keys) - #tk_call 'place', epath, *hash_kv(keys) - TkPlace.configure(self, keys) - self - end - - def place_in(target, keys = nil) - if keys - keys = keys.dup - keys['in'] = target - else - keys = {'in'=>target} - end - #tk_call 'place', epath, *hash_kv(keys) - TkPlace.configure(self, keys) - self - end - - def place_forget - #tk_call 'place', 'forget', epath - TkPlace.forget(self) - self - end - alias unplace place_forget - - def place_config(slot, value=None) - #if slot.kind_of? Hash - # tk_call 'place', 'configure', epath, *hash_kv(slot) - #else - # tk_call 'place', 'configure', epath, "-#{slot}", value - #end - TkPlace.configure(self, slot, value) - end - alias place_configure place_config - - def place_configinfo(slot = nil) - # for >= Tk8.4a2 ? - #if slot - # conf = tk_split_list(tk_call('place', 'configure', epath, "-#{slot}") ) - # conf[0] = conf[0][1..-1] - # conf - #else - # tk_split_simplelist(tk_call('place', - # 'configure', epath)).collect{|conflist| - # conf = tk_split_simplelist(conflist) - # conf[0] = conf[0][1..-1] - # conf - # } - #end - TkPlace.configinfo(self, slot) - end - - def place_info() - #ilist = list(tk_call('place', 'info', epath)) - #info = {} - #while key = ilist.shift - # info[key[1..-1]] = ilist.shift - #end - #return info - TkPlace.info(self) - end - - def place_slaves() - #list(tk_call('place', 'slaves', epath)) - TkPlace.slaves(self) - end - - def set_focus(force=false) - if force - tk_call_without_enc('focus', '-force', path) - else - tk_call_without_enc('focus', path) - end - self - end - alias focus set_focus - - def grab(opt = nil) - unless opt - tk_call_without_enc('grab', 'set', path) - return self - end - - case opt - when 'set', :set - tk_call_without_enc('grab', 'set', path) - return self - when 'global', :global - #return(tk_call('grab', 'set', '-global', path)) - tk_call_without_enc('grab', 'set', '-global', path) - return self - when 'release', :release - #return tk_call('grab', 'release', path) - tk_call_without_enc('grab', 'release', path) - return self - when 'current', :current - return window(tk_call_without_enc('grab', 'current', path)) - when 'status', :status - return tk_call_without_enc('grab', 'status', path) - else - return tk_call_without_enc('grab', opt, path) - end - end - - def grab_current - grab('current') - end - alias current_grab grab_current - def grab_release - grab('release') - end - alias release_grab grab_release - def grab_set - grab('set') - end - alias set_grab grab_set - def grab_set_global - grab('global') - end - alias set_global_grab grab_set_global - def grab_status - grab('status') - end - - def lower(below=None) - # below = below.epath if below.kind_of?(TkObject) - below = _epath(below) - tk_call 'lower', epath, below - self - end - def raise(above=None) - #above = above.epath if above.kind_of?(TkObject) - above = _epath(above) - tk_call 'raise', epath, above - self - end - - def command(cmd=nil, &b) - if cmd - configure_cmd('command', cmd) - elsif b - configure_cmd('command', Proc.new(&b)) - else - cget('command') - end - end - - def colormodel(model=None) - tk_call('tk', 'colormodel', path, model) - self - end - - def caret(keys=nil) - TkXIM.caret(path, keys) - end - - def destroy - super - children = [] - rexp = /^#{self.path}\.[^.]+$/ - TkCore::INTERP.tk_windows.each{|path, obj| - children << [path, obj] if path =~ rexp - } - 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) - } - - begin - tk_call_without_enc('destroy', epath) - rescue - end - uninstall_win - end - - def wait_visibility(on_thread = true) - if $SAFE >= 4 - fail SecurityError, "can't wait visibility at $SAFE >= 4" - end - on_thread &= (Thread.list.size != 1) - if on_thread - INTERP._thread_tkwait('visibility', path) - else - INTERP._invoke('tkwait', 'visibility', path) - end - end - def eventloop_wait_visibility - wait_visibility(false) - end - def thread_wait_visibility - wait_visibility(true) - end - alias wait wait_visibility - alias tkwait wait_visibility - alias eventloop_wait eventloop_wait_visibility - alias eventloop_tkwait eventloop_wait_visibility - alias eventloop_tkwait_visibility eventloop_wait_visibility - alias thread_wait thread_wait_visibility - alias thread_tkwait thread_wait_visibility - alias thread_tkwait_visibility thread_wait_visibility - - def wait_destroy(on_thread = true) - if $SAFE >= 4 - fail SecurityError, "can't wait destroy at $SAFE >= 4" - end - on_thread &= (Thread.list.size != 1) - if on_thread - INTERP._thread_tkwait('window', epath) - else - INTERP._invoke('tkwait', 'window', epath) - end - end - alias wait_window wait_destroy - def eventloop_wait_destroy - wait_destroy(false) - end - alias eventloop_wait_window eventloop_wait_destroy - def thread_wait_destroy - wait_destroy(true) - end - alias thread_wait_window thread_wait_destroy - - alias tkwait_destroy wait_destroy - alias tkwait_window wait_destroy - - alias eventloop_tkwait_destroy eventloop_wait_destroy - alias eventloop_tkwait_window eventloop_wait_destroy - - alias thread_tkwait_destroy thread_wait_destroy - alias thread_tkwait_window thread_wait_destroy - - def bindtags(taglist=nil) - if taglist - fail ArgumentError, "taglist must be Array" unless taglist.kind_of? Array - tk_call('bindtags', path, taglist) - taglist - else - list(tk_call('bindtags', path)).collect{|tag| - if tag.kind_of?(String) - if cls = WidgetClassNames[tag] - cls - elsif btag = TkBindTag.id2obj(tag) - btag - else - tag - end - else - tag - end - } - end - end - - def bindtags=(taglist) - bindtags(taglist) - taglist - end - - def bindtags_shift - taglist = bindtags - tag = taglist.shift - bindtags(taglist) - tag - end - - def bindtags_unshift(tag) - bindtags(bindtags().unshift(tag)) - end -end - - -# freeze core modules -#TclTkLib.freeze -#TclTkIp.freeze -#TkUtil.freeze -#TkKernel.freeze -#TkComm.freeze -#TkComm::Event.freeze -#TkCore.freeze -#Tk.freeze - -module Tk - autoload :AUTO_PATH, 'tk/variable' - autoload :TCL_PACKAGE_PATH, 'tk/variable' - autoload :PACKAGE_PATH, 'tk/variable' - autoload :TCL_LIBRARY_PATH, 'tk/variable' - autoload :LIBRARY_PATH, 'tk/variable' - autoload :TCL_PRECISION, 'tk/variable' -end - - -# call setup script for Tk extension libraries (base configuration) -begin - require 'tkextlib/setup.rb' -rescue LoadError - # ignore -end diff --git a/ext/tk/lib/tk/after.rb b/ext/tk/lib/tk/after.rb deleted file mode 100644 index 8c58210331..0000000000 --- a/ext/tk/lib/tk/after.rb +++ /dev/null @@ -1,6 +0,0 @@ -# -# tk/after.rb : methods for Tcl/Tk after command -# -# $Id$ -# -require 'tk/timer' diff --git a/ext/tk/lib/tk/autoload.rb b/ext/tk/lib/tk/autoload.rb deleted file mode 100644 index bccd6c4c61..0000000000 --- a/ext/tk/lib/tk/autoload.rb +++ /dev/null @@ -1,190 +0,0 @@ -# -# autoload -# - -####################### -# geometry manager -autoload :TkGrid, 'tk/grid' -def TkGrid(*args); TkGrid.configure(*args); end - -autoload :TkPack, 'tk/pack' -def TkPack(*args); TkPack.configure(*args); end - -autoload :TkPlace, 'tk/place' -def TkPlace(*args); TkPlace.configure(*args); end - - -####################### -# others -autoload :TkBgError, 'tk/bgerror' - -autoload :TkBindTag, 'tk/bindtag' -autoload :TkBindTagAll, 'tk/bindtag' -autoload :TkDatabaseClass, 'tk/bindtag' - -autoload :TkButton, 'tk/button' - -autoload :TkConsole, 'tk/console' - -autoload :TkCanvas, 'tk/canvas' - -autoload :TkcTagAccess, 'tk/canvastag' -autoload :TkcTag, 'tk/canvastag' -autoload :TkcTagString, 'tk/canvastag' -autoload :TkcNamedTag, 'tk/canvastag' -autoload :TkcTagAll, 'tk/canvastag' -autoload :TkcTagCurrent, 'tk/canvastag' -autoload :TkcTagGroup, 'tk/canvastag' - -autoload :TkCheckButton, 'tk/checkbutton' -autoload :TkCheckbutton, 'tk/checkbutton' - -autoload :TkClipboard, 'tk/clipboard' - -autoload :TkComposite, 'tk/composite' - -autoload :TkConsole, 'tk/console' - -autoload :TkDialog, 'tk/dialog' -autoload :TkDialog2, 'tk/dialog' -autoload :TkWarning, 'tk/dialog' -autoload :TkWarning2, 'tk/dialog' - -autoload :TkEntry, 'tk/entry' - -autoload :TkEvent, 'tk/event' - -autoload :TkFont, 'tk/font' -autoload :TkTreatTagFont, 'tk/font' - -autoload :TkFrame, 'tk/frame' - -autoload :TkImage, 'tk/image' -autoload :TkBitmapImage, 'tk/image' -autoload :TkPhotoImage, 'tk/image' - -autoload :TkItemConfigMethod, 'tk/itemconfig' - -autoload :TkTreatItemFont, 'tk/itemfont' - -autoload :TkKinput, 'tk/kinput' - -autoload :TkLabel, 'tk/label' - -autoload :TkLabelFrame, 'tk/labelframe' -autoload :TkLabelframe, 'tk/labelframe' - -autoload :TkListbox, 'tk/listbox' - -autoload :TkMacResource, 'tk/macpkg' - -autoload :TkMenu, 'tk/menu' -autoload :TkMenuClone, 'tk/menu' -autoload :TkSystemMenu, 'tk/menu' -autoload :TkSysMenu_Help, 'tk/menu' -autoload :TkSysMenu_System, 'tk/menu' -autoload :TkSysMenu_Apple, 'tk/menu' -autoload :TkMenubutton, 'tk/menu' -autoload :TkOptionMenubutton, 'tk/menu' - -autoload :TkMenubar, 'tk/menubar' - -autoload :TkMenuSpec, 'tk/menuspec' - -autoload :TkMessage, 'tk/message' - -autoload :TkManageFocus, 'tk/mngfocus' - -autoload :TkMsgCatalog, 'tk/msgcat' -autoload :TkMsgCat, 'tk/msgcat' - -autoload :TkNamespace, 'tk/namespace' - -autoload :TkOptionDB, 'tk/optiondb' -autoload :TkOption, 'tk/optiondb' -autoload :TkResourceDB, 'tk/optiondb' - -autoload :TkPackage, 'tk/package' - -autoload :TkPalette, 'tk/palette' - -autoload :TkPanedWindow, 'tk/panedwindow' -autoload :TkPanedwindow, 'tk/panedwindow' - -autoload :TkRadioButton, 'tk/radiobutton' -autoload :TkRadiobutton, 'tk/radiobutton' - -autoload :TkRoot, 'tk/root' - -autoload :TkScale, 'tk/scale' - -autoload :TkScrollbar, 'tk/scrollbar' -autoload :TkXScrollbar, 'tk/scrollbar' -autoload :TkYScrollbar, 'tk/scrollbar' - -autoload :TkScrollbox, 'tk/scrollbox' - -autoload :TkSelection, 'tk/selection' - -autoload :TkSpinbox, 'tk/spinbox' - -autoload :TkTreatTagFont, 'tk/tagfont' - -autoload :TkText, 'tk/text' - -autoload :TkTextImage, 'tk/textimage' - -autoload :TkTextMark, 'tk/textmark' -autoload :TkTextNamedMark, 'tk/textmark' -autoload :TkTextMarkInsert, 'tk/textmark' -autoload :TkTextMarkCurrent, 'tk/textmark' -autoload :TkTextMarkAnchor, 'tk/textmark' - -autoload :TkTextTag, 'tk/texttag' -autoload :TkTextNamedTag, 'tk/texttag' -autoload :TkTextTagSel, 'tk/texttag' - -autoload :TkTextWindow, 'tk/textwindow' - -autoload :TkAfter, 'tk/timer' -autoload :TkTimer, 'tk/timer' - -autoload :TkToplevel, 'tk/toplevel' - -autoload :TkTextWin, 'tk/txtwin_abst' - -autoload :TkValidation, 'tk/validation' - -autoload :TkVariable, 'tk/variable' -autoload :TkVarAccess, 'tk/variable' - -autoload :TkVirtualEvent, 'tk/virtevent' - -autoload :TkWinfo, 'tk/winfo' - -autoload :TkWinDDE, 'tk/winpkg' -autoload :TkWinRegistry, 'tk/winpkg' - -autoload :TkXIM, 'tk/xim' - - -####################### -# sub-module of Tk -module Tk - autoload :Clock, 'tk/clock' - autoload :OptionObj, 'tk/optionobj' - autoload :Scrollable, 'tk/scrollable' - autoload :Wm, 'tk/wm' - - autoload :ValidateConfigure, 'tk/validation' - autoload :ItemValidateConfigure, 'tk/validation' - - autoload :EncodedString, 'tk/encodedstr' - def Tk.EncodedString(str, enc = nil); Tk::EncodedString.new(str, enc); end - - autoload :BinaryString, 'tk/encodedstr' - def Tk.BinaryString(str); Tk::BinaryString.new(str); end - - autoload :UTF8_String, 'tk/encodedstr' - def Tk.UTF8_String(str); Tk::UTF8_String.new(str); end -end diff --git a/ext/tk/lib/tk/bgerror.rb b/ext/tk/lib/tk/bgerror.rb deleted file mode 100644 index c82a8e046b..0000000000 --- a/ext/tk/lib/tk/bgerror.rb +++ /dev/null @@ -1,29 +0,0 @@ -# -# tkbgerror -- bgerror ( tkerror ) module -# 1998/07/16 by Hidetoshi Nagai <nagai@ai.kyutech.ac.jp> -# -require 'tk' - -module TkBgError - extend Tk - - TkCommandNames = ['bgerror'.freeze].freeze - - def bgerror(message) - tk_call('bgerror', message) - end - alias tkerror bgerror - alias show bgerror - module_function :bgerror, :tkerror, :show - - def set_handler(hdlr = Proc.new) #==> handler :: proc{|msg| ...body... } - tk_call('proc', 'bgerror', 'msg', install_cmd(hdlr) + ' $msg') - end - def set_default - begin - tk_call('rename', 'bgerror', '') - rescue RuntimeError - end - end - module_function :set_handler, :set_default -end diff --git a/ext/tk/lib/tk/bindtag.rb b/ext/tk/lib/tk/bindtag.rb deleted file mode 100644 index adf96b9e3d..0000000000 --- a/ext/tk/lib/tk/bindtag.rb +++ /dev/null @@ -1,79 +0,0 @@ -# -# tk/bind.rb : control event binding -# -require 'tk' - -class TkBindTag - include TkBindCore - - #BTagID_TBL = {} - BTagID_TBL = TkCore::INTERP.create_table - Tk_BINDTAG_ID = ["btag".freeze, "00000".taint].freeze - - TkCore::INTERP.init_ip_env{ BTagID_TBL.clear } - - def TkBindTag.id2obj(id) - BTagID_TBL[id]? BTagID_TBL[id]: id - end - - def TkBindTag.new_by_name(name, *args, &b) - return BTagID_TBL[name] if BTagID_TBL[name] - self.new(*args, &b).instance_eval{ - BTagID_TBL.delete @id - @id = name - BTagID_TBL[@id] = self - } - end - - def initialize(*args, &b) - # @id = Tk_BINDTAG_ID.join('') - @id = Tk_BINDTAG_ID.join(TkCore::INTERP._ip_id_) - Tk_BINDTAG_ID[1].succ! - BTagID_TBL[@id] = self - bind(*args, &b) if args != [] - end - - ALL = self.new_by_name('all') - - def name - @id - end - - def to_eval - @id - end - - def inspect - #Kernel.format "#<TkBindTag: %s>", @id - '#<TkBindTag: ' + @id + '>' - end -end - - -class TkBindTagAll<TkBindTag - def TkBindTagAll.new(*args, &b) - $stderr.puts "Warning: TkBindTagALL is obsolete. Use TkBindTag::ALL\n" - - TkBindTag::ALL.bind(*args, &b) if args != [] - TkBindTag::ALL - end -end - - -class TkDatabaseClass<TkBindTag - def self.new(name, *args, &b) - return BTagID_TBL[name] if BTagID_TBL[name] - super(name, *args, &b) - end - - def initialize(name, *args, &b) - @id = name - BTagID_TBL[@id] = self - bind(*args, &b) if args != [] - end - - def inspect - #Kernel.format "#<TkDatabaseClass: %s>", @id - '#<TkDatabaseClass: ' + @id + '>' - end -end diff --git a/ext/tk/lib/tk/button.rb b/ext/tk/lib/tk/button.rb deleted file mode 100644 index 407a47c400..0000000000 --- a/ext/tk/lib/tk/button.rb +++ /dev/null @@ -1,27 +0,0 @@ -# -# tk/button.rb : treat button widget -# -require 'tk' -require 'tk/label' - -class TkButton<TkLabel - TkCommandNames = ['button'.freeze].freeze - WidgetClassName = 'Button'.freeze - WidgetClassNames[WidgetClassName] = self - #def create_self(keys) - # if keys and keys != None - # tk_call_without_enc('button', @path, *hash_kv(keys, true)) - # else - # tk_call_without_enc('button', @path) - # end - #end - #private :create_self - - def invoke - _fromUTF8(tk_send_without_enc('invoke')) - end - def flash - tk_send_without_enc('flash') - self - end -end diff --git a/ext/tk/lib/tk/canvas.rb b/ext/tk/lib/tk/canvas.rb deleted file mode 100644 index 1a8a7927d3..0000000000 --- a/ext/tk/lib/tk/canvas.rb +++ /dev/null @@ -1,701 +0,0 @@ -# -# tk/canvas.rb - Tk canvas classes -# $Date$ -# by Yukihiro Matsumoto <matz@caelum.co.jp> -# -require 'tk' -require 'tk/canvastag' -require 'tk/itemconfig' -require 'tk/scrollable' - -module TkCanvasItemConfig - include TkItemConfigMethod - - def __item_methodcall_optkeys(id) - {'coords'=>'coords'} - end - private :__item_methodcall_optkeys - - def __item_pathname(tagOrId) - if tagOrId.kind_of?(TkcItem) || tagOrId.kind_of?(TkcTag) - self.path + ';' + tagOrId.id.to_s - else - self.path + ';' + tagOrId.to_s - end - end - private :__item_pathname -end - -class TkCanvas<TkWindow - include TkCanvasItemConfig - include Scrollable - - TkCommandNames = ['canvas'.freeze].freeze - WidgetClassName = 'Canvas'.freeze - WidgetClassNames[WidgetClassName] = self - - def __destroy_hook__ - TkcItem::CItemID_TBL.delete(@path) - end - - #def create_self(keys) - # if keys and keys != None - # tk_call_without_enc('canvas', @path, *hash_kv(keys, true)) - # else - # tk_call_without_enc('canvas', @path) - # end - #end - #private :create_self - - def tagid(tag) - if tag.kind_of?(TkcItem) || tag.kind_of?(TkcTag) - tag.id - else - tag # maybe an Array of configure paramters - end - end - private :tagid - - - # create a canvas item without creating a TkcItem object - def create(type, *args) - type.create(self, *args) - end - - - def addtag(tag, mode, *args) - tk_send_without_enc('addtag', tagid(tag), mode, *args) - self - end - def addtag_above(tagOrId, target) - addtag(tagOrId, 'above', tagid(target)) - end - def addtag_all(tagOrId) - addtag(tagOrId, 'all') - end - def addtag_below(tagOrId, target) - addtag(tagOrId, 'below', tagid(target)) - end - def addtag_closest(tagOrId, x, y, halo=None, start=None) - addtag(tagOrId, 'closest', x, y, halo, start) - end - def addtag_enclosed(tagOrId, x1, y1, x2, y2) - addtag(tagOrId, 'enclosed', x1, y1, x2, y2) - end - def addtag_overlapping(tagOrId, x1, y1, x2, y2) - addtag(tagOrId, 'overlapping', x1, y1, x2, y2) - end - def addtag_withtag(tagOrId, tag) - addtag(tagOrId, 'withtag', tagid(tag)) - end - - def bbox(tagOrId, *tags) - list(tk_send_without_enc('bbox', tagid(tagOrId), - *tags.collect{|t| tagid(t)})) - end - - def itembind(tag, context, cmd=Proc.new, args=nil) - _bind([path, "bind", tagid(tag)], context, cmd, args) - self - end - - def itembind_append(tag, context, cmd=Proc.new, args=nil) - _bind_append([path, "bind", tagid(tag)], context, cmd, args) - self - end - - def itembind_remove(tag, context) - _bind_remove([path, "bind", tagid(tag)], context) - self - end - - def itembindinfo(tag, context=nil) - _bindinfo([path, "bind", tagid(tag)], context) - end - - def canvasx(screen_x, *args) - #tk_tcl2ruby(tk_send_without_enc('canvasx', screen_x, *args)) - number(tk_send_without_enc('canvasx', screen_x, *args)) - end - def canvasy(screen_y, *args) - #tk_tcl2ruby(tk_send_without_enc('canvasy', screen_y, *args)) - number(tk_send_without_enc('canvasy', screen_y, *args)) - end - - def coords(tag, *args) - if args == [] - tk_split_list(tk_send_without_enc('coords', tagid(tag))) - else - tk_send_without_enc('coords', tagid(tag), *(args.flatten)) - self - end - end - - def dchars(tag, first, last=None) - tk_send_without_enc('dchars', tagid(tag), - _get_eval_enc_str(first), _get_eval_enc_str(last)) - self - end - - def delete(*args) - if TkcItem::CItemID_TBL[self.path] - find('withtag', *args).each{|item| - TkcItem::CItemID_TBL[self.path].delete(item.id) - } - end - tk_send_without_enc('delete', *args.collect{|t| tagid(t)}) - self - end - alias remove delete - - def dtag(tag, tag_to_del=None) - tk_send_without_enc('dtag', tagid(tag), tag_to_del) - self - end - - def find(mode, *args) - list(tk_send_without_enc('find', mode, *args)).collect!{|id| - TkcItem.id2obj(self, id) - } - end - def find_above(target) - find('above', tagid(target)) - end - def find_all - find('all') - end - def find_below(target) - find('below', tagid(target)) - end - def find_closest(x, y, halo=None, start=None) - find('closest', x, y, halo, start) - end - def find_enclosed(x1, y1, x2, y2) - find('enclosed', x1, y1, x2, y2) - end - def find_overlapping(x1, y1, x2, y2) - find('overlapping', x1, y1, x2, y2) - end - def find_withtag(tag) - find('withtag', tag) - end - - def itemfocus(tagOrId=nil) - if tagOrId - tk_send_without_enc('focus', tagid(tagOrId)) - self - else - ret = tk_send_without_enc('focus') - if ret == "" - nil - else - TkcItem.id2obj(self, ret) - end - end - end - - def gettags(tagOrId) - list(tk_send_without_enc('gettags', tagid(tagOrId))).collect{|tag| - TkcTag.id2obj(self, tag) - } - end - - def icursor(tagOrId, index) - tk_send_without_enc('icursor', tagid(tagOrId), index) - self - end - - def index(tagOrId, index) - number(tk_send_without_enc('index', tagid(tagOrId), index)) - end - - def insert(tagOrId, index, string) - tk_send_without_enc('insert', tagid(tagOrId), index, - _get_eval_enc_str(string)) - self - end - -=begin - def itemcget(tagOrId, option) - case option.to_s - when 'dash', 'activedash', 'disableddash' - conf = tk_send_without_enc('itemcget', tagid(tagOrId), "-#{option}") - if conf =~ /^[0-9]/ - list(conf) - else - conf - end - when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile' - _fromUTF8(tk_send_without_enc('itemcget', tagid(tagOrId), "-#{option}")) - when 'font', 'kanjifont' - #fnt = tk_tcl2ruby(tk_send('itemcget', tagid(tagOrId), "-#{option}")) - fnt = tk_tcl2ruby(_fromUTF8(tk_send_with_enc('itemcget', tagid(tagOrId), '-font'))) - unless fnt.kind_of?(TkFont) - fnt = tagfontobj(tagid(tagOrId), fnt) - end - if option.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/ - # obsolete; just for compatibility - fnt.kanji_font - else - fnt - end - else - tk_tcl2ruby(_fromUTF8(tk_send_without_enc('itemcget', tagid(tagOrId), - "-#{option}"))) - end - end - - def itemconfigure(tagOrId, key, value=None) - if key.kind_of? Hash - key = _symbolkey2str(key) - coords = key.delete('coords') - self.coords(tagOrId, coords) if coords - - if ( key['font'] || key['kanjifont'] \ - || key['latinfont'] || key['asciifont'] ) - tagfont_configure(tagid(tagOrId), key.dup) - else - _fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), - *hash_kv(key, true))) - end - - else - if ( key == 'coords' || key == :coords ) - self.coords(tagOrId, value) - elsif ( key == 'font' || key == :font || - key == 'kanjifont' || key == :kanjifont || - key == 'latinfont' || key == :latinfont || - key == 'asciifont' || key == :asciifont ) - if value == None - tagfontobj(tagid(tagOrId)) - else - tagfont_configure(tagid(tagOrId), {key=>value}) - end - else - _fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), - "-#{key}", _get_eval_enc_str(value))) - end - end - self - end -# def itemconfigure(tagOrId, key, value=None) -# if key.kind_of? Hash -# tk_send 'itemconfigure', tagid(tagOrId), *hash_kv(key) -# else -# tk_send 'itemconfigure', tagid(tagOrId), "-#{key}", value -# end -# end -# def itemconfigure(tagOrId, keys) -# tk_send 'itemconfigure', tagid(tagOrId), *hash_kv(keys) -# end - - def itemconfiginfo(tagOrId, key=nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if key - case key.to_s - when 'coords' - return ['coords', '', '', '', self.coords(tagOrId)] - when 'dash', 'activedash', 'disableddash' - conf = tk_split_simplelist(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")) - if conf[3] && conf[3] =~ /^[0-9]/ - conf[3] = list(conf[3]) - end - if conf[4] && conf[4] =~ /^[0-9]/ - conf[4] = list(conf[4]) - end - when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}"))) - when 'font', 'kanjifont' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),"-#{key}"))) - conf[4] = tagfont_configinfo(tagid(tagOrId), conf[4]) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}"))) - end - conf[0] = conf[0][1..-1] - conf - else - ret = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId)))).collect{|conflist| - conf = tk_split_simplelist(conflist) - conf[0] = conf[0][1..-1] - case conf[0] - when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile' - when 'dash', 'activedash', 'disableddash' - if conf[3] && conf[3] =~ /^[0-9]/ - conf[3] = list(conf[3]) - end - if conf[4] && conf[4] =~ /^[0-9]/ - conf[4] = list(conf[4]) - end - else - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - if conf[4] - if conf[4].index('{') - conf[4] = tk_split_list(conf[4]) - else - conf[4] = tk_tcl2ruby(conf[4]) - end - end - end - conf[1] = conf[1][1..-1] if conf.size == 2 # alias info - conf - } - - fontconf = ret.assoc('font') - if fontconf - ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'} - fontconf[4] = tagfont_configinfo(tagid(tagOrId), fontconf[4]) - ret.push(fontconf) - end - - ret << ['coords', '', '', '', self.coords(tagOrId)] - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - if key - case key.to_s - when 'coords' - {'coords' => ['', '', '', self.coords(tagOrId)]} - when 'dash', 'activedash', 'disableddash' - conf = tk_split_simplelist(tk_send_without_enc('itemconfigure', - tagid(tagOrId), - "-#{key}")) - if conf[3] && conf[3] =~ /^[0-9]/ - conf[3] = list(conf[3]) - end - if conf[4] && conf[4] =~ /^[0-9]/ - conf[4] = list(conf[4]) - end - when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}"))) - when 'font', 'kanjifont' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),"-#{key}"))) - conf[4] = tagfont_configinfo(tagid(tagOrId), conf[4]) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}"))) - end - key = conf.shift[1..-1] - { key => conf } - else - ret = {} - tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId)))).each{|conflist| - conf = tk_split_simplelist(conflist) - key = conf.shift[1..-1] - case key - when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile' - when 'dash', 'activedash', 'disableddash' - if conf[2] && conf[2] =~ /^[0-9]/ - conf[2] = list(conf[2]) - end - if conf[3] && conf[3] =~ /^[0-9]/ - conf[3] = list(conf[3]) - end - else - if conf[2] - if conf[2].index('{') - conf[2] = tk_split_list(conf[2]) - else - conf[2] = tk_tcl2ruby(conf[2]) - end - end - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - end - if conf.size == 1 - ret[key] = conf[0][1..-1] # alias info - else - ret[key] = conf - end - } - - fontconf = ret['font'] - if fontconf - ret.delete('font') - ret.delete('kanjifont') - fontconf[3] = tagfont_configinfo(tagid(tagOrId), fontconf[3]) - ret['font'] = fontconf - end - - ret['coords'] = ['', '', '', self.coords(tagOrId)] - - ret - end - end - end - - def current_itemconfiginfo(tagOrId, key=nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if key - conf = itemconfiginfo(tagOrId, key) - {conf[0] => conf[4]} - else - ret = {} - itemconfiginfo(tagOrId).each{|conf| - ret[conf[0]] = conf[4] if conf.size > 2 - } - ret - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - ret = {} - itemconfiginfo(tagOrId, key).each{|k, conf| - ret[k] = conf[-1] if conf.kind_of?(Array) - } - ret - end - end -=end - - def lower(tag, below=nil) - if below - tk_send_without_enc('lower', tagid(tag), tagid(below)) - else - tk_send_without_enc('lower', tagid(tag)) - end - self - end - - def move(tag, x, y) - tk_send_without_enc('move', tagid(tag), x, y) - self - end - - def postscript(keys) - tk_send("postscript", *hash_kv(keys)) - end - - def raise(tag, above=nil) - if above - tk_send_without_enc('raise', tagid(tag), tagid(above)) - else - tk_send_without_enc('raise', tagid(tag)) - end - self - end - - def scale(tag, x, y, xs, ys) - tk_send_without_enc('scale', tagid(tag), x, y, xs, ys) - self - end - - def scan_mark(x, y) - tk_send_without_enc('scan', 'mark', x, y) - self - end - def scan_dragto(x, y) - tk_send_without_enc('scan', 'dragto', x, y) - self - end - - def select(mode, *args) - r = tk_send_without_enc('select', mode, *args) - (mode == 'item')? TkcItem.id2obj(self, r): self - end - def select_adjust(tagOrId, index) - select('adjust', tagid(tagOrId), index) - end - def select_clear - select('clear') - end - def select_from(tagOrId, index) - select('from', tagid(tagOrId), index) - end - def select_item - select('item') - end - def select_to(tagOrId, index) - select('to', tagid(tagOrId), index) - end - - def itemtype(tag) - TkcItem.type2class(tk_send('type', tagid(tag))) - end -end - -class TkcItem<TkObject - extend Tk - include TkcTagAccess - extend TkItemFontOptkeys - extend TkItemConfigOptkeys - - CItemTypeName = nil - CItemTypeToClass = {} - CItemID_TBL = TkCore::INTERP.create_table - - TkCore::INTERP.init_ip_env{ CItemID_TBL.clear } - - def TkcItem.type2class(type) - CItemTypeToClass[type] - end - - def TkcItem.id2obj(canvas, id) - cpath = canvas.path - return id unless CItemID_TBL[cpath] - CItemID_TBL[cpath][id]? CItemID_TBL[cpath][id]: id - end - - ######################################## - def self._parse_create_args(args) - fontkeys = {} - methodkeys = {} - if args[-1].kind_of? Hash - keys = _symbolkey2str(args.pop) - if args.size == 0 - args = keys.delete('coords') - unless args.kind_of?(Array) - fail "coords parameter must be given by an Array" - end - end - - #['font', 'kanjifont', 'latinfont', 'asciifont'].each{|key| - # fontkeys[key] = keys.delete(key) if keys.key?(key) - #} - __item_font_optkeys(nil).each{|key| - fkey = key.to_s - fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey) - - fkey = "kanji#{key}" - fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey) - - fkey = "latin#{key}" - fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey) - - fkey = "ascii#{key}" - fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey) - } - - __item_methodcall_optkeys(nil).each{|key| - key = key.to_s - methodkeys[key] = keys.delete(key) if keys.key?(key) - } - - #args = args.flatten.concat(hash_kv(keys)) - args = args.flatten.concat(itemconfig_hash_kv(nil, keys)) - else - args = args.flatten - end - - [args, fontkeys] - end - private_class_method :_parse_create_args - - def self.create(canvas, *args) - unless self::CItemTypeName - fail RuntimeError, "#{self} is an abstract class" - end - args, fontkeys = _parse_create_args(args) - idnum = tk_call_without_enc(canvas.path, 'create', - self::CItemTypeName, *args) - canvas.itemconfigure(idnum, fontkeys) unless fontkeys.empty? - idnum.to_i # 'canvas item id' is an integer number - end - ######################################## - - def initialize(parent, *args) - #unless parent.kind_of?(TkCanvas) - # fail ArguemntError, "expect TkCanvas for 1st argument" - #end - @parent = @c = parent - @path = parent.path - - @id = create_self(*args) # an integer number as 'canvas item id' - CItemID_TBL[@path] = {} unless CItemID_TBL[@path] - CItemID_TBL[@path][@id] = self - end - def create_self(*args) - self.class.create(@c, *args) # return an integer number as 'canvas item id' - end - private :create_self - - def id - @id - end - - def exist? - if @c.find_withtag(@id) - true - else - false - end - end - - def delete - @c.delete @id - CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path] - self - end - alias remove delete - alias destroy delete -end - -class TkcArc<TkcItem - CItemTypeName = 'arc'.freeze - CItemTypeToClass[CItemTypeName] = self -end - -class TkcBitmap<TkcItem - CItemTypeName = 'bitmap'.freeze - CItemTypeToClass[CItemTypeName] = self -end - -class TkcImage<TkcItem - CItemTypeName = 'image'.freeze - CItemTypeToClass[CItemTypeName] = self -end - -class TkcLine<TkcItem - CItemTypeName = 'line'.freeze - CItemTypeToClass[CItemTypeName] = self -end - -class TkcOval<TkcItem - CItemTypeName = 'oval'.freeze - CItemTypeToClass[CItemTypeName] = self -end - -class TkcPolygon<TkcItem - CItemTypeName = 'polygon'.freeze - CItemTypeToClass[CItemTypeName] = self -end - -class TkcRectangle<TkcItem - CItemTypeName = 'rectangle'.freeze - CItemTypeToClass[CItemTypeName] = self -end - -class TkcText<TkcItem - CItemTypeName = 'text'.freeze - CItemTypeToClass[CItemTypeName] = self - def self.create(canvas, *args) - if args[-1].kind_of?(Hash) - keys = _symbolkey2str(args.pop) - txt = keys['text'] - keys['text'] = _get_eval_enc_str(txt) if txt - args.push(keys) - end - super(canvas, *args) - end -end - -class TkcWindow<TkcItem - CItemTypeName = 'window'.freeze - CItemTypeToClass[CItemTypeName] = self - def self.create(canvas, *args) - if args[-1].kind_of?(Hash) - keys = _symbolkey2str(args.pop) - win = keys['window'] - # keys['window'] = win.epath if win.kind_of?(TkWindow) - keys['window'] = _epath(win) if win - args.push(keys) - end - super(canvas, *args) - end -end diff --git a/ext/tk/lib/tk/canvastag.rb b/ext/tk/lib/tk/canvastag.rb deleted file mode 100644 index f27111bd84..0000000000 --- a/ext/tk/lib/tk/canvastag.rb +++ /dev/null @@ -1,351 +0,0 @@ -# -# tk/canvastag.rb - methods for treating canvas tags -# -require 'tk' -require 'tk/tagfont' - -module TkcTagAccess - include TkComm - include TkTreatTagFont -end - -require 'tk/canvas' - -module TkcTagAccess - def addtag(tag) - @c.addtag(tag, 'with', @id) - self - end - - def bbox - @c.bbox(@id) - end - - def bind(seq, cmd=Proc.new, args=nil) - @c.itembind @id, seq, cmd, args - self - end - - def bind_append(seq, cmd=Proc.new, args=nil) - @c.itembind_append @id, seq, cmd, args - self - end - - def bind_remove(seq) - @c.itembind_remove @id, seq - self - end - - def bindinfo(seq=nil) - @c.itembindinfo @id, seq - end - - def cget(option) - @c.itemcget @id, option - end - - def configure(key, value=None) - @c.itemconfigure @id, key, value - self - end -# def configure(keys) -# @c.itemconfigure @id, keys -# end - - def configinfo(key=nil) - @c.itemconfiginfo @id, key - end - - def current_configinfo(key=nil) - @c.current_itemconfiginfo @id, key - end - - def coords(*args) - @c.coords @id, *args - end - - def dchars(first, last=None) - @c.dchars @id, first, last - self - end - - def dtag(tag_to_del=None) - @c.dtag @id, tag_to_del - self - end - - def find - @c.find 'withtag', @id - end - alias list find - - def focus - @c.itemfocus @id - end - - def gettags - @c.gettags @id - end - - def icursor(index) - @c.icursor @id, index - self - end - - def index(index) - @c.index @id, index - end - - def insert(beforethis, string) - @c.insert @id, beforethis, string - self - end - - def lower(belowthis=None) - @c.lower @id, belowthis - self - end - - def move(xamount, yamount) - @c.move @id, xamount, yamount - self - end - - def raise(abovethis=None) - @c.raise @id, abovethis - self - end - - def scale(xorigin, yorigin, xscale, yscale) - @c.scale @id, xorigin, yorigin, xscale, yscale - self - end - - def select_adjust(index) - @c.select('adjust', @id, index) - self - end - def select_from(index) - @c.select('from', @id, index) - self - end - def select_to(index) - @c.select('to', @id, index) - self - end - - def itemtype - @c.itemtype @id - end - - # Following operators support logical expressions of canvas tags - # (for Tk8.3+). - # If tag1.path is 't1' and tag2.path is 't2', then - # ltag = tag1 & tag2; ltag.path => "(t1)&&(t2)" - # ltag = tag1 | tag2; ltag.path => "(t1)||(t2)" - # ltag = tag1 ^ tag2; ltag.path => "(t1)^(t2)" - # ltag = - tag1; ltag.path => "!(t1)" - def & (tag) - if tag.kind_of? TkObject - TkcTagString.new(@c, '(' + @id + ')&&(' + tag.path + ')') - else - TkcTagString.new(@c, '(' + @id + ')&&(' + tag.to_s + ')') - end - end - - def | (tag) - if tag.kind_of? TkObject - TkcTagString.new(@c, '(' + @id + ')||(' + tag.path + ')') - else - TkcTagString.new(@c, '(' + @id + ')||(' + tag.to_s + ')') - end - end - - def ^ (tag) - if tag.kind_of? TkObject - TkcTagString.new(@c, '(' + @id + ')^(' + tag.path + ')') - else - TkcTagString.new(@c, '(' + @id + ')^(' + tag.to_s + ')') - end - end - - def -@ - TkcTagString.new(@c, '!(' + @id + ')') - end -end - -class TkcTag<TkObject - include TkcTagAccess - - CTagID_TBL = TkCore::INTERP.create_table - Tk_CanvasTag_ID = ['ctag'.freeze, '00000'.taint].freeze - - TkCore::INTERP.init_ip_env{ CTagID_TBL.clear } - - def TkcTag.id2obj(canvas, id) - cpath = canvas.path - return id unless CTagID_TBL[cpath] - CTagID_TBL[cpath][id]? CTagID_TBL[cpath][id]: id - end - - def initialize(parent, mode=nil, *args) - #unless parent.kind_of?(TkCanvas) - # fail ArguemntError, "expect TkCanvas for 1st argument" - #end - @c = parent - @cpath = parent.path - # @path = @id = Tk_CanvasTag_ID.join('') - @path = @id = Tk_CanvasTag_ID.join(TkCore::INTERP._ip_id_) - CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath] - CTagID_TBL[@cpath][@id] = self - Tk_CanvasTag_ID[1].succ! - if mode - tk_call_without_enc(@c.path, "addtag", @id, mode, *args) - end - end - def id - @id - end - - def exist? - if @c.find_withtag(@id) - true - else - false - end - end - - def delete - @c.delete @id - CTagID_TBL[@cpath].delete(@id) if CTagID_TBL[@cpath] - self - end - alias remove delete - alias destroy delete - - def set_to_above(target) - @c.addtag_above(@id, target) - self - end - alias above set_to_above - - def set_to_all - @c.addtag_all(@id) - self - end - alias all set_to_all - - def set_to_below(target) - @c.addtag_below(@id, target) - self - end - alias below set_to_below - - def set_to_closest(x, y, halo=None, start=None) - @c.addtag_closest(@id, x, y, halo, start) - self - end - alias closest set_to_closest - - def set_to_enclosed(x1, y1, x2, y2) - @c.addtag_enclosed(@id, x1, y1, x2, y2) - self - end - alias enclosed set_to_enclosed - - def set_to_overlapping(x1, y1, x2, y2) - @c.addtag_overlapping(@id, x1, y1, x2, y2) - self - end - alias overlapping set_to_overlapping - - def set_to_withtag(target) - @c.addtag_withtag(@id, target) - self - end - alias withtag set_to_withtag -end - -class TkcTagString<TkcTag - def self.new(parent, name, *args) - if CTagID_TBL[parent.path] && CTagID_TBL[parent.path][name] - return CTagID_TBL[parent.path][name] - else - super(parent, name, *args) - end - end - - def initialize(parent, name, mode=nil, *args) - #unless parent.kind_of?(TkCanvas) - # fail ArguemntError, "expect TkCanvas for 1st argument" - #end - @c = parent - @cpath = parent.path - @path = @id = name - CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath] - CTagID_TBL[@cpath][@id] = self - if mode - tk_call_without_enc(@c.path, "addtag", @id, mode, *args) - end - end -end -TkcNamedTag = TkcTagString - -class TkcTagAll<TkcTag - def initialize(parent) - #unless parent.kind_of?(TkCanvas) - # fail ArguemntError, "expect TkCanvas for 1st argument" - #end - @c = parent - @cpath = parent.path - @path = @id = 'all' - CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath] - CTagID_TBL[@cpath][@id] = self - end -end - -class TkcTagCurrent<TkcTag - def initialize(parent) - #unless parent.kind_of?(TkCanvas) - # fail ArguemntError, "expect TkCanvas for 1st argument" - #end - @c = parent - @cpath = parent.path - @path = @id = 'current' - CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath] - CTagID_TBL[@cpath][@id] = self - end -end - -class TkcGroup<TkcTag - Tk_cGroup_ID = ['tkcg'.freeze, '00000'.taint].freeze - #def create_self(parent, *args) - def initialize(parent, *args) - #unless parent.kind_of?(TkCanvas) - # fail ArguemntError, "expect TkCanvas for 1st argument" - #end - @c = parent - @cpath = parent.path - # @path = @id = Tk_cGroup_ID.join('') - @path = @id = Tk_cGroup_ID.join(TkCore::INTERP._ip_id_) - CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath] - CTagID_TBL[@cpath][@id] = self - Tk_cGroup_ID[1].succ! - add(*args) if args != [] - end - #private :create_self - - def include(*tags) - for i in tags - i.addtag @id - end - self - end - - def exclude(*tags) - for i in tags - i.delete @id - end - self - end -end diff --git a/ext/tk/lib/tk/checkbutton.rb b/ext/tk/lib/tk/checkbutton.rb deleted file mode 100644 index d76d99c0f2..0000000000 --- a/ext/tk/lib/tk/checkbutton.rb +++ /dev/null @@ -1,25 +0,0 @@ -# -# tk/checkbutton.rb : treat checkbutton widget -# -require 'tk' -require 'tk/radiobutton' - -class TkCheckButton<TkRadioButton - TkCommandNames = ['checkbutton'.freeze].freeze - WidgetClassName = 'Checkbutton'.freeze - WidgetClassNames[WidgetClassName] = self - #def create_self(keys) - # if keys and keys != None - # tk_call_without_enc('checkbutton', @path, *hash_kv(keys, true)) - # else - # tk_call_without_enc('checkbutton', @path) - # end - #end - #private :create_self - - def toggle - tk_send_without_enc('toggle') - self - end -end -TkCheckbutton = TkCheckButton diff --git a/ext/tk/lib/tk/clipboard.rb b/ext/tk/lib/tk/clipboard.rb deleted file mode 100644 index d4205a5c28..0000000000 --- a/ext/tk/lib/tk/clipboard.rb +++ /dev/null @@ -1,75 +0,0 @@ -# -# tk/clipboard.rb : methods to treat clipboard -# -require 'tk' - -module TkClipboard - include Tk - extend Tk - - TkCommandNames = ['clipboard'.freeze].freeze - - def self.clear(win=nil) - if win - tk_call_without_enc('clipboard', 'clear', '-displayof', win) - else - tk_call_without_enc('clipboard', 'clear') - end - end - def self.clear_on_display(win) - tk_call_without_enc('clipboard', 'clear', '-displayof', win) - end - - def self.get(type=nil) - if type - tk_call_without_enc('clipboard', 'get', '-type', type) - else - tk_call_without_enc('clipboard', 'get') - end - end - def self.get_on_display(win, type=nil) - if type - tk_call_without_enc('clipboard', 'get', '-displayof', win, '-type', type) - else - tk_call_without_enc('clipboard', 'get', '-displayof', win) - end - end - - def self.set(data, keys=nil) - clear - append(data, keys) - end - def self.set_on_display(win, data, keys=nil) - clear(win) - append_on_display(win, data, keys) - end - - def self.append(data, keys=nil) - args = ['clipboard', 'append'] - args.concat(hash_kv(keys)) - args.concat(['--', data]) - tk_call(*args) - end - def self.append_on_display(win, data, keys=nil) - args = ['clipboard', 'append', '-displayof', win] - args.concat(hash_kv(keys)) - args.concat(['--', data]) - tk_call(*args) - end - - def clear - TkClipboard.clear_on_display(self) - self - end - def get(type=nil) - TkClipboard.get_on_display(self, type) - end - def set(data, keys=nil) - TkClipboard.set_on_display(self, data, keys) - self - end - def append(data, keys=nil) - TkClipboard.append_on_display(self, data, keys) - self - end -end diff --git a/ext/tk/lib/tk/clock.rb b/ext/tk/lib/tk/clock.rb deleted file mode 100644 index 823b8a6341..0000000000 --- a/ext/tk/lib/tk/clock.rb +++ /dev/null @@ -1,57 +0,0 @@ -# -# tk/clock.rb : methods for clock command -# -require 'tk' - -module Tk - module Clock - def self.clicks(ms=nil) - case ms - when nil - tk_call_without_enc('clock','clicks').to_i - when /^mic/ - tk_call_without_enc('clock','clicks','-microseconds').to_i - when /^mil/ - tk_call_without_enc('clock','clicks','-milliseconds').to_i - else - tk_call_without_enc('clock','clicks','-milliseconds').to_i - end - end - - def self.format(clk, form=nil) - if form - tk_call('clock','format',clk,'-format',form) - else - tk_call('clock','format',clk) - end - end - - def self.formatGMT(clk, form=nil) - if form - tk_call('clock','format',clk,'-format',form,'-gmt','1') - else - tk_call('clock','format',clk,'-gmt','1') - end - end - - def self.scan(str, base=nil) - if base - tk_call('clock','scan',str,'-base',base).to_i - else - tk_call('clock','scan',str).to_i - end - end - - def self.scanGMT(str, base=nil) - if base - tk_call('clock','scan',str,'-base',base,'-gmt','1').to_i - else - tk_call('clock','scan',str,'-gmt','1').to_i - end - end - - def self.seconds - tk_call_without_enc('clock','seconds').to_i - end - end -end diff --git a/ext/tk/lib/tk/composite.rb b/ext/tk/lib/tk/composite.rb deleted file mode 100644 index d85b815dd7..0000000000 --- a/ext/tk/lib/tk/composite.rb +++ /dev/null @@ -1,293 +0,0 @@ -# -# tk/composite.rb : -# -require 'tk' - -module TkComposite - include Tk - extend Tk - - def initialize(parent=nil, *args) - @delegates = {} - @option_methods = {} - @option_setting = {} - - if parent.kind_of? Hash - keys = _symbolkey2str(parent) - parent = keys.delete('parent') - @frame = TkFrame.new(parent) - @path = @epath = @frame.path - initialize_composite(keys) - else - @frame = TkFrame.new(parent) - @path = @epath = @frame.path - initialize_composite(*args) - end - end - - def epath - @epath - end - - def initialize_composite(*args) end - private :initialize_composite - - def option_methods(*opts) - opts.each{|m_set, m_cget, m_info| - m_set = m_set.to_s - m_cget = m_set if !m_cget && self.method(m_set).arity == -1 - m_cget = m_cget.to_s if m_cget - m_info = m_info.to_s if m_info - @option_methods[m_set] = { - :set => m_set, :cget => m_cget, :info => m_info - } - } - end - - def delegate_alias(alias_opt, option, *wins) - if wins.length == 0 - fail ArgumentError, "target widgets are not given" - end - if alias_opt != option && (alias_opt == 'DEFAULT' || option == 'DEFAULT') - fail ArgumentError, "cannot alias 'DEFAULT' option" - end - alias_opt = alias_opt.to_s - option = option.to_s - if @delegates[alias_opt].kind_of?(Array) - if (elem = @delegates[alias_opt].assoc(option)) - wins.each{|w| elem[1].push(w)} - else - @delegates[alias_opt] << [option, wins] - end - else - @delegates[alias_opt] = [ [option, wins] ] - end - end - - def delegate(option, *wins) - delegate_alias(option, option, *wins) - end - - def cget(slot) - slot = slot.to_s - - if @option_methods.include?(slot) - if @option_methods[slot][:cget] - return self.__send__(@option_methods[slot][:cget]) - else - if @option_setting[slot] - return @option_setting[slot] - else - return '' - end - end - end - - tbl = @delegates[slot] - tbl = @delegates['DEFAULT'] unless tbl - - begin - if tbl - opt, wins = tbl[-1] - opt = slot if opt == 'DEFAULT' - if wins && wins[-1] - return wins[-1].cget(opt) - end - end - rescue - end - - super - end - - def configure(slot, value=None) - if slot.kind_of? Hash - slot.each{|slot,value| configure slot, value} - return self - end - - slot = slot.to_s - - if @option_methods.include?(slot) - unless @option_methods[slot][:cget] - if value.kind_of?(Symbol) - @option_setting[slot] = value.to_s - else - @option_setting[slot] = value - end - end - return self.__send__(@option_methods[slot][:set], value) - end - - tbl = @delegates[slot] - tbl = @delegates['DEFAULT'] unless tbl - - begin - if tbl - last = nil - tbl.each{|opt, wins| - opt = slot if opt == 'DEFAULT' - wins.each{|w| last = w.configure(opt, value)} - } - return last - end - rescue - end - - super - end - - def configinfo(slot = nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - slot = slot.to_s - if @option_methods.include?(slot) - if @option_methods[slot][:info] - return self.__send__(@option_methods[slot][:info]) - else - return [slot, '', '', '', self.cget(slot)] - end - end - - tbl = @delegates[slot] - tbl = @delegates['DEFAULT'] unless tbl - - begin - if tbl - if tbl.length == 1 - opt, wins = tbl[0] - if slot == opt || opt == 'DEFAULT' - return wins[-1].configinfo(slot) - else - info = wins[-1].configinfo(opt) - info[0] = slot - return info - end - else - opt, wins = tbl[-1] - return [slot, '', '', '', wins[-1].cget(opt)] - end - end - rescue - end - - super - - else # slot == nil - info_list = super - - tbl = @delegates['DEFAULT'] - if tbl - wins = tbl[0][1] - if wins && wins[-1] - wins[-1].configinfo.each{|info| - slot = info[0] - info_list.delete_if{|i| i[0] == slot} << info - } - end - end - - @delegates.each{|slot, tbl| - next if slot == 'DEFAULT' - if tbl.length == 1 - opt, wins = tbl[0] - next unless wins && wins[-1] - if slot == opt - info_list.delete_if{|i| i[0] == slot} << - wins[-1].configinfo(slot) - else - info = wins[-1].configinfo(opt) - info[0] = slot - info_list.delete_if{|i| i[0] == slot} << info - end - else - opt, wins = tbl[-1] - info_list.delete_if{|i| i[0] == slot} << - [slot, '', '', '', wins[-1].cget(opt)] - end - } - - @option_methods.each{|slot, m| - if m[:info] - info = self.__send__(m[:info]) - else - info = [slot, '', '', '', self.cget(slot)] - end - info_list.delete_if{|i| i[0] == slot} << info - } - - info_list - end - - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - slot = slot.to_s - if @option_methods.include?(slot) - if @option_methods[slot][:info] - return self.__send__(@option_methods[slot][:info]) - else - return {slot => ['', '', '', self.cget(slot)]} - end - end - - tbl = @delegates[slot] - tbl = @delegates['DEFAULT'] unless tbl - - begin - if tbl - if tbl.length == 1 - opt, wins = tbl[0] - if slot == opt || opt == 'DEFAULT' - return wins[-1].configinfo(slot) - else - return {slot => wins[-1].configinfo(opt)[opt]} - end - else - opt, wins = tbl[-1] - return {slot => ['', '', '', wins[-1].cget(opt)]} - end - end - rescue - end - - super - - else # slot == nil - info_list = super - - tbl = @delegates['DEFAULT'] - if tbl - wins = tbl[0][1] - info_list.update(wins[-1].configinfo) if wins && wins[-1] - end - - @delegates.each{|slot, tbl| - next if slot == 'DEFAULT' - if tbl.length == 1 - opt, wins = tbl[0] - next unless wins && wins[-1] - if slot == opt - info_list.update(wins[-1].configinfo(slot)) - else - info_list.update({slot => wins[-1].configinfo(opt)[opt]}) - end - else - opt, wins = tbl[-1] - info_list.update({slot => ['', '', '', wins[-1].cget(opt)]}) - end - } - - @option_methods.each{|slot, m| - if m[:info] - info = self.__send__(m[:info]) - else - info = {slot => ['', '', '', self.cget(slot)]} - end - info_list.update(info) - } - - info_list - end - end - end -end diff --git a/ext/tk/lib/tk/console.rb b/ext/tk/lib/tk/console.rb deleted file mode 100644 index f0d2c7aa87..0000000000 --- a/ext/tk/lib/tk/console.rb +++ /dev/null @@ -1,29 +0,0 @@ -# -# tk/console.rb : control the console on system without a real console -# -require 'tk' - -module TkConsole - include Tk - extend Tk - - TkCommandNames = ['console'.freeze].freeze - - def self.title(str=None) - tk_call 'console', str - end - def self.hide - tk_call_without_enc('console', 'hide') - end - def self.show - tk_call_without_enc('console', 'show') - end - def self.eval(tcl_script) - # - # supports a Tcl script only - # I have no idea to support a Ruby script seamlessly. - # - _fromUTF8(tk_call_without_enc('console', 'eval', - _get_eval_enc_str(tcl_script))) - end -end diff --git a/ext/tk/lib/tk/dialog.rb b/ext/tk/lib/tk/dialog.rb deleted file mode 100644 index 2ced26b193..0000000000 --- a/ext/tk/lib/tk/dialog.rb +++ /dev/null @@ -1,293 +0,0 @@ -# -# tk/dialog.rb : create dialog boxes -# -require 'tk' - -class TkDialog2 < TkWindow - extend Tk - - TkCommandNames = ['tk_dialog'.freeze].freeze - - def self.show(*args) - dlog = self.new(*args) - dlog.show - dlog - end - - def _set_button_config(configs) - set_config = proc{|c,i| - if $VERBOSE && (c.has_key?('command') || c.has_key?(:command)) - STDERR.print("Warning: cannot give a command option " + - "to the dialog button#{i}. It was removed.\n") - end - c.delete('command'); c.delete(:command) - # @config << Kernel.format("%s.button%s configure %s; ", - # @path, i, hash_kv(c).join(' ')) - @config << @path+'.button'+i.to_s+'configure '+hash_kv(c).join(' ')+'; ' - } - case configs - when Proc - @buttons.each_index{|i| - if (c = configs.call(i)).kind_of? Hash - set_config.call(c,i) - end - } - - when Array - @buttons.each_index{|i| - if (c = configs[i]).kind_of? Hash - set_config.call(c,i) - end - } - - when Hash - @buttons.each_with_index{|s,i| - if (c = configs[s]).kind_of? Hash - set_config.call(c,i) - end - } - end - @config = 'after idle {' + @config + '};' if @config != "" - end - private :_set_button_config - - # initialize tk_dialog - def create_self(keys) - #@var = TkVariable.new - @val = nil - - @title = title - - @message = message - @message_config = message_config - @msgframe_config = msgframe_config - - @bitmap = bitmap - @bitmap_config = message_config - - @default_button = default_button - - @buttons = buttons - @button_configs = proc{|num| button_configs(num)} - @btnframe_config = btnframe_config - - #@config = "puts [winfo children .w0000];" - @config = "" - - @command = nil - - if keys.kind_of? Hash - @title = keys['title'] if keys.key? 'title' - @message = keys['message'] if keys.key? 'message' - @bitmap = keys['bitmap'] if keys.key? 'bitmap' - @bitmap = '{}' if @bitmap == nil || @bitmap == "" - @default_button = keys['default'] if keys.key? 'default' - @buttons = keys['buttons'] if keys.key? 'buttons' - - @command = keys['prev_command'] - - @message_config = keys['message_config'] if keys.key? 'message_config' - @msgframe_config = keys['msgframe_config'] if keys.key? 'msgframe_config' - @bitmap_config = keys['bitmap_config'] if keys.key? 'bitmap_config' - @button_configs = keys['button_configs'] if keys.key? 'button_configs' - @btnframe_config = keys['btnframe_config'] if keys.key? 'btnframe_config' - end - - if @title.include? ?\s - @title = '{' + @title + '}' - end - - if @buttons.kind_of? Array - _set_button_config(@buttons.collect{|cfg| - (cfg.kind_of? Array)? cfg[1]: nil}) - @buttons = @buttons.collect{|cfg| (cfg.kind_of? Array)? cfg[0]: cfg} - end - if @buttons.kind_of? Hash - _set_button_config(@buttons) - @buttons = @buttons.keys - end - @buttons = tk_split_simplelist(@buttons) if @buttons.kind_of? String - @buttons = @buttons.collect{|s| - if s.kind_of? Array - s = s.join(' ') - end - if s.include? ?\s - '{' + s + '}' - else - s - end - } - - if @message_config.kind_of? Hash - # @config << Kernel.format("%s.msg configure %s;", - # @path, hash_kv(@message_config).join(' ')) - @config << @path+'.msg configure '+hash_kv(@message_config).join(' ')+';' - end - - if @msgframe_config.kind_of? Hash - # @config << Kernel.format("%s.top configure %s;", - # @path, hash_kv(@msgframe_config).join(' ')) - @config << @path+'.top configure '+hash_kv(@msgframe_config).join(' ')+';' - end - - if @btnframe_config.kind_of? Hash - # @config << Kernel.format("%s.bot configure %s;", - # @path, hash_kv(@btnframe_config).join(' ')) - @config << @path+'.bot configure '+hash_kv(@btnframe_config).join(' ')+';' - end - - if @bitmap_config.kind_of? Hash - # @config << Kernel.format("%s.bitmap configure %s;", - # @path, hash_kv(@bitmap_config).join(' ')) - @config << @path+'.bitmap configure '+hash_kv(@bitmap_config).join(' ')+';' - end - - _set_button_config(@button_configs) if @button_configs - - if @command.kind_of? Proc - @command.call(self) - end - end - private :create_self - - def show - if @default_button.kind_of? String - default_button = @buttons.index(@default_button) - else - default_button = @default_button - end - default_button = '{}' if default_button == nil - #Tk.ip_eval('eval {global '+@var.id+';'+@config+ - # 'set '+@var.id+' [tk_dialog '+ - # @path+" "+@title+" {#{@message}} "+@bitmap+" "+ - # String(default_button)+" "+@buttons.join(' ')+']}') - Tk.ip_eval(@config) - # @val = Tk.ip_eval('tk_dialog ' + @path + ' ' + @title + - # ' {' + @message + '} ' + @bitmap + ' ' + - # String(default_button) + ' ' + @buttons.join(' ')).to_i - @val = Tk.ip_eval(self.class::TkCommandNames[0] + ' ' + @path + ' ' + - @title + ' {' + @message + '} ' + @bitmap + ' ' + - String(default_button) + ' ' + @buttons.join(' ')).to_i - end - - def value - # @var.value.to_i - @val - end - ###################################################### - # # - # these methods must be overridden for each dialog # - # # - ###################################################### - private - - def title - # returns a title string of the dialog window - return "DIALOG" - end - def message - # returns a message text to display on the dialog - return "MESSAGE" - end - def message_config - # returns a Hash {option=>value, ...} for the message text - return nil - end - def msgframe_config - # returns a Hash {option=>value, ...} for the message text frame - return nil - end - def bitmap - # returns a bitmap name or a bitmap file path - # (@ + path ; e.g. '@/usr/share/bitmap/sample.xbm') - return "info" - end - def bitmap_config - # returns nil or a Hash {option=>value, ...} for the bitmap - return nil - end - def default_button - # returns a default button's number or name - # if nil or null string, set no-default - return 0 - end - def buttons - #return "BUTTON1 BUTTON2" - return ["BUTTON1", "BUTTON2"] - end - def button_configs(num) - # returns nil / Proc / Array or Hash (see _set_button_config) - return nil - end - def btnframe_config - # returns nil or a Hash {option=>value, ...} for the button frame - return nil - end -end - - -# -# TkDialog : with showing at initialize -# -class TkDialog < TkDialog2 - def self.show(*args) - self.new(*args) - end - - def initialize(*args) - super(*args) - show - end -end - - -# -# dialog for warning -# -class TkWarning2 < TkDialog2 - def initialize(parent = nil, mes = nil) - if !mes - if parent.kind_of? TkWindow - mes = "" - else - mes = parent.to_s - parent = nil - end - end - super(parent, :message=>mes) - end - - def show(mes = nil) - mes_bup = @message - @message = mes if mes - ret = super() - @message = mes_bup - ret - end - - ####### - private - - def title - return "WARNING"; - end - def bitmap - return "warning"; - end - def default_button - return 0; - end - def buttons - return "OK"; - end -end - -class TkWarning < TkWarning2 - def self.show(*args) - self.new(*args) - end - def initialize(*args) - super(*args) - show - end -end diff --git a/ext/tk/lib/tk/encodedstr.rb b/ext/tk/lib/tk/encodedstr.rb deleted file mode 100644 index aed0e7524e..0000000000 --- a/ext/tk/lib/tk/encodedstr.rb +++ /dev/null @@ -1,107 +0,0 @@ -# -# tk/encodedstr.rb : Tk::EncodedString class -# -require 'tk' - -########################################### -# string with Tcl's encoding -########################################### -module Tk - class EncodedString < String - Encoding = nil - - def self.subst_utf_backslash(str) - # str.gsub(/\\u([0-9A-Fa-f]{1,4})/){[$1.hex].pack('U')} - TclTkLib._subst_UTF_backslash(str) - end - def self.utf_backslash(str) - self.subst_utf_backslash(str) - end - - def self.subst_tk_backslash(str) - TclTkLib._subst_Tcl_backslash(str) - end - - def self.utf_to_backslash_sequence(str) - str.unpack('U*').collect{|c| - if c <= 0xFF # ascii character - c.chr - else - format('\u%X', c) - end - }.join('') - end - def self.utf_to_backslash(str) - self.utf_to_backslash_sequence(str) - end - - def self.to_backslash_sequence(str) - str.unpack('U*').collect{|c| - if c <= 0x1F # control character - case c - when 0x07; '\a' - when 0x08; '\b' - when 0x09; '\t' - when 0x0a; '\n' - when 0x0b; '\v' - when 0x0c; '\f' - when 0x0d; '\r' - else - format('\x%02X', c) - end - elsif c <= 0xFF # ascii character - c.chr - else - format('\u%X', c) - end - }.join('') - end - - def self.new_with_utf_backslash(str, enc = nil) - self.new('', enc).replace(self.subst_utf_backslash(str)) - end - - def self.new_without_utf_backslash(str, enc = nil) - self.new('', enc).replace(str) - end - - def initialize(str, enc = nil) - super(str) - @encoding = ( enc || - ((self.class::Encoding)? - self.class::Encoding : Tk.encoding_system) ) - end - - attr_reader :encoding - end - # def Tk.EncodedString(str, enc = nil) - # Tk::EncodedString.new(str, enc) - # end - - ################################## - - class BinaryString < EncodedString - Encoding = 'binary'.freeze - end - # def Tk.BinaryString(str) - # Tk::BinaryString.new(str) - # end - - ################################## - - class UTF8_String < EncodedString - Encoding = 'utf-8'.freeze - def self.new(str) - super(self.subst_utf_backslash(str)) - end - - def to_backslash_sequence - Tk::EncodedString.utf_to_backslash_sequence(self) - end - alias to_backslash to_backslash_sequence - end - # def Tk.UTF8_String(str) - # Tk::UTF8_String.new(str) - # end - -end diff --git a/ext/tk/lib/tk/entry.rb b/ext/tk/lib/tk/entry.rb deleted file mode 100644 index 2a8a9d413c..0000000000 --- a/ext/tk/lib/tk/entry.rb +++ /dev/null @@ -1,110 +0,0 @@ -# -# tk/entry.rb - Tk entry classes -# $Date$ -# by Yukihiro Matsumoto <matz@caelum.co.jp> - -require 'tk' -require 'tk/label' -require 'tk/scrollable' -require 'tk/validation' - -class TkEntry<TkLabel - include Scrollable - include TkValidation - - TkCommandNames = ['entry'.freeze].freeze - WidgetClassName = 'Entry'.freeze - WidgetClassNames[WidgetClassName] = self - - #def create_self(keys) - # super(__conv_vcmd_on_hash_kv(keys)) - #end - #private :create_self - - def bbox(index) - list(tk_send_without_enc('bbox', index)) - end - def cursor - number(tk_send_without_enc('index', 'insert')) - end - def cursor=(index) - tk_send_without_enc('icursor', index) - #self - index - end - def index(index) - number(tk_send_without_enc('index', index)) - end - def insert(pos,text) - tk_send_without_enc('insert', pos, _get_eval_enc_str(text)) - self - end - def delete(first, last=None) - tk_send_without_enc('delete', first, last) - self - end - def mark(pos) - tk_send_without_enc('scan', 'mark', pos) - self - end - def dragto(pos) - tk_send_without_enc('scan', 'dragto', pos) - self - end - def selection_adjust(index) - tk_send_without_enc('selection', 'adjust', index) - self - end - def selection_clear - tk_send_without_enc('selection', 'clear') - self - end - def selection_from(index) - tk_send_without_enc('selection', 'from', index) - self - end - def selection_present() - bool(tk_send_without_enc('selection', 'present')) - end - def selection_range(s, e) - tk_send_without_enc('selection', 'range', s, e) - self - end - def selection_to(index) - tk_send_without_enc('selection', 'to', index) - self - end - - def invoke_validate - bool(tk_send_without_enc('validate')) - end - def validate(mode = nil) - if mode - configure 'validate', mode - else - invoke_validate - end - end - - def value - _fromUTF8(tk_send_without_enc('get')) - end - def value= (val) - tk_send_without_enc('delete', 0, 'end') - tk_send_without_enc('insert', 0, _get_eval_enc_str(val)) - val - end - alias get value - alias set value= - - def [](*args) - self.value[*args] - end - def []=(*args) - val = args.pop - str = self.value - str[*args] = val - self.value = str - val - end -end diff --git a/ext/tk/lib/tk/event.rb b/ext/tk/lib/tk/event.rb deleted file mode 100644 index 16adeedc6c..0000000000 --- a/ext/tk/lib/tk/event.rb +++ /dev/null @@ -1,180 +0,0 @@ -# -# tk/event.rb - module for event -# - -unless $LOADED_FEATURES.member?('tk.rb') - # change loading order - - $LOADED_FEATURES.delete('tk/event.rb') - - require 'tkutil' - require 'tk' - -else -################################################ - -module TkEvent - class Event < TkUtil::CallbackSubst - module TypeNum - KeyPress = 2 - KeyRelease = 3 - ButtonPress = 4 - ButtonRelease = 5 - MotionNotify = 6 - EnterNotify = 7 - LeaveNotify = 8 - FocusIn = 9 - FocusOut = 10 - KeymapNotify = 11 - Expose = 12 - GraphicsExpose = 13 - NoExpose = 14 - VisibilityNotify = 15 - CreateNotify = 16 - DestroyNotify = 17 - UnmapNotify = 18 - MapNotify = 19 - MapRequest = 20 - ReparentNotify = 21 - ConfigureNotify = 22 - ConfigureRequest = 23 - GravityNotify = 24 - ResizeRequest = 25 - CirculateNotify = 26 - CirculateRequest = 27 - PropertyNotify = 28 - SelectionClear = 29 - SelectionRequest = 30 - SelectionNotify = 31 - ColormapNotify = 32 - ClientMessage = 33 - MappingNotify = 34 - end - - # [ <'%' subst-key char>, <proc type char>, <instance var (accessor) name>] - KEY_TBL = [ - [ ?#, ?n, :serial ], - [ ?a, ?s, :above ], - [ ?b, ?n, :num ], - [ ?c, ?n, :count ], - [ ?d, ?s, :detail ], - [ ?f, ?b, :focus ], - [ ?h, ?n, :height ], - [ ?i, ?s, :win_hex ], - [ ?k, ?n, :keycode ], - [ ?m, ?s, :mode ], - [ ?o, ?b, :override ], - [ ?p, ?s, :place ], - [ ?s, ?x, :state ], - [ ?t, ?n, :time ], - [ ?w, ?n, :width ], - [ ?x, ?n, :x ], - [ ?y, ?n, :y ], - [ ?A, ?s, :char ], - [ ?B, ?n, :borderwidth ], - [ ?D, ?n, :wheel_delta ], - [ ?E, ?b, :send_event ], - [ ?K, ?s, :keysym ], - [ ?N, ?n, :keysym_num ], - [ ?R, ?s, :rootwin_id ], - [ ?S, ?s, :subwindow ], - [ ?T, ?n, :type ], - [ ?W, ?w, :widget ], - [ ?X, ?n, :x_root ], - [ ?Y, ?n, :y_root ], - nil - ] - - # [ <proc type char>, <proc/method to convert tcl-str to ruby-obj>] - PROC_TBL = [ - [ ?n, TkComm.method(:num_or_str) ], - [ ?s, TkComm.method(:string) ], - [ ?b, TkComm.method(:bool) ], - [ ?w, TkComm.method(:window) ], - - [ ?x, proc{|val| - begin - TkComm::number(val) - rescue ArgumentError - val - end - } - ], - - nil - ] - - # setup tables to be used by scan_args, _get_subst_key, _get_all_subst_keys - # - # _get_subst_key() and _get_all_subst_keys() generates key-string - # which describe how to convert callback arguments to ruby objects. - # When binding parameters are given, use _get_subst_key(). - # But when no parameters are given, use _get_all_subst_keys() to - # create a Event class object as a callback parameter. - # - # scan_args() is used when doing callback. It convert arguments - # ( which are Tcl strings ) to ruby objects based on the key string - # that is generated by _get_subst_key() or _get_all_subst_keys(). - # - _setup_subst_table(KEY_TBL, PROC_TBL); - - # - # NOTE: The order of parameters which passed to callback procedure is - # <extra_arg>, <extra_arg>, ... , <subst_arg>, <subst_arg>, ... - # - - # If you need support extra arguments given by Tcl/Tk, - # please override _get_extra_args_tbl - # - #def self._get_extra_args_tbl - # # return an array of convert procs - # [] - #end - - end - - def install_bind_for_event_class(klass, cmd, *args) - extra_args_tbl = klass._get_extra_args_tbl - - if args.compact.size > 0 - args = args.join(' ') - keys = klass._get_subst_key(args) - - if cmd.kind_of?(String) - id = cmd - elsif cmd.kind_of?(TkCallbackEntry) - id = install_cmd(cmd) - else - id = install_cmd(proc{|*arg| - ex_args = [] - extra_args_tbl.reverse_each{|conv| ex_args << conv.call(arg.pop)} - TkUtil.eval_cmd(cmd, *(ex_args.concat(klass.scan_args(keys, arg)))) - }) - end - id + ' ' + args - else - keys, args = klass._get_all_subst_keys - - if cmd.kind_of?(String) - id = cmd - elsif cmd.kind_of?(TkCallbackEntry) - id = install_cmd(cmd) - else - id = install_cmd(proc{|*arg| - ex_args = [] - extra_args_tbl.reverse_each{|conv| ex_args << conv.call(arg.pop)} - TkUtil.eval_cmd(cmd, - *(ex_args << klass.new(*klass.scan_args(keys, arg)))) - }) - end - id + ' ' + args - end - end - - def install_bind(cmd, *args) - install_bind_for_event_class(TkEvent::Event, cmd, *args) - end -end - -################################################ -end diff --git a/ext/tk/lib/tk/font.rb b/ext/tk/lib/tk/font.rb deleted file mode 100644 index 02e09c6066..0000000000 --- a/ext/tk/lib/tk/font.rb +++ /dev/null @@ -1,1464 +0,0 @@ -# -# tk/font.rb - the class to treat fonts on Ruby/Tk -# -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -class TkFont - include Tk - extend TkCore - - TkCommandNames = ['font'.freeze].freeze - - Tk_FontID = ["@font".freeze, "00000".taint].freeze - Tk_FontNameTBL = TkCore::INTERP.create_table - Tk_FontUseTBL = TkCore::INTERP.create_table - - TkCore::INTERP.init_ip_env{ - Tk_FontNameTBL.clear - Tk_FontUseTBL.clear - } - - # set default font - case Tk::TK_VERSION - when /^4\.*/ - DEFAULT_LATIN_FONT_NAME = 'a14'.freeze - DEFAULT_KANJI_FONT_NAME = 'k14'.freeze - - when /^8\.*/ - if JAPANIZED_TK - begin - fontnames = tk_call('font', 'names') - case fontnames - when /defaultgui/ - # Tcl/Tk-JP for Windows - ltn = 'defaultgui' - knj = 'defaultgui' - when /Mincho:Helvetica-Bold-12/ - # Tcl/Tk-JP for UNIX/X - ltn, knj = tk_split_simplelist(tk_call('font', 'configure', - 'Mincho:Helvetica-Bold-12', - '-compound')) - else - # unknown Tcl/Tk-JP - platform = tk_call('set', 'tcl_platform(platform)') - case platform - when 'unix' - ltn = {'family'=>'Helvetica'.freeze, - 'size'=>-12, 'weight'=>'bold'.freeze} - #knj = 'k14' - #knj = '-misc-fixed-medium-r-normal--14-*-*-*-c-*-jisx0208.1983-0' - knj = '-*-fixed-bold-r-normal--12-*-*-*-c-*-jisx0208.1983-0' - when 'windows' - ltn = {'family'=>'MS Sans Serif'.freeze, 'size'=>8} - knj = 'mincho' - when 'macintosh' - ltn = 'system' - knj = 'mincho' - else # unknown - ltn = 'Helvetica' - knj = 'mincho' - end - end - rescue - ltn = 'Helvetica' - knj = 'mincho' - end - - else # not JAPANIZED_TK - begin - platform = tk_call('set', 'tcl_platform(platform)') - case platform - when 'unix' - ltn = {'family'=>'Helvetica'.freeze, - 'size'=>-12, 'weight'=>'bold'.freeze} - when 'windows' - ltn = {'family'=>'MS Sans Serif'.freeze, 'size'=>8} - when 'macintosh' - ltn = 'system' - else # unknown - ltn = 'Helvetica' - end - rescue - ltn = 'Helvetica' - end - - knj = ltn.dup - end - - DEFAULT_LATIN_FONT_NAME = ltn.freeze - DEFAULT_KANJI_FONT_NAME = knj.freeze - - else # unknown version - DEFAULT_LATIN_FONT_NAME = 'Helvetica'.freeze - DEFAULT_KANJI_FONT_NAME = 'mincho'.freeze - - end - - if $DEBUG - print "default latin font = "; p DEFAULT_LATIN_FONT_NAME - print "default kanji font = "; p DEFAULT_KANJI_FONT_NAME - end - - - ################################### - class DescendantFont - def initialize(compound, type) - unless compound.kind_of?(TkFont) - fail ArgumentError, "a TkFont object is expected for the 1st argument" - end - @compound = compound - case type - when 'kanji', 'latin', 'ascii' - @type = type - else - fail ArgumentError, "unknown type '#{type}'" - end - end - - def dup - fail RuntimeError, "cannot dupulicate a descendant font" - end - def clone - fail RuntimeError, "cannot clone a descendant font" - end - - def to_eval - @compound.__send__(@type + '_font_id') - end - def font - @compound.__send__(@type + '_font_id') - end - - def [](slot) - @compound.__send__(@type + '_configinfo', slot) - end - def []=(slot, value) - @compound.__send__(@type + '_configure', slot, value) - value - end - - def method_missing(id, *args) - @compound.__send__(@type + '_' + id.id2name, *args) - end - end - - - ################################### - # class methods - ################################### - def TkFont.families(window=nil) - case (Tk::TK_VERSION) - when /^4\.*/ - ['fixed'] - - when /^8\.*/ - if window - tk_split_simplelist(tk_call('font', 'families', '-displayof', window)) - else - tk_split_simplelist(tk_call('font', 'families')) - end - end - end - - def TkFont.names - case (Tk::TK_VERSION) - when /^4\.*/ - r = ['fixed'] - r += ['a14', 'k14'] if JAPANIZED_TK - Tk_FontNameTBL.each_value{|obj| r.push(obj)} - r | [] - - when /^8\.*/ - tk_split_simplelist(tk_call('font', 'names')) - - end - end - - def TkFont.create_copy(font) - fail 'source-font must be a TkFont object' unless font.kind_of? TkFont - if TkComm::GET_CONFIGINFOwoRES_AS_ARRAY - keys = {} - font.configinfo.each{|key,value| keys[key] = value } - TkFont.new(font.latin_font_id, font.kanji_font_id, keys) - else # ! TkComm::GET_CONFIGINFOwoRES_AS_ARRAY - TkFont.new(font.latin_font_id, font.kanji_font_id, font.configinfo) - end - end - - def TkFont.get_obj(name) - if name =~ /^(@font[0-9]+)(|c|l|k)$/ - Tk_FontNameTBL[$1] - else - nil - end - end - - def TkFont.init_widget_font(pathname, *args) - win, tag, key = pathname.split(';') - key = 'font' if key == nil || key == '' - path = [win, tag, key].join(';') - - case (Tk::TK_VERSION) - when /^4\.*/ - regexp = /^-(|kanji)#{key} / - - conf_list = tk_split_simplelist(tk_call(*args)). - find_all{|prop| prop =~ regexp}. - collect{|prop| tk_split_simplelist(prop)} - - if conf_list.size == 0 - raise RuntimeError, "the widget may not support 'font' option" - end - - args << {} - - ltn_key = "-#{key}" - knj_key = "-kanji#{key}" - - ltn_info = conf_list.find{|conf| conf[0] == ltn_key} - ltn = ltn_info[-1] - ltn = nil if ltn == [] || ltn == "" - - knj_info = conf_list.find{|conf| conf[0] == knj_key} - knj = knj_info[-1] - knj = nil if knj == [] || knj == "" - - TkFont.new(ltn, knj).call_font_configure([path, key], *args) - - when /^8\.*/ - regexp = /^-#{key} / - - conf_list = tk_split_simplelist(tk_call(*args)). - find_all{|prop| prop =~ regexp}. - collect{|prop| tk_split_simplelist(prop)} - - if conf_list.size == 0 - raise RuntimeError, "the widget may not support 'font' option" - end - - args << {} - - optkey = "-#{key}" - - info = conf_list.find{|conf| conf[0] == optkey} - fnt = info[-1] - fnt = nil if fnt == [] || fnt == "" - - unless fnt - TkFont.new(nil, nil).call_font_configure([path, key], *args) - else - begin - compound = tk_split_simplelist( - Hash[*tk_split_simplelist(tk_call('font', 'configure', - fnt))].collect{|key,value| - [key[1..-1], value] - }.assoc('compound')[1]) - rescue - compound = [] - end - if compound == [] - TkFont.new(fnt).call_font_configure([path, key], *args) - else - TkFont.new(compound[0], - compound[1]).call_font_configure([path, key], *args) - end - end - end - end - - def TkFont.used_on(path=nil) - if path - Tk_FontUseTBL[path] - else - Tk_FontUseTBL.values | [] - end - end - - def TkFont.failsafe(font) - begin - if /^8\.*/ === Tk::TK_VERSION && JAPANIZED_TK - tk_call('font', 'failsafe', font) - end - rescue - end - end - - ################################### - # instance methods - ################################### - private - ################################### - def initialize(ltn=nil, knj=nil, keys=nil) - # @id = Tk_FontID.join('') - @id = Tk_FontID.join(TkCore::INTERP._ip_id_) - Tk_FontID[1].succ! - Tk_FontNameTBL[@id] = self - - @latin_desscendant = nil - @kanji_desscendant = nil - - if knj.kind_of?(Hash) && !keys - keys = knj - knj = nil - end - - # compound font check - if Tk::TK_VERSION == '8.0' && JAPANIZED_TK - begin - compound = tk_split_simplelist(tk_call('font', 'configure', - ltn, '-compound')) - if knj == nil - if compound != [] - ltn, knj = compound - end - else - if compound != [] - ltn = compound[0] - end - compound = tk_split_simplelist(tk_call('font', 'configure', - knj, '-compound')) - if compound != [] - knj = compound[1] - end - end - rescue - end - end - - if ltn - if JAPANIZED_TK && !knj - if Tk::TK_VERSION =~ /^4.*/ - knj = DEFAULT_KANJI_FONT_NAME - else - knj = ltn - end - end - else - ltn = DEFAULT_LATIN_FONT_NAME - knj = DEFAULT_KANJI_FONT_NAME if JAPANIZED_TK && !knj - end - - create_compoundfont(ltn, knj, keys) - end - - def _get_font_info_from_hash(font) - font = _symbolkey2str(font) - foundry = (info = font['foundry'] .to_s)? info: '*' - family = (info = font['family'] .to_s)? info: '*' - weight = (info = font['weight'] .to_s)? info: '*' - slant = (info = font['slant'] .to_s)? info: '*' - swidth = (info = font['swidth'] .to_s)? info: '*' - adstyle = (info = font['adstyle'] .to_s)? info: '*' - pixels = (info = font['pixels'] .to_s)? info: '*' - points = (info = font['points'] .to_s)? info: '*' - resx = (info = font['resx'] .to_s)? info: '*' - resy = (info = font['resy'] .to_s)? info: '*' - space = (info = font['space'] .to_s)? info: '*' - avgWidth = (info = font['avgWidth'].to_s)? info: '*' - charset = (info = font['charset'] .to_s)? info: '*' - encoding = (info = font['encoding'].to_s)? info: '*' - - [foundry, family, weight, slant, swidth, adstyle, - pixels, points, resx, resy, space, avgWidth, charset, encoding] - end - - def create_latinfont_tk4x(font) - if font.kind_of? Hash - @latinfont = '-' + _get_font_info_from_hash(font).join('-') + '-' - - elsif font.kind_of? Array - finfo = {} - finfo['family'] = font[0].to_s - if font[1] - fsize = font[1].to_s - if fsize != '0' && fsize =~ /^(|\+|-)([0-9]+)$/ - if $1 == '-' - finfo['pixels'] = $2 - else - finfo['points'] = $2 - end - else - finfo['points'] = '13' - end - end - font[2..-1].each{|style| - case (style) - when 'normal' - finfo['weight'] = style - when 'bold' - finfo['weight'] = style - when 'roman' - finfo['slant'] = 'r' - when 'italic' - finfo['slant'] = 'i' - end - } - - @latinfont = '-' + _get_font_info_from_hash(finfo).join('-') + '-' - - elsif font.kind_of? TkFont - @latinfont = font.latin_font - - else - if font - @latinfont = font - else - @latinfont = DEFAULT_LATIN_FONT_NAME - end - - end - end - - def create_kanjifont_tk4x(font) - unless JAPANIZED_TK - @kanjifont = "" - return - end - - if font.kind_of? Hash - @kanjifont = '-' + _get_font_info_from_hash(font).join('-') + '-' - - elsif font.kind_of? Array - finfo = {} - finfo['family'] = font[0].to_s - if font[1] - fsize = font[1].to_s - if fsize != '0' && fsize =~ /^(|\+|-)([0-9]+)$/ - if $1 == '-' - finfo['pixels'] = $2 - else - finfo['points'] = $2 - end - else - finfo['points'] = '13' - end - end - font[2..-1].each{|style| - case (style) - when 'normal' - finfo['weight'] = style - when 'bold' - finfo['weight'] = style - when 'roman' - finfo['slant'] = 'r' - when 'italic' - finfo['slant'] = 'i' - end - } - - @kanjifont = '-' + _get_font_info_from_hash(finfo).join('-') + '-' - elsif font.kind_of? TkFont - @kanjifont = font.kanji_font_id - else - if font - @kanjifont = font - else - @kanjifont = DEFAULT_KANJI_FONT_NAME - end - end - end - - def create_compoundfont_tk4x(ltn, knj, keys) - create_latinfont(ltn) - create_kanjifont(knj) - - if JAPANIZED_TK - @compoundfont = [[@latinfont], [@kanjifont]] - @fontslot = {'font'=>@latinfont, 'kanjifont'=>@kanjifont} - else - @compoundfont = @latinfont - @fontslot = {'font'=>@latinfont} - end - end - - def create_latinfont_tk8x(font) - @latinfont = @id + 'l' - - if JAPANIZED_TK - if font.kind_of? Hash - if font[:charset] || font['charset'] - tk_call('font', 'create', @latinfont, *hash_kv(font)) - else - tk_call('font', 'create', @latinfont, - '-charset', 'iso8859', *hash_kv(font)) - end - elsif font.kind_of? Array - tk_call('font', 'create', @latinfont, '-copy', array2tk_list(font)) - tk_call('font', 'configure', @latinfont, '-charset', 'iso8859') - elsif font.kind_of? TkFont - tk_call('font', 'create', @latinfont, '-copy', font.latin_font) - elsif font - tk_call('font', 'create', @latinfont, '-copy', font, - '-charset', 'iso8859') - else - tk_call('font', 'create', @latinfont, '-charset', 'iso8859') - end - else - if font.kind_of? Hash - tk_call('font', 'create', @latinfont, *hash_kv(font)) - else - keys = {} - if font.kind_of? Array - actual_core(array2tk_list(font)).each{|key,val| keys[key] = val} - elsif font.kind_of? TkFont - actual_core(font.latin_font).each{|key,val| keys[key] = val} - elsif font - actual_core(font).each{|key,val| keys[key] = val} - end - tk_call('font', 'create', @latinfont, *hash_kv(keys)) - end - - if font && @compoundfont - keys = {} - actual_core(@latinfont).each{|key,val| keys[key] = val} - tk_call('font', 'configure', @compoundfont, *hash_kv(keys)) - end - end - end - - def create_kanjifont_tk8x(font) - @kanjifont = @id + 'k' - - if JAPANIZED_TK - if font.kind_of? Hash - if font[:charset] || font['charset'] - tk_call('font', 'create', @kanjifont, *hash_kv(font)) - else - tk_call('font', 'create', @kanjifont, - '-charset', 'jisx0208.1983', *hash_kv(font)) - end - elsif font.kind_of? Array - tk_call('font', 'create', @kanjifont, '-copy', array2tk_list(font)) - tk_call('font', 'configure', @kanjifont, '-charset', 'jisx0208.1983') - elsif font.kind_of? TkFont - tk_call('font', 'create', @kanjifont, '-copy', font.kanji_font_id) - elsif font - tk_call('font', 'create', @kanjifont, '-copy', font, - '-charset', 'jisx0208.1983') - else - tk_call('font', 'create', @kanjifont, '-charset', 'jisx0208.1983') - end - # end of JAPANIZED_TK - - else - if font.kind_of? Hash - tk_call('font', 'create', @kanjifont, *hash_kv(font)) - else - keys = {} - if font.kind_of? Array - actual_core(array2tk_list(font)).each{|key,val| keys[key] = val} - elsif font.kind_of? TkFont - actual_core(font.kanji_font_id).each{|key,val| keys[key] = val} - elsif font - actual_core(font).each{|key,val| keys[key] = val} - end - tk_call('font', 'create', @kanjifont, *hash_kv(keys)) - end - - if font && @compoundfont - keys = {} - actual_core(@kanjifont).each{|key,val| keys[key] = val} - tk_call('font', 'configure', @compoundfont, *hash_kv(keys)) - end - end - end - - def create_compoundfont_tk8x(ltn, knj, keys) - create_latinfont(ltn) - create_kanjifont(knj) - - @compoundfont = @id + 'c' - if JAPANIZED_TK - unless keys - keys = {} - else - keys = keys.dup - end - if (tk_call('font', 'configure', @latinfont, '-underline') == '1' && - tk_call('font', 'configure', @kanjifont, '-underline') == '1' && - !keys.key?('underline')) - keys['underline'] = true - end - if (tk_call('font', 'configure', @latinfont, '-overstrike') == '1' && - tk_call('font', 'configure', @kanjifont, '-overstrike') == '1' && - !keys.key?('overstrike')) - keys['overstrike'] = true - end - - @fontslot = {'font'=>@compoundfont} - begin - tk_call('font', 'create', @compoundfont, - '-compound', [@latinfont, @kanjifont], *hash_kv(keys)) - rescue RuntimeError => e - if ltn == knj - if e.message =~ /kanji font .* specified/ - tk_call('font', 'delete', @latinfont) - create_latinfont(DEFAULT_LATIN_FONT_NAME) - opts = [] - Hash[*(tk_split_simplelist(tk_call('font', 'configure', - @kanjifont)))].each{|k,v| - case k - when '-size', '-weight', '-slant', '-underline', '-overstrike' - opts << k << v - end - } - tk_call('font', 'configure', @latinfont, *opts) - tk_call('font', 'create', @compoundfont, - '-compound', [@latinfont, @kanjifont], *hash_kv(keys)) - - elsif e.message =~ /ascii font .* specified/ - tk_call('font', 'delete', @kanjifont) - create_kanjifont(DEFAULT_KANJI_FONT_NAME) - opts = [] - Hash[*(tk_split_simplelist(tk_call('font', 'configure', - @latinfont)))].each{|k,v| - case k - when '-size', '-weight', '-slant', '-underline', '-overstrike' - opts << k << v - end - } - tk_call('font', 'configure', @kanjifont, *opts) - tk_call('font', 'create', @compoundfont, - '-compound', [@latinfont, @kanjifont], *hash_kv(keys)) - - else - raise e - end - else - raise e - end - end - else - tk_call('font', 'create', @compoundfont) - - latinkeys = {} - begin - actual_core(@latinfont).each{|key,val| latinkeys[key] = val} - rescue - latinkeys {} - end - if latinkeys != {} - tk_call('font', 'configure', @compoundfont, *hash_kv(latinkeys)) - end - - if knj - kanjikeys = {} - begin - actual_core(@kanjifont).each{|key,val| kanjikeys[key] = val} - rescue - kanjikeys {} - end - if kanjikeys != {} - tk_call('font', 'configure', @compoundfont, *hash_kv(kanjikeys)) - end - end - - @fontslot = {'font'=>@compoundfont} - tk_call('font', 'configure', @compoundfont, *hash_kv(keys)) - end - end - - def actual_core_tk4x(font, window=nil, option=nil) - # dummy - if option - "" - else - [['family',[]], ['size',[]], ['weight',[]], ['slant',[]], - ['underline',[]], ['overstrike',[]], ['charset',[]], - ['pointadjust',[]]] - end - end - - def actual_core_tk8x(font, window=nil, option=nil) - if option == 'compound' - "" - elsif option - if window - tk_call('font', 'actual', font, "-displayof", window, "-#{option}") - else - tk_call('font', 'actual', font, "-#{option}") - end - else - l = tk_split_simplelist(if window - tk_call('font', 'actual', font, - "-displayof", window) - else - tk_call('font', 'actual', font) - end) - r = [] - while key=l.shift - if key == '-compound' - l.shift - else - r.push [key[1..-1], l.shift] - end - end - r - end - end - - def configure_core_tk4x(font, slot, value=None) - #"" - self - end - - def configinfo_core_tk4x(font, option=nil) - # dummy - if TkComm::GET_CONFIGINFOwoRES_AS_ARRAY - if option - "" - else - [['family',[]], ['size',[]], ['weight',[]], ['slant',[]], - ['underline',[]], ['overstrike',[]], ['charset',[]], - ['pointadjust',[]]] - end - else # ! TkComm::GET_CONFIGINFOwoRES_AS_ARRAY - current_configinfo_core_tk4x(font, option) - end - end - - def current_configinfo_core_tk4x(font, option=nil) - if option - "" - else - {'family'=>'', 'size'=>'', 'weight'=>'', 'slant'=>'', - 'underline'=>'', 'overstrike'=>'', 'charset'=>'', 'pointadjust'=>''} - end - end - - def configure_core_tk8x(font, slot, value=None) - if JAPANIZED_TK - begin - padjust = tk_call('font', 'configure', font, '-pointadjust') - rescue - padjust = nil - end - else - padjust = nil - end - if slot.kind_of? Hash - if JAPANIZED_TK && (slot.key?('family') || slot.key?(:family)) - slot = _symbolkey2str(slot) - configure_core_tk8x(font, 'family', slot.delete('family')) - end - - if ((slot.key?('size') || slot.key?(:size)) && - padjust && !slot.key?('pointadjust') && !slot.key?(:pointadjust)) - tk_call('font', 'configure', font, - '-pointadjust', padjust, *hash_kv(slot)) - else - tk_call('font', 'configure', font, *hash_kv(slot)) - end - elsif (slot == 'size' || slot == :size) && padjust != nil - tk_call('font', 'configure', font, - "-#{slot}", value, '-pointadjust', padjust) - elsif JAPANIZED_TK && (slot == 'family' || slot == :family) - # coumpund font? - begin - compound = tk_split_simplelist(tk_call('font', 'configure', - font, '-compound')) - rescue - tk_call('font', 'configure', font, '-family', value) - return self - end - if compound == [] - tk_call('font', 'configure', font, '-family', value) - return self - end - ltn, knj = compound - - lfnt = tk_call('font', 'create', '-copy', ltn) - begin - tk_call('font', 'configure', lfnt, '-family', value) - latin_replace_core_tk8x(lfnt) - rescue RuntimeError => e - fail e if $DEBUG - ensure - tk_call('font', 'delete', lfnt) if lfnt != '' - end - - kfnt = tk_call('font', 'create', '-copy', knj) - begin - tk_call('font', 'configure', kfnt, '-family', value) - kanji_replace_core_tk8x(lfnt) - rescue RuntimeError => e - fail e if $DEBUG - ensure - tk_call('font', 'delete', kfnt) if kfnt != '' - end - - else - tk_call('font', 'configure', font, "-#{slot}", value) - end - self - end - - def configinfo_core_tk8x(font, option=nil) - if TkComm::GET_CONFIGINFOwoRES_AS_ARRAY - if option == 'compound' - "" - elsif option - tk_call('font', 'configure', font, "-#{option}") - else - l = tk_split_simplelist(tk_call('font', 'configure', font)) - r = [] - while key=l.shift - if key == '-compound' - l.shift - else - r.push [key[1..-1], l.shift] - end - end - r - end - else # ! TkComm::GET_CONFIGINFOwoRES_AS_ARRAY - current_configinfo_core_tk8x(font, option) - end - end - - def current_configinfo_core_tk8x(font, option=nil) - if option == 'compound' - "" - elsif option - tk_call('font', 'configure', font, "-#{option}") - else - l = tk_split_simplelist(tk_call('font', 'configure', font)) - r = {} - while key=l.shift - if key == '-compound' - l.shift - else - r[key[1..-1]] = l.shift - end - end - r - end - end - - def delete_core_tk4x - Tk_FontNameTBL.delete(@id) - Tk_FontUseTBL.delete_if{|key,value| value == self} - end - - def delete_core_tk8x - begin - tk_call('font', 'delete', @latinfont) - rescue - end - begin - tk_call('font', 'delete', @kanjifont) - rescue - end - begin - tk_call('font', 'delete', @compoundfont) - rescue - end - Tk_FontNameTBL.delete(@id) - Tk_FontUseTBL.delete_if{|key,value| value == self} - end - - def latin_replace_core_tk4x(ltn) - create_latinfont_tk4x(ltn) - @compoundfont[0] = [@latinfont] if JAPANIZED_TK - @fontslot['font'] = @latinfont - Tk_FontUseTBL.dup.each{|w, fobj| - if self == fobj - begin - if w.include?(';') - win, tag, optkey = w.split(';') - optkey = 'font' if optkey == nil || optkey == '' - winobj = tk_tcl2ruby(win) -# winobj.tagfont_configure(tag, {'font'=>@latinfont}) - if winobj.kind_of? TkText - tk_call(win, 'tag', 'configure', tag, "-#{optkey}", @latinfont) - elsif winobj.kind_of? TkCanvas - tk_call(win, 'itemconfigure', tag, "-#{optkey}", @latinfont) - elsif winobj.kind_of? TkMenu - tk_call(win, 'entryconfigure', tag, "-#{optkey}", @latinfont) - else - raise RuntimeError, "unknown widget type" - end - else -# tk_tcl2ruby(w).font_configure('font'=>@latinfont) - tk_call(w, 'configure', '-font', @latinfont) - end - rescue - Tk_FontUseTBL.delete(w) - end - end - } - self - end - - def kanji_replace_core_tk4x(knj) - return self unless JAPANIZED_TK - - create_kanjifont_tk4x(knj) - @compoundfont[1] = [@kanjifont] - @fontslot['kanjifont'] = @kanjifont - Tk_FontUseTBL.dup.each{|w, fobj| - if self == fobj - begin - if w.include?(';') - win, tag, optkey = w.split(';') - optkey = 'kanjifont' unless optkey - winobj = tk_tcl2ruby(win) -# winobj.tagfont_configure(tag, {'kanjifont'=>@kanjifont}) - if winobj.kind_of? TkText - tk_call(win, 'tag', 'configure', tag, "-#{optkey}", @kanjifont) - elsif winobj.kind_of? TkCanvas - tk_call(win, 'itemconfigure', tag, "-#{optkey}", @kanjifont) - elsif winobj.kind_of? TkMenu - tk_call(win, 'entryconfigure', tag, "-#{optkey}", @latinfont) - else - raise RuntimeError, "unknown widget type" - end - else -# tk_tcl2ruby(w).font_configure('kanjifont'=>@kanjifont) - tk_call(w, 'configure', '-kanjifont', @kanjifont) - end - rescue - Tk_FontUseTBL.delete(w) - end - end - } - self - end - - def latin_replace_core_tk8x(ltn) - if JAPANIZED_TK - begin - tk_call('font', 'delete', '@font_tmp') - rescue - end - begin - fnt_bup = tk_call('font', 'create', '@font_tmp', '-copy', @latinfont) - rescue - #fnt_bup = '' - fnt_bup = DEFAULT_LATIN_FONT_NAME - end - end - - begin - tk_call('font', 'delete', @latinfont) - rescue - end - create_latinfont(ltn) - - if JAPANIZED_TK - keys = self.configinfo - tk_call('font', 'delete', @compoundfont) - begin - tk_call('font', 'create', @compoundfont, - '-compound', [@latinfont, @kanjifont], *hash_kv(keys)) -=begin - latinkeys = {} - begin - actual_core(@latinfont).each{|key,val| latinkeys[key] = val} - rescue - latinkeys {} - end - if latinkeys != {} - tk_call('font', 'configure', @compoundfont, *hash_kv(latinkeys)) - end -=end - rescue RuntimeError => e - tk_call('font', 'delete', @latinfont) - if fnt_bup && fnt_bup != '' - tk_call('font', 'create', @latinfont, '-copy', fnt_bup) - tk_call('font', 'create', @compoundfont, - '-compound', [@latinfont, @kanjifont], *hash_kv(keys)) - tk_call('font', 'delete', fnt_bup) - else - fail e - end - end - - else - latinkeys = {} - begin - actual_core(@latinfont).each{|key,val| latinkeys[key] = val} - rescue - latinkeys {} - end - if latinkeys != {} - tk_call('font', 'configure', @compoundfont, *hash_kv(latinkeys)) - end - end - self - end - - def kanji_replace_core_tk8x(knj) - if JAPANIZED_TK - begin - tk_call('font', 'delete', '@font_tmp') - rescue - end - begin - fnt_bup = tk_call('font', 'create', '@font_tmp', '-copy', @kanjifont) - rescue - #fnt_bup = '' - fnt_bup = DEFAULT_KANJI_FONT_NAME - end - end - - begin - tk_call('font', 'delete', @kanjifont) - rescue - end - create_kanjifont(knj) - - if JAPANIZED_TK - keys = self.configinfo - tk_call('font', 'delete', @compoundfont) - begin - tk_call('font', 'create', @compoundfont, - '-compound', [@latinfont, @kanjifont], *hash_kv(keys)) - rescue RuntimeError => e - tk_call('font', 'delete', @kanjifont) - if fnt_bup && fnt_bup != '' - tk_call('font', 'create', @kanjifont, '-copy', fnt_bup) - tk_call('font', 'create', @compoundfont, - '-compound', [@latinfont, @kanjifont], *hash_kv(keys)) - tk_call('font', 'delete', fnt_bup) - else - fail e - end - end - end - self - end - - def measure_core_tk4x(window, text) - 0 - end - - def measure_core_tk8x(window, text) - if window - number(tk_call('font', 'measure', @compoundfont, - '-displayof', window, text)) - else - number(tk_call('font', 'measure', @compoundfont, text)) - end - end - - def metrics_core_tk4x(font, window, option=nil) - # dummy - if option - "" - else - [['ascent',[]], ['descent',[]], ['linespace',[]], ['fixed',[]]] - end - end - - def metrics_core_tk8x(font, window, option=nil) - if option - if window - number(tk_call('font', 'metrics', font, - "-displayof", window, "-#{option}")) - else - number(tk_call('font', 'metrics', font, "-#{option}")) - end - else - l = tk_split_list(if window - tk_call('font','metrics',font,"-displayof",window) - else - tk_call('font','metrics',font) - end) - r = [] - while key=l.shift - r.push [key[1..-1], l.shift.to_i] - end - r - end - end - - ################################### - # private alias - ################################### - case (Tk::TK_VERSION) - when /^4\.*/ - alias create_latinfont create_latinfont_tk4x - alias create_kanjifont create_kanjifont_tk4x - alias create_compoundfont create_compoundfont_tk4x - alias actual_core actual_core_tk4x - alias configure_core configure_core_tk4x - alias configinfo_core configinfo_core_tk4x - alias current_configinfo_core current_configinfo_core_tk4x - alias delete_core delete_core_tk4x - alias latin_replace_core latin_replace_core_tk4x - alias kanji_replace_core kanji_replace_core_tk4x - alias measure_core measure_core_tk4x - alias metrics_core metrics_core_tk4x - - when /^8\.[0-5]/ - alias create_latinfont create_latinfont_tk8x - alias create_kanjifont create_kanjifont_tk8x - alias create_compoundfont create_compoundfont_tk8x - alias actual_core actual_core_tk8x - alias configure_core configure_core_tk8x - alias configinfo_core configinfo_core_tk8x - alias current_configinfo_core current_configinfo_core_tk8x - alias delete_core delete_core_tk8x - alias latin_replace_core latin_replace_core_tk8x - alias kanji_replace_core kanji_replace_core_tk8x - alias measure_core measure_core_tk8x - alias metrics_core metrics_core_tk8x - - else - alias create_latinfont create_latinfont_tk8x - alias create_kanjifont create_kanjifont_tk8x - alias create_compoundfont create_compoundfont_tk8x - alias actual_core actual_core_tk8x - alias configure_core configure_core_tk8x - alias configinfo_core configinfo_core_tk8x - alias current_configinfo_core current_configinfo_core_tk8x - alias delete_core delete_core_tk8x - alias latin_replace_core latin_replace_core_tk8x - alias kanji_replace_core kanji_replace_core_tk8x - alias measure_core measure_core_tk8x - alias metrics_core metrics_core_tk8x - - end - - ################################### - public - ################################### - def method_missing(id, *args) - name = id.id2name - case args.length - when 1 - configure name, args[0] - when 0 - begin - configinfo name - rescue - fail NameError, "undefined local variable or method `#{name}' for #{self.to_s}", error_at - end - else - fail NameError, "undefined method `#{name}' for #{self.to_s}", error_at - end - end - - def call_font_configure(path, *args) - if path.kind_of?(Array) - # [path, optkey] - win, tag = path[0].split(';') - optkey = path[1].to_s - else - win, tag, optkey = path.split(';') - end - - fontslot = _symbolkey2str(@fontslot) - if optkey && optkey != "" - ltn = fontslot.delete('font') - knj = fontslot.delete('kanjifont') - fontslot[optkey] = ltn if ltn - fontslot["kanji#{optkey}"] = knj if knj - end - - keys = _symbolkey2str(args.pop).update(fontslot) - args.concat(hash_kv(keys)) - tk_call(*args) - Tk_FontUseTBL[[win, tag, optkey].join(';')] = self - self - end - - def used - ret = [] - Tk_FontUseTBL.each{|key,value| - next unless self == value - if key.include?(';') - win, tag, optkey = key.split(';') - winobj = tk_tcl2ruby(win) - if winobj.kind_of? TkText - if optkey - ret.push([winobj, winobj.tagid2obj(tag), optkey]) - else - ret.push([winobj, winobj.tagid2obj(tag)]) - end - elsif winobj.kind_of? TkCanvas - if (tagobj = TkcTag.id2obj(winobj, tag)).kind_of? TkcTag - if optkey - ret.push([winobj, tagobj, optkey]) - else - ret.push([winobj, tagobj]) - end - elsif (tagobj = TkcItem.id2obj(winobj, tag)).kind_of? TkcItem - if optkey - ret.push([winobj, tagobj, optkey]) - else - ret.push([winobj, tagobj]) - end - else - if optkey - ret.push([winobj, tag, optkey]) - else - ret.push([winobj, tag]) - end - end - elsif winobj.kind_of? TkMenu - if optkey - ret.push([winobj, tag, optkey]) - else - ret.push([winobj, tag]) - end - else - if optkey - ret.push([win, tag, optkey]) - else - ret.push([win, tag]) - end - end - else - ret.push(tk_tcl2ruby(key)) - end - } - ret - end - - def id - @id - end - - def to_eval - font - end - - def font - @compoundfont - end - alias font_id font - - def latin_font_id - @latinfont - end - - def latin_font - # @latinfont - if @latin_descendant - @latin_descendant - else - @latin_descendant = DescendantFont.new(self, 'latin') - end - end - alias latinfont latin_font - - def kanji_font_id - @kanjifont - end - - def kanji_font - # @kanjifont - if @kanji_descendant - @kanji_descendant - else - @kanji_descendant = DescendantFont.new(self, 'kanji') - end - end - alias kanjifont kanji_font - - def actual(option=nil) - actual_core(@compoundfont, nil, option) - end - - def actual_displayof(window, option=nil) - window = '.' unless window - actual_core(@compoundfont, window, option) - end - - def latin_actual(option=nil) - actual_core(@latinfont, nil, option) - end - - def latin_actual_displayof(window, option=nil) - window = '.' unless window - actual_core(@latinfont, window, option) - end - - def kanji_actual(option=nil) - #if JAPANIZED_TK - if @kanjifont != "" - actual_core(@kanjifont, nil, option) - else - actual_core_tk4x(nil, nil, option) - end - end - - def kanji_actual_displayof(window, option=nil) - #if JAPANIZED_TK - if @kanjifont != "" - window = '.' unless window - actual_core(@kanjifont, window, option) - else - actual_core_tk4x(nil, window, option) - end - end - - def [](slot) - configinfo slot - end - - def []=(slot, val) - configure slot, val - val - end - - def configure(slot, value=None) - configure_core(@compoundfont, slot, value) - self - end - - def configinfo(slot=nil) - configinfo_core(@compoundfont, slot) - end - - def current_configinfo(slot=nil) - current_configinfo_core(@compoundfont, slot) - end - - def delete - delete_core - end - - def latin_configure(slot, value=None) - if JAPANIZED_TK - configure_core(@latinfont, slot, value) - else - configure(slot, value) - end - self - end - - def latin_configinfo(slot=nil) - if JAPANIZED_TK - configinfo_core(@latinfont, slot) - else - configinfo(slot) - end - end - - def kanji_configure(slot, value=None) - #if JAPANIZED_TK - if @kanjifont != "" - configure_core(@kanjifont, slot, value) - configure('size'=>configinfo('size')) # to reflect new configuration - else - #"" - configure(slot, value) - end - self - end - - def kanji_configinfo(slot=nil) - #if JAPANIZED_TK - if @kanjifont != "" - configinfo_core(@kanjifont, slot) - else - #[] - configinfo(slot) - end - end - - def replace(ltn, knj) - latin_replace(ltn) - kanji_replace(knj) - self - end - - def latin_replace(ltn) - latin_replace_core(ltn) - reset_pointadjust - self - end - - def kanji_replace(knj) - kanji_replace_core(knj) - reset_pointadjust - self - end - - def measure(text) - measure_core(nil, text) - end - - def measure_displayof(window, text) - window = '.' unless window - measure_core(window, text) - end - - def metrics(option=nil) - metrics_core(@compoundfont, nil, option) - end - - def metrics_displayof(window, option=nil) - window = '.' unless window - metrics_core(@compoundfont, window, option) - end - - def latin_metrics(option=nil) - metrics_core(@latinfont, nil, option) - end - - def latin_metrics_displayof(window, option=nil) - window = '.' unless window - metrics_core(@latinfont, window, option) - end - - def kanji_metrics(option=nil) - if JAPANIZED_TK - metrics_core(@kanjifont, nil, option) - else - metrics_core_tk4x(nil, nil, option) - end - end - - def kanji_metrics_displayof(window, option=nil) - if JAPANIZED_TK - window = '.' unless window - metrics_core(@kanjifont, window, option) - else - metrics_core_tk4x(nil, window, option) - end - end - - def reset_pointadjust - begin - if /^8\.*/ === Tk::TK_VERSION && JAPANIZED_TK - configure('pointadjust' => latin_actual.assoc('size')[1].to_f / - kanji_actual.assoc('size')[1].to_f ) - end - rescue - end - self - end - - ################################### - # public alias - ################################### - alias ascii_font latin_font - alias asciifont latinfont - alias create_asciifont create_latinfont - alias ascii_actual latin_actual - alias ascii_actual_displayof latin_actual_displayof - alias ascii_configure latin_configure - alias ascii_configinfo latin_configinfo - alias ascii_replace latin_replace - alias ascii_metrics latin_metrics - - ################################### - def dup - src = self - obj = super() - obj.instance_eval{ initialize(src) } - obj - end - def clone - src = self - obj = super() - obj.instance_eval{ initialize(src) } - obj - end -end diff --git a/ext/tk/lib/tk/frame.rb b/ext/tk/lib/tk/frame.rb deleted file mode 100644 index 4f01825da9..0000000000 --- a/ext/tk/lib/tk/frame.rb +++ /dev/null @@ -1,123 +0,0 @@ -# -# tk/frame.rb : treat frame widget -# -require 'tk' - -class TkFrame<TkWindow - TkCommandNames = ['frame'.freeze].freeze - WidgetClassName = 'Frame'.freeze - WidgetClassNames[WidgetClassName] = self - -################# old version -# def initialize(parent=nil, keys=nil) -# if keys.kind_of? Hash -# keys = keys.dup -# @classname = keys.delete('classname') if keys.key?('classname') -# @colormap = keys.delete('colormap') if keys.key?('colormap') -# @container = keys.delete('container') if keys.key?('container') -# @visual = keys.delete('visual') if keys.key?('visual') -# end -# super(parent, keys) -# end -# -# def create_self -# s = [] -# s << "-class" << @classname if @classname -# s << "-colormap" << @colormap if @colormap -# s << "-container" << @container if @container -# s << "-visual" << @visual if @visual -# tk_call 'frame', @path, *s -# end -################# - - def initialize(parent=nil, keys=nil) - my_class_name = nil - if self.class < WidgetClassNames[self.class::WidgetClassName] - my_class_name = self.class.name - my_class_name = nil if my_class_name == '' - end - if parent.kind_of? Hash - keys = _symbolkey2str(parent) - else - if keys - keys = _symbolkey2str(keys) - keys['parent'] = parent - else - keys = {'parent'=>parent} - end - end - if keys.key?('classname') - keys['class'] = keys.delete('classname') - end - @classname = keys['class'] - @colormap = keys['colormap'] - @container = keys['container'] - @visual = keys['visual'] - if !@classname && my_class_name - keys['class'] = @classname = my_class_name - end - if @classname.kind_of? TkBindTag - @db_class = @classname - @classname = @classname.id - elsif @classname - @db_class = TkDatabaseClass.new(@classname) - else - @db_class = self.class - @classname = @db_class::WidgetClassName - end - super(keys) - end - - #def create_self(keys) - # if keys and keys != None - # tk_call_without_enc('frame', @path, *hash_kv(keys)) - # else - # tk_call_without_enc( 'frame', @path) - # end - #end - #private :create_self - - def database_classname - @classname - end - - def self.database_class - if self == WidgetClassNames[WidgetClassName] || self.name == '' - self - else - TkDatabaseClass.new(self.name) - end - end - def self.database_classname - self.database_class.name - end - - def self.bind(*args) - if self == WidgetClassNames[WidgetClassName] || self.name == '' - super(*args) - else - TkDatabaseClass.new(self.name).bind(*args) - end - end - def self.bind_append(*args) - if self == WidgetClassNames[WidgetClassName] || self.name == '' - super(*args) - else - TkDatabaseClass.new(self.name).bind_append(*args) - end - end - def self.bind_remove(*args) - if self == WidgetClassNames[WidgetClassName] || self.name == '' - super(*args) - else - TkDatabaseClass.new(self.name).bind_remove(*args) - end - end - def self.bindinfo(*args) - if self == WidgetClassNames[WidgetClassName] || self.name == '' - super(*args) - else - TkDatabaseClass.new(self.name).bindinfo(*args) - end - end -end diff --git a/ext/tk/lib/tk/grid.rb b/ext/tk/lib/tk/grid.rb deleted file mode 100644 index 74287d43bd..0000000000 --- a/ext/tk/lib/tk/grid.rb +++ /dev/null @@ -1,211 +0,0 @@ -# -# tk/grid.rb : control grid geometry manager -# -require 'tk' - -module TkGrid - include Tk - extend Tk - - TkCommandNames = ['grid'.freeze].freeze - - def anchor(master, anchor=None) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - tk_call_without_enc('grid', 'anchor', master, anchor) - end - - def bbox(master, *args) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - args.unshift(master) - list(tk_call_without_enc('grid', 'bbox', *args)) - end - - def configure(win, *args) - if args[-1].kind_of?(Hash) - opts = args.pop - else - opts = {} - end - params = [] - params.push(_epath(win)) - args.each{|win| - case win - when '-', 'x', '^' # RELATIVE PLACEMENT - params.push(win) - else - params.push(_epath(win)) - end - } - opts.each{|k, v| - params.push("-#{k}") - params.push((v.kind_of?(TkObject))? v.epath: v) - } - tk_call_without_enc("grid", 'configure', *params) - end - alias grid configure - - def columnconfigure(master, index, args) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - tk_call_without_enc("grid", 'columnconfigure', - master, index, *hash_kv(args)) - end - - def rowconfigure(master, index, args) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - tk_call_without_enc("grid", 'rowconfigure', master, index, *hash_kv(args)) - end - - def columnconfiginfo(master, index, slot=nil) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - if slot - case slot - when 'uniform', :uniform - tk_call_without_enc('grid', 'columnconfigure', - master, index, "-#{slot}") - else - num_or_str(tk_call_without_enc('grid', 'columnconfigure', - master, index, "-#{slot}")) - end - else - #ilist = list(tk_call_without_enc('grid','columnconfigure',master,index)) - ilist = simplelist(tk_call_without_enc('grid', 'columnconfigure', - master, index)) - info = {} - while key = ilist.shift - case key - when 'uniform' - info[key[1..-1]] = ilist.shift - else - info[key[1..-1]] = tk_tcl2ruby(ilist.shift) - end - end - info - end - end - - def rowconfiginfo(master, index, slot=nil) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - if slot - case slot - when 'uniform', :uniform - tk_call_without_enc('grid', 'rowconfigure', - master, index, "-#{slot}") - else - num_or_str(tk_call_without_enc('grid', 'rowconfigure', - master, index, "-#{slot}")) - end - else - #ilist = list(tk_call_without_enc('grid', 'rowconfigure', master, index)) - ilist = simplelist(tk_call_without_enc('grid', 'rowconfigure', - master, index)) - info = {} - while key = ilist.shift - case key - when 'uniform' - info[key[1..-1]] = ilist.shift - else - info[key[1..-1]] = tk_tcl2ruby(ilist.shift) - end - end - info - end - end - - def add(widget, *args) - configure(widget, *args) - end - - def forget(*args) - return '' if args.size == 0 - wins = args.collect{|win| - # (win.kind_of?(TkObject))? win.epath: win - _epath(win) - } - tk_call_without_enc('grid', 'forget', *wins) - end - - def info(slave) - # slave = slave.epath if slave.kind_of?(TkObject) - slave = _epath(slave) - #ilist = list(tk_call_without_enc('grid', 'info', slave)) - ilist = simplelist(tk_call_without_enc('grid', 'info', slave)) - info = {} - while key = ilist.shift - #info[key[1..-1]] = ilist.shift - info[key[1..-1]] = tk_tcl2ruby(ilist.shift) - end - return info - end - - def location(master, x, y) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - list(tk_call_without_enc('grid', 'location', master, x, y)) - end - - def propagate(master, bool=None) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - if bool == None - bool(tk_call_without_enc('grid', 'propagate', master)) - else - tk_call_without_enc('grid', 'propagate', master, bool) - end - end - - def remove(*args) - return '' if args.size == 0 - wins = args.collect{|win| - # (win.kind_of?(TkObject))? win.epath: win - _epath(win) - } - tk_call_without_enc('grid', 'remove', *wins) - end - - def size(master) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - list(tk_call_without_enc('grid', 'size', master)) - end - - def slaves(master, args) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - list(tk_call_without_enc('grid', 'slaves', master, *hash_kv(args))) - end - - module_function :bbox, :forget, :propagate, :info - module_function :remove, :size, :slaves, :location - module_function :grid, :configure, :columnconfigure, :rowconfigure - module_function :columnconfiginfo, :rowconfiginfo -end -=begin -def TkGrid(win, *args) - if args[-1].kind_of?(Hash) - opts = args.pop - else - opts = {} - end - params = [] - params.push((win.kind_of?(TkObject))? win.epath: win) - args.each{|win| - case win - when '-', 'x', '^' # RELATIVE PLACEMENT - params.push(win) - else - params.push((win.kind_of?(TkObject))? win.epath: win) - end - } - opts.each{|k, v| - params.push("-#{k}") - params.push((v.kind_of?(TkObject))? v.epath: v) - } - tk_call_without_enc("grid", *params) -end -=end diff --git a/ext/tk/lib/tk/image.rb b/ext/tk/lib/tk/image.rb deleted file mode 100644 index 7fd61eff5d..0000000000 --- a/ext/tk/lib/tk/image.rb +++ /dev/null @@ -1,186 +0,0 @@ -# -# tk/image.rb : treat Tk image objects -# - -require 'tk' - -class TkImage<TkObject - include Tk - - TkCommandNames = ['image'.freeze].freeze - - Tk_IMGTBL = TkCore::INTERP.create_table - Tk_Image_ID = ['i'.freeze, '00000'.taint].freeze - - TkCore::INTERP.init_ip_env{ Tk_IMGTBL.clear } - - def initialize(keys=nil) - # @path = Tk_Image_ID.join('') - @path = Tk_Image_ID.join(TkCore::INTERP._ip_id_) - Tk_Image_ID[1].succ! - tk_call_without_enc('image', 'create', @type, @path, *hash_kv(keys, true)) - Tk_IMGTBL[@path] = self - end - - def delete - Tk_IMGTBL.delete(@id) if @id - tk_call_without_enc('image', 'delete', @path) - self - end - def height - number(tk_call_without_enc('image', 'height', @path)) - end - def inuse - bool(tk_call_without_enc('image', 'inuse', @path)) - end - def itemtype - tk_call_without_enc('image', 'type', @path) - end - def width - number(tk_call_without_enc('image', 'width', @path)) - end - - def TkImage.names - Tk.tk_call_without_enc('image', 'names').split.collect!{|id| - (Tk_IMGTBL[id])? Tk_IMGTBL[id] : id - } - end - - def TkImage.types - Tk.tk_call_without_enc('image', 'types').split - end -end - -class TkBitmapImage<TkImage - def initialize(*args) - @type = 'bitmap' - super - end -end - -class TkPhotoImage<TkImage - NullArgOptionKeys = [ "shrink", "grayscale" ] - - def _photo_hash_kv(keys) - keys = _symbolkey2str(keys) - NullArgOptionKeys.collect{|opt| - if keys[opt] - keys[opt] = None - else - keys.delete(opt) - end - } - hash_kv(keys).flatten - end - private :_photo_hash_kv - - def initialize(*args) - @type = 'photo' - super - end - - def blank - tk_send_without_enc('blank') - self - end - - def cget(option) - case option.to_s - when 'data', 'file' - tk_send 'cget', option - else - tk_tcl2ruby(tk_send('cget', option)) - end - end - - def copy(src, *opts) - if opts.size == 0 - tk_send('copy', src) - elsif opts.size == 1 && opts[0].kind_of?(Hash) - tk_send('copy', src, *_photo_hash_kv(opts[0])) - else - # for backward compatibility - args = opts.collect{|term| - if term.kind_of?(String) && term.include?(?\s) - term.split - else - term - end - }.flatten - tk_send('copy', src, *args) - end - self - end - - def data(keys={}) - #tk_send('data', *_photo_hash_kv(keys)) - tk_split_list(tk_send('data', *_photo_hash_kv(keys))) - end - - def get(x, y) - tk_send('get', x, y).split.collect{|n| n.to_i} - end - - def put(data, *opts) - if opts == [] - tk_send('put', data) - elsif opts.size == 1 && opts[0].kind_of?(Hash) - tk_send('put', data, *_photo_hash_kv(opts[0])) - else - # for backward compatibility - tk_send('put', data, '-to', *opts) - end - self - end - - def read(file, *opts) - if opts.size == 0 - tk_send('read', file) - elsif opts.size == 1 && opts[0].kind_of?(Hash) - tk_send('read', file, *_photo_hash_kv(opts[0])) - else - # for backward compatibility - args = opts.collect{|term| - if term.kind_of?(String) && term.include?(?\s) - term.split - else - term - end - }.flatten - tk_send('read', file, *args) - end - self - end - - def redither - tk_send 'redither' - self - end - - def get_transparency(x, y) - bool(tk_send('transparency', 'get', x, y)) - end - def set_transparency(x, y, st) - tk_send('transparency', 'set', x, y, st) - self - end - - def write(file, *opts) - if opts.size == 0 - tk_send('write', file) - elsif opts.size == 1 && opts[0].kind_of?(Hash) - tk_send('write', file, *_photo_hash_kv(opts[0])) - else - # for backward compatibility - args = opts.collect{|term| - if term.kind_of?(String) && term.include?(?\s) - term.split - else - term - end - }.flatten - tk_send('write', file, *args) - end - self - end -end diff --git a/ext/tk/lib/tk/itemconfig.rb b/ext/tk/lib/tk/itemconfig.rb deleted file mode 100644 index 34c64adb2c..0000000000 --- a/ext/tk/lib/tk/itemconfig.rb +++ /dev/null @@ -1,788 +0,0 @@ -# -# tk/itemconfig.rb : control item/tag configuration of widget -# -require 'tk' -require 'tkutil' -require 'tk/itemfont.rb' - -module TkItemConfigOptkeys - def __item_numval_optkeys(id) - [] - end - private :__item_numval_optkeys - - def __item_numstrval_optkeys(id) - [] - end - private :__item_numstrval_optkeys - - def __item_boolval_optkeys(id) - [] - end - private :__item_boolval_optkeys - - def __item_strval_optkeys(id) - # maybe need to override - ['text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'] - end - private :__item_strval_optkeys - - def __item_listval_optkeys(id) - [] - end - private :__item_listval_optkeys - - def __item_numlistval_optkeys(id) - # maybe need to override - ['dash', 'activedash', 'disableddash'] - end - private :__item_numlistval_optkeys - - def __item_methodcall_optkeys(id) # { key=>method, ... } - # maybe need to override - # {'coords'=>'coords'} - {} - end - private :__item_methodcall_optkeys - - ################################################ - - def __item_keyonly_optkeys(id) # { def_key=>(undef_key|nil), ... } - # maybe need to override - {} - end - private :__item_keyonly_optkeys - - - def __conv_item_keyonly_opts(id, keys) - return keys unless keys.kind_of?(Hash) - keyonly = __item_keyonly_optkeys(id) - keys2 = {} - keys.each{|k, v| - optkey = keyonly.find{|kk,vv| kk.to_s == k.to_s} - if optkey - defkey, undefkey = optkey - if v - keys2[defkey.to_s] = None - else - keys2[undefkey.to_s] = None - end - else - keys2[k.to_s] = v - end - } - keys2 - end - - def itemconfig_hash_kv(id, keys, enc_mode = nil, conf = nil) - hash_kv(__conv_item_keyonly_opts(id, keys), enc_mode, conf) - end -end - -module TkItemConfigMethod - include TkUtil - include TkTreatItemFont - include TkItemConfigOptkeys - - def __item_cget_cmd(id) - # maybe need to override - [self.path, 'itemcget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - # maybe need to override - [self.path, 'itemconfigure', id] - end - private :__item_config_cmd - - def __item_configinfo_struct(id) - # maybe need to override - {:key=>0, :alias=>1, :db_name=>1, :db_class=>2, - :default_value=>3, :current_value=>4} - end - private :__item_configinfo_struct - - ################################################ - - def tagid(tagOrId) - # maybe need to override - tagOrId - end - - ################################################ - - def itemcget(tagOrId, option) - option = option.to_s - - if ( method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[option] ) - return self.__send__(method, tagOrId) - end - - case option - when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/ - begin - number(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}"))) - rescue - nil - end - - when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/ - num_or_str(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}"))) - - when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/ - begin - bool(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}"))) - rescue - nil - end - - when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/ - simplelist(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}"))) - - when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")) - if conf =~ /^[0-9]/ - list(conf) - else - conf - end - - when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/ - _fromUTF8(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}"))) - - when /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/ - fontcode = $1 - fontkey = $2 - fnt = tk_tcl2ruby(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{fontkey}")), true) - unless fnt.kind_of?(TkFont) - fnt = tagfontobj(tagid(tagOrId), fontkey) - end - if fontcode == 'kanji' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/ - # obsolete; just for compatibility - fnt.kanji_font - else - fnt - end - else - tk_tcl2ruby(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")), true) - end - end - - def itemconfigure(tagOrId, slot, value=None) - if slot.kind_of? Hash - slot = _symbolkey2str(slot) - - __item_methodcall_optkeys(tagid(tagOrId)).each{|key, method| - value = slot.delete(key.to_s) - self.__send__(method, tagOrId, value) if value - } - - __item_keyonly_optkeys(tagid(tagOrId)).each{|defkey, undefkey| - conf = slot.find{|kk, vv| kk == defkey.to_s} - if conf - k, v = conf - if v - slot[k] = None - else - slot[undefkey.to_s] = None if undefkey - slot.delete(k) - end - end - } - - if (slot.find{|k, v| k =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/}) - tagfont_configure(tagid(tagOrId), slot) - elsif slot.size > 0 - tk_call(*(__item_config_cmd(tagid(tagOrId)).concat(hash_kv(slot)))) - end - - else - slot = slot.to_s - if ( conf = __item_keyonly_optkeys(tagid(tagOrId)).find{|k, v| k.to_s == slot } ) - defkey, undefkey = conf - if value - tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{defkey}")) - elsif undefkey - tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{undefkey}")) - end - elsif ( method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot] ) - self.__send__(method, tagOrId, value) - elsif (slot =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/) - if value == None - tagfontobj(tagid(tagOrId), $2) - else - tagfont_configure(tagid(tagOrId), {slot=>value}) - end - else - tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}" << value)) - end - end - self - end - - def itemconfiginfo(tagOrId, slot = nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if (slot.to_s =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/) - fontkey = $2 - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{fontkey}")))) - conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = - conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1] - if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \ - || conf.size > __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), fontkey) - elsif ( __item_configinfo_struct(tagid(tagOrId))[:alias] \ - && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- ) - conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = - conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1] - end - conf - else - if slot - slot = slot.to_s - case slot - when /^(#{__item_methodcall_optkeys(tagid(tagOrId)).keys.join('|')})$/ - method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot] - return [slot, '', '', '', self.__send__(method, tagOrId)] - - when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil - end - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil - end - end - - when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - - when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil - end - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil - end - end - - when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - - when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ ) - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - - when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - - else - conf = tk_split_list(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - end - conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = - conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1] - - if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \ - && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- ) - conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = - conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1] - end - - conf - - else - ret = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)))))).collect{|conflist| - conf = tk_split_simplelist(conflist) - conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = - conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1] - - case conf[__item_configinfo_struct(tagid(tagOrId))[:key]] - when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/ - # do nothing - - when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/ - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil - end - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil - end - end - - when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/ - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - - when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/ - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil - end - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil - end - end - - when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/ - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - - when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/ - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ ) - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - - else - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - if conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]].index('{') - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - else - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - end - if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] - if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]].index('{') - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - else - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - end - end - - if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \ - && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- ) - conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = - conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1] - end - - conf - } - - __item_font_optkeys(tagid(tagOrId)).each{|optkey| - optkey = optkey.to_s - fontconf = ret.assoc(optkey) - if fontconf && fontconf.size > 2 - ret.delete_if{|inf| inf[0] =~ /^(|latin|ascii|kanji)#{optkey}$/} - fontconf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), optkey) - ret.push(fontconf) - end - } - - __item_methodcall_optkeys(tagid(tagOrId)).each{|optkey, method| - ret << [optkey.to_s, '', '', '', self.__send__(method, tagOrId)] - } - - ret - end - end - - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - if (slot.to_s =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/) - fontkey = $2 - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{fontkey}")))) - conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = - conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1] - - if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \ - || conf.size > __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = fontobj(tagid(tagOrId), fontkey) - { conf.shift => conf } - elsif ( __item_configinfo_struct(tagid(tagOrId))[:alias] \ - && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 ) - if conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- - conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = - conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1] - end - { conf[0] => conf[1] } - else - { conf.shift => conf } - end - else - if slot - slot = slot.to_s - case slot - when /^(#{__item_methodcall_optkeys(tagid(tagOrId)).keys.join('|')})$/ - method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot] - return {slot => ['', '', '', self.__send__(method, tagOrId)]} - - when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil - end - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil - end - end - - when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - num_or_stre(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - - when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil - end - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil - end - end - - when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - - when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ ) - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - - when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/ - conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - - else - conf = tk_split_list(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}")))) - end - conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = - conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1] - - if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \ - && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 ) - if conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- - conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = - conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1] - end - { conf[0] => conf[1] } - else - { conf.shift => conf } - end - - else - ret = {} - tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_config_cmd(tagid(tagOrId)))))).each{|conflist| - conf = tk_split_simplelist(conflist) - conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = - conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1] - - case conf[__item_configinfo_struct(tagid(tagOrId))[:key]] - when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/ - # do nothing - - when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/ - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil - end - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil - end - end - - when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/ - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - - when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/ - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil - end - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - begin - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - rescue - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil - end - end - - when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/ - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - - when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/ - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ ) - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ ) - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - - else - if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \ - && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] ) - if conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]].index('{') - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - else - conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = - tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) - end - end - if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] - if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]].index('{') - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - else - conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = - tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) - end - end - end - - if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \ - && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 ) - if conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- - conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = - conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1] - end - ret[conf[0]] = conf[1] - else - ret[conf.shift] = conf - end - } - - __item_font_optkeys(tagid(tagOrId)).each{|optkey| - optkey = optkey.to_s - fontconf = ret[optkey] - if fontconf.kind_of?(Array) - ret.delete(optkey) - ret.delete('latin' << optkey) - ret.delete('ascii' << optkey) - ret.delete('kanji' << optkey) - fontconf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), optkey) - ret[optkey] = fontconf - end - } - - __item_methodcall_optkeys(tagid(tagOrId)).each{|optkey, method| - ret[optkey.to_s] = ['', '', '', self.__send__(method, tagOrId)] - } - - ret - end - end - end - end - - def current_itemconfiginfo(tagOrId, slot = nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - org_slot = slot - begin - conf = itemconfiginfo(tagOrId, slot) - if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \ - || conf.size > __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 ) - return {conf[0] => conf[-1]} - end - slot = conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] - end while(org_slot != slot) - fail RuntimeError, - "there is a configure alias loop about '#{org_slot}'" - else - ret = {} - itemconfiginfo(tagOrId).each{|conf| - if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \ - || conf.size > __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 ) - ret[conf[0]] = conf[-1] - end - } - ret - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - ret = {} - itemconfiginfo(slot).each{|key, conf| - ret[key] = conf[-1] if conf.kind_of?(Array) - } - ret - end - end -end diff --git a/ext/tk/lib/tk/itemfont.rb b/ext/tk/lib/tk/itemfont.rb deleted file mode 100644 index 1f77ad11e7..0000000000 --- a/ext/tk/lib/tk/itemfont.rb +++ /dev/null @@ -1,297 +0,0 @@ -# -# tk/itemfont.rb : control font of widget items -# -require 'tk' - -module TkItemFontOptkeys - def __item_font_optkeys(id) - # maybe need to override - ['font'] - end - private :__item_font_optkeys -end - -module TkTreatItemFont - include TkItemFontOptkeys - - def __item_pathname(id) - # maybe need to override - [self.path, id].join(';') - end - private :__item_pathname - - ################################################ - - def tagfont_configinfo(tagOrId, key = nil) - optkeys = __item_font_optkeys(tagid(tagOrId)) - if key && !optkeys.find{|opt| opt.to_s == key.to_s} - fail ArgumentError, "unknown font option name `#{key}'" - end - - win, tag = __item_pathname(tagid(tagOrId)).split(';') - - if key - pathname = [win, tag, key].join(';') - TkFont.used_on(pathname) || - TkFont.init_widget_font(pathname, *(__item_config_cmd(tagid(tagOrId)))) - elsif optkeys.size == 1 - pathname = [win, tag, optkeys[0]].join(';') - TkFont.used_on(pathname) || - TkFont.init_widget_font(pathname, *(__item_config_cmd(tagid(tagOrId)))) - else - fonts = {} - optkeys.each{|key| - key = key.to_s - pathname = [win, tag, key].join(';') - fonts[key] = - TkFont.used_on(pathname) || - TkFont.init_widget_font(pathname, *(__item_config_cmd(tagid(tagOrId)))) - } - fonts - end - end - alias tagfontobj tagfont_configinfo - - def tagfont_configure(tagOrId, slot) - pathname = __item_pathname(tagid(tagOrId)) - - slot = _symbolkey2str(slot) - - __item_font_optkeys(tagid(tagOrId)).each{|optkey| - optkey = optkey.to_s - l_optkey = 'latin' << optkey - a_optkey = 'ascii' << optkey - k_optkey = 'kanji' << optkey - - if slot.key?(optkey) - fnt = slot.delete(optkey) - if fnt.kind_of?(TkFont) - slot.delete(l_optkey) - slot.delete(a_optkey) - slot.delete(k_optkey) - - fnt.call_font_configure([pathname, optkey], - *(__item_config_cmd(tagid(tagOrId)) << {})) - next - else - if fnt - if (slot.key?(l_optkey) || - slot.key?(a_optkey) || - slot.key?(k_optkey)) - fnt = TkFont.new(fnt) - - lfnt = slot.delete(l_optkey) - lfnt = slot.delete(a_optkey) if slot.key?(a_optkey) - kfnt = slot.delete(k_optkey) - - fnt.latin_replace(lfnt) if lfnt - fnt.kanji_replace(kfnt) if kfnt - - fnt.call_font_configure([pathname, optkey], - *(__item_config_cmd(tagid(tagOrId)) << {})) - next - else - tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{optkey}" << fnt)) - end - end - next - end - end - - lfnt = slot.delete(l_optkey) - lfnt = slot.delete(a_optkey) if slot.key?(a_optkey) - kfnt = slot.delete(k_optkey) - - if lfnt && kfnt - TkFont.new(lfnt, kfnt).call_font_configure([pathname, optkey], - *(__item_config_cmd(tagid(tagOrId)) << {})) - elsif lfnt - latintagfont_configure([lfnt, optkey]) - elsif kfnt - kanjitagfont_configure([kfnt, optkey]) - end - } - - # configure other (without font) options - tk_call(*(__item_config_cmd(tagid(tagOrId)).concat(hash_kv(slot)))) if slot != {} - self - end - - def latintagfont_configure(tagOrId, ltn, keys=nil) - if ltn.kind_of?(Array) - key = ltn[1] - ltn = ltn[0] - else - key = nil - end - - optkeys = __item_font_optkeys(tagid(tagOrId)) - if key && !optkeys.find{|opt| opt.to_s == key.to_s} - fail ArgumentError, "unknown font option name `#{key}'" - end - - win, tag = __item_pathname(tagid(tagOrId)).split(';') - - optkeys = [key] if key - - optkeys.each{|optkey| - optkey = optkey.to_s - - pathname = [win, tag, optkey].join(';') - - if (fobj = TkFont.used_on(pathname)) - fobj = TkFont.new(fobj) # create a new TkFont object - elsif Tk::JAPANIZED_TK - fobj = fontobj # create a new TkFont object - else - tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{optkey}" << ltn)) - next - end - - if fobj.kind_of?(TkFont) - if ltn.kind_of?(TkFont) - conf = {} - ltn.latin_configinfo.each{|key,val| conf[key] = val} - if keys - fobj.latin_configure(conf.update(keys)) - else - fobj.latin_configure(conf) - end - else - fobj.latin_replace(ltn) - end - end - - fobj.call_font_configure([pathname, optkey], *(__item_config_cmd(tagid(tagOrId)) << {})) - } - self - end - alias asciitagfont_configure latintagfont_configure - - def kanjitagfont_configure(tagOrId, knj, keys=nil) - if knj.kind_of?(Array) - key = knj[1] - knj = knj[0] - else - key = nil - end - - optkeys = __item_font_optkeys(tagid(tagOrId)) - if key && !optkeys.find{|opt| opt.to_s == key.to_s} - fail ArgumentError, "unknown font option name `#{key}'" - end - - win, tag = __item_pathname(tagid(tagOrId)).split(';') - - optkeys = [key] if key - - optkeys.each{|optkey| - optkey = optkey.to_s - - pathname = [win, tag, optkey].join(';') - - if (fobj = TkFont.used_on(pathname)) - fobj = TkFont.new(fobj) # create a new TkFont object - elsif Tk::JAPANIZED_TK - fobj = fontobj # create a new TkFont object - else - tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{optkey}" << knj)) - next - end - - if fobj.kind_of?(TkFont) - if knj.kind_of?(TkFont) - conf = {} - knj.kanji_configinfo.each{|key,val| conf[key] = val} - if keys - fobj.kanji_configure(conf.update(keys)) - else - fobj.kanji_configure(conf) - end - else - fobj.kanji_replace(knj) - end - end - - fobj.call_font_configure([pathname, optkey], *(__item_config_cmd(tagid(tagOrId)) << {})) - } - self - end - - def tagfont_copy(tagOrId, window, wintag=nil, winkey=nil, targetkey=nil) - if wintag - if winkey - fnt = window.tagfontobj(wintag, winkey).dup - else - fnt = window.tagfontobj(wintag).dup - end - else - if winkey - fnt = window.fontobj(winkey).dup - else - fnt = window.fontobj.dup - end - end - - if targetkey - fnt.call_font_configure([__item_pathname(tagid(tagOrId)), targetkey], - *(__item_config_cmd(tagid(tagOrId)) << {})) - else - fnt.call_font_configure(__item_pathname(tagid(tagOrId)), - *(__item_config_cmd(tagid(tagOrId)) << {})) - end - self - end - - - def latintagfont_copy(tagOrId, window, wintag=nil, winkey=nil, targetkey=nil) - if targetkey - fontobj(targetkey).dup.call_font_configure([__item_pathname(tagid(tagOrId)), targetkey], - *(__item_config_cmd(tagid(tagOrId)) << {})) - else - fontobj.dup.call_font_configure(__item_pathname(tagid(tagOrId)), - *(__item_config_cmd(tagid(tagOrId)) << {})) - end - - if wintag - if winkey - fontobj.latin_replace(window.tagfontobj(wintag, winkey).latin_font_id) - else - fontobj.latin_replace(window.tagfontobj(wintag).latin_font_id) - end - else - if winkey - fontobj.latin_replace(window.fontobj(winkey).latin_font_id) - else - fontobj.latin_replace(window.fontobj.latin_font_id) - end - end - self - end - alias asciitagfont_copy latintagfont_copy - - def kanjifont_copy(tagOrId, window, wintag=nil, winkey=nil, targetkey=nil) - if targetkey - fontobj(targetkey).dup.call_font_configure([__item_pathname(tagid(tagOrId)), targetkey], - *(__item_config_cmd(tagid(tagOrId)) << {})) - else - fontobj.dup.call_font_configure(__item_pathname(tagid(tagOrId)), - *(__item_config_cmd(tagid(tagOrId)) << {})) - end - - if wintag - if winkey - fontobj.kanji_replace(window.tagfontobj(wintag, winkey).kanji_font_id) - else - fontobj.kanji_replace(window.tagfontobj(wintag).kanji_font_id) - end - else - if winkey - fontobj.kanji_replace(window.fontobj(winkey).kanji_font_id) - else - fontobj.kanji_replace(window.fontobj.kanji_font_id) - end - end - self - end -end diff --git a/ext/tk/lib/tk/kinput.rb b/ext/tk/lib/tk/kinput.rb deleted file mode 100644 index fc731b6569..0000000000 --- a/ext/tk/lib/tk/kinput.rb +++ /dev/null @@ -1,71 +0,0 @@ -# -# tk/kinput.rb : control kinput -# -require 'tk' - -module TkKinput - include Tk - extend Tk - - TkCommandNames = [ - 'kinput_start'.freeze, - 'kinput_send_spot'.freeze, - 'kanjiInput'.freeze - ].freeze - - def TkKinput.start(window, style=None) - tk_call('kinput_start', window, style) - end - def kinput_start(style=None) - TkKinput.start(self, style) - end - - def TkKinput.send_spot(window) - tk_call('kinput_send_spot', window) - end - def kinput_send_spot - TkKinput.send_spot(self) - end - - def TkKinput.input_start(window, keys=nil) - tk_call('kanjiInput', 'start', window, *hash_kv(keys)) - end - def kanji_input_start(keys=nil) - TkKinput.input_start(self, keys) - end - - def TkKinput.attribute_config(window, slot, value=None) - if slot.kind_of? Hash - tk_call('kanjiInput', 'attribute', window, *hash_kv(slot)) - else - tk_call('kanjiInput', 'attribute', window, "-#{slot}", value) - end - end - def kinput_attribute_config(slot, value=None) - TkKinput.attribute_config(self, slot, value) - end - - def TkKinput.attribute_info(window, slot=nil) - if slot - conf = tk_split_list(tk_call('kanjiInput', 'attribute', - window, "-#{slot}")) - conf[0] = conf[0][1..-1] - conf - else - tk_split_list(tk_call('kanjiInput', 'attribute', window)).collect{|conf| - conf[0] = conf[0][1..-1] - conf - } - end - end - def kinput_attribute_info(slot=nil) - TkKinput.attribute_info(self, slot) - end - - def TkKinput.input_end(window) - tk_call('kanjiInput', 'end', window) - end - def kanji_input_end - TkKinput.input_end(self) - end -end diff --git a/ext/tk/lib/tk/label.rb b/ext/tk/lib/tk/label.rb deleted file mode 100644 index ea669d576e..0000000000 --- a/ext/tk/lib/tk/label.rb +++ /dev/null @@ -1,22 +0,0 @@ -# -# tk/label.rb : treat label widget -# -require 'tk' - -class TkLabel<TkWindow - TkCommandNames = ['label'.freeze].freeze - WidgetClassName = 'Label'.freeze - WidgetClassNames[WidgetClassName] = self - #def create_self(keys) - # if keys and keys != None - # tk_call_without_enc('label', @path, *hash_kv(keys, true)) - # else - # tk_call_without_enc('label', @path) - # end - #end - #private :create_self - - def textvariable(v) - configure 'textvariable', tk_trace_variable(v) - end -end diff --git a/ext/tk/lib/tk/labelframe.rb b/ext/tk/lib/tk/labelframe.rb deleted file mode 100644 index fd16d3419d..0000000000 --- a/ext/tk/lib/tk/labelframe.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# tk/labelframe.rb : treat labelframe widget -# -require 'tk' -require 'tk/frame' - -class TkLabelFrame<TkFrame - TkCommandNames = ['labelframe'.freeze].freeze - WidgetClassName = 'Labelframe'.freeze - WidgetClassNames[WidgetClassName] = self - #def create_self(keys) - # if keys and keys != None - # tk_call_without_enc('labelframe', @path, *hash_kv(keys, true)) - # else - # tk_call_without_enc('labelframe', @path) - # end - #end - #private :create_self -end -TkLabelframe = TkLabelFrame diff --git a/ext/tk/lib/tk/listbox.rb b/ext/tk/lib/tk/listbox.rb deleted file mode 100644 index f00db19239..0000000000 --- a/ext/tk/lib/tk/listbox.rb +++ /dev/null @@ -1,273 +0,0 @@ -# -# tk/listbox.rb : treat listbox widget -# -require 'tk' -require 'tk/itemconfig' -require 'tk/scrollable' -require 'tk/txtwin_abst' - -module TkListItemConfig - include TkItemConfigMethod - - def __item_listval_optkeys(id) - [] - end - private :__item_listval_optkeys -end - -class TkListbox<TkTextWin - include TkListItemConfig - include Scrollable - - TkCommandNames = ['listbox'.freeze].freeze - WidgetClassName = 'Listbox'.freeze - WidgetClassNames[WidgetClassName] = self - - #def create_self(keys) - # if keys and keys != None - # tk_call_without_enc('listbox', @path, *hash_kv(keys, true)) - # else - # tk_call_without_enc('listbox', @path) - # end - #end - #private :create_self - - def tagid(id) - #id.to_s - _get_eval_string(id) - end - - def activate(y) - tk_send_without_enc('activate', y) - self - end - def curselection - list(tk_send_without_enc('curselection')) - end - def get(first, last=nil) - if last - tk_split_simplelist(_fromUTF8(tk_send_without_enc('get', first, last))) - else - _fromUTF8(tk_send_without_enc('get', first)) - end - end - def nearest(y) - tk_send_without_enc('nearest', y).to_i - end - def size - tk_send_without_enc('size').to_i - end - def selection_anchor(index) - tk_send_without_enc('selection', 'anchor', index) - self - end - def selection_clear(first, last=None) - tk_send_without_enc('selection', 'clear', first, last) - self - end - def selection_includes(index) - bool(tk_send_without_enc('selection', 'includes', index)) - end - def selection_set(first, last=None) - tk_send_without_enc('selection', 'set', first, last) - self - end - - def index(index) - tk_send_without_enc('index', index).to_i - end - - def value - get('0', 'end') - end - - def value= (vals) - unless vals.kind_of?(Array) - fail ArgumentError, 'an Array is expected' - end - tk_send_without_enc('delete', '0', 'end') - tk_send_without_enc('insert', '0', - *(vals.collect{|v| _get_eval_enc_str(v)})) - vals - end - - def clear - tk_send_without_enc('delete', '0', 'end') - self - end - alias erase clear - -=begin - def itemcget(index, key) - case key.to_s - when 'text', 'label', 'show' - _fromUTF8(tk_send_without_enc('itemcget', index, "-#{key}")) - when 'font', 'kanjifont' - #fnt = tk_tcl2ruby(tk_send('itemcget', index, "-#{key}")) - fnt = tk_tcl2ruby(_fromUTF8(tk_send_without_enc('itemcget', index, - '-font'))) - unless fnt.kind_of?(TkFont) - fnt = tagfontobj(index, fnt) - end - if key.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/ - # obsolete; just for compatibility - fnt.kanji_font - else - fnt - end - else - tk_tcl2ruby(_fromUTF8(tk_send_without_enc('itemcget', index, "-#{key}"))) - end - end - def itemconfigure(index, key, val=None) - if key.kind_of? Hash - if (key['font'] || key[:font] || - key['kanjifont'] || key[:kanjifont] || - key['latinfont'] || key[:latinfont] || - key['asciifont'] || key[:asciifont] ) - tagfont_configure(index, _symbolkey2str(key)) - else - tk_send_without_enc('itemconfigure', index, *hash_kv(key, true)) - end - - else - if (key == 'font' || key == :font || - key == 'kanjifont' || key == :kanjifont || - key == 'latinfont' || key == :latinfont || - key == 'asciifont' || key == :asciifont ) - if val == None - tagfontobj(index) - else - tagfont_configure(index, {key=>val}) - end - else - tk_call('itemconfigure', index, "-#{key}", val) - end - end - self - end - - def itemconfiginfo(index, key=nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if key - case key.to_s - when 'text', 'label', 'show' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}"))) - when 'font', 'kanjifont' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}"))) - conf[4] = tagfont_configinfo(index, conf[4]) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}"))) - end - conf[0] = conf[0][1..-1] - conf - else - ret = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', index))).collect{|conflist| - conf = tk_split_simplelist(conflist) - conf[0] = conf[0][1..-1] - case conf[0] - when 'text', 'label', 'show' - else - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - if conf[4] - if conf[4].index('{') - conf[4] = tk_split_list(conf[4]) - else - conf[4] = tk_tcl2ruby(conf[4]) - end - end - end - conf[1] = conf[1][1..-1] if conf.size == 2 # alias info - conf - } - fontconf = ret.assoc('font') - if fontconf - ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'} - fontconf[4] = tagfont_configinfo(index, fontconf[4]) - ret.push(fontconf) - else - ret - end - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - if key - case key.to_s - when 'text', 'label', 'show' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}"))) - when 'font', 'kanjifont' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}"))) - conf[4] = tagfont_configinfo(index, conf[4]) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}"))) - end - key = conf.shift[1..-1] - { key => conf } - else - ret = {} - tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', index))).each{|conflist| - conf = tk_split_simplelist(conflist) - key = conf.shift[1..-1] - case key - when 'text', 'label', 'show' - else - if conf[2] - if conf[2].index('{') - conf[2] = tk_split_list(conf[2]) - else - conf[2] = tk_tcl2ruby(conf[2]) - end - end - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - end - if conf.size == 1 - ret[key] = conf[0][1..-1] # alias info - else - ret[key] = conf - end - } - fontconf = ret['font'] - if fontconf - ret.delete('font') - ret.delete('kanjifont') - fontconf[3] = tagfont_configinfo(index, fontconf[3]) - ret['font'] = fontconf - end - ret - end - end - end - - def current_itemconfiginfo(index, key=nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if key - conf = itemconfiginfo(index, key) - {conf[0] => conf[4]} - else - ret = {} - itemconfiginfo(index).each{|conf| - ret[conf[0]] = conf[4] if conf.size > 2 - } - ret - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - ret = {} - itemconfiginfo(index, key).each{|k, conf| - ret[k] = conf[-1] if conf.kind_of?(Array) - } - ret - end - end -=end -end diff --git a/ext/tk/lib/tk/macpkg.rb b/ext/tk/lib/tk/macpkg.rb deleted file mode 100644 index d67a19745b..0000000000 --- a/ext/tk/lib/tk/macpkg.rb +++ /dev/null @@ -1,68 +0,0 @@ -# -# tk/macpkg.rb : methods for Tcl/Tk packages for Macintosh -# 2000/11/22 by Hidetoshi Nagai <nagai@ai.kyutech.ac.jp> -# -# ATTENTION !! -# This is NOT TESTED. Because I have no test-environment. -# -# -require 'tk' - -module Tk - def Tk.load_tclscript_rsrc(resource_name, file=None) - # Mac only - tk_call('source', '-rsrc', resource_name, file) - end - - def Tk.load_tclscript_rsrcid(resource_id, file=None) - # Mac only - tk_call('source', '-rsrcid', resource_id, file) - end -end - -module TkMacResource - extend Tk - extend TkMacResource - - TkCommandNames = ['resource'.freeze].freeze - - tk_call_without_enc('package', 'require', 'resource') - - def close(rsrcRef) - tk_call('resource', 'close', rsrcRef) - end - - def delete(rsrcType, opts=nil) - tk_call('resource', 'delete', *(hash_kv(opts) << rsrcType)) - end - - def files(rsrcRef=nil) - if rsrcRef - tk_call('resource', 'files', rsrcRef) - else - tk_split_simplelist(tk_call('resource', 'files')) - end - end - - def list(rsrcType, rsrcRef=nil) - tk_split_simplelist(tk_call('resource', 'list', rsrcType, rsrcRef)) - end - - def open(fname, access=nil) - tk_call('resource', 'open', fname, access) - end - - def read(rsrcType, rsrcID, rsrcRef=nil) - tk_call('resource', 'read', rsrcType, rsrcID, rsrcRef) - end - - def types(rsrcRef=nil) - tk_split_simplelist(tk_call('resource', 'types', rsrcRef)) - end - - def write(rsrcType, data, opts=nil) - tk_call('resource', 'write', *(hash_kv(opts) << rsrcType << data)) - end - - module_function :close, :delete, :files, :list, :open, :read, :types, :write -end diff --git a/ext/tk/lib/tk/menu.rb b/ext/tk/lib/tk/menu.rb deleted file mode 100644 index 5014dea603..0000000000 --- a/ext/tk/lib/tk/menu.rb +++ /dev/null @@ -1,488 +0,0 @@ -# -# tk/menu.rb : treat menu and menubutton -# -require 'tk' -require 'tk/itemconfig' - -module TkMenuEntryConfig - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'entrycget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'entryconfigure', id] - end - private :__item_config_cmd - - def __item_listval_optkeys(id) - [] - end - private :__item_listval_optkeys - - alias entrycget itemcget - alias entryconfigure itemconfigure - alias entryconfiginfo itemconfiginfo - alias current_entryconfiginfo current_itemconfiginfo - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo -end - -class TkMenu<TkWindow - include TkMenuEntryConfig - - TkCommandNames = ['menu'.freeze].freeze - WidgetClassName = 'Menu'.freeze - WidgetClassNames[WidgetClassName] = self - - #def create_self(keys) - # if keys and keys != None - # tk_call_without_enc('menu', @path, *hash_kv(keys, true)) - # else - # tk_call_without_enc('menu', @path) - # end - #end - #private :create_self - - def tagid(id) - #id.to_s - _get_eval_string(id) - end - - def activate(index) - tk_send_without_enc('activate', _get_eval_enc_str(index)) - self - end - def add(type, keys=nil) - tk_send_without_enc('add', type, *hash_kv(keys, true)) - self - end - def add_cascade(keys=nil) - add('cascade', keys) - end - def add_checkbutton(keys=nil) - add('checkbutton', keys) - end - def add_command(keys=nil) - add('command', keys) - end - def add_radiobutton(keys=nil) - add('radiobutton', keys) - end - def add_separator(keys=nil) - add('separator', keys) - end - def index(index) - ret = tk_send_without_enc('index', _get_eval_enc_str(index)) - (ret == 'none')? nil: number(ret) - end - def invoke(index) - _fromUTF8(tk_send_without_enc('invoke', _get_eval_enc_str(index))) - end - def insert(index, type, keys=nil) - tk_send_without_enc('insert', _get_eval_enc_str(index), - type, *hash_kv(keys, true)) - self - end - def delete(first, last=nil) - if last - tk_send_without_enc('delete', _get_eval_enc_str(first), - _get_eval_enc_str(last)) - else - tk_send_without_enc('delete', _get_eval_enc_str(first)) - end - self - end - def popup(x, y, index=nil) - if index - tk_call_without_enc('tk_popup', path, x, y, - _get_eval_enc_str(index)) - else - tk_call_without_enc('tk_popup', path, x, y) - end - self - end - def post(x, y) - _fromUTF8(tk_send_without_enc('post', x, y)) - end - def postcascade(index) - tk_send_without_enc('postcascade', _get_eval_enc_str(index)) - self - end - def postcommand(cmd=Proc.new) - configure_cmd 'postcommand', cmd - self - end - def set_focus - tk_call_without_enc('tk_menuSetFocus', path) - self - end - def tearoffcommand(cmd=Proc.new) - configure_cmd 'tearoffcommand', cmd - self - end - def menutype(index) - tk_send_without_enc('type', _get_eval_enc_str(index)) - end - def unpost - tk_send_without_enc('unpost') - self - end - def yposition(index) - number(tk_send_without_enc('yposition', _get_eval_enc_str(index))) - end - -=begin - def entrycget(index, key) - case key.to_s - when 'text', 'label', 'show' - _fromUTF8(tk_send_without_enc('entrycget', - _get_eval_enc_str(index), "-#{key}")) - when 'font', 'kanjifont' - #fnt = tk_tcl2ruby(tk_send('entrycget', index, "-#{key}")) - fnt = tk_tcl2ruby(_fromUTF8(tk_send_without_enc('entrycget', _get_eval_enc_str(index), '-font'))) - unless fnt.kind_of?(TkFont) - fnt = tagfontobj(index, fnt) - end - if key.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/ - # obsolete; just for compatibility - fnt.kanji_font - else - fnt - end - else - tk_tcl2ruby(_fromUTF8(tk_send_without_enc('entrycget', _get_eval_enc_str(index), "-#{key}"))) - end - end - def entryconfigure(index, key, val=None) - if key.kind_of? Hash - if (key['font'] || key[:font] || - key['kanjifont'] || key[:kanjifont] || - key['latinfont'] || key[:latinfont] || - key['asciifont'] || key[:asciifont]) - tagfont_configure(index, _symbolkey2str(key)) - else - tk_send_without_enc('entryconfigure', _get_eval_enc_str(index), - *hash_kv(key, true)) - end - - else - if (key == 'font' || key == :font || - key == 'kanjifont' || key == :kanjifont || - key == 'latinfont' || key == :latinfont || - key == 'asciifont' || key == :asciifont ) - if val == None - tagfontobj(index) - else - tagfont_configure(index, {key=>val}) - end - else - tk_call('entryconfigure', index, "-#{key}", val) - end - end - self - end - - def entryconfiginfo(index, key=nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if key - case key.to_s - when 'text', 'label', 'show' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('entryconfigure',_get_eval_enc_str(index),"-#{key}"))) - when 'font', 'kanjifont' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('entryconfigure',_get_eval_enc_str(index),"-#{key}"))) - conf[4] = tagfont_configinfo(index, conf[4]) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc('entryconfigure',_get_eval_enc_str(index),"-#{key}"))) - end - conf[0] = conf[0][1..-1] - conf - else - ret = tk_split_simplelist(_fromUTF8(tk_send_without_enc('entryconfigure', _get_eval_enc_str(index)))).collect{|conflist| - conf = tk_split_simplelist(conflist) - conf[0] = conf[0][1..-1] - case conf[0] - when 'text', 'label', 'show' - else - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - if conf[4] - if conf[4].index('{') - conf[4] = tk_split_list(conf[4]) - else - conf[4] = tk_tcl2ruby(conf[4]) - end - end - end - conf[1] = conf[1][1..-1] if conf.size == 2 # alias info - conf - } - if fontconf - ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'} - fontconf[4] = tagfont_configinfo(index, fontconf[4]) - ret.push(fontconf) - else - ret - end - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - if key - case key.to_s - when 'text', 'label', 'show' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('entryconfigure',_get_eval_enc_str(index),"-#{key}"))) - when 'font', 'kanjifont' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('entryconfigure',_get_eval_enc_str(index),"-#{key}"))) - conf[4] = tagfont_configinfo(index, conf[4]) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc('entryconfigure',_get_eval_enc_str(index),"-#{key}"))) - end - key = conf.shift[1..-1] - { key => conf } - else - ret = {} - tk_split_simplelist(_fromUTF8(tk_send_without_enc('entryconfigure', _get_eval_enc_str(index)))).each{|conflist| - conf = tk_split_simplelist(conflist) - key = conf.shift[1..-1] - case key - when 'text', 'label', 'show' - else - if conf[2] - if conf[2].index('{') - conf[2] = tk_split_list(conf[2]) - else - conf[2] = tk_tcl2ruby(conf[2]) - end - end - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - end - if conf.size == 1 - ret[key] = conf[0][1..-1] # alias info - else - ret[key] = conf - end - } - fontconf = ret['font'] - if fontconf - ret.delete('font') - ret.delete('kanjifont') - fontconf[3] = tagfont_configinfo(index, fontconf[3]) - ret['font'] = fontconf - end - ret - end - end - end - - def current_entryconfiginfo(index, key=nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if key - conf = entryconfiginfo(index, key) - {conf[0] => conf[4]} - else - ret = {} - entryconfiginfo(index).each{|conf| - ret[conf[0]] = conf[4] if conf.size > 2 - } - ret - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - ret = {} - entryconfiginfo(index, key).each{|k, conf| - ret[k] = conf[-1] if conf.kind_of?(Array) - } - ret - end - end -=end -end - - -class TkMenuClone<TkMenu - def initialize(parent, type=None) - widgetname = nil - if parent.kind_of? Hash - keys = _symbolkey2str(parent) - parent = keys.delete('parent') - widgetname = keys.delete('widgetname') - type = keys.delete('type'); type = None unless type - end - #unless parent.kind_of?(TkMenu) - # fail ArgumentError, "parent must be TkMenu" - #end - @parent = parent - install_win(@parent.path, widgetname) - tk_call_without_enc(@parent.path, 'clone', @path, type) - end -end - - -module TkSystemMenu - def initialize(parent, keys=nil) - if parent.kind_of? Hash - keys = _symbolkey2str(parent) - parent = keys.delete('parent') - end - #unless parent.kind_of? TkMenu - # fail ArgumentError, "parent must be a TkMenu object" - #end - # @path = Kernel.format("%s.%s", parent.path, self.class::SYSMENU_NAME) - @path = parent.path + '.' + self.class::SYSMENU_NAME - #TkComm::Tk_WINDOWS[@path] = self - TkCore::INTERP.tk_windows[@path] = self - if self.method(:create_self).arity == 0 - p 'create_self has no arg' if $DEBUG - create_self - configure(keys) if keys - else - p 'create_self has an arg' if $DEBUG - create_self(keys) - end - end -end - - -class TkSysMenu_Help<TkMenu - # for all platform - include TkSystemMenu - SYSMENU_NAME = 'help' -end - - -class TkSysMenu_System<TkMenu - # for Windows - include TkSystemMenu - SYSMENU_NAME = 'system' -end - - -class TkSysMenu_Apple<TkMenu - # for Machintosh - include TkSystemMenu - SYSMENU_NAME = 'apple' -end - - -class TkMenubutton<TkLabel - TkCommandNames = ['menubutton'.freeze].freeze - WidgetClassName = 'Menubutton'.freeze - WidgetClassNames[WidgetClassName] = self - def create_self(keys) - if keys and keys != None - tk_call_without_enc('menubutton', @path, *hash_kv(keys, true)) - else - tk_call_without_enc('menubutton', @path) - end - end - private :create_self -end - - -class TkOptionMenubutton<TkMenubutton - TkCommandNames = ['tk_optionMenu'.freeze].freeze - - class OptionMenu<TkMenu - def initialize(path) #==> return value of tk_optionMenu - @path = path - #TkComm::Tk_WINDOWS[@path] = self - TkCore::INTERP.tk_windows[@path] = self - end - end - - def initialize(parent=nil, var=nil, firstval=nil, *vals) - if parent.kind_of? Hash - keys = _symbolkey2str(parent) - parent = keys['parent'] - var = keys['variable'] if keys['variable'] - firstval, *vals = keys['values'] - end - if parent.kind_of? TkVariable - vals.unshift(firstval) if firstval - firstval = var - var = parent - parent = nil - end - var = TkVariable.new unless var - fail 'variable option must be TkVariable' unless var.kind_of? TkVariable - @variable = var - firstval = @variable.value unless firstval - @variable.value = firstval - install_win(if parent then parent.path end) - @menu = OptionMenu.new(tk_call('tk_optionMenu', @path, @variable.id, - firstval, *vals)) - end - - def value - @variable.value - end - - def activate(index) - @menu.activate(index) - self - end - def add(value) - @menu.add('radiobutton', 'variable'=>@variable, - 'label'=>value, 'value'=>value) - self - end - def index(index) - @menu.index(index) - end - def invoke(index) - @menu.invoke(index) - end - def insert(index, value) - @menu.insert(index, 'radiobutton', 'variable'=>@variable, - 'label'=>value, 'value'=>value) - self - end - def delete(index, last=None) - @menu.delete(index, last) - self - end - def yposition(index) - @menu.yposition(index) - end - def menu - @menu - end - def menucget(key) - @menu.cget(key) - end - def menuconfigure(key, val=None) - @menu.configure(key, val) - self - end - def menuconfiginfo(key=nil) - @menu.configinfo(key) - end - def current_menuconfiginfo(key=nil) - @menu.current_configinfo(key) - end - def entrycget(index, key) - @menu.entrycget(index, key) - end - def entryconfigure(index, key, val=None) - @menu.entryconfigure(index, key, val) - self - end - def entryconfiginfo(index, key=nil) - @menu.entryconfiginfo(index, key) - end - def current_entryconfiginfo(index, key=nil) - @menu.current_entryconfiginfo(index, key) - end -end diff --git a/ext/tk/lib/tk/menubar.rb b/ext/tk/lib/tk/menubar.rb deleted file mode 100644 index 392b6fbd4e..0000000000 --- a/ext/tk/lib/tk/menubar.rb +++ /dev/null @@ -1,131 +0,0 @@ -# -# tk/menubar.rb -# -# Original version: -# Copyright (C) 1998 maeda shugo. All rights reserved. -# This file can be distributed under the terms of the Ruby. - -# Usage: -# -# menu_spec = [ -# [['File', 0], -# ['Open', proc{puts('Open clicked')}, 0], -# '---', -# ['Quit', proc{exit}, 0]], -# [['Edit', 0], -# ['Cut', proc{puts('Cut clicked')}, 2], -# ['Copy', proc{puts('Copy clicked')}, 0], -# ['Paste', proc{puts('Paste clicked')}, 0]] -# ] -# menubar = TkMenubar.new(nil, menu_spec, -# 'tearoff'=>false, -# 'foreground'=>'grey40', -# 'activeforeground'=>'red', -# 'font'=>'-adobe-helvetica-bold-r-*--12-*-iso8859-1') -# menubar.pack('side'=>'top', 'fill'=>'x') -# -# -# OR -# -# -# menubar = TkMenubar.new -# menubar.add_menu([['File', 0], -# ['Open', proc{puts('Open clicked')}, 0], -# '---', -# ['Quit', proc{exit}, 0]]) -# menubar.add_menu([['Edit', 0], -# ['Cut', proc{puts('Cut clicked')}, 2], -# ['Copy', proc{puts('Copy clicked')}, 0], -# ['Paste', proc{puts('Paste clicked')}, 0]]) -# menubar.configure('tearoff', false) -# menubar.configure('foreground', 'grey40') -# menubar.configure('activeforeground', 'red') -# menubar.configure('font', '-adobe-helvetica-bold-r-*--12-*-iso8859-1') -# menubar.pack('side'=>'top', 'fill'=>'x') -# -# -# OR -# -# radio_var = TkVariable.new('y') -# menu_spec = [ -# [['File', 0], -# {:label=>'Open', :command=>proc{puts('Open clicked')}, :underline=>0}, -# '---', -# ['Check_A', TkVariable.new(true), 6], -# {:type=>'checkbutton', :label=>'Check_B', -# :variable=>TkVariable.new, :underline=>6}, -# '---', -# ['Radio_X', [radio_var, 'x'], 6], -# ['Radio_Y', [radio_var, 'y'], 6], -# ['Radio_Z', [radio_var, 'z'], 6], -# '---', -# ['cascade', [ -# ['sss', proc{p 'sss'}, 0], -# ['ttt', proc{p 'ttt'}, 0], -# ['uuu', proc{p 'uuu'}, 0], -# ['vvv', proc{p 'vvv'}, 0], -# ], 0], -# '---', -# ['Quit', proc{exit}, 0]], -# [['Edit', 0], -# ['Cut', proc{puts('Cut clicked')}, 2], -# ['Copy', proc{puts('Copy clicked')}, 0], -# ['Paste', proc{puts('Paste clicked')}, 0]] -# ] -# menubar = TkMenubar.new(nil, menu_spec, -# 'tearoff'=>false, -# 'foreground'=>'grey40', -# 'activeforeground'=>'red', -# 'font'=>'Helvetia 12 bold') -# menubar.pack('side'=>'top', 'fill'=>'x') - -# See tk/menuspce.rb about the format of the menu_spec - -# To use add_menu, configuration must be done by calling configure after -# adding all menus by add_menu, not by the constructor arguments. - -require 'tk' -require 'tk/frame' -require 'tk/composite' -require 'tk/menuspec' - -class TkMenubar<TkFrame - include TkComposite - include TkMenuSpec - - def initialize(parent = nil, spec = nil, options = nil) - if parent.kind_of? Hash - options = _symbolkey2str(parent) - spec = options.delete('spec') - super(options) - else - super(parent, options) - end - - @menus = [] - - spec.each{|info| add_menu(info)} if spec - - options.each{|key, value| configure(key, value)} if options - end - - def add_menu(menu_info) - mbtn, menu = _create_menubutton(@frame, menu_info) - - submenus = _get_cascade_menus(menu).flatten - - @menus.push([mbtn, menu]) - delegate('tearoff', menu, *submenus) - delegate('foreground', mbtn, menu, *submenus) - delegate('background', mbtn, menu, *submenus) - delegate('disabledforeground', mbtn, menu, *submenus) - delegate('activeforeground', mbtn, menu, *submenus) - delegate('activebackground', mbtn, menu, *submenus) - delegate('font', mbtn, menu, *submenus) - delegate('kanjifont', mbtn, menu, *submenus) - end - - def [](index) - return @menus[index] - end -end diff --git a/ext/tk/lib/tk/menuspec.rb b/ext/tk/lib/tk/menuspec.rb deleted file mode 100644 index c8819f8e41..0000000000 --- a/ext/tk/lib/tk/menuspec.rb +++ /dev/null @@ -1,265 +0,0 @@ -# -# tk/menuspec.rb -# Hidethoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -# based on tkmenubar.rb : -# Copyright (C) 1998 maeda shugo. All rights reserved. -# This file can be distributed under the terms of the Ruby. -# -# The format of the menu_spec is: -# [ menu_info, menu_info, ... ] -# -# And the format of the menu_info is: -# [ -# [text, underline, configs], # menu button/entry (*1) -# [label, command, underline, accelerator, configs], # command entry -# [label, TkVar_obj, underline, accelerator, configs], # checkbutton entry -# [label, [TkVar_obj, value], -# underline, accelerator, configs], # radiobutton entry -# [label, [[...menu_info...], [...menu_info...], ...], -# underline, accelerator, configs], # cascade entry -# '---', # separator -# ... -# ] -# -# underline, accelerator, and configs are optional pearameters. -# Hashes are OK instead of Arrays. Then the entry type ('command', -# 'checkbutton', 'radiobutton' or 'cascade') is given by 'type' key -# (e.g. :type=>'cascade'). When type is 'cascade', an array of menu_info -# is acceptable for 'menu' key (then, create sub-menu). -# -# NOTE: (*1) -# If you want to make special menus (*.help for UNIX, *.system for Win, -# and *.apple for Mac), append 'menu_name'=>name (name is 'help' for UNIX, -# 'system' for Win, and 'apple' for Mac) option to the configs hash of -# menu button/entry information. - -module TkMenuSpec - def _create_menu(parent, menu_info, menu_name = nil, - tearoff = false, default_opts = nil) - if tearoff.kind_of?(Hash) - default_opts = tearoff - tearoff = false - end - - if menu_name.kind_of?(Hash) - default_opts = menu_name - menu_name = nil - tearoff = false - end - - if default_opts.kind_of?(Hash) - orig_opts = _symbolkey2str(default_opts) - else - orig_opts = {} - end - - tearoff = orig_opts.delete('tearoff') if orig_opts.key?('tearoff') - - if menu_name - menu = TkMenu.new(parent, :widgetname=>menu_name, :tearoff=>tearoff) - else - menu = TkMenu.new(parent, :tearoff=>tearoff) - end - - for item_info in menu_info - if item_info.kind_of?(Hash) - options = orig_opts.dup - options.update(_symbolkey2str(item_info)) - item_type = (options.delete('type') || 'command').to_s - menu_name = options.delete('menu_name') - menu_opts = orig_opts.dup - menu_opts.update(_symbolkey2str(options.delete('menu_config') || {})) - if item_type == 'cascade' && options['menu'].kind_of?(Array) - # create cascade menu - submenu = _create_menu(menu, options['menu'], menu_name, - tearoff, menu_opts) - options['menu'] = submenu - end - menu.add(item_type, options) - - elsif item_info.kind_of?(Array) - options = orig_opts.dup - - options['label'] = item_info[0] if item_info[0] - - case item_info[1] - when TkVariable - # checkbutton - item_type = 'checkbutton' - options['variable'] = item_info[1] - options['onvalue'] = true - options['offvalue'] = false - - when Array - # radiobutton or cascade - if item_info[1][0].kind_of?(TkVariable) - # radiobutton - item_type = 'radiobutton' - options['variable'] = item_info[1][0] - options['value'] = item_info[1][1] if item_info[1][1] - - else - # cascade - item_type = 'cascade' - menu_opts = orig_opts.dup - if item_info[4] && item_info[4].kind_of?(Hash) - opts = _symbolkey2str(item_info[4]) - menu_name = opts.delete('menu_name') - menu_config = opts.delete('menu_config') || {} - menu_opts.update(_symbolkey2str(menu_config)) - end - submenu = _create_menu(menu, item_info[1], menu_name, - tearoff, menu_opts) - options['menu'] = submenu - end - - else - # command - item_type = 'command' - options['command'] = item_info[1] if item_info[1] - end - - options['underline'] = item_info[2] if item_info[2] - options['accelerator'] = item_info[3] if item_info[3] - if item_info[4] && item_info[4].kind_of?(Hash) - opts = _symbolkey2str(item_info[4]) - if item_type == 'cascade' - opts.delete('menu_name') - opts.delete('menu_config') - end - options.update(opts) - end - menu.add(item_type, options) - - elsif /^-+$/ =~ item_info - menu.add('separator') - - else - menu.add('command', 'label' => item_info) - end - end - - menu - end - private :_create_menu - - def _use_menubar?(parent) - use_menubar = false - if parent.kind_of?(TkRoot) || parent.kind_of?(TkToplevel) - return true - else - begin - parent.cget('menu') - return true - rescue - end - end - false - end - private :_use_menubar? - - def _create_menu_for_menubar(parent) - unless (mbar = parent.menu).kind_of?(TkMenu) - mbar = TkMenu.new(parent, :tearoff=>false) - parent.menu(mbar) - end - mbar - end - private :_create_menu_for_menubar - - def _create_menubutton(parent, menu_info, tearoff=false, default_opts = nil) - btn_info = menu_info[0] - - if tearoff.kind_of?(Hash) - default_opts = tearoff - tearoff = false - end - - if default_opts.kind_of?(Hash) - keys = _symbolkey2str(default_opts) - else - keys = {} - end - - tearoff = keys.delete('tearoff') if keys.key?('tearoff') - - if _use_menubar?(parent) - # menubar by menu entries - - mbar = _create_menu_for_menubar(parent) - - menu_name = nil - - if btn_info.kind_of?(Hash) - keys.update(_symbolkey2str(btn_info)) - menu_name = keys.delete('menu_name') - keys['label'] = keys.delete('text') if keys.key?('text') - elsif btn_info.kind_of?(Array) - keys['label'] = btn_info[0] if btn_info[0] - keys['underline'] = btn_info[1] if btn_info[1] - if btn_info[2]&&btn_info[2].kind_of?(Hash) - keys.update(_symbolkey2str(btn_info[2])) - menu_name = keys.delete('menu_name') - end - else - keys = {:label=>btn_info} - end - - menu = _create_menu(mbar, menu_info[1..-1], menu_name, - tearoff, default_opts) - menu.tearoff(tearoff) - - keys['menu'] = menu - mbar.add('cascade', keys) - - [mbar, menu] - - else - # menubar by menubuttons - mbtn = TkMenubutton.new(parent) - - menu_name = nil - - if btn_info.kind_of?(Hash) - keys.update(_symbolkey2str(btn_info)) - menu_name = keys.delete('menu_name') - keys['text'] = keys.delete('label') if keys.key?('label') - mbtn.configure(keys) - elsif btn_info.kind_of?(Array) - mbtn.configure('text', btn_info[0]) if btn_info[0] - mbtn.configure('underline', btn_info[1]) if btn_info[1] - # mbtn.configure('accelerator', btn_info[2]) if btn_info[2] - if btn_info[2]&&btn_info[2].kind_of?(Hash) - keys.update(_symbolkey2str(btn_info[2])) - menu_name = keys.delete('menu_name') - mbtn.configure(keys) - end - else - mbtn.configure('text', btn_info) - end - - mbtn.pack('side' => 'left') - - menu = _create_menu(mbtn, menu_info[1..-1], menu_name, - tearoff, default_opts) - - mbtn.menu(menu) - - [mbtn, menu] - end - end - private :_create_menubutton - - def _get_cascade_menus(menu) - menus = [] - (0..(menu.index('last'))).each{|idx| - if menu.menutype(idx) == 'cascade' - submenu = menu.entrycget(idx, 'menu') - menus << [submenu, _get_cascade_menus(submenu)] - end - } - menus - end - private :_get_cascade_menus -end diff --git a/ext/tk/lib/tk/message.rb b/ext/tk/lib/tk/message.rb deleted file mode 100644 index 79121bebb3..0000000000 --- a/ext/tk/lib/tk/message.rb +++ /dev/null @@ -1,19 +0,0 @@ -# -# tk/message.rb : treat message widget -# -require 'tk' -require 'tk/label' - -class TkMessage<TkLabel - TkCommandNames = ['message'.freeze].freeze - WidgetClassName = 'Message'.freeze - WidgetClassNames[WidgetClassName] = self - #def create_self(keys) - # if keys and keys != None - # tk_call_without_enc('message', @path, *hash_kv(keys, true)) - # else - # tk_call_without_enc('message', @path) - # end - #end - private :create_self -end diff --git a/ext/tk/lib/tk/mngfocus.rb b/ext/tk/lib/tk/mngfocus.rb deleted file mode 100644 index a0f18233be..0000000000 --- a/ext/tk/lib/tk/mngfocus.rb +++ /dev/null @@ -1,33 +0,0 @@ -# -# tk/mngfocus.rb : methods for Tcl/Tk standard library 'focus.tcl' -# by Hidetoshi Nagai <nagai@ai.kyutech.ac.jp> -# -require 'tk' - -module TkManageFocus - extend Tk - - TkCommandNames = [ - 'tk_focusFollowMouse'.freeze, - 'tk_focusNext'.freeze, - 'tk_focusPrev'.freeze - ].freeze - - def TkManageFocus.followsMouse - tk_call_without_enc('tk_focusFollowsMouse') - end - - def TkManageFocus.next(window) - tk_tcl2ruby(tk_call('tk_focusNext', window)) - end - def focusNext - TkManageFocus.next(self) - end - - def TkManageFocus.prev(window) - tk_tcl2ruby(tk_call('tk_focusPrev', window)) - end - def focusPrev - TkManageFocus.prev(self) - end -end diff --git a/ext/tk/lib/tk/msgcat.rb b/ext/tk/lib/tk/msgcat.rb deleted file mode 100644 index 4e095c6fc0..0000000000 --- a/ext/tk/lib/tk/msgcat.rb +++ /dev/null @@ -1,286 +0,0 @@ -# -# tk/msgcat.rb : methods for Tcl message catalog -# by Hidetoshi Nagai <nagai@ai.kyutech.ac.jp> -# -require 'tk' - -#class TkMsgCatalog -class TkMsgCatalog < TkObject - include TkCore - extend Tk - #extend TkMsgCatalog - - TkCommandNames = [ - '::msgcat::mc'.freeze, - '::msgcat::mcmax'.freeze, - '::msgcat::mclocale'.freeze, - '::msgcat::mcpreferences'.freeze, - '::msgcat::mcload'.freeze, - '::msgcat::mcset'.freeze, - '::msgcat::mcmset'.freeze, - '::msgcat::mcunknown'.freeze - ].freeze - - tk_call_without_enc('package', 'require', 'Tcl', '8.2') - - if self.const_defined? :FORCE_VERSION - tk_call_without_enc('package', 'require', 'msgcat', FORCE_VERSION) - else - tk_call_without_enc('package', 'require', 'msgcat') - end - - MSGCAT_EXT = '.msg' - - UNKNOWN_CBTBL = Hash.new{|hash,key| hash[key] = {}}.taint - - TkCore::INTERP.add_tk_procs('::msgcat::mcunknown', 'args', <<-'EOL') - if {[set st [catch {eval {ruby_cmd TkMsgCatalog callback} [namespace current] $args} ret]] != 0} { - #return -code $st $ret - set idx [string first "\n\n" $ret] - if {$idx > 0} { - return -code $st \ - -errorinfo [string range $ret [expr $idx + 2] \ - [string length $ret]] \ - [string range $ret 0 [expr $idx - 1]] - } else { - return -code $st $ret - } - } else { - return $ret - } - EOL - - def self.callback(namespace, locale, src_str, *args) - src_str = sprintf(src_str, *args) unless args.empty? - cmd_tbl = TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip] - cmd = cmd_tbl[namespace] - cmd = cmd_tbl['::'] unless cmd # use global scope as interp default - return src_str unless cmd # no cmd -> return src-str (default action) - begin - cmd.call(locale, src_str) - rescue SystemExit - exit(0) - rescue Interrupt - exit!(1) - rescue Exception => e - begin - msg = _toUTF8(e.class.inspect) + ': ' + - _toUTF8(e.message) + "\n" + - "\n---< backtrace of Ruby side >-----\n" + - _toUTF8(e.backtrace.join("\n")) + - "\n---< backtrace of Tk side >-------" - msg.instance_variable_set(:@encoding, 'utf-8') - rescue Exception - msg = e.class.inspect + ': ' + e.message + "\n" + - "\n---< backtrace of Ruby side >-----\n" + - e.backtrace.join("\n") + - "\n---< backtrace of Tk side >-------" - end - fail(e, msg) - end - end - - def initialize(namespace = nil) - if namespace.kind_of?(TkNamespace) - @namespace = namespace - elsif namespace == nil - @namespace = TkNamespace.new('::') # global namespace - else - @namespace = TkNamespace.new(namespace) - end - @path = @namespace.path - - @msgcat_ext = '.msg' - end - attr_accessor :msgcat_ext - - def method_missing(id, *args) - # locale(src, trans) ==> set_translation(locale, src, trans) - loc = id.id2name - case args.length - when 0 # set locale - self.locale=(loc) - - when 1 # src only, or trans_list - if args[0].kind_of?(Array) - # trans_list - #list = args[0].collect{|src, trans| - # [ Tk::UTF8_String.new(src), Tk::UTF8_String.new(trans) ] - #} - self.set_translation_list(loc, args[0]) - else - # src - #self.set_translation(loc, Tk::UTF8_String.new(args[0])) - self.set_translation(loc, args[0]) - end - - when 2 # src and trans, or, trans_list and enc - if args[0].kind_of?(Array) - else - #self.set_translation(loc, args[0], Tk::UTF8_String.new(args[1])) - self.set_translation(loc, *args) - end - - when 3 # src and trans and enc - self.set_translation(loc, *args) - - else - fail NameError, "undefined method `#{name}' for #{self.to_s}", error_at - - end - end - - # *args ::= form, arg, arg, ... - def self.translate(*args) - dst = args.collect{|src| - tk_call_without_enc('::msgcat::mc', _get_eval_string(src, true)) - } - Tk.UTF8_String(sprintf(*dst)) - end - class << self - alias mc translate - alias [] translate - end - def translate(*args) - dst = args.collect{|src| - @namespace.eval{tk_call_without_enc('::msgcat::mc', - _get_eval_string(src, true))} - } - Tk.UTF8_String(sprintf(*dst)) - end - alias mc translate - alias [] translate - - def self.maxlen(*src_strings) - tk_call('::msgcat::mcmax', *src_strings).to_i - end - def maxlen(*src_strings) - @namespace.eval{tk_call('::msgcat::mcmax', *src_strings).to_i} - end - - def self.locale - tk_call('::msgcat::mclocale') - end - def locale - @namespace.eval{tk_call('::msgcat::mclocale')} - end - - def self.locale=(locale) - tk_call('::msgcat::mclocale', locale) - end - def locale=(locale) - @namespace.eval{tk_call('::msgcat::mclocale', locale)} - end - - def self.preferences - tk_split_simplelist(tk_call('::msgcat::mcpreferences')) - end - def preferences - tk_split_simplelist(@namespace.eval{tk_call('::msgcat::mcpreferences')}) - end - - def self.load_tk(dir) - number(tk_call('::msgcat::mcload', dir)) - end - - def self.load_rb(dir) - count = 0 - preferences().each{|loc| - file = File.join(dir, loc + self::MSGCAT_EXT) - if File.readable?(file) - count += 1 - eval(open(file){|f| f.read}) - end - } - count - end - - def load_tk(dir) - number(@namespace.eval{tk_call('::msgcat::mcload', dir)}) - end - - def load_rb(dir) - count = 0 - preferences().each{|loc| - file = File.join(dir, loc + @msgcat_ext) - if File.readable?(file) - count += 1 - @namespace.eval(open(file){|f| f.read}) - end - } - count - end - - def self.load(dir) - self.load_rb(dir) - end - alias load load_rb - - def self.set_translation(locale, src_str, trans_str=None, enc='utf-8') - if trans_str && trans_str != None - trans_str = Tk.UTF8_String(_toUTF8(trans_str, enc)) - Tk.UTF8_String(tk_call_without_enc('::msgcat::mcset', - locale, - _get_eval_string(src_str, true), - trans_str)) - else - Tk.UTF8_String(tk_call_without_enc('::msgcat::mcset', - locale, - _get_eval_string(src_str, true))) - end - end - def set_translation(locale, src_str, trans_str=None, enc='utf-8') - if trans_str && trans_str != None - trans_str = Tk.UTF8_String(_toUTF8(trans_str, enc)) - Tk.UTF8_String(@namespace.eval{ - tk_call_without_enc('::msgcat::mcset', - locale, - _get_eval_string(src_str, true), - trans_str) - }) - else - Tk.UTF8_String(@namespace.eval{ - tk_call_without_enc('::msgcat::mcset', - locale, - _get_eval_string(src_str, true))}) - end - end - - def self.set_translation_list(locale, trans_list, enc='utf-8') - # trans_list ::= [ [src, trans], [src, trans], ... ] - list = [] - trans_list.each{|src, trans| - if trans && trans != None - list << _get_eval_string(src, true) - list << Tk.UTF8_Stirng(_toUTF8(trans, enc)) - else - list << _get_eval_string(src, true) << '' - end - } - number(tk_call_without_enc('::msgcat::mcmset', locale, list)) - end - def set_translation_list(locale, trans_list, enc='utf-8') - # trans_list ::= [ [src, trans], [src, trans], ... ] - list = [] - trans_list.each{|src, trans| - if trans && trans != None - list << _get_eval_string(src, true) - list << Tk.UTF8_String(_toUTF8(trans, enc)) - else - list << _get_eval_string(src, true) << '' - end - } - number(@namespace.eval{ - tk_call_without_enc('::msgcat::mcmset', locale, list) - }) - end - - def self.def_unknown_proc(cmd=Proc.new) - TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip]['::'] = cmd - end - def def_unknown_proc(cmd=Proc.new) - TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip][@namespace.path] = cmd - end -end - -TkMsgCat = TkMsgCatalog diff --git a/ext/tk/lib/tk/namespace.rb b/ext/tk/lib/tk/namespace.rb deleted file mode 100644 index a236fb6a99..0000000000 --- a/ext/tk/lib/tk/namespace.rb +++ /dev/null @@ -1,294 +0,0 @@ -# -# tk/namespace.rb : methods to manipulate Tcl/Tk namespace -# by Hidetoshi Nagai <nagai@ai.kyutech.ac.jp> -# -require 'tk' - -class TkNamespace < TkObject - extend Tk - - TkCommandNames = [ - 'namespace'.freeze, - ].freeze - - Tk_Namespace_ID_TBL = TkCore::INTERP.create_table - Tk_Namespace_ID = ["ns".freeze, "00000".taint].freeze - - class ScopeArgs < Array - include Tk - - # alias __tk_call tk_call - # alias __tk_call_without_enc tk_call_without_enc - # alias __tk_call_with_enc tk_call_with_enc - def tk_call(*args) - #super('namespace', 'eval', @namespace, *args) - args = args.collect{|arg| (s = _get_eval_string(arg))? s: ''} - super('namespace', 'eval', @namespace, - TkCore::INTERP._merge_tklist(*args)) - end - def tk_call_without_enc(*args) - #super('namespace', 'eval', @namespace, *args) - args = args.collect{|arg| (s = _get_eval_string(arg))? s: ''} - super('namespace', 'eval', @namespace, - TkCore::INTERP._merge_tklist(*args)) - end - def tk_call_with_enc(*args) - #super('namespace', 'eval', @namespace, *args) - args = args.collect{|arg| (s = _get_eval_string(arg))? s: ''} - super('namespace', 'eval', @namespace, - TkCore::INTERP._merge_tklist(*args)) - end - - def initialize(namespace, *args) - @namespace = namespace - super(args.size) - self.replace(args) - end - end - - class NsCode < TkObject - def initialize(scope) - @scope = scope + ' ' - end - def path - @scope - end - def to_eval - @scope - end - def call(*args) - TkCore::INTERP._eval_without_enc(@scope + array2tk_list(args)) - end - end - - alias __tk_call tk_call - alias __tk_call_without_enc tk_call_without_enc - alias __tk_call_with_enc tk_call_with_enc - def tk_call(*args) - #super('namespace', 'eval', @fullname, *args) - args = args.collect{|arg| (s = _get_eval_string(arg))? s: ''} - super('namespace', 'eval', @fullname, - TkCore::INTERP._merge_tklist(*args)) - end - def tk_call_without_enc(*args) - #super('namespace', 'eval', @fullname, *args) - args = args.collect{|arg| (s = _get_eval_string(arg))? s: ''} - super('namespace', 'eval', @fullname, - TkCore::INTERP._merge_tklist(*args)) - end - def tk_call_with_enc(*args) - #super('namespace', 'eval', @fullname, *args) - args = args.collect{|arg| (s = _get_eval_string(arg))? s: ''} - super('namespace', 'eval', @fullname, - TkCore::INTERP._merge_tklist(*args)) - end - alias ns_tk_call tk_call - alias ns_tk_call_without_enc tk_call_without_enc - alias ns_tk_call_with_enc tk_call_with_enc - - def initialize(name = nil, parent = nil) - unless name - # name = Tk_Namespace_ID.join('') - name = Tk_Namespace_ID.join(TkCore::INTERP._ip_id_) - Tk_Namespace_ID[1].succ! - end - name = __tk_call('namespace', 'current') if name == '' - if parent - if parent =~ /^::/ - if name =~ /^::/ - @fullname = parent + name - else - @fullname = parent +'::'+ name - end - else - ancestor = __tk_call('namespace', 'current') - ancestor = '' if ancestor == '::' - if name =~ /^::/ - @fullname = ancestor + '::' + parent + name - else - @fullname = ancestor + '::'+ parent +'::'+ name - end - end - else # parent == nil - ancestor = __tk_call('namespace', 'current') - ancestor = '' if ancestor == '::' - if name =~ /^::/ - @fullname = name - else - @fullname = ancestor + '::' + name - end - end - @path = @fullname - @parent = __tk_call('namespace', 'qualifiers', @fullname) - @name = __tk_call('namespace', 'tail', @fullname) - - # create namespace - __tk_call('namespace', 'eval', @fullname, '') - - Tk_Namespace_ID_TBL[@fullname] = self - end - - def self.children(*args) - # args ::= [<namespace>] [<pattern>] - # <pattern> must be glob-style pattern - tk_split_simplelist(tk_call('namespace', 'children', *args)).collect{|ns| - # ns is fullname - if Tk_Namespace_ID_TBL.key?(ns) - Tk_Namespace_ID_TBL[ns] - else - ns - end - } - end - def children(pattern=None) - TkNamespace.children(@fullname, pattern) - end - - def self.code(script = Proc.new) - TkNamespace.new('').code(script) - end - def code(script = Proc.new) - if script.kind_of?(String) - cmd = proc{|*args| ScopeArgs.new(@fullname,*args).instance_eval(script)} - elsif script.kind_of?(Proc) - cmd = proc{|*args| ScopeArgs.new(@fullname,*args).instance_eval(&script)} - else - fail ArgumentError, "String or Proc is expected" - end - TkNamespace::NsCode.new(tk_call_without_enc('namespace', 'code', - _get_eval_string(cmd, false))) - end - - def self.current - tk_call('namespace', 'current') - end - def current_namespace - # ns_tk_call('namespace', 'current') - @fullname - end - alias current current_namespace - - def self.delete(*ns_list) - tk_call('namespace', 'delete', *ns_list) - end - def delete - TkNamespece.delete(@fullname) - end - - def self.ensemble_create(*keys) - tk_call('namespace', 'ensemble', 'create', *hash_kv(keys)) - end - def self.ensemble_configure(cmd, slot, value=None) - if slot.kind_of?(Hash) - tk_call('namespace', 'ensemble', 'configure', cmd, *hash_kv(slot)) - else - tk_call('namespace', 'ensemble', 'configure', cmd, '-'+slot.to_s, value) - end - end - def self.ensemble_configinfo(cmd, slot = nil) - if slot - tk_call('namespace', 'ensemble', 'configure', cmd, '-' + slot.to_s) - else - inf = {} - Hash(*tk_split_simplelist(tk_call('namespace', 'ensemble', 'configure', cmd))).each{|k, v| inf[k[1..-1]] = v} - inf - end - end - def self.ensemble_exist?(cmd) - bool(tk_call('namespace', 'ensemble', 'exists', cmd)) - end - - def self.eval(namespace, cmd = Proc.new, *args) - #tk_call('namespace', 'eval', namespace, cmd, *args) - TkNamespace.new(namespece).eval(cmd, *args) - end - def eval(cmd = Proc.new, *args) - #TkNamespace.eval(@fullname, cmd, *args) - #ns_tk_call(cmd, *args) - code_obj = code(cmd) - ret = code_obj.call(*args) - uninstall_cmd(TkCore::INTERP._split_tklist(code_obj.path)[-1]) - ret - end - - def self.exist?(ns) - bool(tk_call('namespace', 'exists', ns)) - end - def exist? - TkNamespece.delete(@fullname) - end - - def self.export(*patterns) - tk_call('namespace', 'export', *patterns) - end - def self.export_with_clear(*patterns) - tk_call('namespace', 'export', '-clear', *patterns) - end - def export - TkNamespace.export(@fullname) - end - def export_with_clear - TkNamespace.export_with_clear(@fullname) - end - - def self.forget(*patterns) - tk_call('namespace', 'forget', *patterns) - end - def forget - TkNamespace.forget(@fullname) - end - - def self.import(*patterns) - tk_call('namespace', 'import', *patterns) - end - def self.force_import(*patterns) - tk_call('namespace', 'import', '-force', *patterns) - end - def import - TkNamespace.import(@fullname) - end - def force_import - TkNamespace.force_import(@fullname) - end - - def self.inscope(namespace, script, *args) - tk_call('namespace', 'inscope', namespace, script, *args) - end - def inscope(script, *args) - TkNamespace(@fullname, script, *args) - end - - def self.origin(cmd) - tk_call('namespace', 'origin', cmd) - end - - def self.parent(namespace=None) - ns = tk_call('namespace', 'parent', namespace) - if Tk_Namespace_ID_TBL.key?(ns) - Tk_Namespace_ID_TBL[ns] - else - ns - end - end - def parent - tk_call('namespace', 'parent', @fullname) - end - - def self.qualifiers(str) - tk_call('namespace', 'qualifiers', str) - end - - def self.tail(str) - tk_call('namespace', 'tail', str) - end - - def self.which(name) - tk_call('namespace', 'which', name) - end - def self.which_command(name) - tk_call('namespace', 'which', '-command', name) - end - def self.which_variable(name) - tk_call('namespace', 'which', '-variable', name) - end -end diff --git a/ext/tk/lib/tk/optiondb.rb b/ext/tk/lib/tk/optiondb.rb deleted file mode 100644 index 1484671920..0000000000 --- a/ext/tk/lib/tk/optiondb.rb +++ /dev/null @@ -1,370 +0,0 @@ -# -# tk/optiondb.rb : treat option database -# -require 'tk' - -module TkOptionDB - include Tk - extend Tk - - TkCommandNames = ['option'.freeze].freeze - CmdClassID = ['CMD_CLASS'.freeze, '00000'.taint].freeze - - module Priority - WidgetDefault = 20 - StartupFile = 40 - UserDefault = 60 - Interactive = 80 - end - - def add(pat, value, pri=None) - # if $SAFE >= 4 - # fail SecurityError, "can't call 'TkOptionDB.add' at $SAFE >= 4" - # end - tk_call('option', 'add', pat, value, pri) - end - def clear - # if $SAFE >= 4 - # fail SecurityError, "can't call 'TkOptionDB.crear' at $SAFE >= 4" - # end - tk_call_without_enc('option', 'clear') - end - def get(win, name, klass) - tk_call('option', 'get', win ,name, klass) - end - def readfile(file, pri=None) - tk_call('option', 'readfile', file, pri) - end - alias read_file readfile - module_function :add, :clear, :get, :readfile, :read_file - - def read_entries(file, f_enc=nil) - if TkCore::INTERP.safe? - fail SecurityError, - "can't call 'TkOptionDB.read_entries' on a safe interpreter" - end - - i_enc = Tk.encoding() - - unless f_enc - f_enc = i_enc - end - - ent = [] - cline = '' - open(file, 'r') {|f| - while line = f.gets - #cline += line.chomp! - cline.concat(line.chomp!) - case cline - when /\\$/ # continue - cline.chop! - next - when /^\s*(!|#)/ # coment - cline = '' - next - when /^([^:]+):(.*)$/ - pat = $1.strip - val = $2.lstrip - p "ResourceDB: #{[pat, val].inspect}" if $DEBUG - pat = TkCore::INTERP._toUTF8(pat, f_enc) - pat = TkCore::INTERP._fromUTF8(pat, i_enc) - val = TkCore::INTERP._toUTF8(val, f_enc) - val = TkCore::INTERP._fromUTF8(val, i_enc) - ent << [pat, val] - cline = '' - else # unknown --> ignore - cline = '' - next - end - end - } - ent - end - module_function :read_entries - - def read_with_encoding(file, f_enc=nil, pri=None) - # try to read the file as an OptionDB file - read_entries(file, f_enc).each{|pat, val| - add(pat, val, pri) - } - -=begin - i_enc = Tk.encoding() - - unless f_enc - f_enc = i_enc - end - - cline = '' - open(file, 'r') {|f| - while line = f.gets - cline += line.chomp! - case cline - when /\\$/ # continue - cline.chop! - next - when /^\s*!/ # coment - cline = '' - next - when /^([^:]+):\s(.*)$/ - pat = $1 - val = $2 - p "ResourceDB: #{[pat, val].inspect}" if $DEBUG - pat = TkCore::INTERP._toUTF8(pat, f_enc) - pat = TkCore::INTERP._fromUTF8(pat, i_enc) - val = TkCore::INTERP._toUTF8(val, f_enc) - val = TkCore::INTERP._fromUTF8(val, i_enc) - add(pat, val, pri) - cline = '' - else # unknown --> ignore - cline = '' - next - end - end - } -=end - end - module_function :read_with_encoding - - # support procs on the resource database - @@resource_proc_class = Class.new - - @@resource_proc_class.const_set(:CARRIER, '.'.freeze) - - @@resource_proc_class.instance_variable_set('@method_tbl', - TkCore::INTERP.create_table) - @@resource_proc_class.instance_variable_set('@add_method', false) - @@resource_proc_class.instance_variable_set('@safe_mode', 4) - - class << @@resource_proc_class - private :new - -=begin - CARRIER = '.'.freeze - METHOD_TBL = TkCore::INTERP.create_table - ADD_METHOD = false - SAFE_MODE = 4 -=end - -=begin - def __closed_block_check__(str) - depth = 0 - str.scan(/[{}]/){|x| - if x == "{" - depth += 1 - elsif x == "}" - depth -= 1 - end - if depth <= 0 && !($' =~ /\A\s*\Z/) - fail RuntimeError, "bad string for procedure : #{str.inspect}" - end - } - str - end - private :__closed_block_check__ -=end - - def __check_proc_string__(str) - # If you want to check the proc_string, do it in this method. - # Please define this in the block given to 'new_proc_class' method. - str - end - - def method_missing(id, *args) - #res_proc, proc_str = self::METHOD_TBL[id] - res_proc, proc_str = @method_tbl[id] - - proc_source = TkOptionDB.get(self::CARRIER, id.id2name, '').strip - res_proc = nil if proc_str != proc_source # resource is changed - - unless res_proc.kind_of? Proc - #if id == :new || !(self::METHOD_TBL.has_key?(id) || self::ADD_METHOD) - if id == :new || !(@method_tbl.has_key?(id) || @add_method) - raise NoMethodError, - "not support resource-proc '#{id.id2name}' for #{self.name}" - end - proc_str = proc_source - proc_str = '{' + proc_str + '}' unless /\A\{.*\}\Z/ =~ proc_str - #proc_str = __closed_block_check__(proc_str) - proc_str = __check_proc_string__(proc_str) - res_proc = proc{ - begin - #eval("$SAFE = #{self::SAFE_MODE};\nProc.new" + proc_str) - eval("$SAFE = #{@safe_mode};\nProc.new" + proc_str) - rescue SyntaxError=>err - raise SyntaxError, - TkCore::INTERP._toUTF8(err.message.gsub(/\(eval\):\d:/, - "(#{id.id2name}):")) - end - }.call - #self::METHOD_TBL[id] = [res_proc, proc_source] - @method_tbl[id] = [res_proc, proc_source] - end - res_proc.call(*args) - end - - private :__check_proc_string__, :method_missing - end - @@resource_proc_class.freeze - -=begin - def __create_new_class(klass, func, safe = 4, add = false, parent = nil) - klass = klass.to_s if klass.kind_of? Symbol - unless (?A..?Z) === klass[0] - fail ArgumentError, "bad string '#{klass}' for class name" - end - unless func.kind_of? Array - fail ArgumentError, "method-list must be Array" - end - func_str = func.join(' ') - if parent == nil - install_win(parent) - elsif parent <= @@resource_proc_class - install_win(parent::CARRIER) - else - fail ArgumentError, "parent must be Resource-Proc class" - end - carrier = Tk.tk_call_without_enc('frame', @path, '-class', klass) - - body = <<-"EOD" - class #{klass} < TkOptionDB.module_eval('@@resource_proc_class') - CARRIER = '#{carrier}'.freeze - METHOD_TBL = TkCore::INTERP.create_table - ADD_METHOD = #{add} - SAFE_MODE = #{safe} - %w(#{func_str}).each{|f| METHOD_TBL[f.intern] = nil } - end - EOD - - if parent.kind_of?(Class) && parent <= @@resource_proc_class - parent.class_eval(body) - eval(parent.name + '::' + klass) - else - eval(body) - eval('TkOptionDB::' + klass) - end - end -=end - def __create_new_class(klass, func, safe = 4, add = false, parent = nil) - if klass.kind_of?(TkWindow) - carrier = klass.path - klass = CmdClassID.join(TkCore::INTERP._ip_id_) - CmdClassID[1].succ! - parent = nil # ignore parent - else - klass = klass.to_s if klass.kind_of? Symbol - unless (?A..?Z) === klass[0] - fail ArgumentError, "bad string '#{klass}' for class name" - end - if parent == nil - install_win(nil) - elsif parent.kind_of?(TkWindow) - install_win(parent.path) - elsif parent <= @@resource_proc_class - install_win(parent::CARRIER) - else - fail ArgumentError, "parent must be Resource-Proc class" - end - carrier = Tk.tk_call_without_enc('frame', @path, '-class', klass) - end - - unless func.kind_of? Array - fail ArgumentError, "method-list must be Array" - end - func_str = func.join(' ') - - if parent.kind_of?(Class) && parent <= @@resource_proc_class - cmd_klass = Class.new(parent) - else - cmd_klass = Class.new(TkOptionDB.module_eval('@@resource_proc_class')) - end - cmd_klass.const_set(:CARRIER, carrier.dup.freeze) - - cmd_klass.instance_variable_set('@method_tbl', TkCore::INTERP.create_table) - cmd_klass.instance_variable_set('@add_method', add) - cmd_klass.instance_variable_set('@safe_mode', safe) - func.each{|f| - cmd_klass.instance_variable_get('@method_tbl')[f.to_s.intern] = nil - } -=begin - cmd_klass.const_set(:METHOD_TBL, TkCore::INTERP.create_table) - cmd_klass.const_set(:ADD_METHOD, add) - cmd_klass.const_set(:SAFE_MODE, safe) - func.each{|f| cmd_klass::METHOD_TBL[f.to_s.intern] = nil } -=end - - cmd_klass - end - module_function :__create_new_class - private_class_method :__create_new_class - - def __remove_methods_of_proc_class(klass) - # for security, make these methods invalid - class << klass - def __null_method(*args); nil; end - [ :class_eval, :name, :superclass, :clone, :dup, :autoload, :autoload?, - :ancestors, :const_defined?, :const_get, :const_set, :const_missing, - :class_variables, :constants, :included_modules, :instance_methods, - :method_defined?, :module_eval, :private_instance_methods, - :protected_instance_methods, :public_instance_methods, - :singleton_methods, :remove_const, :remove_method, :undef_method, - :to_s, :inspect, :display, :method, :methods, :respond_to?, - :instance_variable_get, :instance_variable_set, :instance_method, - :instance_eval, :instance_variables, :kind_of?, :is_a?, - :private_methods, :protected_methods, :public_methods ].each{|m| - alias_method(m, :__null_method) - } - end - end - module_function :__remove_methods_of_proc_class - private_class_method :__remove_methods_of_proc_class - - RAND_BASE_CNT = [0] - RAND_BASE_HEAD = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - RAND_BASE_CHAR = RAND_BASE_HEAD + 'abcdefghijklmnopqrstuvwxyz0123456789_' - def __get_random_basename - name = '%s%03d' % [RAND_BASE_HEAD[rand(RAND_BASE_HEAD.size),1], - RAND_BASE_CNT[0]] - len = RAND_BASE_CHAR.size - (6+rand(10)).times{ - name << RAND_BASE_CHAR[rand(len),1] - } - RAND_BASE_CNT[0] = RAND_BASE_CNT[0] + 1 - name - end - module_function :__get_random_basename - private_class_method :__get_random_basename - - # define new proc class : - # If you want to modify the new class or create a new subclass, - # you must do such operation in the block parameter. - # Because the created class is flozen after evaluating the block. - def new_proc_class(klass, func, safe = 4, add = false, parent = nil, &b) - new_klass = __create_new_class(klass, func, safe, add, parent) - new_klass.class_eval(&b) if block_given? - __remove_methods_of_proc_class(new_klass) - new_klass.freeze - new_klass - end - module_function :new_proc_class - - def eval_under_random_base(parent = nil, &b) - new_klass = __create_new_class(__get_random_basename(), - [], 4, false, parent) - ret = new_klass.class_eval(&b) if block_given? - __remove_methods_of_proc_class(new_klass) - new_klass.freeze - ret - end - module_function :eval_under_random_base - - def new_proc_class_random(klass, func, safe = 4, add = false, &b) - eval_under_random_base(){ - TkOption.new_proc_class(klass, func, safe, add, self, &b) - } - end - module_function :new_proc_class_random -end -TkOption = TkOptionDB -TkResourceDB = TkOptionDB diff --git a/ext/tk/lib/tk/optionobj.rb b/ext/tk/lib/tk/optionobj.rb deleted file mode 100644 index 8fe7e0ee5a..0000000000 --- a/ext/tk/lib/tk/optionobj.rb +++ /dev/null @@ -1,212 +0,0 @@ -# -# tk/optionobj.rb : control options for a group of widgets -# -# NOTE: If you want to use key-only option (no value), -# use Tk::None for the value of the key-only option. -# -# e.g. hash_kv({'aaa'=>1, 'bbb'=>Tk::None, 'ccc'=>3}) -# => ["-aaa", 1, "-bbb", "-ccc", 3] -# -require 'tk' - -module Tk - class OptionObj < Hash - include TkUtil - - def initialize(hash = nil) - super() - @observ = [] - update_without_notify(_symbolkey2str(hash)) if hash - end - - def observ_info - @observ.dup - end - - def observs - @observ.collect{|win| - if win.kind_of?(Array) - win[0] - else - win - end - } - end - - def _remove_win(win) - if win.kind_of?(Array) - widget, method = win - @observ.delete_if{|x| - if x.kind_of?(Array) - x[0] == widget - else - x == widget - end - } - else - @observ.delete_if{|x| - if x.kind_of?(Array) - x[0] == win - else - x == win - end - } - end - end - private :_remove_win - - def assign(*wins) - # win := - # widget #==> call widget.configure(hash) - # [widget] #==> call widget.configure(hash) - # [widget, nil, {src=>target, ... }] - # #==> call widget.configure(hash) - # with converting hash-key - # [widget, method] #==> call widget.method(hash) - # [widget, method, {src=>target, ... }] - # #==> call widget.method(hash) - # with converting hash-key - # [widget [receiver, method, arg, ... ]] - # #==> call receiver.method(arg, ... , hash) - # [widget [receiver, method, arg, ... ], {src=>target, ... }] - # #==> call receiver.method(arg, ... , hash) - # with onverting hash-key - # - # src := option_name_on_optobj - # - # target := - # nil #==> not use the src - # option_name_on_target_widget - # [ option_name_on_target_widget, ... ] - # #==> set all of them - # - wins.each{|win| - _remove_win(win) - @observ << win - notify(win) - } - self - end - - def unassign(*wins) - wins.each{|win| - _remove_win(win) - } - self - end - - def notify(target = nil) - if target - targets = [target] - elsif @observ.empty? - return self - else - targets = @observ.dup - end - - return self if empty? - - org_hash = _symbolkey2str(self) - - targets.each{|win| - widget = receiver = win - hash = org_hash - begin - if win.kind_of?(Array) - widget, method, conv_tbl = win - receiver = widget - - if conv_tbl - hash = {} - org_hash.each{|key, val| - key = conv_tbl[key] if conv_tbl.key?(key) - next unless key - if key.kind_of?(Array) - key.each{|k| hash[k] = val} - else - hash[key] = val - end - } - end - - if method.kind_of?(Array) - receiver, method, *args = method - receiver.__send__(method, *(args << hash)) - elsif method - widget.__send__(method, hash) - else - widget.configure(hash) - end - - else - widget.configure(self) - end - rescue => e - if ( ( widget.kind_of?(TkObject) \ - && widget.respond_to?('exist?') \ - && ! receiver.exist? ) \ - || ( receiver.kind_of?(TkObject) \ - && receiver.respond_to?('exist?') \ - && ! receiver.exist? ) ) - @observ.delete(win) - else - fail e - end - end - } - - self - end - alias apply notify - - def +(hash) - unless hash.kind_of?(Hash) - fail ArgumentError, "expect a Hash" - end - new_obj = self.dup - new_obj.update_without_notify(_symbolkey2str(hash)) - new_obj - end - - alias update_without_notify update - - def update(hash) - update_without_notify(_symbolkey2str(hash)) - notify - end - - def configure(key, value=nil) - if key.kind_of?(Hash) - update(key) - else - store(key,value) - end - end - - def [](key) - super(key.to_s) - end - alias cget [] - - def store(key, val) - key = key.to_s - super(key, val) - notify - end - def []=(key, val) - store(key,val) - end - - def replace(hash) - super(_symbolkey2str(hash)) - notify - end - - def default(opt) - fail RuntimeError, "unknown option `#{opt}'" - end - private :default - - undef :default= - end -end diff --git a/ext/tk/lib/tk/pack.rb b/ext/tk/lib/tk/pack.rb deleted file mode 100644 index d592fa1c80..0000000000 --- a/ext/tk/lib/tk/pack.rb +++ /dev/null @@ -1,90 +0,0 @@ -# -# tk/pack.rb : control pack geometry manager -# -require 'tk' - -module TkPack - include Tk - extend Tk - - TkCommandNames = ['pack'.freeze].freeze - - def configure(win, *args) - if args[-1].kind_of?(Hash) - opts = args.pop - else - opts = {} - end - params = [] - # params.push((win.kind_of?(TkObject))? win.epath: win) - params.push(_epath(win)) - args.each{|win| - # params.push((win.kind_of?(TkObject))? win.epath: win) - params.push(_epath(win)) - } - opts.each{|k, v| - params.push("-#{k}") - # params.push((v.kind_of?(TkObject))? v.epath: v) - params.push(_epath(v)) - } - tk_call_without_enc("pack", 'configure', *params) - end - alias pack configure - - def forget(*args) - return '' if args.size == 0 - wins = args.collect{|win| - # (win.kind_of?(TkObject))? win.epath: win - _epath(win) - } - tk_call_without_enc('pack', 'forget', *wins) - end - - def info(slave) - # slave = slave.epath if slave.kind_of?(TkObject) - slave = _epath(slave) - ilist = list(tk_call_without_enc('pack', 'info', slave)) - info = {} - while key = ilist.shift - info[key[1..-1]] = ilist.shift - end - return info - end - - def propagate(master, bool=None) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - if bool == None - bool(tk_call_without_enc('pack', 'propagate', master)) - else - tk_call_without_enc('pack', 'propagate', master, bool) - end - end - - def slaves(master) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - list(tk_call_without_enc('pack', 'slaves', master)) - end - - module_function :pack, :configure, :forget, :info, :propagate, :slaves -end -=begin -def TkPack(win, *args) - if args[-1].kind_of?(Hash) - opts = args.pop - else - opts = {} - end - params = [] - params.push((win.kind_of?(TkObject))? win.epath: win) - args.each{|win| - params.push((win.kind_of?(TkObject))? win.epath: win) - } - opts.each{|k, v| - params.push("-#{k}") - params.push((v.kind_of?(TkObject))? v.epath: v) - } - tk_call_without_enc("pack", *params) -end -=end diff --git a/ext/tk/lib/tk/package.rb b/ext/tk/lib/tk/package.rb deleted file mode 100644 index d1eb27674d..0000000000 --- a/ext/tk/lib/tk/package.rb +++ /dev/null @@ -1,139 +0,0 @@ -# -# tk/package.rb : package command -# -require 'tk' - -module TkPackage - include TkCore - extend TkPackage - - TkCommandNames = ['package'.freeze].freeze - - def add_path(path) - Tk::AUTO_PATH.value = Tk::AUTO_PATH.to_a << path - end - - def forget(package) - tk_call('package', 'forget', package) - nil - end - - def if_needed(pkg, ver, *arg, &b) - size = arg.size - - if size==0 && !b - # proc info - procedure(tk_call('package', 'ifneeded', pkg, ver)) - - elsif size==0 && b - # set proc - cmd = proc(&b) - tk_call('package', 'ifneeded', pkg, ver, cmd) - cmd - - elsif size==1 && !b - # set proc - cmd = arg[0] - if cmd - tk_call('package', 'ifneeded', pkg, ver, cmd) - cmd - else - # remove proc - tk_call('package', 'ifneeded', pkg, ver, '') - nil - end - - else - fail ArgumentError, 'too many arguments' - end - end - - def names - tk_split_simplelist(tk_call('package', 'names')) - end - - def provide(package, version=nil) - if version - tk_call('package', 'provide', package, version) - end - if (ret = tk_call('package', 'provide', package)) == '' - nil - else - ret - end - end - - def present(package, version=None) - begin - tk_call('package', 'present', package, version) - rescue => e - fail e.class, 'TkPackage ' << e.message - end - end - - def present_exact(package, version) - begin - tk_call('package', 'present', '-exact', package, version) - rescue => e - fail e.class, 'TkPackage ' << e.message - end - end - - def require(package, version=None) - begin - tk_call('package', 'require', package, version) - rescue => e - fail e.class, 'TkPackage ' << e.message - end - end - - def require_exact(package, version) - begin - tk_call('package', 'require', '-exact', package, version) - rescue => e - fail e.class, 'TkPackage ' << e.message - end - end - - def unknown_proc(*arg, &b) - size = arg.size - - if size==0 && !b - # proc info - procedure(tk_call('package', 'unknown')) - - elsif size==0 && b - # set proc - cmd = proc(&b) - tk_call('package', 'unknown', cmd) - cmd - - elsif size==1 && !b - # set proc - cmd = arg[0] - if cmd - tk_call('package', 'unknown', cmd) - cmd - else - # remove proc - tk_call('package', 'unknown', '') - nil - end - - else - fail ArgumentError, 'too many arguments' - end - end - - def versions(package) - tk_split_simplelist(tk_call('package', 'versions', package)) - end - - def vcompare(version1, version2) - number(tk_call('package', 'vcompare', version1, version2)) - end - - def vsatisfies(version1, version2) - bool(tk_call('package', 'vsatisfies', version1, version2)) - end -end diff --git a/ext/tk/lib/tk/palette.rb b/ext/tk/lib/tk/palette.rb deleted file mode 100644 index dfe46940f3..0000000000 --- a/ext/tk/lib/tk/palette.rb +++ /dev/null @@ -1,54 +0,0 @@ -# -# tk/palette.rb : methods for Tcl/Tk standard library 'palette.tcl' -# 1998/06/21 by Hidetoshi Nagai <nagai@ai.kyutech.ac.jp> -# -require 'tk' - -module TkPalette - include Tk - extend Tk - - TkCommandNames = [ - 'tk_setPalette'.freeze, - 'tk_bisque'.freeze, - 'tkDarken'.freeze - ].freeze - - def TkPalette.set(*args) - args = args.to_a.flatten if args.kind_of? Hash - tk_call('tk_setPalette', *args) - end - def TkPalette.setPalette(*args) - TkPalette.set(*args) - end - - def TkPalette.bisque - tk_call('tk_bisque') - end - - def TkPalette.darken(color, percent) - tk_call('tkDarken', color, percent) - end - - def TkPalette.recolorTree(window, colors) - if not colors.kind_of?(Hash) - fail "2nd arg need to be Hash" - end - - colors.each{|key, value| - begin - if window.cget(key) == tk_call('set', "tkPalette(#{key})") - window[key] = colors[key] - end - rescue - # ignore - end - } - - TkWinfo.children(window).each{|w| TkPalette.recolorTree(w, colors)} - end - - def recolorTree(colors) - TkPalette.recolorTree(self, colors) - end -end diff --git a/ext/tk/lib/tk/panedwindow.rb b/ext/tk/lib/tk/panedwindow.rb deleted file mode 100644 index 37be77508f..0000000000 --- a/ext/tk/lib/tk/panedwindow.rb +++ /dev/null @@ -1,204 +0,0 @@ -# -# tk/panedwindow.rb : treat panedwindow -# -require 'tk' - -class TkPanedWindow<TkWindow - TkCommandNames = ['panedwindow'.freeze].freeze - WidgetClassName = 'Panedwindow'.freeze - WidgetClassNames[WidgetClassName] = self - #def create_self(keys) - # if keys and keys != None - # tk_call_without_enc('panedwindow', @path, *hash_kv(keys, true)) - # else - # tk_call_without_enc('panedwindow', @path) - # end - #end - #private :create_self - - def add(*args) - keys = args.pop - fail ArgumentError, "no window in arguments" unless keys - if keys && keys.kind_of?(Hash) - fail ArgumentError, "no window in arguments" if args == [] - # args = args.collect{|w| (w.kind_of?(TkObject))? w.epath: w } - args = args.collect{|w| _epath(w) } - #args.push(hash_kv(keys)) - args.concat(hash_kv(keys)) - else - args.push(keys) if keys - # args = args.collect{|w| (w.kind_of?(TkObject))? w.epath: w } - args = args.collect{|w| _epath(w) } - end - tk_send_without_enc('add', *args) - self - end - - def forget(win, *wins) - wins.unshift(win) - # tk_send_without_enc('forget', *((w.kind_of?(TkObject))? w.epath: w)) - tk_send_without_enc('forget', *(wins.collect{|w| _epath(w)})) - self - end - alias del forget - alias delete forget - alias remove forget - - def identify(x, y) - list(tk_send_without_enc('identify', x, y)) - end - - def proxy_coord - list(tk_send_without_enc('proxy', 'coord')) - end - def proxy_forget - tk_send_without_enc('proxy', 'forget') - self - end - def proxy_place(x, y) - tk_send_without_enc('proxy', 'place', x, y) - self - end - - def sash_coord(index) - list(tk_send('sash', 'coord', index)) - end - def sash_dragto(index) - tk_send('sash', 'dragto', index, x, y) - self - end - def sash_mark(index, x, y) - tk_send('sash', 'mark', index, x, y) - self - end - def sash_place(index, x, y) - tk_send('sash', 'place', index, x, y) - self - end - - def panecget(win, key) - # win = win.epath if win.kind_of?(TkObject) - win = _epath(win) - tk_tcl2ruby(tk_send_without_enc('panecget', win, "-#{key}")) - end - - def paneconfigure(win, key, value=nil) - # win = win.epath if win.kind_of?(TkObject) - win = _epath(win) - if key.kind_of? Hash - params = [] - key.each{|k, v| - params.push("-#{k}") - # params.push((v.kind_of?(TkObject))? v.epath: v) - params.push(_epath(v)) - } - tk_send_without_enc('paneconfigure', win, *params) - else - # value = value.epath if value.kind_of?(TkObject) - value = _epath(value) - tk_send_without_enc('paneconfigure', win, "-#{key}", value) - end - self - end - alias pane_config paneconfigure - - def paneconfiginfo(win, key=nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - # win = win.epath if win.kind_of?(TkObject) - win = _epath(win) - if key - conf = tk_split_list(tk_send_without_enc('paneconfigure', - win, "-#{key}")) - conf[0] = conf[0][1..-1] - conf - else - tk_split_simplelist(tk_send_without_enc('paneconfigure', - win)).collect{|conflist| - conf = tk_split_simplelist(conflist) - conf[0] = conf[0][1..-1] - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - if conf[4] - if conf[4].index('{') - conf[4] = tk_split_list(conf[4]) - else - conf[4] = tk_tcl2ruby(conf[4]) - end - end - conf[1] = conf[1][1..-1] if conf.size == 2 # alias info - conf - } - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - # win = win.epath if win.kind_of?(TkObject) - win = _epath(win) - if key - conf = tk_split_list(tk_send_without_enc('paneconfigure', - win, "-#{key}")) - key = conf.shift[1..-1] - { key => conf } - else - ret = {} - tk_split_simplelist(tk_send_without_enc('paneconfigure', - win)).each{|conflist| - conf = tk_split_simplelist(conflist) - key = conf.shift[1..-1] - if key - if conf[2].index('{') - conf[2] = tk_split_list(conf[2]) - else - conf[2] = tk_tcl2ruby(conf[2]) - end - end - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - if conf.size == 1 - ret[key] = conf[0][1..-1] # alias info - else - ret[key] = conf - end - } - ret - end - end - end - alias pane_configinfo paneconfiginfo - - def current_paneconfiginfo(win, key=nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if key - conf = paneconfiginfo(win, key) - {conf[0] => conf[4]} - else - ret = {} - paneconfiginfo(win).each{|conf| - ret[conf[0]] = conf[4] if conf.size > 2 - } - ret - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - ret = {} - paneconfiginfo(win, key).each{|k, conf| - ret[k] = conf[-1] if conf.kind_of?(Array) - } - ret - end - end - - alias current_pane_configinfo current_paneconfiginfo - - def panes - list(tk_send_without_enc('panes')) - end -end -TkPanedwindow = TkPanedWindow diff --git a/ext/tk/lib/tk/place.rb b/ext/tk/lib/tk/place.rb deleted file mode 100644 index f7ebdfcbd6..0000000000 --- a/ext/tk/lib/tk/place.rb +++ /dev/null @@ -1,128 +0,0 @@ -# -# tk/place.rb : control place geometry manager -# -require 'tk' - -module TkPlace - include Tk - extend Tk - - TkCommandNames = ['place'.freeze].freeze - - def configure(win, slot, value=None) - # for >= Tk8.4a2 ? - # win = win.epath if win.kind_of?(TkObject) - win = _epath(win) - if slot.kind_of? Hash - params = [] - slot.each{|k, v| - params.push("-#{k}") - # params.push((v.kind_of?(TkObject))? v.epath: v) - params.push(_epath(v)) - } - tk_call_without_enc('place', 'configure', win, *params) - else - # value = value.epath if value.kind_of?(TkObject) - value = _epath(value) - tk_call_without_enc('place', 'configure', win, "-#{slot}", value) - end - end - alias place configure - - def configinfo(win, slot = nil) - # for >= Tk8.4a2 ? - if TkComm::GET_CONFIGINFOwoRES_AS_ARRAY - # win = win.epath if win.kind_of?(TkObject) - win = _epath(win) - if slot - #conf = tk_split_list(tk_call_without_enc('place', 'configure', - # win, "-#{slot}") ) - conf = tk_split_simplelist(tk_call_without_enc('place', 'configure', - win, "-#{slot}") ) - conf[0] = conf[0][1..-1] - conf[1] = tk_tcl2ruby(conf[1]) - conf[2] = tk_tcl2ruby(conf[1]) - conf[3] = tk_tcl2ruby(conf[1]) - conf[4] = tk_tcl2ruby(conf[1]) - conf - else - tk_split_simplelist(tk_call_without_enc('place', 'configure', - win)).collect{|conflist| - #conf = list(conflist) - conf = simplelist(conflist).collect!{|inf| tk_tcl2ruby(inf)} - conf[0] = conf[0][1..-1] - conf - } - end - else # ! TkComm::GET_CONFIGINFOwoRES_AS_ARRAY - current_configinfo(win, slot) - end - end - - def current_configinfo(win, slot = nil) - # win = win.epath if win.kind_of?(TkObject) - win = _epath(win) - if slot - #conf = tk_split_list(tk_call_without_enc('place', 'configure', - # win, "-#{slot}") ) - conf = tk_split_simplelist(tk_call_without_enc('place', 'configure', - win, "-#{slot}") ) - # { conf[0][1..-1] => conf[1] } - { conf[0][1..-1] => tk_tcl2ruby(conf[4]) } - else - ret = {} - #tk_split_list(tk_call_without_enc('place','configure',win)).each{|conf| - tk_split_simplelist(tk_call_without_enc('place', 'configure', - win)).each{|conf_list| - #ret[conf[0][1..-1]] = conf[1] - conf = simplelist(conf_list) - ret[conf[0][1..-1]] = tk_tcl2ruby(conf[4]) - } - ret - end - end - - def forget(win) - # win = win.epath if win.kind_of?(TkObject) - win = _epath(win) - tk_call_without_enc('place', 'forget', win) - end - - def info(win) - # win = win.epath if win.kind_of?(TkObject) - win = _epath(win) - #ilist = list(tk_call_without_enc('place', 'info', win)) - ilist = simplelist(tk_call_without_enc('place', 'info', win)) - info = {} - while key = ilist.shift - #info[key[1..-1]] = ilist.shift - info[key[1..-1]] = tk_tcl2ruby(ilist.shift) - end - return info - end - - def slaves(master) - # master = master.epath if master.kind_of?(TkObject) - master = _epath(master) - list(tk_call('place', 'slaves', master)) - end - - module_function :place, :configure, :configinfo, :current_configinfo - module_function :forget, :info, :slaves -end -=begin -def TkPlace(win, slot, value=None) - win = win.epath if win.kind_of?(TkObject) - if slot.kind_of? Hash - params = [] - slot.each{|k, v| - params.push("-#{k}") - params.push((v.kind_of?(TkObject))? v.epath: v) - } - tk_call_without_enc('place', win, *params) - else - value = value.epath if value.kind_of?(TkObject) - tk_call_without_enc('place', win, "-#{slot}", value) - end -end -=end diff --git a/ext/tk/lib/tk/radiobutton.rb b/ext/tk/lib/tk/radiobutton.rb deleted file mode 100644 index 697c021283..0000000000 --- a/ext/tk/lib/tk/radiobutton.rb +++ /dev/null @@ -1,32 +0,0 @@ -# -# tk/radiobutton.rb : treat radiobutton widget -# -require 'tk' -require 'tk/button' - -class TkRadioButton<TkButton - TkCommandNames = ['radiobutton'.freeze].freeze - WidgetClassName = 'Radiobutton'.freeze - WidgetClassNames[WidgetClassName] = self - #def create_self(keys) - # if keys and keys != None - # tk_call_without_enc('radiobutton', @path, *hash_kv(keys, true)) - # else - # tk_call_without_enc('radiobutton', @path) - # end - #end - #private :create_self - - def deselect - tk_send_without_enc('deselect') - self - end - def select - tk_send_without_enc('select') - self - end - def variable(v) - configure 'variable', tk_trace_variable(v) - end -end -TkRadiobutton = TkRadioButton diff --git a/ext/tk/lib/tk/root.rb b/ext/tk/lib/tk/root.rb deleted file mode 100644 index 24a5cf1ea0..0000000000 --- a/ext/tk/lib/tk/root.rb +++ /dev/null @@ -1,86 +0,0 @@ -# -# tk/root.rb : treat root widget -# -require 'tk' -require 'tk/wm' -require 'tk/menuspec' - -class TkRoot<TkWindow - include Wm - include TkMenuSpec - -=begin - ROOT = [] - def TkRoot.new(keys=nil) - if ROOT[0] - Tk_WINDOWS["."] = ROOT[0] - return ROOT[0] - end - new = super(:without_creating=>true, :widgetname=>'.') - if keys # wm commands - keys.each{|k,v| - if v.kind_of? Array - new.send(k,*v) - else - new.send(k,v) - end - } - end - ROOT[0] = new - Tk_WINDOWS["."] = new - end -=end - def TkRoot.new(keys=nil, &b) - unless TkCore::INTERP.tk_windows['.'] - TkCore::INTERP.tk_windows['.'] = - super(:without_creating=>true, :widgetname=>'.'){} - end - root = TkCore::INTERP.tk_windows['.'] - if keys # wm commands - keys.each{|k,v| - if v.kind_of? Array - root.__send__(k,*v) - else - root.__send__(k,v) - end - } - end - root.instance_eval(&b) if block_given? - root - end - - WidgetClassName = 'Tk'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self - @path = '.' - end - private :create_self - - def path - "." - end - - def add_menu(menu_info, tearoff=false, opts=nil) - # See tk/menuspec.rb for menu_info. - # opts is a hash of default configs for all of cascade menus. - # Configs of menu_info can override it. - if tearoff.kind_of?(Hash) - opts = tearoff - tearoff = false - end - _create_menubutton(self, menu_info, tearoff, opts) - end - - def add_menubar(menu_spec, tearoff=false, opts=nil) - # See tk/menuspec.rb for menu_spec. - # opts is a hash of default configs for all of cascade menus. - # Configs of menu_spec can override it. - menu_spec.each{|info| add_menu(info, tearoff, opts)} - self.menu - end - - def TkRoot.destroy - TkCore::INTERP._invoke('destroy', '.') - end -end diff --git a/ext/tk/lib/tk/scale.rb b/ext/tk/lib/tk/scale.rb deleted file mode 100644 index 7214c46f5e..0000000000 --- a/ext/tk/lib/tk/scale.rb +++ /dev/null @@ -1,81 +0,0 @@ -# -# tk/scale.rb : treat scale widget -# -require 'tk' - -class TkScale<TkWindow - TkCommandNames = ['scale'.freeze].freeze - WidgetClassName = 'Scale'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self(keys) - if keys and keys != None - if keys.key?('command') && ! keys['command'].kind_of?(String) - cmd = keys.delete('command') - keys['command'] = proc{|val| cmd.call(val.to_f)} - end - #tk_call_without_enc('scale', @path, *hash_kv(keys, true)) - tk_call_without_enc(self.class::TkCommandNames[0], @path, - *hash_kv(keys, true)) - else - #tk_call_without_enc('scale', @path) - tk_call_without_enc(self.class::TkCommandNames[0], @path) - end - end - private :create_self - - def _wrap_command_arg(cmd) - proc{|val| - if val.kind_of?(String) - cmd.call(number(val)) - else - cmd.call(val) - end - } - end - private :_wrap_command_arg - - def configure_cmd(slot, value) - configure(slot=>value) - end - - def configure(slot, value=None) - if (slot == 'command' || slot == :command) - configure('command'=>value) - elsif slot.kind_of?(Hash) && - (slot.key?('command') || slot.key?(:command)) - slot = _symbolkey2str(slot) - slot['command'] = _wrap_command_arg(slot.delete('command')) - end - super(slot, value) - end - - def command(cmd=Proc.new) - configure('command'=>cmd) - end - - def get(x=None, y=None) - number(tk_send_without_enc('get', x, y)) - end - - def coords(val=None) - tk_split_list(tk_send_without_enc('coords', val)) - end - - def identify(x, y) - tk_send_without_enc('identify', x, y) - end - - def set(val) - tk_send_without_enc('set', val) - end - - def value - get - end - - def value= (val) - set(val) - val - end -end diff --git a/ext/tk/lib/tk/scrollable.rb b/ext/tk/lib/tk/scrollable.rb deleted file mode 100644 index 74816a9228..0000000000 --- a/ext/tk/lib/tk/scrollable.rb +++ /dev/null @@ -1,70 +0,0 @@ -# -# tk/scrollable.rb : module for scrollable widget -# -require 'tk' - -module Tk - module Scrollable - def xscrollcommand(cmd=Proc.new) - configure_cmd 'xscrollcommand', cmd - # Tk.update # avoid scrollbar trouble - self - end - def yscrollcommand(cmd=Proc.new) - configure_cmd 'yscrollcommand', cmd - # Tk.update # avoid scrollbar trouble - self - end - - def xview(*index) - if index.size == 0 - list(tk_send_without_enc('xview')) - else - tk_send_without_enc('xview', *index) - self - end - end - def xview_moveto(*index) - xview('moveto', *index) - end - def xview_scroll(*index) - xview('scroll', *index) - end - - def yview(*index) - if index.size == 0 - list(tk_send_without_enc('yview')) - else - tk_send_without_enc('yview', *index) - self - end - end - def yview_moveto(*index) - yview('moveto', *index) - end - def yview_scroll(*index) - yview('scroll', *index) - end - - def xscrollbar(bar=nil) - if bar - @xscrollbar = bar - @xscrollbar.orient 'horizontal' - self.xscrollcommand {|*arg| @xscrollbar.set(*arg)} - @xscrollbar.command {|*arg| self.xview(*arg)} - Tk.update # avoid scrollbar trouble - end - @xscrollbar - end - def yscrollbar(bar=nil) - if bar - @yscrollbar = bar - @yscrollbar.orient 'vertical' - self.yscrollcommand {|*arg| @yscrollbar.set(*arg)} - @yscrollbar.command {|*arg| self.yview(*arg)} - Tk.update # avoid scrollbar trouble - end - @yscrollbar - end - end -end diff --git a/ext/tk/lib/tk/scrollbar.rb b/ext/tk/lib/tk/scrollbar.rb deleted file mode 100644 index 70aadfdd4c..0000000000 --- a/ext/tk/lib/tk/scrollbar.rb +++ /dev/null @@ -1,124 +0,0 @@ -# -# tk/scrollbar.rb : treat scrollbar widget -# -require 'tk' - -class TkScrollbar<TkWindow - TkCommandNames = ['scrollbar'.freeze].freeze - WidgetClassName = 'Scrollbar'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self(keys) - @assigned = [] - @scroll_proc = proc{|*args| - if self.orient == 'horizontal' - @assigned.each{|w| w.xview(*args)} - else # 'vertical' - @assigned.each{|w| w.yview(*args)} - end - } - - if keys and keys != None - #tk_call_without_enc('scrollbar', @path, *hash_kv(keys, true)) - tk_call_without_enc(self.class::TkCommandNames[0], @path, - *hash_kv(keys, true)) - else - #tk_call_without_enc('scrollbar', @path) - tk_call_without_enc(self.class::TkCommandNames[0], @path) - end - end - private :create_self - - def propagate_set(src_win, first, last) - self.set(first, last) - if self.orient == 'horizontal' - @assigned.each{|w| w.xview('moveto', first) if w != src_win} - else # 'vertical' - @assigned.each{|w| w.yview('moveto', first) if w != src_win} - end - end - - def assign(*wins) - begin - self.command(@scroll_proc) if self.cget('command').cmd != @scroll_proc - rescue Exception - self.command(@scroll_proc) - end - orient = self.orient - wins.each{|w| - @assigned << w unless @assigned.index(w) - if orient == 'horizontal' - w.xscrollcommand proc{|first, last| self.propagate_set(w, first, last)} - else # 'vertical' - w.yscrollcommand proc{|first, last| self.propagate_set(w, first, last)} - end - } - Tk.update # avoid scrollbar trouble - self - end - - def assigned_list - begin - return @assigned.dup if self.cget('command').cmd == @scroll_proc - rescue Exception - end - fail RuntimeError, "not depend on the assigned_list" - end - - def configure(*args) - ret = super(*args) - # Tk.update # avoid scrollbar trouble - ret - end - - #def delta(deltax=None, deltay=None) - def delta(deltax, deltay) - number(tk_send_without_enc('delta', deltax, deltay)) - end - - #def fraction(x=None, y=None) - def fraction(x, y) - number(tk_send_without_enc('fraction', x, y)) - end - - def identify(x, y) - tk_send_without_enc('identify', x, y) - end - - def get - #ary1 = tk_send('get').split - #ary2 = [] - #for i in ary1 - # ary2.push number(i) - #end - #ary2 - list(tk_send_without_enc('get')) - end - - def set(first, last) - tk_send_without_enc('set', first, last) - self - end - - def activate(element=None) - tk_send_without_enc('activate', element) - end -end - -class TkXScrollbar<TkScrollbar - def create_self(keys) - keys = {} unless keys - keys['orient'] = 'horizontal' - super(keys) - end - private :create_self -end - -class TkYScrollbar<TkScrollbar - def create_self(keys) - keys = {} unless keys - keys['orient'] = 'vertical' - super(keys) - end - private :create_self -end diff --git a/ext/tk/lib/tk/scrollbox.rb b/ext/tk/lib/tk/scrollbox.rb deleted file mode 100644 index fd04057fb6..0000000000 --- a/ext/tk/lib/tk/scrollbox.rb +++ /dev/null @@ -1,36 +0,0 @@ -# -# tk/scrollbox.rb - Tk Listbox with Scrollbar -# as an example of Composite Widget -# $Date$ -# by Yukihiro Matsumoto <matz@netlab.co.jp> -# -require 'tk' -require 'tk/listbox' - -class TkScrollbox<TkListbox - include TkComposite - def initialize_composite(keys=nil) - list = TkListbox.new(@frame) - scroll = TkScrollbar.new(@frame) - @path = list.path - -=begin - list.configure 'yscroll', scroll.path+" set" - list.pack 'side'=>'left','fill'=>'both','expand'=>'yes' - scroll.configure 'command', list.path+" yview" - scroll.pack 'side'=>'right','fill'=>'y' -=end - list.yscrollbar(scroll) - list.pack('side'=>'left','fill'=>'both','expand'=>'yes') - scroll.pack('side'=>'right','fill'=>'y') - - delegate('DEFAULT', list) - delegate('foreground', list) - delegate('background', list, scroll) - delegate('borderwidth', @frame) - delegate('relief', @frame) - - configure keys if keys - end - private :initialize_composite -end diff --git a/ext/tk/lib/tk/selection.rb b/ext/tk/lib/tk/selection.rb deleted file mode 100644 index 5caa6ef8ef..0000000000 --- a/ext/tk/lib/tk/selection.rb +++ /dev/null @@ -1,86 +0,0 @@ -# -# tk/selection.rb : control selection -# -require 'tk' - -module TkSelection - include Tk - extend Tk - - TkCommandNames = ['selection'.freeze].freeze - - def self.clear(sel=nil) - if sel - tk_call_without_enc('selection', 'clear', '-selection', sel) - else - tk_call_without_enc('selection', 'clear') - end - end - def self.clear_on_display(win, sel=nil) - if sel - tk_call_without_enc('selection', 'clear', - '-displayof', win, '-selection', sel) - else - tk_call_without_enc('selection', 'clear', '-displayof', win) - end - end - def clear(sel=nil) - TkSelection.clear_on_display(self, sel) - self - end - - def self.get(keys=nil) - #tk_call('selection', 'get', *hash_kv(keys)) - _fromUTF8(tk_call_without_enc('selection', 'get', *hash_kv(keys))) - end - def self.get_on_display(win, keys=nil) - #tk_call('selection', 'get', '-displayof', win, *hash_kv(keys)) - _fromUTF8(tk_call_without_enc('selection', 'get', '-displayof', - win, *hash_kv(keys))) - end - def get(keys=nil) - TkSelection.get_on_display(self, sel) - end - - def self.handle(win, func=Proc.new, keys=nil, &b) - if func.kind_of?(Hash) && keys == nil - keys = func - func = Proc.new(&b) - end - args = ['selection', 'handle'] - args.concat(hash_kv(keys)) - args.concat([win, func]) - tk_call_without_enc(*args) - end - def handle(func=Proc.new, keys=nil, &b) - TkSelection.handle(self, func, keys, &b) - end - - def self.get_owner(sel=nil) - if sel - window(tk_call_without_enc('selection', 'own', '-selection', sel)) - else - window(tk_call_without_enc('selection', 'own')) - end - end - def self.get_owner_on_display(win, sel=nil) - if sel - window(tk_call_without_enc('selection', 'own', - '-displayof', win, '-selection', sel)) - else - window(tk_call_without_enc('selection', 'own', '-displayof', win)) - end - end - def get_owner(sel=nil) - TkSelection.get_owner_on_display(self, sel) - self - end - - def self.set_owner(win, keys=nil) - tk_call_without_enc('selection', 'own', *(hash_kv(keys) << win)) - end - def set_owner(keys=nil) - TkSelection.set_owner(self, keys) - self - end -end diff --git a/ext/tk/lib/tk/spinbox.rb b/ext/tk/lib/tk/spinbox.rb deleted file mode 100644 index f4febb05b1..0000000000 --- a/ext/tk/lib/tk/spinbox.rb +++ /dev/null @@ -1,39 +0,0 @@ -# -# tk/spinbox.rb - Tk spinbox classes -# $Date$ -# by Yukihiro Matsumoto <matz@caelum.co.jp> -# -require 'tk' -require 'tk/entry' - -class TkSpinbox<TkEntry - TkCommandNames = ['spinbox'.freeze].freeze - WidgetClassName = 'Spinbox'.freeze - WidgetClassNames[WidgetClassName] = self - - #def create_self(keys) - # tk_call_without_enc('spinbox', @path) - # if keys and keys != None - # configure(keys) - # end - #end - #private :create_self - - def identify(x, y) - tk_send_without_enc('identify', x, y) - end - - def spinup - tk_send_without_enc('invoke', 'spinup') - self - end - - def spindown - tk_send_without_enc('invoke', 'spindown') - self - end - - def set(str) - _fromUTF8(tk_send_without_enc('set', _get_eval_enc_str(str))) - end -end diff --git a/ext/tk/lib/tk/tagfont.rb b/ext/tk/lib/tk/tagfont.rb deleted file mode 100644 index a106f814be..0000000000 --- a/ext/tk/lib/tk/tagfont.rb +++ /dev/null @@ -1,43 +0,0 @@ -# -# tk/tagfont.rb : control font of tags -# -require 'tk' - -module TkTreatTagFont - def font_configinfo - @parent.tagfont_configinfo(@id) - end -# alias font font_configinfo - - def font_configure(slot) - @parent.tagfont_configure(@id, slot) - self - end - - def latinfont_configure(ltn, keys=nil) - @parent.latintagfont_configure(@id, ltn, keys) - self - end - alias asciifont_configure latinfont_configure - - def kanjifont_configure(knj, keys=nil) - @parent.kanjitagfont_configure(@id, ltn, keys) - self - end - - def font_copy(window, wintag=nil) - @parent.tagfont_copy(@id, window, wintag) - self - end - - def latinfont_copy(window, wintag=nil) - @parent.latintagfont_copy(@id, window, wintag) - self - end - alias asciifont_copy latinfont_copy - - def kanjifont_copy(window, wintag=nil) - @parent.kanjitagfont_copy(@id, window, wintag) - self - end -end diff --git a/ext/tk/lib/tk/text.rb b/ext/tk/lib/tk/text.rb deleted file mode 100644 index a0af642376..0000000000 --- a/ext/tk/lib/tk/text.rb +++ /dev/null @@ -1,1285 +0,0 @@ -# -# tk/text.rb - Tk text classes -# $Date$ -# by Yukihiro Matsumoto <matz@caelum.co.jp> -require 'tk' -require 'tk/itemfont' -require 'tk/itemconfig' -require 'tk/scrollable' -require 'tk/txtwin_abst' - -module TkTextTagConfig - include TkTreatItemFont - include TkItemConfigMethod - - def __item_cget_cmd(id) # id := [ type, tagOrId ] - [self.path, id[0], 'cget', id[1]] - end - private :__item_cget_cmd - - def __item_config_cmd(id) # id := [ type, tagOrId ] - [self.path, id[0], 'configure', id[1]] - end - private :__item_config_cmd - - def __item_pathname(id) - if id.kind_of?(Array) - id = tagid(id[1]) - end - [self.path, id].join(';') - end - private :__item_pathname - - def tag_cget(tagOrId, option) - itemcget(['tag', tagOrId], option) - end - def tag_configure(tagOrId, slot, value=None) - itemconfigure(['tag', tagOrId], slot, value) - end - def tag_configinfo(tagOrId, slot=nil) - itemconfigure(['tag', tagOrId], slot) - end - def current_tag_configinfo(tagOrId, slot=nil) - itemconfigure(['tag', tagOrId], slot) - end - - def window_cget(tagOrId, option) - itemcget(['window', tagOrId], option) - end - def window_configure(tagOrId, slot, value=None) - itemconfigure(['window', tagOrId], slot, value) - end - def window_configinfo(tagOrId, slot=nil) - itemconfigure(['window', tagOrId], slot) - end - def current_window_configinfo(tagOrId, slot=nil) - itemconfigure(['window', tagOrId], slot) - end - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo -end - -class TkText<TkTextWin - ItemConfCMD = ['tag'.freeze, 'configure'.freeze].freeze - #include TkTreatTextTagFont - include TkTextTagConfig - include Scrollable - - TkCommandNames = ['text'.freeze].freeze - WidgetClassName = 'Text'.freeze - WidgetClassNames[WidgetClassName] = self - - def self.new(*args, &block) - obj = super(*args){} - obj.init_instance_variable - obj.instance_eval(&block) if defined? yield - obj - end - - def init_instance_variable - @cmdtbl = [] - @tags = {} - end - - def __destroy_hook__ - TTagID_TBL.delete(@path) - TMarkID_TBL.delete(@path) - end - - def create_self(keys) - #if keys and keys != None - # #tk_call_without_enc('text', @path, *hash_kv(keys, true)) - # tk_call_without_enc(self.class::TkCommandNames[0], @path, - # *hash_kv(keys, true)) - #else - # #tk_call_without_enc('text', @path) - # tk_call_without_enc(self.class::TkCommandNames[0], @path) - #end - super(keys) - init_instance_variable - end - private :create_self - - def index(index) - tk_send_without_enc('index', _get_eval_enc_str(index)) - end - - def get_displaychars(*index) - # Tk8.5 feature - get('-displaychars', *index) - end - - def value - _fromUTF8(tk_send_without_enc('get', "1.0", "end - 1 char")) - end - - def value= (val) - tk_send_without_enc('delete', "1.0", 'end') - tk_send_without_enc('insert', "1.0", _get_eval_enc_str(val)) - val - end - - def clear - tk_send_without_enc('delete', "1.0", 'end') - self - end - alias erase clear - - def _addcmd(cmd) - @cmdtbl.push cmd - end - - def _addtag(name, obj) - @tags[name] = obj - end - - def tagid(tag) - if tag.kind_of?(TkTextTag) \ - || tag.kind_of?(TkTextMark) \ - || tag.kind_of?(TkTextImage) \ - || tag.kind_of?(TkTextWindow) - tag.id - else - tag # maybe an Array of configure paramters - end - end - private :tagid - - def tagid2obj(tagid) - if @tags[tagid] - @tags[tagid] - else - tagid - end - end - - def tag_names(index=None) - tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag', 'names', _get_eval_enc_str(index)))).collect{|elt| - tagid2obj(elt) - } - end - - def mark_names - tk_split_simplelist(_fromUTF8(tk_send_without_enc('mark', 'names'))).collect{|elt| - tagid2obj(elt) - } - end - - def mark_gravity(mark, direction=nil) - if direction - tk_send_without_enc('mark', 'gravity', - _get_eval_enc_str(mark), direction) - self - else - tk_send_without_enc('mark', 'gravity', _get_eval_enc_str(mark)) - end - end - - def mark_set(mark, index) - tk_send_without_enc('mark', 'set', _get_eval_enc_str(mark), - _get_eval_enc_str(index)) - self - end - alias set_mark mark_set - - def mark_unset(*marks) - tk_send_without_enc('mark', 'unset', - *(marks.collect{|mark| _get_eval_enc_str(mark)})) - self - end - alias unset_mark mark_unset - - def mark_next(index) - tagid2obj(_fromUTF8(tk_send_without_enc('mark', 'next', - _get_eval_enc_str(index)))) - end - alias next_mark mark_next - - def mark_previous(index) - tagid2obj(_fromUTF8(tk_send_without_enc('mark', 'previous', - _get_eval_enc_str(index)))) - end - alias previous_mark mark_previous - - def image_cget(index, slot) - case slot.to_s - when 'text', 'label', 'show', 'data', 'file' - _fromUTF8(tk_send_without_enc('image', 'cget', - _get_eval_enc_str(index), "-#{slot}")) - else - tk_tcl2ruby(_fromUTF8(tk_send_without_enc('image', 'cget', - _get_eval_enc_str(index), - "-#{slot}"))) - end - end - - def image_configure(index, slot, value=None) - if slot.kind_of? Hash - _fromUTF8(tk_send_without_enc('image', 'configure', - _get_eval_enc_str(index), - *hash_kv(slot, true))) - else - _fromUTF8(tk_send_without_enc('image', 'configure', - _get_eval_enc_str(index), - "-#{slot}", - _get_eval_enc_str(value))) - end - self - end - - def image_configinfo(index, slot = nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - case slot.to_s - when 'text', 'label', 'show', 'data', 'file' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"))) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"))) - end - conf[0] = conf[0][1..-1] - conf - else - tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)))).collect{|conflist| - conf = tk_split_simplelist(conflist) - conf[0] = conf[0][1..-1] - case conf[0] - when 'text', 'label', 'show', 'data', 'file' - else - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - if conf[4] - if conf[4].index('{') - conf[4] = tk_split_list(conf[4]) - else - conf[4] = tk_tcl2ruby(conf[4]) - end - end - end - conf[1] = conf[1][1..-1] if conf.size == 2 # alias info - conf - } - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - case slot.to_s - when 'text', 'label', 'show', 'data', 'file' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"))) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"))) - end - key = conf.shift[1..-1] - { key => conf } - else - ret = {} - tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)))).each{|conflist| - conf = tk_split_simplelist(conflist) - key = conf.shift[1..-1] - case key - when 'text', 'label', 'show', 'data', 'file' - else - if conf[2] - if conf[2].index('{') - conf[2] = tk_split_list(conf[2]) - else - conf[2] = tk_tcl2ruby(conf[2]) - end - end - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - end - if conf.size == 1 - ret[key] = conf[0][1..-1] # alias info - else - ret[key] = conf - end - } - ret - end - end - end - - def current_image_configinfo(index, slot = nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - conf = image_configinfo(index, slot) - {conf[0] => conf[4]} - else - ret = {} - image_configinfo(index).each{|conf| - ret[conf[0]] = conf[4] if conf.size > 2 - } - ret - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - ret = {} - image_configinfo(index, slot).each{|k, conf| - ret[k] = conf[-1] if conf.kind_of?(Array) - } - ret - end - end - - def image_names - tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'names'))).collect{|elt| - tagid2obj(elt) - } - end - - def set_insert(index) - tk_send_without_enc('mark','set','insert', _get_eval_enc_str(index)) - self - end - - def set_current(index) - tk_send_without_enc('mark','set','current', _get_eval_enc_str(index)) - self - end - - def insert(index, chars, *tags) - if tags[0].kind_of? Array - # multiple chars-taglist argument :: str, [tag,...], str, [tag,...], ... - args = [chars] - while tags.size > 0 - args << tags.shift.collect{|x|_get_eval_string(x)}.join(' ') # taglist - args << tags.shift if tags.size > 0 # chars - end - super index, *args - else - # single chars-taglist argument :: str, tag, tag, ... - if tags.size == 0 - super index, chars - else - super index, chars, tags.collect{|x|_get_eval_string(x)}.join(' ') - end - end - end - - def destroy - @tags = {} unless @tags - @tags.each_value do |t| - t.destroy - end - super - end - - def backspace - self.delete 'insert' - end - - def bbox(index) - list(tk_send_without_enc('bbox', _get_eval_enc_str(index))) - end - - def compare(idx1, op, idx2) - bool(tk_send_without_enc('compare', _get_eval_enc_str(idx1), - op, _get_eval_enc_str(idx2))) - end - - def count(idx1, idx2, *opts) - # opts are Tk8.5 feature - cnt = 0 - args = opts.collect{|opt| - str = opt.to_s - cnt += 1 if str != 'update' - '-' + str - } - args << _get_eval_enc_str(idx1) << _get_eval_enc_str(idx2) - if cnt <= 1 - number(tk_send_without_enc('count', *opts)) - else - list(tk_send_without_enc('count', *opts)) - end - end - - def count_info(idx1, idx2, update=true) - # Tk8.5 feature - opts = [ - :chars, :displaychars, :displayindices, :displaylines, - :indices, :lines, :xpixels, :ypixels - ] - if update - lst = count(idx1, idx2, :update, *opts) - else - lst = count(idx1, idx2, *opts) - end - info = {} - opts.each_with_index{|key, idx| info[key] = lst[idx]} - info - end - - def replace(idx1, idx2, *opts) - tk_send('replace', idx1, idx2, *opts) - self - end - - def debug - bool(tk_send_without_enc('debug')) - end - def debug=(boolean) - tk_send_without_enc('debug', boolean) - #self - boolean - end - - def dlineinfo(index) - list(tk_send_without_enc('dlineinfo', _get_eval_enc_str(index))) - end - - def modified? - bool(tk_send_without_enc('edit', 'modified')) - end - def modified(mode) - tk_send_without_enc('edit', 'modified', mode) - self - end - def modified=(mode) - modified(mode) - mode - end - - def edit_redo - tk_send_without_enc('edit', 'redo') - self - end - def edit_reset - tk_send_without_enc('edit', 'reset') - self - end - def edit_separator - tk_send_without_enc('edit', 'separator') - self - end - def edit_undo - tk_send_without_enc('edit', 'undo') - self - end - - def xview_pickplace(index) - tk_send_without_enc('xview', '-pickplace', _get_eval_enc_str(index)) - self - end - - def yview_pickplace(index) - tk_send_without_enc('yview', '-pickplace', _get_eval_enc_str(index)) - self - end - - def text_copy - # Tk8.4 feature - tk_call_without_enc('tk_textCopy', @path) - self - end - - def text_cut - # Tk8.4 feature - tk_call_without_enc('tk_textCut', @path) - self - end - - def text_paste - # Tk8.4 feature - tk_call_without_enc('tk_textPaste', @path) - self - end - - def tag_add(tag, index1, index2=None) - tk_send_without_enc('tag', 'add', _get_eval_enc_str(tag), - _get_eval_enc_str(index1), - _get_eval_enc_str(index2)) - self - end - alias addtag tag_add - alias add_tag tag_add - - def tag_delete(*tags) - tk_send_without_enc('tag', 'delete', - *(tags.collect{|tag| _get_eval_enc_str(tag)})) - if TkTextTag::TTagID_TBL[@path] - tags.each{|tag| - if tag.kind_of? TkTextTag - TkTextTag::TTagID_TBL[@path].delete(tag.id) - else - TkTextTag::TTagID_TBL[@path].delete(tag) - end - } - end - self - end - alias deltag tag_delete - alias delete_tag tag_delete - - def tag_bind(tag, seq, cmd=Proc.new, args=nil) - _bind([@path, 'tag', 'bind', tag], seq, cmd, args) - self - end - - def tag_bind_append(tag, seq, cmd=Proc.new, args=nil) - _bind_append([@path, 'tag', 'bind', tag], seq, cmd, args) - self - end - - def tag_bind_remove(tag, seq) - _bind_remove([@path, 'tag', 'bind', tag], seq) - self - end - - def tag_bindinfo(tag, context=nil) - _bindinfo([@path, 'tag', 'bind', tag], context) - end - -=begin - def tag_cget(tag, key) - case key.to_s - when 'text', 'label', 'show', 'data', 'file' - tk_call_without_enc(@path, 'tag', 'cget', - _get_eval_enc_str(tag), "-#{key}") - when 'font', 'kanjifont' - #fnt = tk_tcl2ruby(tk_send('tag', 'cget', tag, "-#{key}")) - fnt = tk_tcl2ruby(_fromUTF8(tk_send_without_enc('tag','cget',_get_eval_enc_str(tag),'-font'))) - unless fnt.kind_of?(TkFont) - fnt = tagfontobj(tag, fnt) - end - if key.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/ - # obsolete; just for compatibility - fnt.kanji_font - else - fnt - end - else - tk_tcl2ruby(_fromUTF8(tk_call_without_enc(@path,'tag','cget',_get_eval_enc_str(tag),"-#{key}"))) - end - end - - def tag_configure(tag, key, val=None) - if key.kind_of? Hash - key = _symbolkey2str(key) - if ( key['font'] || key['kanjifont'] \ - || key['latinfont'] || key['asciifont'] ) - tagfont_configure(tag, key) - else - tk_send_without_enc('tag', 'configure', _get_eval_enc_str(tag), - *hash_kv(key, true)) - end - - else - if key == 'font' || key == :font || - key == 'kanjifont' || key == :kanjifont || - key == 'latinfont' || key == :latinfont || - key == 'asciifont' || key == :asciifont - if val == None - tagfontobj(tag) - else - tagfont_configure(tag, {key=>val}) - end - else - tk_send_without_enc('tag', 'configure', _get_eval_enc_str(tag), - "-#{key}", _get_eval_enc_str(val)) - end - end - self - end - - def tag_configinfo(tag, key=nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if key - case key.to_s - when 'text', 'label', 'show', 'data', 'file' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}"))) - when 'font', 'kanjifont' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}"))) - conf[4] = tagfont_configinfo(tag, conf[4]) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}"))) - end - conf[0] = conf[0][1..-1] - conf - else - ret = tk_split_simplelist(_fromUTF8(tk_send('tag','configure',_get_eval_enc_str(tag)))).collect{|conflist| - conf = tk_split_simplelist(conflist) - conf[0] = conf[0][1..-1] - case conf[0] - when 'text', 'label', 'show', 'data', 'file' - else - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - if conf[4] - if conf[4].index('{') - conf[4] = tk_split_list(conf[4]) - else - conf[4] = tk_tcl2ruby(conf[4]) - end - end - end - conf[1] = conf[1][1..-1] if conf.size == 2 # alias info - conf - } - fontconf = ret.assoc('font') - if fontconf - ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'} - fontconf[4] = tagfont_configinfo(tag, fontconf[4]) - ret.push(fontconf) - else - ret - end - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - if key - case key.to_s - when 'text', 'label', 'show', 'data', 'file' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}"))) - when 'font', 'kanjifont' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}"))) - conf[4] = tagfont_configinfo(tag, conf[4]) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}"))) - end - key = conf.shift[1..-1] - { key => conf } - else - ret = {} - tk_split_simplelist(_fromUTF8(tk_send('tag','configure',_get_eval_enc_str(tag)))).each{|conflist| - conf = tk_split_simplelist(conflist) - key = conf.shift[1..-1] - case key - when 'text', 'label', 'show', 'data', 'file' - else - if conf[2] - if conf[2].index('{') - conf[2] = tk_split_list(conf[2]) - else - conf[2] = tk_tcl2ruby(conf[2]) - end - end - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - end - if conf.size == 1 - ret[key] = conf[0][1..-1] # alias info - else - ret[key] = conf - end - } - fontconf = ret['font'] - if fontconf - ret.delete('font') - ret.delete('kanjifont') - fontconf[3] = tagfont_configinfo(tag, fontconf[3]) - ret['font'] = fontconf - end - ret - end - end - end - - def current_tag_configinfo(tag, key=nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if key - conf = tag_configinfo(tag, key) - {conf[0] => conf[4]} - else - ret = {} - tag_configinfo(tag).each{|conf| - ret[conf[0]] = conf[4] if conf.size > 2 - } - ret - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - ret = {} - tag_configinfo(tag, key).each{|k, conf| - ret[k] = conf[-1] if conf.kind_of?(Array) - } - ret - end - end -=end - - def tag_raise(tag, above=None) - tk_send_without_enc('tag', 'raise', _get_eval_enc_str(tag), - _get_eval_enc_str(above)) - self - end - - def tag_lower(tag, below=None) - tk_send_without_enc('tag', 'lower', _get_eval_enc_str(tag), - _get_eval_enc_str(below)) - self - end - - def tag_remove(tag, *indices) - tk_send_without_enc('tag', 'remove', _get_eval_enc_str(tag), - *(indices.collect{|idx| _get_eval_enc_str(idx)})) - self - end - - def tag_ranges(tag) - l = tk_split_simplelist(tk_send_without_enc('tag', 'ranges', - _get_eval_enc_str(tag))) - r = [] - while key=l.shift - r.push [key, l.shift] - end - r - end - - def tag_nextrange(tag, first, last=None) - tk_split_list(tk_send_without_enc('tag', 'nextrange', - _get_eval_enc_str(tag), - _get_eval_enc_str(first), - _get_eval_enc_str(last))) - end - - def tag_prevrange(tag, first, last=None) - tk_split_list(tk_send_without_enc('tag', 'prevrange', - _get_eval_enc_str(tag), - _get_eval_enc_str(first), - _get_eval_enc_str(last))) - end - -=begin - def window_cget(index, slot) - case slot.to_s - when 'text', 'label', 'show', 'data', 'file' - _fromUTF8(tk_send_without_enc('window', 'cget', - _get_eval_enc_str(index), "-#{slot}")) - when 'font', 'kanjifont' - #fnt = tk_tcl2ruby(tk_send('window', 'cget', index, "-#{slot}")) - fnt = tk_tcl2ruby(_fromUTF8(tk_send_without_enc('window', 'cget', _get_eval_enc_str(index), '-font'))) - unless fnt.kind_of?(TkFont) - fnt = tagfontobj(index, fnt) - end - if slot.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/ - # obsolete; just for compatibility - fnt.kanji_font - else - fnt - end - else - tk_tcl2ruby(_fromUTF8(tk_send_without_enc('window', 'cget', _get_eval_enc_str(index), "-#{slot}"))) - end - end - - def window_configure(index, slot, value=None) - if index.kind_of? TkTextWindow - index.configure(slot, value) - else - if slot.kind_of? Hash - slot = _symbolkey2str(slot) - win = slot['window'] - # slot['window'] = win.epath if win.kind_of?(TkWindow) - slot['window'] = _epath(win) if win - if slot['create'] - p_create = slot['create'] - if p_create.kind_of? Proc -#=begin - slot['create'] = install_cmd(proc{ - id = p_create.call - if id.kind_of?(TkWindow) - id.epath - else - id - end - }) -#=end - slot['create'] = install_cmd(proc{_epath(p_create.call)}) - end - end - tk_send_without_enc('window', 'configure', - _get_eval_enc_str(index), - *hash_kv(slot, true)) - else - if slot == 'window' || slot == :window - # id = value - # value = id.epath if id.kind_of?(TkWindow) - value = _epath(value) - end - if slot == 'create' || slot == :create - p_create = value - if p_create.kind_of? Proc -#=begin - value = install_cmd(proc{ - id = p_create.call - if id.kind_of?(TkWindow) - id.epath - else - id - end - }) -#=end - value = install_cmd(proc{_epath(p_create.call)}) - end - end - tk_send_without_enc('window', 'configure', - _get_eval_enc_str(index), - "-#{slot}", _get_eval_enc_str(value)) - end - end - self - end - - def window_configinfo(win, slot = nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - case slot.to_s - when 'text', 'label', 'show', 'data', 'file' - conf = tk_split_simplelist(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win), "-#{slot}"))) - else - conf = tk_split_list(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win), "-#{slot}"))) - end - conf[0] = conf[0][1..-1] - conf - else - tk_split_simplelist(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win)))).collect{|conflist| - conf = tk_split_simplelist(conflist) - conf[0] = conf[0][1..-1] - case conf[0] - when 'text', 'label', 'show', 'data', 'file' - else - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - if conf[4] - if conf[4].index('{') - conf[4] = tk_split_list(conf[4]) - else - conf[4] = tk_tcl2ruby(conf[4]) - end - end - end - conf[1] = conf[1][1..-1] if conf.size == 2 # alias info - conf - } - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - case slot.to_s - when 'text', 'label', 'show', 'data', 'file' - conf = tk_split_simplelist(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win), "-#{slot}"))) - else - conf = tk_split_list(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win), "-#{slot}"))) - end - key = conf.shift[1..-1] - { key => conf } - else - ret = {} - tk_split_simplelist(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win)))).each{|conflist| - conf = tk_split_simplelist(conflist) - key = conf.shift[1..-1] - case key - when 'text', 'label', 'show', 'data', 'file' - else - if conf[2] - if conf[2].index('{') - conf[2] = tk_split_list(conf[2]) - else - conf[2] = tk_tcl2ruby(conf[2]) - end - end - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - end - if conf.size == 1 - ret[key] = conf[0][1..-1] # alias info - else - ret[key] = conf - end - } - ret - end - end - end - - def current_window_configinfo(win, slot = nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - conf = window_configinfo(win, slot) - {conf[0] => conf[4]} - else - ret = {} - window_configinfo(win).each{|conf| - ret[conf[0]] = conf[4] if conf.size > 2 - } - ret - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - ret = {} - window_configinfo(win, slot).each{|k, conf| - ret[k] = conf[-1] if conf.kind_of?(Array) - } - ret - end - end -=end - - def window_names - tk_split_simplelist(_fromUTF8(tk_send_without_enc('window', 'names'))).collect{|elt| - tagid2obj(elt) - } - end - - def _ktext_length(txt) - if $KCODE !~ /n/i - return txt.gsub(/[^\Wa-zA-Z_\d]/, ' ').length - end - - # $KCODE == 'NONE' - if JAPANIZED_TK - tk_call_without_enc('kstring', 'length', - _get_eval_enc_str(txt)).to_i - else - begin - tk_call_without_enc('encoding', 'convertto', 'ascii', - _get_eval_enc_str(txt)).length - rescue StandardError, NameError - # sorry, I have no plan - txt.length - end - end - end - private :_ktext_length - - def tksearch(*args) - # call 'search' subcommand of text widget - # args ::= [<array_of_opts>] <pattern> <start_index> [<stop_index>] - # If <pattern> is regexp, then it must be a regular expression of Tcl - nocase = false - if args[0].kind_of?(Array) - opts = args.shift.collect{|opt| - s_opt = opt.to_s - nocase = true if s_opt == 'nocase' - '-' + s_opt - } - else - opts = [] - end - - if args[0].kind_of?(Regexp) - regexp = args.shift - if !nocase && (regexp.options & Regexp::IGNORECASE) != 0 - opts << '-nocase' - end - args.unshift(regexp.source) - end - - opts << '--' - - ret = tk_send('search', *(opts + args)) - if ret == "" - nil - else - ret - end - end - - def tksearch_with_count(*args) - # call 'search' subcommand of text widget - # args ::= [<array_of_opts>] <var> <pattern> <start_index> [<stop_index>] - # If <pattern> is regexp, then it must be a regular expression of Tcl - nocase = false - if args[0].kind_of?(Array) - opts = args.shift.collect{|opt| - s_opt = opt.to_s - nocase = true if s_opt == 'nocase' - '-' + s_opt - } - else - opts = [] - end - - opts << '-count' << args.shift - - if args[0].kind_of?(Regexp) - regexp = args.shift - if !nocase && (regexp.options & Regexp::IGNORECASE) != 0 - opts << '-nocase' - end - args.unshift(regexp.source) - end - - opts << '--' - - ret = tk_send('search', *(opts + args)) - if ret == "" - nil - else - ret - end - end - - def search_with_length(pat,start,stop=None) - pat = pat.chr if pat.kind_of? Integer - if stop != None - return ["", 0] if compare(start,'>=',stop) - txt = get(start,stop) - if (pos = txt.index(pat)) - match = $& - #pos = txt[0..(pos-1)].split('').length if pos > 0 - pos = _ktext_length(txt[0..(pos-1)]) if pos > 0 - if pat.kind_of? String - #return [index(start + " + #{pos} chars"), pat.split('').length] - return [index(start + " + #{pos} chars"), - _ktext_length(pat), pat.dup] - else - #return [index(start + " + #{pos} chars"), $&.split('').length] - return [index(start + " + #{pos} chars"), - _ktext_length(match), match] - end - else - return ["", 0] - end - else - txt = get(start,'end - 1 char') - if (pos = txt.index(pat)) - match = $& - #pos = txt[0..(pos-1)].split('').length if pos > 0 - pos = _ktext_length(txt[0..(pos-1)]) if pos > 0 - if pat.kind_of? String - #return [index(start + " + #{pos} chars"), pat.split('').length] - return [index(start + " + #{pos} chars"), - _ktext_length(pat), pat.dup] - else - #return [index(start + " + #{pos} chars"), $&.split('').length] - return [index(start + " + #{pos} chars"), - _ktext_length(match), match] - end - else - txt = get('1.0','end - 1 char') - if (pos = txt.index(pat)) - match = $& - #pos = txt[0..(pos-1)].split('').length if pos > 0 - pos = _ktext_length(txt[0..(pos-1)]) if pos > 0 - if pat.kind_of? String - #return [index("1.0 + #{pos} chars"), pat.split('').length] - return [index("1.0 + #{pos} chars"), - _ktext_length(pat), pat.dup] - else - #return [index("1.0 + #{pos} chars"), $&.split('').length] - return [index("1.0 + #{pos} chars"), _ktext_length(match), match] - end - else - return ["", 0] - end - end - end - end - - def search(pat,start,stop=None) - search_with_length(pat,start,stop)[0] - end - - def rsearch_with_length(pat,start,stop=None) - pat = pat.chr if pat.kind_of? Integer - if stop != None - return ["", 0] if compare(start,'<=',stop) - txt = get(stop,start) - if (pos = txt.rindex(pat)) - match = $& - #pos = txt[0..(pos-1)].split('').length if pos > 0 - pos = _ktext_length(txt[0..(pos-1)]) if pos > 0 - if pat.kind_of? String - #return [index(stop + " + #{pos} chars"), pat.split('').length] - return [index(stop + " + #{pos} chars"), _ktext_length(pat), pat.dup] - else - #return [index(stop + " + #{pos} chars"), $&.split('').length] - return [index(stop + " + #{pos} chars"), _ktext_length(match), match] - end - else - return ["", 0] - end - else - txt = get('1.0',start) - if (pos = txt.rindex(pat)) - match = $& - #pos = txt[0..(pos-1)].split('').length if pos > 0 - pos = _ktext_length(txt[0..(pos-1)]) if pos > 0 - if pat.kind_of? String - #return [index("1.0 + #{pos} chars"), pat.split('').length] - return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup] - else - #return [index("1.0 + #{pos} chars"), $&.split('').length] - return [index("1.0 + #{pos} chars"), _ktext_length(match), match] - end - else - txt = get('1.0','end - 1 char') - if (pos = txt.rindex(pat)) - match = $& - #pos = txt[0..(pos-1)].split('').length if pos > 0 - pos = _ktext_length(txt[0..(pos-1)]) if pos > 0 - if pat.kind_of? String - #return [index("1.0 + #{pos} chars"), pat.split('').length] - return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup] - else - #return [index("1.0 + #{pos} chars"), $&.split('').length] - return [index("1.0 + #{pos} chars"), _ktext_length(match), match] - end - else - return ["", 0] - end - end - end - end - - def rsearch(pat,start,stop=None) - rsearch_with_length(pat,start,stop)[0] - end - - def dump(type_info, *index, &block) - args = type_info.collect{|inf| '-' + inf} - args << '-command' << block if block - str = tk_send('dump', *(args + index)) - result = [] - sel = nil - i = 0 - while i < str.size - # retrieve key - idx = str.index(/ /, i) - result.push str[i..(idx-1)] - i = idx + 1 - - # retrieve value - case result[-1] - when 'text' - if str[i] == ?{ - # text formed as {...} - val, i = _retrieve_braced_text(str, i) - result.push val - else - # text which may contain backslahes - val, i = _retrieve_backslashed_text(str, i) - result.push val - end - else - idx = str.index(/ /, i) - val = str[i..(idx-1)] - case result[-1] - when 'mark' - case val - when 'insert' - result.push TkTextMarkInsert.new(self) - when 'current' - result.push TkTextMarkCurrent.new(self) - when 'anchor' - result.push TkTextMarkAnchor.new(self) - else - result.push tk_tcl2ruby(val) - end - when 'tagon' - if val == 'sel' - if sel - result.push sel - else - result.push TkTextTagSel.new(self) - end - else - result.push tk_tcl2ruby(val) - end - when 'tagoff' - result.push tk_tcl2ruby(val) - when 'window' - result.push tk_tcl2ruby(val) - end - i = idx + 1 - end - - # retrieve index - idx = str.index(/ /, i) - if idx - result.push str[i..(idx-1)] - i = idx + 1 - else - result.push str[i..-1] - break - end - end - - kvis = [] - until result.empty? - kvis.push [result.shift, result.shift, result.shift] - end - kvis # result is [[key1, value1, index1], [key2, value2, index2], ...] - end - - def _retrieve_braced_text(str, i) - cnt = 0 - idx = i - while idx < str.size - case str[idx] - when ?{ - cnt += 1 - when ?} - cnt -= 1 - if cnt == 0 - break - end - end - idx += 1 - end - return str[i+1..idx-1], idx + 2 - end - private :_retrieve_braced_text - - def _retrieve_backslashed_text(str, i) - j = i - idx = nil - loop { - idx = str.index(/ /, j) - if str[idx-1] == ?\\ - j += 1 - else - break - end - } - val = str[i..(idx-1)] - val.gsub!(/\\( |\{|\})/, '\1') - return val, idx + 1 - end - private :_retrieve_backslashed_text - - def dump_all(*index, &block) - dump(['all'], *index, &block) - end - def dump_mark(*index, &block) - dump(['mark'], *index, &block) - end - def dump_tag(*index, &block) - dump(['tag'], *index, &block) - end - def dump_text(*index, &block) - dump(['text'], *index, &block) - end - def dump_window(*index, &block) - dump(['window'], *index, &block) - end - def dump_image(*index, &block) - dump(['image'], *index, &block) - end -end diff --git a/ext/tk/lib/tk/textimage.rb b/ext/tk/lib/tk/textimage.rb deleted file mode 100644 index bd92387e3c..0000000000 --- a/ext/tk/lib/tk/textimage.rb +++ /dev/null @@ -1,72 +0,0 @@ -# -# tk/textimage.rb - treat Tk text image object -# -require 'tk' -require 'tk/text' - -class TkTextImage<TkObject - def initialize(parent, index, keys) - #unless parent.kind_of?(TkText) - # fail ArguemntError, "expect TkText for 1st argument" - #end - @t = parent - if index == 'end' - @path = TkTextMark.new(@t, tk_call(@t.path, 'index', 'end - 1 chars')) - elsif index.kind_of? TkTextMark - if tk_call_without_enc(@t.path,'index',index.path) == tk_call_without_enc(@t.path,'index','end') - @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', - 'end - 1 chars')) - else - @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', - index.path)) - end - else - @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', - _get_eval_enc_str(index))) - end - @path.gravity = 'left' - @index = @path.path - @id = tk_call_without_enc(@t.path, 'image', 'create', @index, - *hash_kv(keys, true)) - end - - def [](slot) - cget(slot) - end - def []=(slot, value) - configure(slot, value) - value - end - - def cget(slot) - @t.image_cget(@index, slot) - end - - def configure(slot, value=None) - @t.image_configure(@index, slot, value) - self - end -# def configure(slot, value) -# tk_call @t.path, 'image', 'configure', @index, "-#{slot}", value -# end - - def configinfo(slot = nil) - @t.image_configinfo(@index, slot) - end - - def current_configinfo(slot = nil) - @t.current_image_configinfo(@index, slot) - end - - def image - img = tk_call_without_enc(@t.path, 'image', 'configure', @index, '-image') - TkImage::Tk_IMGTBL[img]? TkImage::Tk_IMGTBL[img] : img - end - - def image=(value) - tk_call_without_enc(@t.path, 'image', 'configure', @index, '-image', - _get_eval_enc_str(value)) - #self - value - end -end diff --git a/ext/tk/lib/tk/textmark.rb b/ext/tk/lib/tk/textmark.rb deleted file mode 100644 index 6004b86028..0000000000 --- a/ext/tk/lib/tk/textmark.rb +++ /dev/null @@ -1,135 +0,0 @@ -# -# tk/textmark.rb - methods for treating text marks -# -require 'tk' -require 'tk/text' - -class TkTextMark<TkObject - TMarkID_TBL = TkCore::INTERP.create_table - Tk_TextMark_ID = ['mark'.freeze, '00000'.taint].freeze - - TkCore::INTERP.init_ip_env{ TMarkID_TBL.clear } - - def TkTextMark.id2obj(text, id) - tpath = text.path - return id unless TMarkID_TBL[tpath] - TMarkID_TBL[tpath][id]? TMarkID_TBL[tpath][id]: id - end - - def initialize(parent, index) - #unless parent.kind_of?(TkText) - # fail ArguemntError, "expect TkText for 1st argument" - #end - @parent = @t = parent - @tpath = parent.path - # @path = @id = Tk_TextMark_ID.join('') - @path = @id = Tk_TextMark_ID.join(TkCore::INTERP._ip_id_) - TMarkID_TBL[@id] = self - TMarkID_TBL[@tpath] = {} unless TMarkID_TBL[@tpath] - TMarkID_TBL[@tpath][@id] = self - Tk_TextMark_ID[1].succ! - tk_call_without_enc(@t.path, 'mark', 'set', @id, - _get_eval_enc_str(index)) - @t._addtag id, self - end - - def id - @id - end - - def exist? - if ( tk_split_simplelist(_fromUTF8(tk_call_without_enc(@t.path, 'mark', 'names'))).find{|id| id == @id } ) - true - else - false - end - end - - def +(mod) - @id + ' + ' + mod - end - def -(mod) - @id + ' - ' + mod - end - - def set(where) - tk_call_without_enc(@t.path, 'mark', 'set', @id, - _get_eval_enc_str(where)) - self - end - - def unset - tk_call_without_enc(@t.path, 'mark', 'unset', @id) - self - end - alias destroy unset - - def gravity - tk_call_without_enc(@t.path, 'mark', 'gravity', @id) - end - - def gravity=(direction) - tk_call_without_enc(@t.path, 'mark', 'gravity', @id, direction) - #self - direction - end - - def next(index = nil) - if index - @t.tagid2obj(_fromUTF8(tk_call_without_enc(@t.path, 'mark', 'next', _get_eval_enc_str(index)))) - else - @t.tagid2obj(_fromUTF8(tk_call_without_enc(@t.path, 'mark', 'next', @id))) - end - end - - def previous(index = nil) - if index - @t.tagid2obj(_fromUTF8(tk_call_without_enc(@t.path, 'mark', 'previous', _get_eval_enc_str(index)))) - else - @t.tagid2obj(_fromUTF8(tk_call_without_enc(@t.path, 'mark', 'previous', @id))) - end - end -end - -class TkTextNamedMark<TkTextMark - def self.new(parent, name, *args) - if TMarkID_TBL[parent.path] && TMarkID_TBL[parent.path][name] - return TMarkID_TBL[parent.path][name] - else - super(parent, name, *args) - end - end - - def initialize(parent, name, index=nil) - #unless parent.kind_of?(TkText) - # fail ArguemntError, "expect TkText for 1st argument" - #end - @parent = @t = parent - @tpath = parent.path - @path = @id = name - TMarkID_TBL[@id] = self - TMarkID_TBL[@tpath] = {} unless TMarkID_TBL[@tpath] - TMarkID_TBL[@tpath][@id] = self unless TMarkID_TBL[@tpath][@id] - tk_call_without_enc(@t.path, 'mark', 'set', @id, - _get_eval_enc_str(index)) if index - @t._addtag id, self - end -end - -class TkTextMarkInsert<TkTextNamedMark - def self.new(parent,*args) - super(parent, 'insert', *args) - end -end - -class TkTextMarkCurrent<TkTextMark - def self.new(parent,*args) - super(parent, 'current', *args) - end -end - -class TkTextMarkAnchor<TkTextMark - def self.new(parent,*args) - super(parent, 'anchor', *args) - end -end diff --git a/ext/tk/lib/tk/texttag.rb b/ext/tk/lib/tk/texttag.rb deleted file mode 100644 index d2611509a4..0000000000 --- a/ext/tk/lib/tk/texttag.rb +++ /dev/null @@ -1,253 +0,0 @@ -# -# tk/texttag.rb - methods for treating text tags -# -require 'tk' -require 'tk/text' -require 'tk/tagfont' - -class TkTextTag<TkObject - include TkTreatTagFont - - TTagID_TBL = TkCore::INTERP.create_table - Tk_TextTag_ID = ['tag'.freeze, '00000'.taint].freeze - - TkCore::INTERP.init_ip_env{ TTagID_TBL.clear } - - def TkTextTag.id2obj(text, id) - tpath = text.path - return id unless TTagID_TBL[tpath] - TTagID_TBL[tpath][id]? TTagID_TBL[tpath][id]: id - end - - def initialize(parent, *args) - #unless parent.kind_of?(TkText) - # fail ArguemntError, "expect TkText for 1st argument" - #end - @parent = @t = parent - @tpath = parent.path - # @path = @id = Tk_TextTag_ID.join('') - @path = @id = Tk_TextTag_ID.join(TkCore::INTERP._ip_id_) - # TTagID_TBL[@id] = self - TTagID_TBL[@tpath] = {} unless TTagID_TBL[@tpath] - TTagID_TBL[@tpath][@id] = self - Tk_TextTag_ID[1].succ! - #tk_call @t.path, "tag", "configure", @id, *hash_kv(keys) - if args != [] then - keys = args.pop - if keys.kind_of? Hash then - add(*args) if args != [] - configure(keys) - else - args.push keys - add(*args) - end - end - @t._addtag id, self - end - - def id - @id - end - - def exist? - if ( tk_split_simplelist(_fromUTF8(tk_call_without_enc(@t.path, 'tag', 'names'))).find{|id| id == @id } ) - true - else - false - end - end - - def first - @id + '.first' - end - - def last - @id + '.last' - end - - def add(*indices) - tk_call_without_enc(@t.path, 'tag', 'add', @id, - *(indices.collect{|idx| _get_eval_enc_str(idx)})) - self - end - - def remove(*indices) - tk_call_without_enc(@t.path, 'tag', 'remove', @id, - *(indices.collect{|idx| _get_eval_enc_str(idx)})) - self - end - - def ranges - l = tk_split_simplelist(tk_call_without_enc(@t.path, 'tag', 'ranges', @id)) - r = [] - while key=l.shift - r.push [key, l.shift] - end - r - end - - def nextrange(first, last=None) - tk_split_list(tk_call_without_enc(@t.path, 'tag', 'nextrange', @id, - _get_eval_enc_str(first), - _get_eval_enc_str(last))) - end - - def prevrange(first, last=None) - tk_split_list(tk_call_without_enc(@t.path, 'tag', 'prevrange', @id, - _get_eval_enc_str(first), - _get_eval_enc_str(last))) - end - - def [](key) - cget key - end - - def []=(key,val) - configure key, val - val - end - - def cget(key) - @t.tag_cget @id, key - end -=begin - def cget(key) - case key.to_s - when 'text', 'label', 'show', 'data', 'file' - _fromUTF8(tk_call_without_enc(@t.path, 'tag', 'cget', @id, "-#{key}")) - when 'font', 'kanjifont' - #fnt = tk_tcl2ruby(tk_call(@t.path, 'tag', 'cget', @id, "-#{key}")) - fnt = tk_tcl2ruby(_fromUTF8(tk_call_without_enc(@t.path, 'tag', 'cget', - @id, '-font'))) - unless fnt.kind_of?(TkFont) - fnt = tagfontobj(@id, fnt) - end - if key.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/ - # obsolete; just for compatibility - fnt.kanji_font - else - fnt - end - else - tk_tcl2ruby(_fromUTF8(tk_call_without_enc(@t.path, 'tag', 'cget', - @id, "-#{key}"))) - end - end -=end - - def configure(key, val=None) - @t.tag_configure @id, key, val - end -# def configure(key, val=None) -# if key.kind_of? Hash -# tk_call @t.path, 'tag', 'configure', @id, *hash_kv(key) -# else -# tk_call @t.path, 'tag', 'configure', @id, "-#{key}", val -# end -# end -# def configure(key, value) -# if value == FALSE -# value = "0" -# elsif value.kind_of? Proc -# value = install_cmd(value) -# end -# tk_call @t.path, 'tag', 'configure', @id, "-#{key}", value -# end - - def configinfo(key=nil) - @t.tag_configinfo @id, key - end - - def current_configinfo(key=nil) - @t.current_tag_configinfo @id, key - end - - def bind(seq, cmd=Proc.new, args=nil) - _bind([@t.path, 'tag', 'bind', @id], seq, cmd, args) - self - end - - def bind_append(seq, cmd=Proc.new, args=nil) - _bind_append([@t.path, 'tag', 'bind', @id], seq, cmd, args) - self - end - - def bind_remove(seq) - _bind_remove([@t.path, 'tag', 'bind', @id], seq) - self - end - - def bindinfo(context=nil) - _bindinfo([@t.path, 'tag', 'bind', @id], context) - end - - def raise(above=None) - tk_call_without_enc(@t.path, 'tag', 'raise', @id, - _get_eval_enc_str(above)) - self - end - - def lower(below=None) - tk_call_without_enc(@t.path, 'tag', 'lower', @id, - _get_eval_enc_str(below)) - self - end - - def destroy - tk_call_without_enc(@t.path, 'tag', 'delete', @id) - TTagID_TBL[@tpath].delete(@id) if TTagID_TBL[@tpath] - self - end -end - -class TkTextNamedTag<TkTextTag - def self.new(parent, name, *args) - if TTagID_TBL[parent.path] && TTagID_TBL[parent.path][name] - tagobj = TTagID_TBL[parent.path][name] - if args != [] then - keys = args.pop - if keys.kind_of? Hash then - tagobj.add(*args) if args != [] - tagobj.configure(keys) - else - args.push keys - tagobj.add(*args) - end - end - return tagobj - else - super(parent, name, *args) - end - end - - def initialize(parent, name, *args) - #unless parent.kind_of?(TkText) - # fail ArguemntError, "expect TkText for 1st argument" - #end - @parent = @t = parent - @tpath = parent.path - @path = @id = name - TTagID_TBL[@tpath] = {} unless TTagID_TBL[@tpath] - TTagID_TBL[@tpath][@id] = self unless TTagID_TBL[@tpath][@id] - #if mode - # tk_call @t.path, "addtag", @id, *args - #end - if args != [] then - keys = args.pop - if keys.kind_of? Hash then - add(*args) if args != [] - configure(keys) - else - args.push keys - add(*args) - end - end - @t._addtag id, self - end -end - -class TkTextTagSel<TkTextNamedTag - def self.new(parent, *args) - super(parent, 'sel', *args) - end -end diff --git a/ext/tk/lib/tk/textwindow.rb b/ext/tk/lib/tk/textwindow.rb deleted file mode 100644 index 59fafff181..0000000000 --- a/ext/tk/lib/tk/textwindow.rb +++ /dev/null @@ -1,137 +0,0 @@ -# -# tk/textwindow.rb - treat Tk text window object -# -require 'tk' -require 'tk/text' - -class TkTextWindow<TkObject - def initialize(parent, index, keys) - #unless parent.kind_of?(TkText) - # fail ArguemntError, "expect TkText for 1st argument" - #end - @t = parent - if index == 'end' - @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', - 'end - 1 chars')) - elsif index.kind_of? TkTextMark - if tk_call_without_enc(@t.path,'index',index.path) == tk_call_without_enc(@t.path,'index','end') - @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', - 'end - 1 chars')) - else - @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', - index.path)) - end - else - @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', _get_eval_enc_str(index))) - end - @path.gravity = 'left' - @index = @path.path - keys = _symbolkey2str(keys) - @id = keys['window'] - # keys['window'] = @id.epath if @id.kind_of?(TkWindow) - keys['window'] = _epath(@id) if @id - if keys['create'] - @p_create = keys['create'] - if @p_create.kind_of? Proc -=begin - keys['create'] = install_cmd(proc{ - @id = @p_create.call - if @id.kind_of?(TkWindow) - @id.epath - else - @id - end - }) -=end - keys['create'] = install_cmd(proc{@id = @p_create.call; _epath(@id)}) - end - end - tk_call_without_enc(@t.path, 'window', 'create', @index, - *hash_kv(keys, true)) - end - - def [](slot) - cget(slot) - end - def []=(slot, value) - configure(slot, value) - value - end - - def cget(slot) - @t.window_cget(@index, slot) - end - - def configure(slot, value=None) - if slot.kind_of? Hash - slot = _symbolkey2str(slot) - if slot['window'] - @id = slot['window'] - # slot['window'] = @id.epath if @id.kind_of?(TkWindow) - slot['window'] = _epath(@id) if @id - end - if slot['create'] - self.create=slot.delete('create') - end - if slot.size > 0 - tk_call_without_enc(@t.path, 'window', 'configure', @index, - *hash_kv(slot, true)) - end - else - if slot == 'window' || slot == :window - @id = value - # value = @id.epath if @id.kind_of?(TkWindow) - value = _epath(@id) if @id - end - if slot == 'create' || slot == :create - self.create=value - else - tk_call_without_enc(@t.path, 'window', 'configure', @index, - "-#{slot}", _get_eval_enc_str(value)) - end - end - self - end - - def configinfo(slot = nil) - @t.window_configinfo(@index, slot) - end - - def current_configinfo(slot = nil) - @t.current_window_configinfo(@index, slot) - end - - def window - @id - end - - def window=(value) - @id = value - # value = @id.epath if @id.kind_of?(TkWindow) - value = _epath(@id) if @id - tk_call_without_enc(@t.path, 'window', 'configure', @index, - '-window', _get_eval_enc_str(value)) - value - end - - def create - @p_create - end - - def create=(value) - @p_create = value - if @p_create.kind_of? Proc - value = install_cmd(proc{ - @id = @p_create.call - if @id.kind_of?(TkWindow) - @id.epath - else - @id - end - }) - end - tk_call_without_enc(@t.path, 'window', 'configure', @index, - '-create', _get_eval_enc_str(value)) - value - end -end diff --git a/ext/tk/lib/tk/timer.rb b/ext/tk/lib/tk/timer.rb deleted file mode 100644 index f3b6465f78..0000000000 --- a/ext/tk/lib/tk/timer.rb +++ /dev/null @@ -1,490 +0,0 @@ -# -# tk/timer.rb : methods for Tcl/Tk after command -# -# $Id$ -# -require 'tk' - -class TkTimer - include TkCore - extend TkCore - - TkCommandNames = ['after'.freeze].freeze - - Tk_CBID = ['a'.freeze, '00000'.taint].freeze - Tk_CBTBL = {}.taint - - TkCore::INTERP.add_tk_procs('rb_after', 'id', <<-'EOL') - if {[set st [catch {eval {ruby_cmd TkTimer callback} $id} ret]] != 0} { - return -code $st $ret - } { - return $ret - } - EOL - - DEFAULT_IGNORE_EXCEPTIONS = [ NameError, RuntimeError ].freeze - - ############################### - # class methods - ############################### - def self.start(*args, &b) - self.new(*args, &b).start - end - - def self.callback(obj_id) - ex_obj = Tk_CBTBL[obj_id] - return "" if ex_obj == nil; # canceled - ex_obj.cb_call - end - - def self.info(obj = nil) - if obj - if obj.kind_of?(TkTimer) - if obj.after_id - inf = tk_split_list(tk_call_without_enc('after','info',obj.after_id)) - [Tk_CBTBL[inf[0][1]], inf[1]] - else - nil - end - else - fail ArgumentError, "TkTimer object is expected" - end - else - tk_call_without_enc('after', 'info').split(' ').collect!{|id| - ret = Tk_CBTBL.find{|key,val| val.after_id == id} - (ret == nil)? id: ret[1] - } - end - end - - - ############################### - # instance methods - ############################### - def do_callback - @in_callback = true - @after_id = nil - begin - @return_value = @current_proc.call(self) - rescue SystemExit - exit(0) - rescue Interrupt - exit!(1) - rescue Exception => e - if @cancel_on_exception && - @cancel_on_exception.find{|exc| e.kind_of?(exc)} - cancel - @return_value = e - @in_callback = false - return e - else - fail e - end - end - if @set_next - set_next_callback(@current_args) - else - @set_next = true - end - @in_callback = false - @return_value - end - - def set_callback(sleep, args=nil) - if TkCore::INTERP.deleted? - self.cancel - return self - end - @after_script = "rb_after #{@id}" - @after_id = tk_call_without_enc('after', sleep, @after_script) - @current_args = args - @current_script = [sleep, @after_script] - self - end - - def set_next_callback(args) - if @running == false || @proc_max == 0 || @do_loop == 0 - Tk_CBTBL.delete(@id) ;# for GC - @running = false - @wait_var.value = 0 - return - end - if @current_pos >= @proc_max - if @do_loop < 0 || (@do_loop -= 1) > 0 - @current_pos = 0 - else - Tk_CBTBL.delete(@id) ;# for GC - @running = false - @wait_var.value = 0 - return - end - end - - @current_args = args - - if @sleep_time.kind_of? Proc - sleep = @sleep_time.call(self) - else - sleep = @sleep_time - end - @current_sleep = sleep - - cmd, *cmd_args = @loop_proc[@current_pos] - @current_pos += 1 - @current_proc = cmd - - set_callback(sleep, cmd_args) - end - - def initialize(*args, &b) - # @id = Tk_CBID.join('') - @id = Tk_CBID.join(TkCore::INTERP._ip_id_) - Tk_CBID[1].succ! - - @wait_var = TkVariable.new(0) - - @cb_cmd = TkCore::INTERP.get_cb_entry(self.method(:do_callback)) - - @set_next = true - - @init_sleep = 0 - @init_proc = nil - @init_args = [] - - @current_script = [] - @current_proc = nil - @current_args = nil - @return_value = nil - - @sleep_time = 0 - @current_sleep = 0 - @loop_exec = 0 - @do_loop = 0 - @loop_proc = [] - @proc_max = 0 - @current_pos = 0 - - @after_id = nil - @after_script = nil - - @cancel_on_exception = DEFAULT_IGNORE_EXCEPTIONS - # Unless @cancel_on_exception, Ruby/Tk shows an error dialog box when - # an excepsion is raised on TkTimer callback procedure. - # If @cancel_on_exception is an array of exception classes and the raised - # exception is included in the array, Ruby/Tk cancels executing TkTimer - # callback procedures silently (TkTimer#cancel is called and no dialog is - # shown). - - if b - case args.size - when 0 - add_procs(b) - when 1 - args << -1 << b - else - args << b - end - end - - set_procs(*args) if args != [] - - @running = false - @in_callback = false - end - - attr :after_id - attr :after_script - attr :current_proc - attr :current_args - attr :current_sleep - alias :current_interval :current_sleep - attr :return_value - - attr_accessor :loop_exec - - def cb_call - @cb_cmd.call - end - - def get_procs - [@init_sleep, @init_proc, @init_args, @sleep_time, @loop_exec, @loop_proc] - end - - def current_status - [@running, @current_sleep, @current_proc, @current_args, - @do_loop, @cancel_on_exception] - end - - def cancel_on_exception? - @cancel_on_exception - end - - def cancel_on_exception=(mode) - if mode.kind_of?(Array) - @cancel_on_exception = mode - elsif mode - @cancel_on_exception = DEFAULT_IGNORE_EXCEPTIONS - else - @cancel_on_exception = false - end - #self - end - - def running? - @running - end - - def loop_rest - @do_loop - end - - def loop_rest=(rest) - @do_loop = rest - #self - end - - def set_interval(interval) - if interval != 'idle' \ - && !interval.kind_of?(Integer) && !interval.kind_of?(Proc) - fail ArguemntError, "expect Integer or Proc" - end - @sleep_time = interval - end - - def set_procs(interval, loop_exec, *procs) - if interval != 'idle' \ - && !interval.kind_of?(Integer) && !interval.kind_of?(Proc) - fail ArguemntError, "expect Integer or Proc for 1st argument" - end - @sleep_time = interval - - @loop_proc = [] - procs.each{|e| - if e.kind_of? Proc - @loop_proc.push([e]) - else - @loop_proc.push(e) - end - } - @proc_max = @loop_proc.size - @current_pos = 0 - - if loop_exec.kind_of?(Integer) && loop_exec < 0 - @loop_exec = -1 - elsif loop_exec == true - @loop_exec = -1 - elsif loop_exec == nil || loop_exec == false || loop_exec == 0 - @loop_exec = 0 - else - if not loop_exec.kind_of?(Integer) - fail ArguemntError, "expect Integer for 2nd argument" - end - @loop_exec = loop_exec - end - @do_loop = @loop_exec - - self - end - - def add_procs(*procs) - procs.each{|e| - if e.kind_of? Proc - @loop_proc.push([e]) - else - @loop_proc.push(e) - end - } - @proc_max = @loop_proc.size - - self - end - - def delete_procs(*procs) - procs.each{|e| - if e.kind_of? Proc - @loop_proc.delete([e]) - else - @loop_proc.delete(e) - end - } - @proc_max = @loop_proc.size - - cancel if @proc_max == 0 - - self - end - - def delete_at(n) - @loop_proc.delete_at(n) - @proc_max = @loop_proc.size - cancel if @proc_max == 0 - self - end - - def set_start_proc(sleep=nil, init_proc=nil, *init_args, &b) - # set parameters for 'restart' - sleep = @init_sleep unless sleep - - if !sleep == 'idle' && !sleep.kind_of?(Integer) - fail ArguemntError, "expect Integer or 'idle' for 1st argument" - end - - @init_sleep = sleep - @init_proc = init_proc - @init_args = init_args - - @init_proc = b if !@init_proc && b - @init_proc = proc{|*args| } if @init_sleep > 0 && !@init_proc - - self - end - - def start(*init_args, &b) - return nil if @running - - Tk_CBTBL[@id] = self - @do_loop = @loop_exec - @current_pos = 0 - @after_id = nil - - @init_sleep = 0 - @init_proc = nil - @init_args = nil - - argc = init_args.size - if argc > 0 - sleep = init_args.shift - if !sleep == 'idle' && !sleep.kind_of?(Integer) - fail ArguemntError, "expect Integer or 'idle' for 1st argument" - end - @init_sleep = sleep - end - @init_proc = init_args.shift if argc > 1 - @init_args = init_args if argc > 2 - - @init_proc = b if !@init_proc && b - @init_proc = proc{|*args| } if @init_sleep > 0 && !@init_proc - - @current_sleep = @init_sleep - @running = true - if @init_proc - if not @init_proc.kind_of? Proc - fail ArgumentError, "Argument '#{@init_proc}' need to be Proc" - end - @current_proc = @init_proc - set_callback(@init_sleep, @init_args) - @set_next = false if @in_callback - else - set_next_callback(@init_args) - end - - self - end - - def reset(*reset_args) - restart() if @running - - if @init_proc - @return_value = @init_proc.call(self) - else - @return_value = nil - end - - @current_pos = 0 - @current_args = @init_args - @set_next = false if @in_callback - - self - end - - def restart(*restart_args, &b) - cancel if @running - if restart_args == [] && !b - start(@init_sleep, @init_proc, *@init_args) - else - start(*restart_args, &b) - end - end - - def cancel - @running = false - @wait_var.value = 0 - tk_call 'after', 'cancel', @after_id if @after_id - @after_id = nil - Tk_CBTBL.delete(@id) ;# for GC - self - end - alias stop cancel - - def continue(wait=nil) - fail RuntimeError, "is already running" if @running - sleep, cmd = @current_script - fail RuntimeError, "no procedure to continue" unless cmd - if wait - unless wait.kind_of? Integer - fail ArguemntError, "expect Integer for 1st argument" - end - sleep = wait - end - Tk_CBTBL[@id] = self - @running = true - @after_id = tk_call_without_enc('after', sleep, cmd) - self - end - - def skip - fail RuntimeError, "is not running now" unless @running - cancel - Tk_CBTBL[@id] = self - @running = true - set_next_callback(@current_args) - self - end - - def info - if @after_id - inf = tk_split_list(tk_call_without_enc('after', 'info', @after_id)) - [Tk_CBTBL[inf[0][1]], inf[1]] - else - nil - end - end - - def wait(on_thread = true, check_root = false) - if $SAFE >= 4 - fail SecurityError, "can't wait timer at $SAFE >= 4" - end - - unless @running - if @return_value.kind_of?(Exception) - fail @return_value - else - return @return_value - end - end - - @wait_var.wait(on_thread, check_root) - if @return_value.kind_of?(Exception) - fail @return_value - else - @return_value - end - end - def eventloop_wait(check_root = false) - wait(false, check_root) - end - def thread_wait(check_root = false) - wait(true, check_root) - end - def tkwait(on_thread = true) - wait(on_thread, true) - end - def eventloop_tkwait - wait(false, true) - end - def thread_tkwait - wait(true, true) - end -end - -TkAfter = TkTimer diff --git a/ext/tk/lib/tk/toplevel.rb b/ext/tk/lib/tk/toplevel.rb deleted file mode 100644 index b96e184aab..0000000000 --- a/ext/tk/lib/tk/toplevel.rb +++ /dev/null @@ -1,232 +0,0 @@ -# -# tk/toplevel.rb : treat toplevel widget -# -require 'tk' -require 'tk/wm' -require 'tk/menuspec' - -class TkToplevel<TkWindow - include Wm - include TkMenuSpec - - TkCommandNames = ['toplevel'.freeze].freeze - WidgetClassName = 'Toplevel'.freeze - WidgetClassNames[WidgetClassName] = self - -################# old version -# def initialize(parent=nil, screen=nil, classname=nil, keys=nil) -# if screen.kind_of? Hash -# keys = screen.dup -# else -# @screen = screen -# end -# @classname = classname -# if keys.kind_of? Hash -# keys = keys.dup -# @classname = keys.delete('classname') if keys.key?('classname') -# @colormap = keys.delete('colormap') if keys.key?('colormap') -# @container = keys.delete('container') if keys.key?('container') -# @screen = keys.delete('screen') if keys.key?('screen') -# @use = keys.delete('use') if keys.key?('use') -# @visual = keys.delete('visual') if keys.key?('visual') -# end -# super(parent, keys) -# end -# -# def create_self -# s = [] -# s << "-class" << @classname if @classname -# s << "-colormap" << @colormap if @colormap -# s << "-container" << @container if @container -# s << "-screen" << @screen if @screen -# s << "-use" << @use if @use -# s << "-visual" << @visual if @visual -# tk_call 'toplevel', @path, *s -# end -################# - - def _wm_command_option_chk(keys) - keys = {} unless keys - new_keys = {} - wm_cmds = {} - keys.each{|k,v| - if Wm.method_defined?(k) - case k - when 'screen','class','colormap','container','use','visual' - new_keys[k] = v - else - case self.method(k).arity - when -1,1 - wm_cmds[k] = v - else - new_keys[k] = v - end - end - else - new_keys[k] = v - end - } - [new_keys, wm_cmds] - end - private :_wm_command_option_chk - - def initialize(parent=nil, screen=nil, classname=nil, keys=nil) - my_class_name = nil - if self.class < WidgetClassNames[WidgetClassName] - my_class_name = self.class.name - my_class_name = nil if my_class_name == '' - end - if parent.kind_of? Hash - keys = _symbolkey2str(parent) - if keys.key?('classname') - keys['class'] = keys.delete('classname') - end - @classname = keys['class'] - @colormap = keys['colormap'] - @container = keys['container'] - @screen = keys['screen'] - @use = keys['use'] - @visual = keys['visual'] - if !@classname && my_class_name - keys['class'] = @classname = my_class_name - end - if @classname.kind_of? TkBindTag - @db_class = @classname - @classname = @classname.id - elsif @classname - @db_class = TkDatabaseClass.new(@classname) - else - @db_class = self.class - @classname = @db_class::WidgetClassName - end - keys, cmds = _wm_command_option_chk(keys) - super(keys) - cmds.each{|k,v| - if v.kind_of? Array - self.__send__(k,*v) - else - self.__send__(k,v) - end - } - return - end - - if screen.kind_of? Hash - keys = screen - else - @screen = screen - if classname.kind_of? Hash - keys = classname - else - @classname = classname - end - end - if keys.kind_of? Hash - keys = _symbolkey2str(keys) - if keys.key?('classname') - keys['class'] = keys.delete('classname') - end - @classname = keys['class'] unless @classname - @colormap = keys['colormap'] - @container = keys['container'] - @screen = keys['screen'] unless @screen - @use = keys['use'] - @visual = keys['visual'] - else - keys = {} - end - if !@classname && my_class_name - keys['class'] = @classname = my_class_name - end - if @classname.kind_of? TkBindTag - @db_class = @classname - @classname = @classname.id - elsif @classname - @db_class = TkDatabaseClass.new(@classname) - else - @db_class = self.class - @classname = @db_class::WidgetClassName - end - keys, cmds = _wm_command_option_chk(keys) - super(parent, keys) - cmds.each{|k,v| - if v.kind_of? Array - self.send(k,*v) - else - self.send(k,v) - end - } - end - - #def create_self(keys) - # if keys and keys != None - # tk_call_without_enc('toplevel', @path, *hash_kv(keys, true)) - # else - # tk_call_without_enc('toplevel', @path) - # end - #end - #private :create_self - - def specific_class - @classname - end - - def add_menu(menu_info, tearoff=false, opts=nil) - # See tk/menuspec.rb for menu_info. - # opts is a hash of default configs for all of cascade menus. - # Configs of menu_info can override it. - if tearoff.kind_of?(Hash) - opts = tearoff - tearoff = false - end - _create_menubutton(self, menu_info, tearoff, opts) - end - - def add_menubar(menu_spec, tearoff=false, opts=nil) - # See tk/menuspec.rb for menu_spec. - # opts is a hash of default configs for all of cascade menus. - # Configs of menu_spec can override it. - menu_spec.each{|info| add_menu(info, tearoff, opts)} - self.menu - end - - def self.database_class - if self == WidgetClassNames[WidgetClassName] || self.name == '' - self - else - TkDatabaseClass.new(self.name) - end - end - def self.database_classname - self.database_class.name - end - - def self.bind(*args) - if self == WidgetClassNames[WidgetClassName] || self.name == '' - super(*args) - else - TkDatabaseClass.new(self.name).bind(*args) - end - end - def self.bind_append(*args) - if self == WidgetClassNames[WidgetClassName] || self.name == '' - super(*args) - else - TkDatabaseClass.new(self.name).bind_append(*args) - end - end - def self.bind_remove(*args) - if self == WidgetClassNames[WidgetClassName] || self.name == '' - super(*args) - else - TkDatabaseClass.new(self.name).bind_remove(*args) - end - end - def self.bindinfo(*args) - if self == WidgetClassNames[WidgetClassName] || self.name == '' - super(*args) - else - TkDatabaseClass.new(self.name).bindinfo(*args) - end - end -end diff --git a/ext/tk/lib/tk/txtwin_abst.rb b/ext/tk/lib/tk/txtwin_abst.rb deleted file mode 100644 index 5520360eab..0000000000 --- a/ext/tk/lib/tk/txtwin_abst.rb +++ /dev/null @@ -1,39 +0,0 @@ -# -# tk/txtwin_abst.rb : TkTextWin abstruct class -# -require 'tk' - -class TkTextWin<TkWindow - TkCommnadNames = [].freeze - #def create_self - # fail RuntimeError, "TkTextWin is an abstract class" - #end - #private :create_self - - def bbox(index) - list(tk_send_without_enc('bbox', index)) - end - def delete(first, last=None) - tk_send_without_enc('delete', first, last) - self - end - def get(*index) - _fromUTF8(tk_send_without_enc('get', *index)) - end - def insert(index, *args) - tk_send('insert', index, *args) - self - end - def scan_mark(x, y) - tk_send_without_enc('scan', 'mark', x, y) - self - end - def scan_dragto(x, y) - tk_send_without_enc('scan', 'dragto', x, y) - self - end - def see(index) - tk_send_without_enc('see', index) - self - end -end diff --git a/ext/tk/lib/tk/validation.rb b/ext/tk/lib/tk/validation.rb deleted file mode 100644 index 5a50de456d..0000000000 --- a/ext/tk/lib/tk/validation.rb +++ /dev/null @@ -1,373 +0,0 @@ -# -# tk/validation.rb - validation support module for entry, spinbox, and so on -# -require 'tk' - -module Tk - module ValidateConfigure - def self.__def_validcmd(scope, klass, keys=nil) - keys = klass._config_keys unless keys - keys.each{|key| - eval("def #{key}(*args, &b) - __validcmd_call(#{klass.name}, '#{key}', *args, &b) - end", scope) - } - end - - def __validcmd_call(klass, key, *args, &b) - return cget(key) if args.empty? && !b - - cmd = (b)? proc(&b) : args.shift - - if cmd.kind_of?(klass) - configure(key, cmd) - elsif !args.empty? - configure(key, [cmd, args]) - else - configure(key, cmd) - end - end - - def __validation_class_list - # maybe need to override - [] - end - - def __get_validate_key2class - k2c = {} - __validation_class_list.each{|klass| - klass._config_keys.each{|key| - k2c[key.to_s] = klass - } - } - k2c - end - - def __conv_vcmd_on_hash_kv(keys) - key2class = __get_validate_key2class - - keys = _symbolkey2str(keys) - key2class.each{|key, klass| - if keys[key].kind_of?(Array) - cmd, *args = keys[key] - keys[key] = klass.new(cmd, args.join(' ')) - elsif keys[key].kind_of?(Proc) || keys[key].kind_of?(Method) - keys[key] = klass.new(keys[key]) - end - } - keys - end - - def create_self(keys) - super(__conv_vcmd_on_hash_kv(keys)) - end - private :create_self - - def configure(slot, value=TkComm::None) - if slot.kind_of?(Hash) - super(__conv_vcmd_on_hash_kv(slot)) - else - super(__conv_vcmd_on_hash_kv(slot=>value)) - end - self - end -=begin - def configure(slot, value=TkComm::None) - key2class = __get_validate_key2class - - if slot.kind_of?(Hash) - slot = _symbolkey2str(slot) - key2class.each{|key, klass| - if slot[key].kind_of?(Array) - cmd, *args = slot[key] - slot[key] = klass.new(cmd, args.join(' ')) - elsif slot[key].kind_of?(Proc) || slot[key].kind_of?(Method) - slot[key] = klass.new(slot[key]) - end - } - super(slot) - - else - slot = slot.to_s - if (klass = key2class[slot]) - if value.kind_of?(Array) - cmd, *args = value - value = klass.new(cmd, args.join(' ')) - elsif value.kind_of?(Proc) || value.kind_of?(Method) - value = klass.new(value) - end - end - super(slot, value) - end - - self - end -=end - end - - module ItemValidateConfigure - def self.__def_validcmd(scope, klass, keys=nil) - keys = klass._config_keys unless keys - keys.each{|key| - eval("def item_#{key}(id, *args, &b) - __item_validcmd_call(#{klass.name}, '#{key}', id, *args, &b) - end", scope) - } - end - - def __item_validcmd_call(tagOrId, klass, key, *args, &b) - return itemcget(tagid(tagOrId), key) if args.empty? && !b - - cmd = (b)? proc(&b) : args.shift - - if cmd.kind_of?(klass) - itemconfigure(tagid(tagOrId), key, cmd) - elsif !args.empty? - itemconfigure(tagid(tagOrId), key, [cmd, args]) - else - itemconfigure(tagid(tagOrId), key, cmd) - end - end - - def __item_validation_class_list(id) - # maybe need to override - [] - end - - def __get_item_validate_key2class(id) - k2c = {} - __item_validation_class_list(id).each{|klass| - klass._config_keys.each{|key| - k2c[key.to_s] = klass - } - } - end - - def __conv_item_vcmd_on_hash_kv(keys) - key2class = __get_item_validate_key2class(tagid(tagOrId)) - - keys = _symbolkey2str(keys) - key2class.each{|key, klass| - if keys[key].kind_of?(Array) - cmd, *args = keys[key] - keys[key] = klass.new(cmd, args.join(' ')) - elsif keys[key].kind_of?(Proc) || keys[key].kind_of?(Method) - keys[key] = klass.new(keys[key]) - end - } - keys - end - - def itemconfigure(tagOrId, slot, value=TkComm::None) - if slot.kind_of?(Hash) - super(__conv_item_vcmd_on_hash_kv(slot)) - else - super(__conv_item_vcmd_on_hash_kv(slot=>value)) - end - self - end -=begin - def itemconfigure(tagOrId, slot, value=TkComm::None) - key2class = __get_item_validate_key2class(tagid(tagOrId)) - - if slot.kind_of?(Hash) - slot = _symbolkey2str(slot) - key2class.each{|key, klass| - if slot[key].kind_of?(Array) - cmd, *args = slot[key] - slot[key] = klass.new(cmd, args.join(' ')) - elsif slot[key].kind_of?(Proc) || slot[key].kind_of?(Method) - slot[key] = klass.new(slot[key]) - end - } - super(slot) - - else - slot = slot.to_s - if (klass = key2class[slot]) - if value.kind_of?(Array) - cmd, *args = value - value = klass.new(cmd, args.join(' ')) - elsif value.kind_of?(Proc) || value.kind_of?(Method) - value = klass.new(value) - end - end - super(slot, value) - end - - self - end -=end - end -end - -class TkValidateCommand - include TkComm - extend TkComm - - class ValidateArgs < TkUtil::CallbackSubst - KEY_TBL = [ - [ ?d, ?n, :action ], - [ ?i, ?x, :index ], - [ ?s, ?e, :current ], - [ ?v, ?s, :type ], - [ ?P, ?e, :value ], - [ ?S, ?e, :string ], - [ ?V, ?s, :triggered ], - [ ?W, ?w, :widget ], - nil - ] - - PROC_TBL = [ - [ ?n, TkComm.method(:number) ], - [ ?s, TkComm.method(:string) ], - [ ?w, TkComm.method(:window) ], - - [ ?e, proc{|val| - enc = Tk.encoding - if enc - Tk.fromUTF8(TkComm::string(val), enc) - else - TkComm::string(val) - end - } - ], - - [ ?x, proc{|val| - idx = TkComm::number(val) - if idx < 0 - nil - else - idx - end - } - ], - - nil - ] - - _setup_subst_table(KEY_TBL, PROC_TBL); - - # - # NOTE: The order of parameters which passed to callback procedure is - # <extra_arg>, <extra_arg>, ... , <subst_arg>, <subst_arg>, ... - # - - #def self._get_extra_args_tbl - # # return an array of convert procs - # [] - #end - - def self.ret_val(val) - (val)? '1': '0' - end - end - - ############################################### - - def self._config_keys - # array of config-option key (string or symbol) - ['vcmd', 'validatecommand', 'invcmd', 'invalidcommand'] - end - - def _initialize_for_cb_class(klass, cmd = Proc.new, *args) - extra_args_tbl = klass._get_extra_args_tbl - - if args.compact.size > 0 - args = args.join(' ') - keys = klass._get_subst_key(args) - if cmd.kind_of?(String) - id = cmd - elsif cmd.kind_of?(TkCallbackEntry) - @id = install_cmd(cmd) - else - @id = install_cmd(proc{|*arg| - ex_args = [] - extra_args_tbl.reverse_each{|conv| ex_args << conv.call(arg.pop)} - klass.ret_val(cmd.call( - *(ex_args.concat(klass.scan_args(keys, arg))) - )) - }) + ' ' + args - end - else - keys, args = klass._get_all_subst_keys - if cmd.kind_of?(String) - id = cmd - elsif cmd.kind_of?(TkCallbackEntry) - @id = install_cmd(cmd) - else - @id = install_cmd(proc{|*arg| - ex_args = [] - extra_args_tbl.reverse_each{|conv| ex_args << conv.call(arg.pop)} - klass.ret_val(cmd.call( - *(ex_args << klass.new(*klass.scan_args(keys, arg))) - )) - }) + ' ' + args - end - end - end - - def initialize(cmd = Proc.new, *args) - _initialize_for_cb_class(self.class::ValidateArgs, cmd, *args) - end - - def to_eval - @id - end -end - -module TkValidation - include Tk::ValidateConfigure - - class ValidateCmd < TkValidateCommand - module Action - Insert = 1 - Delete = 0 - Others = -1 - Focus = -1 - Forced = -1 - Textvariable = -1 - TextVariable = -1 - end - end - - ##################################### - - def __validation_class_list - super << ValidateCmd - end - - Tk::ValidateConfigure.__def_validcmd(binding, ValidateCmd) - -=begin - def validatecommand(cmd = Proc.new, args = nil) - if cmd.kind_of?(ValidateCmd) - configure('validatecommand', cmd) - elsif args - configure('validatecommand', [cmd, args]) - else - configure('validatecommand', cmd) - end - end -=end -# def validatecommand(*args, &b) -# __validcmd_call(ValidateCmd, 'validatecommand', *args, &b) -# end -# alias vcmd validatecommand - -=begin - def invalidcommand(cmd = Proc.new, args = nil) - if cmd.kind_of?(ValidateCmd) - configure('invalidcommand', cmd) - elsif args - configure('invalidcommand', [cmd, args]) - else - configure('invalidcommand', cmd) - end - end -=end -# def invalidcommand(*args, &b) -# __validcmd_call(ValidateCmd, 'invalidcommand', *args, &b) -# end -# alias invcmd invalidcommand -end diff --git a/ext/tk/lib/tk/variable.rb b/ext/tk/lib/tk/variable.rb deleted file mode 100644 index d5882fd649..0000000000 --- a/ext/tk/lib/tk/variable.rb +++ /dev/null @@ -1,1009 +0,0 @@ -# -# tk/variable.rb : treat Tk variable object -# -require 'tk' - -class TkVariable - include Tk - extend TkCore - - include Comparable - - #TkCommandNames = ['tkwait'.freeze].freeze - TkCommandNames = ['vwait'.freeze].freeze - - #TkVar_CB_TBL = {} - #TkVar_ID_TBL = {} - TkVar_CB_TBL = TkCore::INTERP.create_table - TkVar_ID_TBL = TkCore::INTERP.create_table - Tk_VARIABLE_ID = ["v".freeze, "00000".taint].freeze - - #TkCore::INTERP.add_tk_procs('rb_var', 'args', - # "ruby [format \"TkVariable.callback %%Q!%s!\" $args]") -TkCore::INTERP.add_tk_procs('rb_var', 'args', <<-'EOL') - if {[set st [catch {eval {ruby_cmd TkVariable callback} $args} ret]] != 0} { - set idx [string first "\n\n" $ret] - if {$idx > 0} { - global errorInfo - set tcl_backtrace $errorInfo - set errorInfo [string range $ret [expr $idx + 2] \ - [string length $ret]] - append errorInfo "\n" $tcl_backtrace - bgerror [string range $ret 0 [expr $idx - 1]] - } else { - bgerror $ret - } - return "" - #return -code $st $ret - } else { - return $ret - } - EOL - - #def TkVariable.callback(args) - def TkVariable.callback(name1, name2, op) - #name1,name2,op = tk_split_list(args) - #name1,name2,op = tk_split_simplelist(args) - if TkVar_CB_TBL[name1] - #_get_eval_string(TkVar_CB_TBL[name1].trace_callback(name2,op)) - begin - _get_eval_string(TkVar_CB_TBL[name1].trace_callback(name2, op)) - rescue SystemExit - exit(0) - rescue Interrupt - exit!(1) - rescue Exception => e - begin - msg = _toUTF8(e.class.inspect) + ': ' + - _toUTF8(e.message) + "\n" + - "\n---< backtrace of Ruby side >-----\n" + - _toUTF8(e.backtrace.join("\n")) + - "\n---< backtrace of Tk side >-------" - msg.instance_variable_set(:@encoding, 'utf-8') - rescue Exception - msg = e.class.inspect + ': ' + e.message + "\n" + - "\n---< backtrace of Ruby side >-----\n" + - e.backtrace.join("\n") + - "\n---< backtrace of Tk side >-------" - end - fail(e, msg) - end -=begin - begin - raise 'check backtrace' - rescue - # ignore backtrace before 'callback' - pos = -($!.backtrace.size) - end - begin - _get_eval_string(TkVar_CB_TBL[name1].trace_callback(name2,op)) - rescue - trace = $!.backtrace - raise $!, "\n#{trace[0]}: #{$!.message} (#{$!.class})\n" + - "\tfrom #{trace[1..pos].join("\n\tfrom ")}" - end -=end - else - '' - end - end - - def self.new_hash(val = {}) - if val.kind_of?(Hash) - self.new(val) - else - fail ArgumentError, 'Hash is expected' - end - end - - # - # default_value is available only when the variable is an assoc array. - # - def default_value(val=nil, &b) - if b - @def_default = :proc - @default_val = proc(&b) - else - @def_default = :val - @default_val = val - end - self - end - def default_value=(val) - @def_default = :val - @default_val = val - self - end - def default_proc(cmd = Proc.new) - @def_default = :proc - @default_val = cmd - self - end - - def undef_default - @default_val = nil - @def_default = false - self - end - - def initialize(val="") - # @id = Tk_VARIABLE_ID.join('') - @id = Tk_VARIABLE_ID.join(TkCore::INTERP._ip_id_) - Tk_VARIABLE_ID[1].succ! - TkVar_ID_TBL[@id] = self - - @def_default = false - @default_val = nil - - @trace_var = nil - @trace_elem = nil - @trace_opts = nil - - begin - INTERP._unset_global_var(@id) - rescue - end - - # teach Tk-ip that @id is global var - INTERP._invoke_without_enc('global', @id) - #INTERP._invoke('global', @id) - - # create and init - if val.kind_of?(Hash) - # assoc-array variable - self[''] = 0 - self.clear - end - self.value = val - -=begin - if val == [] - # INTERP._eval(format('global %s; set %s(0) 0; unset %s(0)', - # @id, @id, @id)) - elsif val.kind_of?(Array) - a = [] - # val.each_with_index{|e,i| a.push(i); a.push(array2tk_list(e))} - # s = '"' + a.join(" ").gsub(/[\[\]$"]/, '\\\\\&') + '"' - val.each_with_index{|e,i| a.push(i); a.push(e)} - #s = '"' + array2tk_list(a).gsub(/[\[\]$"]/, '\\\\\&') + '"' - s = '"' + array2tk_list(a).gsub(/[\[\]$"\\]/, '\\\\\&') + '"' - INTERP._eval(format('global %s; array set %s %s', @id, @id, s)) - elsif val.kind_of?(Hash) - #s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\ - # .gsub(/[\[\]$"]/, '\\\\\&') + '"' - s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\ - .gsub(/[\[\]$"\\]/, '\\\\\&') + '"' - INTERP._eval(format('global %s; array set %s %s', @id, @id, s)) - else - #s = '"' + _get_eval_string(val).gsub(/[\[\]$"]/, '\\\\\&') + '"' - s = '"' + _get_eval_string(val).gsub(/[\[\]$"\\]/, '\\\\\&') + '"' - INTERP._eval(format('global %s; set %s %s', @id, @id, s)) - end -=end -=begin - if val.kind_of?(Hash) - #s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\ - # .gsub(/[\[\]$"]/, '\\\\\&') + '"' - s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\ - .gsub(/[\[\]$"\\]/, '\\\\\&') + '"' - INTERP._eval(Kernel.format('global %s; array set %s %s', @id, @id, s)) - else - #s = '"' + _get_eval_string(val).gsub(/[\[\]$"]/, '\\\\\&') + '"' - s = '"' + _get_eval_string(val).gsub(/[\[\]$"\\]/, '\\\\\&') + '"' - INTERP._eval(Kernel.format('global %s; set %s %s', @id, @id, s)) - end -=end - end - - def wait(on_thread = false, check_root = false) - if $SAFE >= 4 - fail SecurityError, "can't wait variable at $SAFE >= 4" - end - on_thread &= (Thread.list.size != 1) - if on_thread - if check_root - INTERP._thread_tkwait('variable', @id) - else - INTERP._thread_vwait(@id) - end - else - if check_root - INTERP._invoke_without_enc('tkwait', 'variable', @id) - else - INTERP._invoke_without_enc('vwait', @id) - end - end - end - def eventloop_wait(check_root = false) - wait(false, check_root) - end - def thread_wait(check_root = false) - wait(true, check_root) - end - def tkwait(on_thread = true) - wait(on_thread, true) - end - def eventloop_tkwait - wait(false, true) - end - def thread_tkwait - wait(true, true) - end - - def id - @id - end - - def ref(*idxs) - # "#{@id}(#{idxs.collect{|idx| _get_eval_string(idx)}.join(',')})" - TkVarAccess.new("#{@id}(#{idxs.collect{|idx| _get_eval_string(idx)}.join(',')})") - end - - def is_hash? - #ITNERP._eval("global #{@id}; array exist #{@id}") == '1' - INTERP._invoke_without_enc('global', @id) - INTERP._invoke_without_enc('array', 'exist', @id) == '1' - end - - def is_scalar? - ! is_hash? - end - - def keys - if (is_scalar?) - fail RuntimeError, 'cannot get keys from a scalar variable' - end - #tk_split_simplelist(INTERP._eval("global #{@id}; array get #{@id}")) - INTERP._invoke_without_enc('global', @id) - tk_split_simplelist(INTERP._fromUTF8(INTERP._invoke_without_enc('array', 'names', @id))) - end - - def clear - if (is_scalar?) - fail RuntimeError, 'cannot clear a scalar variable' - end - keys.each{|k| unset(k)} - self - end - - def update(hash) - if (is_scalar?) - fail RuntimeError, 'cannot update a scalar variable' - end - hash.each{|k,v| self[k] = v} - self - end - - -unless const_defined?(:USE_TCLs_SET_VARIABLE_FUNCTIONS) - USE_TCLs_SET_VARIABLE_FUNCTIONS = true -end - -if USE_TCLs_SET_VARIABLE_FUNCTIONS - ########################################################################### - # use Tcl function version of set tkvariable - ########################################################################### - - def value - #if INTERP._eval("global #{@id}; array exist #{@id}") == '1' - INTERP._invoke_without_enc('global', @id) - if INTERP._invoke('array', 'exist', @id) == '1' - #Hash[*tk_split_simplelist(INTERP._eval("global #{@id}; array get #{@id}"))] - Hash[*tk_split_simplelist(INTERP._invoke('array', 'get', @id))] - else - _fromUTF8(INTERP._get_global_var(@id)) - end - end - - def value=(val) - if val.kind_of?(Hash) - self.clear - val.each{|k, v| - #INTERP._set_global_var2(@id, _toUTF8(_get_eval_string(k)), - # _toUTF8(_get_eval_string(v))) - INTERP._set_global_var2(@id, _get_eval_string(k, true), - _get_eval_string(v, true)) - } - self.value - elsif val.kind_of?(Array) - INTERP._set_global_var(@id, '') - val.each{|v| - #INTERP._set_variable(@id, _toUTF8(_get_eval_string(v)), - INTERP._set_variable(@id, _get_eval_string(v, true), - TclTkLib::VarAccessFlag::GLOBAL_ONLY | - TclTkLib::VarAccessFlag::LEAVE_ERR_MSG | - TclTkLib::VarAccessFlag::APPEND_VALUE | - TclTkLib::VarAccessFlag::LIST_ELEMENT) - } - self.value - else - #_fromUTF8(INTERP._set_global_var(@id, _toUTF8(_get_eval_string(val)))) - _fromUTF8(INTERP._set_global_var(@id, _get_eval_string(val, true))) - end - end - - def [](*idxs) - index = idxs.collect{|idx| _get_eval_string(idx, true)}.join(',') - begin - _fromUTF8(INTERP._get_global_var2(@id, index)) - rescue => e - case @def_default - when :proc - @default_val.call(self, *idxs) - when :val - @default_val - else - fail e - end - end - #_fromUTF8(INTERP._get_global_var2(@id, index)) - #_fromUTF8(INTERP._get_global_var2(@id, _toUTF8(_get_eval_string(index)))) - #_fromUTF8(INTERP._get_global_var2(@id, _get_eval_string(index, true))) - end - - def []=(*args) - val = args.pop - index = args.collect{|idx| _get_eval_string(idx, true)}.join(',') - _fromUTF8(INTERP._set_global_var2(@id, index, _get_eval_string(val, true))) - #_fromUTF8(INTERP._set_global_var2(@id, _toUTF8(_get_eval_string(index)), - # _toUTF8(_get_eval_string(val)))) - #_fromUTF8(INTERP._set_global_var2(@id, _get_eval_string(index, true), - # _get_eval_string(val, true))) - end - - def unset(elem=nil) - if elem - INTERP._unset_global_var2(@id, _get_eval_string(elem, true)) - else - INTERP._unset_global_var(@id) - end - end - alias remove unset - -else - ########################################################################### - # use Ruby script version of set tkvariable (traditional methods) - ########################################################################### - - def value - begin - INTERP._eval(Kernel.format('global %s; set %s', @id, @id)) - #INTERP._eval(Kernel.format('set %s', @id)) - #INTERP._invoke_without_enc('set', @id) - rescue - if INTERP._eval(Kernel.format('global %s; array exists %s', - @id, @id)) != "1" - #if INTERP._eval(Kernel.format('array exists %s', @id)) != "1" - #if INTERP._invoke_without_enc('array', 'exists', @id) != "1" - fail - else - Hash[*tk_split_simplelist(INTERP._eval(Kernel.format('global %s; array get %s', @id, @id)))] - #Hash[*tk_split_simplelist(_fromUTF8(INTERP._invoke_without_enc('array', 'get', @id)))] - end - end - end - - def value=(val) - begin - #s = '"' + _get_eval_string(val).gsub(/[\[\]$"]/, '\\\\\&') + '"' - s = '"' + _get_eval_string(val).gsub(/[\[\]$"\\]/, '\\\\\&') + '"' - INTERP._eval(Kernel.format('global %s; set %s %s', @id, @id, s)) - #INTERP._eval(Kernel.format('set %s %s', @id, s)) - #_fromUTF8(INTERP._invoke_without_enc('set', @id, _toUTF8(s))) - rescue - if INTERP._eval(Kernel.format('global %s; array exists %s', - @id, @id)) != "1" - #if INTERP._eval(Kernel.format('array exists %s', @id)) != "1" - #if INTERP._invoke_without_enc('array', 'exists', @id) != "1" - fail - else - if val == [] - INTERP._eval(Kernel.format('global %s; unset %s; set %s(0) 0; unset %s(0)', @id, @id, @id, @id)) - #INTERP._eval(Kernel.format('unset %s; set %s(0) 0; unset %s(0)', - # @id, @id, @id)) - #INTERP._invoke_without_enc('unset', @id) - #INTERP._invoke_without_enc('set', @id+'(0)', 0) - #INTERP._invoke_without_enc('unset', @id+'(0)') - elsif val.kind_of?(Array) - a = [] - val.each_with_index{|e,i| a.push(i); a.push(array2tk_list(e))} - #s = '"' + a.join(" ").gsub(/[\[\]$"]/, '\\\\\&') + '"' - s = '"' + a.join(" ").gsub(/[\[\]$"\\]/, '\\\\\&') + '"' - INTERP._eval(Kernel.format('global %s; unset %s; array set %s %s', - @id, @id, @id, s)) - #INTERP._eval(Kernel.format('unset %s; array set %s %s', - # @id, @id, s)) - #INTERP._invoke_without_enc('unset', @id) - #_fromUTF8(INTERP._invoke_without_enc('array','set', @id, _toUTF8(s))) - elsif val.kind_of?(Hash) - #s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\ - # .gsub(/[\[\]$"]/, '\\\\\&') + '"' - s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\ - .gsub(/[\[\]$\\"]/, '\\\\\&') + '"' - INTERP._eval(Kernel.format('global %s; unset %s; array set %s %s', - @id, @id, @id, s)) - #INTERP._eval(Kernel.format('unset %s; array set %s %s', - # @id, @id, s)) - #INTERP._invoke_without_enc('unset', @id) - #_fromUTF8(INTERP._invoke_without_enc('array','set', @id, _toUTF8(s))) - else - fail - end - end - end - end - - def [](*idxs) - index = idxs.collect{|idx| _get_eval_string(idx)}.join(',') - begin - INTERP._eval(Kernel.format('global %s; set %s(%s)', @id, @id, index)) - rescue => e - case @def_default - when :proc - @default_val.call(self, *idxs) - when :val - @default_val - else - fail e - end - end - #INTERP._eval(Kernel.format('global %s; set %s(%s)', @id, @id, index)) - #INTERP._eval(Kernel.format('global %s; set %s(%s)', - # @id, @id, _get_eval_string(index))) - #INTERP._eval(Kernel.format('set %s(%s)', @id, _get_eval_string(index))) - #INTERP._eval('set ' + @id + '(' + _get_eval_string(index) + ')') - end - - def []=(*args) - val = args.pop - index = args.collect{|idx| _get_eval_string(idx)}.join(',') - INTERP._eval(Kernel.format('global %s; set %s(%s) %s', @id, @id, - index, _get_eval_string(val))) - #INTERP._eval(Kernel.format('global %s; set %s(%s) %s', @id, @id, - # _get_eval_string(index), _get_eval_string(val))) - #INTERP._eval(Kernel.format('set %s(%s) %s', @id, - # _get_eval_string(index), _get_eval_string(val))) - #INTERP._eval('set ' + @id + '(' + _get_eval_string(index) + ') ' + - # _get_eval_string(val)) - end - - def unset(elem=nil) - if elem - INTERP._eval(Kernel.format('global %s; unset %s(%s)', - @id, @id, _get_eval_string(elem))) - #INTERP._eval(Kernel.format('unset %s(%s)', @id, tk_tcl2ruby(elem))) - #INTERP._eval('unset ' + @id + '(' + _get_eval_string(elem) + ')') - else - INTERP._eval(Kernel.format('global %s; unset %s', @id, @id)) - #INTERP._eval(Kernel.format('unset %s', @id)) - #INTERP._eval('unset ' + @id) - end - end - alias remove unset - -end - - def numeric - number(value) - end - def numeric=(val) - case val - when Numeric - self.value=(val) - when TkVariable - self.value=(val.numeric) - else - raise ArgumentError, "Numeric is expected" - end - val - end - - def bool - # see Tcl_GetBoolean man-page - case value.downcase - when '0', 'false', 'no', 'off' - false - else - true - end - end - - def bool=(val) - if ! val - self.value = '0' - else - case val.to_s.downcase - when 'false', '0', 'no', 'off' - self.value = '0' - else - self.value = '1' - end - end - end - - def to_i - number(value).to_i - end - - def to_f - number(value).to_f - end - - def to_s - #string(value).to_s - value - end - - def to_sym - value.intern - end - - def list - #tk_split_list(value) - tk_split_simplelist(value) - end - alias to_a list - - def list=(val) - case val - when Array - self.value=(val) - when TkVariable - self.value=(val.list) - else - raise ArgumentError, "Array is expected" - end - val - end - - def inspect - #Kernel.format "#<TkVariable: %s>", @id - '#<TkVariable: ' + @id + '>' - end - - def coerce(other) - case other - when TkVariable - [other.value, self.value] - when String - [other, self.to_s] - when Symbol - [other, self.to_sym] - when Integer - [other, self.to_i] - when Float - [other, self.to_f] - when Array - [other, self.to_a] - else - [other, self.value] - end - end - - def &(other) - if other.kind_of?(Array) - self.to_a & other.to_a - else - self.to_i & other.to_i - end - end - def |(other) - if other.kind_of?(Array) - self.to_a | other.to_a - else - self.to_i | other.to_i - end - end - def +(other) - case other - when Array - self.to_a + other - when String - self.value + other - else - begin - number(self.value) + other - rescue - self.value + other.to_s - end - end - end - def -(other) - if other.kind_of?(Array) - self.to_a - other - else - number(self.value) - other - end - end - def *(other) - begin - number(self.value) * other - rescue - self.value * other - end - end - def /(other) - number(self.value) / other - end - def %(other) - begin - number(self.value) % other - rescue - self.value % other - end - end - def **(other) - number(self.value) ** other - end - def =~(other) - self.value =~ other - end - - def ==(other) - case other - when TkVariable - self.equal?(other) - when String - self.to_s == other - when Symbol - self.to_sym == other - when Integer - self.to_i == other - when Float - self.to_f == other - when Array - self.to_a == other - when Hash - self.value == other - else - false - end - end - - def zero? - numeric.zero? - end - def nonzero? - !(numeric.zero?) - end - - def <=>(other) - if other.kind_of?(TkVariable) - begin - val = other.numeric - other = val - rescue - other = other.value - end - end - if other.kind_of?(Numeric) - begin - return self.numeric <=> other - rescue - return self.value <=> other.to_s - end - else - return self.value <=> other - end - end - - def to_eval - @id - end - - def trace_callback(elem, op) - if @trace_var.kind_of? Array - @trace_var.each{|m,e| e.call(self,elem,op) if m.index(op)} - end - if elem.kind_of?(String) && elem != '' - if @trace_elem.kind_of?(Hash) && @trace_elem[elem].kind_of?(Array) - @trace_elem[elem].each{|m,e| e.call(self,elem,op) if m.index(op)} - end - end - end - - def trace(opts, cmd = Proc.new) - @trace_var = [] if @trace_var == nil - #opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('') - opts = ['r','w','u'].find_all{|c| opts.to_s.index(c)}.join('') - @trace_var.unshift([opts,cmd]) - if @trace_opts == nil - TkVar_CB_TBL[@id] = self - @trace_opts = opts.dup - Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var') -=begin - if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION - # TCL_VERSION >= 8.4 - Tk.tk_call_without_enc('trace', 'add', 'variable', - @id, @trace_opts, 'rb_var') - else - # TCL_VERSION <= 8.3 - Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var') - end -=end - else - newopts = @trace_opts.dup - #opts.each_byte{|c| newopts += c.chr unless newopts.index(c)} - opts.each_byte{|c| newopts.concat(c.chr) unless newopts.index(c)} - if newopts != @trace_opts - Tk.tk_call_without_enc('trace', 'vdelete', @id, @trace_opts, 'rb_var') - @trace_opts.replace(newopts) - Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var') -=begin - if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION - # TCL_VERSION >= 8.4 - Tk.tk_call_without_enc('trace', 'remove', 'variable', - @id, @trace_opts, 'rb_var') - @trace_opts.replace(newopts) - Tk.tk_call_without_enc('trace', 'add', 'variable', - @id, @trace_opts, 'rb_var') - else - # TCL_VERSION <= 8.3 - Tk.tk_call_without_enc('trace', 'vdelete', - @id, @trace_opts, 'rb_var') - @trace_opts.replace(newopts) - Tk.tk_call_without_enc('trace', 'variable', - @id, @trace_opts, 'rb_var') - end -=end - end - end - self - end - - def trace_element(elem, opts, cmd = Proc.new) - @trace_elem = {} if @trace_elem == nil - @trace_elem[elem] = [] if @trace_elem[elem] == nil - #opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('') - opts = ['r','w','u'].find_all{|c| opts.to_s.index(c)}.join('') - @trace_elem[elem].unshift([opts,cmd]) - if @trace_opts == nil - TkVar_CB_TBL[@id] = self - @trace_opts = opts.dup - Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var') -=begin - if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION - # TCL_VERSION >= 8.4 - Tk.tk_call_without_enc('trace', 'add', 'variable', - @id, @trace_opts, 'rb_var') - else - # TCL_VERSION <= 8.3 - Tk.tk_call_without_enc('trace', 'variable', - @id, @trace_opts, 'rb_var') - end -=end - else - newopts = @trace_opts.dup - # opts.each_byte{|c| newopts += c.chr unless newopts.index(c)} - opts.each_byte{|c| newopts.concat(c.chr) unless newopts.index(c)} - if newopts != @trace_opts - Tk.tk_call_without_enc('trace', 'vdelete', @id, @trace_opts, 'rb_var') - @trace_opts.replace(newopts) - Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var') -=begin - if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION - # TCL_VERSION >= 8.4 - Tk.tk_call_without_enc('trace', 'remove', 'variable', - @id, @trace_opts, 'rb_var') - @trace_opts.replace(newopts) - Tk.tk_call_without_enc('trace', 'add', 'variable', - @id, @trace_opts, 'rb_var') - else - # TCL_VERSION <= 8.3 - Tk.tk_call_without_enc('trace', 'vdelete', - @id, @trace_opts, 'rb_var') - @trace_opts.replace(newopts) - Tk.tk_call_without_enc('trace', 'variable', - @id, @trace_opts, 'rb_var') - end -=end - end - end - self - end - - def trace_vinfo - return [] unless @trace_var - @trace_var.dup - end - def trace_vinfo_for_element(elem) - return [] unless @trace_elem - return [] unless @trace_elem[elem] - @trace_elem[elem].dup - end - - def trace_vdelete(opts,cmd) - return self unless @trace_var.kind_of? Array - #opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('') - opts = ['r','w','u'].find_all{|c| opts.to_s.index(c)}.join('') - idx = -1 - newopts = '' - @trace_var.each_with_index{|e,i| - if idx < 0 && e[0] == opts && e[1] == cmd - idx = i - next - end - # e[0].each_byte{|c| newopts += c.chr unless newopts.index(c)} - e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c)} - } - if idx >= 0 - @trace_var.delete_at(idx) - else - return self - end - - @trace_elem.each{|elem| - @trace_elem[elem].each{|e| - # e[0].each_byte{|c| newopts += c.chr unless newopts.index(c)} - e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c)} - } - } - - #newopts = ['r','w','u'].find_all{|c| newopts.index(c)}.join('') - newopts = ['r','w','u'].find_all{|c| newopts.to_s.index(c)}.join('') - if newopts != @trace_opts - Tk.tk_call_without_enc('trace', 'vdelete', @id, @trace_opts, 'rb_var') -=begin - if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION - # TCL_VERSION >= 8.4 - Tk.tk_call_without_enc('trace', 'remove', 'variable', - @id, @trace_opts, 'rb_var') - else - # TCL_VERSION <= 8.3 - Tk.tk_call_without_enc('trace', 'vdelete', - @id, @trace_opts, 'rb_var') - end -=end - @trace_opts.replace(newopts) - if @trace_opts != '' - Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var') -=begin - if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION - # TCL_VERSION >= 8.4 - Tk.tk_call_without_enc('trace', 'add', 'variable', - @id, @trace_opts, 'rb_var') - else - # TCL_VERSION <= 8.3 - Tk.tk_call_without_enc('trace', 'variable', - @id, @trace_opts, 'rb_var') - end -=end - end - end - - self - end - - def trace_vdelete_for_element(elem,opts,cmd) - return self unless @trace_elem.kind_of? Hash - return self unless @trace_elem[elem].kind_of? Array - # opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('') - opts = ['r','w','u'].find_all{|c| opts.to_s.index(c)}.join('') - idx = -1 - @trace_elem[elem].each_with_index{|e,i| - if idx < 0 && e[0] == opts && e[1] == cmd - idx = i - next - end - } - if idx >= 0 - @trace_elem[elem].delete_at(idx) - else - return self - end - - newopts = '' - @trace_var.each{|e| - # e[0].each_byte{|c| newopts += c.chr unless newopts.index(c)} - e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c)} - } - @trace_elem.each{|elem| - @trace_elem[elem].each{|e| - # e[0].each_byte{|c| newopts += c.chr unless newopts.index(c)} - e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c)} - } - } - - #newopts = ['r','w','u'].find_all{|c| newopts.index(c)}.join('') - newopts = ['r','w','u'].find_all{|c| newopts.to_s.index(c)}.join('') - if newopts != @trace_opts - Tk.tk_call_without_enc('trace', 'vdelete', @id, @trace_opts, 'rb_var') -=begin - if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION - # TCL_VERSION >= 8.4 - Tk.tk_call_without_enc('trace', 'remove', 'variable', - @id, @trace_opts, 'rb_var') - else - # TCL_VERSION <= 8.3 - Tk.tk_call_without_enc('trace', 'vdelete', - @id, @trace_opts, 'rb_var') - end -=end - @trace_opts.replace(newopts) - if @trace_opts != '' - Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var') -=begin - if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION - # TCL_VERSION >= 8.4 - Tk.tk_call_without_enc('trace', 'add', 'variable', - @id, @trace_opts, 'rb_var') - else - # TCL_VERSION <= 8.3 - Tk.tk_call_without_enc('trace', 'variable', @id, - @trace_opts, 'rb_var') - end -=end - end - end - - self - end -end - - -class TkVarAccess<TkVariable - def self.new(name, *args) - return TkVar_ID_TBL[name] if TkVar_ID_TBL[name] - super(name, *args) - end - - def self.new_hash(name, *args) - return TkVar_ID_TBL[name] if TkVar_ID_TBL[name] - INTERP._invoke_without_enc('global', name) - if args.empty? && INTERP._invoke_without_enc('array', 'exist', name) == '0' - self.new(name, {}) # force creating - else - self.new(name, *args) - end - end - - def initialize(varname, val=nil) - @id = varname - TkVar_ID_TBL[@id] = self - - # teach Tk-ip that @id is global var - INTERP._invoke_without_enc('global', @id) - - if val - if val.kind_of?(Hash) - # assoc-array variable - self[''] = 0 - self.clear - end - #s = '"' + _get_eval_string(val).gsub(/[\[\]$"]/, '\\\\\&') + '"' #" - #s = '"' + _get_eval_string(val).gsub(/[\[\]$"\\]/, '\\\\\&') + '"' #" - #INTERP._eval(Kernel.format('global %s; set %s %s', @id, @id, s)) - #INTERP._set_global_var(@id, _toUTF8(_get_eval_string(val))) - self.value = val - end - end -end - - -module Tk - begin - auto_path = INTERP._invoke('set', 'auto_path') - rescue - begin - auto_path = INTERP._invoke('set', 'env(TCLLIBPATH)') - rescue - auto_path = Tk::LIBRARY - end - end - - AUTO_PATH = TkVarAccess.new('auto_path', auto_path) - -=begin - AUTO_OLDPATH = tk_split_simplelist(INTERP._invoke('set', 'auto_oldpath')) - AUTO_OLDPATH.each{|s| s.freeze} - AUTO_OLDPATH.freeze -=end - - TCL_PACKAGE_PATH = TkVarAccess.new('tcl_pkgPath') - PACKAGE_PATH = TCL_PACKAGE_PATH - - TCL_LIBRARY_PATH = TkVarAccess.new('tcl_libPath') - LIBRARY_PATH = TCL_LIBRARY_PATH - - TCL_PRECISION = TkVarAccess.new('tcl_precision') -end diff --git a/ext/tk/lib/tk/virtevent.rb b/ext/tk/lib/tk/virtevent.rb deleted file mode 100644 index c82cfe46e8..0000000000 --- a/ext/tk/lib/tk/virtevent.rb +++ /dev/null @@ -1,90 +0,0 @@ -# -# tk/virtevent.rb : treats virtual events -# 1998/07/16 by Hidetoshi Nagai <nagai@ai.kyutech.ac.jp> -# -require 'tk' - -class TkVirtualEvent<TkObject - extend Tk - - TkCommandNames = ['event'.freeze].freeze - - TkVirtualEventID = ["VirtEvent".freeze, "00000".taint].freeze - TkVirtualEventTBL = TkCore::INTERP.create_table - - TkCore::INTERP.init_ip_env{ TkVirtualEventTBL.clear } - - class PreDefVirtEvent<self - def initialize(event) - @path = @id = event - TkVirtualEvent::TkVirtualEventTBL[@id] = self - end - end - - def TkVirtualEvent.getobj(event) - obj = TkVirtualEventTBL[event] - if obj - obj - else - if tk_call_without_enc('event', 'info').index("<#{event}>") - PreDefVirtEvent.new(event) - else - fail ArgumentError, "undefined virtual event '<#{event}>'" - end - end - end - - def TkVirtualEvent.info - tk_call_without_enc('event', 'info').split(/\s+/).collect!{|seq| - TkVirtualEvent.getobj(seq[1..-2]) - } - end - - def initialize(*sequences) - # @path = @id = '<' + TkVirtualEventID.join('') + '>' - @path = @id = '<' + TkVirtualEventID.join(TkCore::INTERP._ip_id_) + '>' - TkVirtualEventID[1].succ! - add(*sequences) - end - - def add(*sequences) - if sequences != [] - tk_call_without_enc('event', 'add', "<#{@id}>", - *(sequences.collect{|seq| - "<#{tk_event_sequence(seq)}>" - }) ) - TkVirtualEventTBL[@id] = self - end - self - end - - def delete(*sequences) - if sequences == [] - tk_call_without_enc('event', 'delete', "<#{@id}>") - TkVirtualEventTBL.delete(@id) - else - tk_call_without_enc('event', 'delete', "<#{@id}>", - *(sequences.collect{|seq| - "<#{tk_event_sequence(seq)}>" - }) ) - TkVirtualEventTBL.delete(@id) if info == [] - end - self - end - - def info - tk_call_without_enc('event','info',"<#{@id}>").split(/\s+/).collect!{|seq| - l = seq.scan(/<*[^<>]+>*/).collect!{|subseq| - case (subseq) - when /^<<[^<>]+>>$/ - TkVirtualEvent.getobj(subseq[1..-2]) - when /^<[^<>]+>$/ - subseq[1..-2] - else - subseq.split('') - end - }.flatten - (l.size == 1) ? l[0] : l - } - end -end diff --git a/ext/tk/lib/tk/winfo.rb b/ext/tk/lib/tk/winfo.rb deleted file mode 100644 index 948042558d..0000000000 --- a/ext/tk/lib/tk/winfo.rb +++ /dev/null @@ -1,387 +0,0 @@ -# -# tk/winfo.rb : methods for winfo command -# -module TkWinfo -end - -require 'tk' - -module TkWinfo - include Tk - extend Tk - - TkCommandNames = ['winfo'.freeze].freeze - - def TkWinfo.atom(name, win=nil) - if win - number(tk_call_without_enc('winfo', 'atom', '-displayof', win, - _get_eval_enc_str(name))) - else - number(tk_call_without_enc('winfo', 'atom', _get_eval_enc_str(name))) - end - end - def winfo_atom(name) - TkWinfo.atom(name, self) - end - - def TkWinfo.atomname(id, win=nil) - if win - _fromUTF8(tk_call_without_enc('winfo', 'atomname', - '-displayof', win, id)) - else - _fromUTF8(tk_call_without_enc('winfo', 'atomname', id)) - end - end - def winfo_atomname(id) - TkWinfo.atomname(id, self) - end - - def TkWinfo.cells(window) - number(tk_call_without_enc('winfo', 'cells', window)) - end - def winfo_cells - TkWinfo.cells self - end - - def TkWinfo.children(window) - list(tk_call_without_enc('winfo', 'children', window)) - end - def winfo_children - TkWinfo.children self - end - - def TkWinfo.classname(window) - tk_call_without_enc('winfo', 'class', window) - end - def winfo_classname - TkWinfo.classname self - end - alias winfo_class winfo_classname - - def TkWinfo.colormapfull(window) - bool(tk_call_without_enc('winfo', 'colormapfull', window)) - end - def winfo_colormapfull - TkWinfo.colormapfull self - end - - def TkWinfo.containing(rootX, rootY, win=nil) - if win - window(tk_call_without_enc('winfo', 'containing', - '-displayof', win, rootX, rootY)) - else - window(tk_call_without_enc('winfo', 'containing', rootX, rootY)) - end - end - def winfo_containing(x, y) - TkWinfo.containing(x, y, self) - end - - def TkWinfo.depth(window) - number(tk_call_without_enc('winfo', 'depth', window)) - end - def winfo_depth - TkWinfo.depth self - end - - def TkWinfo.exist?(window) - bool(tk_call_without_enc('winfo', 'exists', window)) - end - def winfo_exist? - TkWinfo.exist? self - end - - def TkWinfo.fpixels(window, dist) - number(tk_call_without_enc('winfo', 'fpixels', window, dist)) - end - def winfo_fpixels(dist) - TkWinfo.fpixels self, dist - end - - def TkWinfo.geometry(window) - tk_call_without_enc('winfo', 'geometry', window) - end - def winfo_geometry - TkWinfo.geometry self - end - - def TkWinfo.height(window) - number(tk_call_without_enc('winfo', 'height', window)) - end - def winfo_height - TkWinfo.height self - end - - def TkWinfo.id(window) - tk_call_without_enc('winfo', 'id', window) - end - def winfo_id - TkWinfo.id self - end - - def TkWinfo.interps(window=nil) - if window - tk_split_simplelist(tk_call_without_enc('winfo', 'interps', - '-displayof', window)) - else - tk_split_simplelist(tk_call_without_enc('winfo', 'interps')) - end - end - def winfo_interps - TkWinfo.interps self - end - - def TkWinfo.mapped?(window) - bool(tk_call_without_enc('winfo', 'ismapped', window)) - end - def winfo_mapped? - TkWinfo.mapped? self - end - - def TkWinfo.manager(window) - tk_call_without_enc('winfo', 'manager', window) - end - def winfo_manager - TkWinfo.manager self - end - - def TkWinfo.appname(window) - tk_call('winfo', 'name', window) - end - def winfo_appname - TkWinfo.appname self - end - - def TkWinfo.parent(window) - window(tk_call_without_enc('winfo', 'parent', window)) - end - def winfo_parent - TkWinfo.parent self - end - - def TkWinfo.widget(id, win=nil) - if win - window(tk_call_without_enc('winfo', 'pathname', '-displayof', win, id)) - else - window(tk_call_without_enc('winfo', 'pathname', id)) - end - end - def winfo_widget(id) - TkWinfo.widget id, self - end - - def TkWinfo.pixels(window, dist) - number(tk_call_without_enc('winfo', 'pixels', window, dist)) - end - def winfo_pixels(dist) - TkWinfo.pixels self, dist - end - - def TkWinfo.reqheight(window) - number(tk_call_without_enc('winfo', 'reqheight', window)) - end - def winfo_reqheight - TkWinfo.reqheight self - end - - def TkWinfo.reqwidth(window) - number(tk_call_without_enc('winfo', 'reqwidth', window)) - end - def winfo_reqwidth - TkWinfo.reqwidth self - end - - def TkWinfo.rgb(window, color) - list(tk_call_without_enc('winfo', 'rgb', window, color)) - end - def winfo_rgb(color) - TkWinfo.rgb self, color - end - - def TkWinfo.rootx(window) - number(tk_call_without_enc('winfo', 'rootx', window)) - end - def winfo_rootx - TkWinfo.rootx self - end - - def TkWinfo.rooty(window) - number(tk_call_without_enc('winfo', 'rooty', window)) - end - def winfo_rooty - TkWinfo.rooty self - end - - def TkWinfo.screen(window) - tk_call('winfo', 'screen', window) - end - def winfo_screen - TkWinfo.screen self - end - - def TkWinfo.screencells(window) - number(tk_call_without_enc('winfo', 'screencells', window)) - end - def winfo_screencells - TkWinfo.screencells self - end - - def TkWinfo.screendepth(window) - number(tk_call_without_enc('winfo', 'screendepth', window)) - end - def winfo_screendepth - TkWinfo.screendepth self - end - - def TkWinfo.screenheight (window) - number(tk_call_without_enc('winfo', 'screenheight', window)) - end - def winfo_screenheight - TkWinfo.screenheight self - end - - def TkWinfo.screenmmheight(window) - number(tk_call_without_enc('winfo', 'screenmmheight', window)) - end - def winfo_screenmmheight - TkWinfo.screenmmheight self - end - - def TkWinfo.screenmmwidth(window) - number(tk_call_without_enc('winfo', 'screenmmwidth', window)) - end - def winfo_screenmmwidth - TkWinfo.screenmmwidth self - end - - def TkWinfo.screenvisual(window) - tk_call_without_enc('winfo', 'screenvisual', window) - end - def winfo_screenvisual - TkWinfo.screenvisual self - end - - def TkWinfo.screenwidth(window) - number(tk_call_without_enc('winfo', 'screenwidth', window)) - end - def winfo_screenwidth - TkWinfo.screenwidth self - end - - def TkWinfo.server(window) - tk_call('winfo', 'server', window) - end - def winfo_server - TkWinfo.server self - end - - def TkWinfo.toplevel(window) - window(tk_call_without_enc('winfo', 'toplevel', window)) - end - def winfo_toplevel - TkWinfo.toplevel self - end - - def TkWinfo.visual(window) - tk_call_without_enc('winfo', 'visual', window) - end - def winfo_visual - TkWinfo.visual self - end - - def TkWinfo.visualid(window) - tk_call_without_enc('winfo', 'visualid', window) - end - def winfo_visualid - TkWinfo.visualid self - end - - def TkWinfo.visualsavailable(window, includeids=false) - if includeids - list(tk_call_without_enc('winfo', 'visualsavailable', - window, "includeids")) - else - list(tk_call_without_enc('winfo', 'visualsavailable', window)) - end - end - def winfo_visualsavailable(includeids=false) - TkWinfo.visualsavailable self, includeids - end - - def TkWinfo.vrootheight(window) - number(tk_call_without_enc('winfo', 'vrootheight', window)) - end - def winfo_vrootheight - TkWinfo.vrootheight self - end - - def TkWinfo.vrootwidth(window) - number(tk_call_without_enc('winfo', 'vrootwidth', window)) - end - def winfo_vrootwidth - TkWinfo.vrootwidth self - end - - def TkWinfo.vrootx(window) - number(tk_call_without_enc('winfo', 'vrootx', window)) - end - def winfo_vrootx - TkWinfo.vrootx self - end - - def TkWinfo.vrooty(window) - number(tk_call_without_enc('winfo', 'vrooty', window)) - end - def winfo_vrooty - TkWinfo.vrooty self - end - - def TkWinfo.width(window) - number(tk_call_without_enc('winfo', 'width', window)) - end - def winfo_width - TkWinfo.width self - end - - def TkWinfo.x(window) - number(tk_call_without_enc('winfo', 'x', window)) - end - def winfo_x - TkWinfo.x self - end - - def TkWinfo.y(window) - number(tk_call_without_enc('winfo', 'y', window)) - end - def winfo_y - TkWinfo.y self - end - - def TkWinfo.viewable(window) - bool(tk_call_without_enc('winfo', 'viewable', window)) - end - def winfo_viewable - TkWinfo.viewable self - end - - def TkWinfo.pointerx(window) - number(tk_call_without_enc('winfo', 'pointerx', window)) - end - def winfo_pointerx - TkWinfo.pointerx self - end - - def TkWinfo.pointery(window) - number(tk_call_without_enc('winfo', 'pointery', window)) - end - def winfo_pointery - TkWinfo.pointery self - end - - def TkWinfo.pointerxy(window) - list(tk_call_without_enc('winfo', 'pointerxy', window)) - end - def winfo_pointerxy - TkWinfo.pointerxy self - end -end diff --git a/ext/tk/lib/tk/winpkg.rb b/ext/tk/lib/tk/winpkg.rb deleted file mode 100644 index d6f7a0e9d4..0000000000 --- a/ext/tk/lib/tk/winpkg.rb +++ /dev/null @@ -1,138 +0,0 @@ -# -# tk/winpkg.rb : methods for Tcl/Tk packages for Microsoft Windows -# 2000/11/22 by Hidetoshi Nagai <nagai@ai.kyutech.ac.jp> -# -# ATTENTION !! -# This is NOT TESTED. Because I have no test-environment. -# -require 'tk' - -module TkWinDDE - extend Tk - extend TkWinDDE - - TkCommandNames = ['dde'.freeze].freeze - - if self.const_defined? :FORCE_VERSION - tk_call_without_enc('package', 'require', 'dde', FORCE_VERSION) - else - tk_call_without_enc('package', 'require', 'dde') - end - - #def servername(topic=None) - # tk_call('dde', 'servername', topic) - #end - def servername(*args) - if args.size == 0 - tk_call('dde', 'servername') - else - if args[-1].kind_of?(Hash) # dde 1.2 + - keys = _symbolkey2str(args.pop) - force = (keys.delete('force'))? '-force': None - exact = (keys.delete('exact'))? '-exact': None - if keys.size == 0 - tk_call('dde', 'servername', force, exact) - elsif args.size == 0 - tk_call('dde', 'servername', force, exact, *hash_kv(keys)) - else - tk_call('dde', 'servername', force, exact, - *((hash_kv(keys) << '--') + args)) - end - else - tk_call('dde', 'servername', *args) - end - end - end - - def execute(service, topic, data) - tk_call('dde', 'execute', service, topic, data) - end - - def async_execute(service, topic, data) - tk_call('dde', '-async', 'execute', service, topic, data) - end - - def poke(service, topic, item, data) - tk_call('dde', 'poke', service, topic, item, data) - end - - def request(service, topic, item) - tk_call('dde', 'request', service, topic, item) - end - - def binary_request(service, topic, item) - tk_call('dde', 'request', '-binary', service, topic, item) - end - - def services(service, topic) - tk_call('dde', 'services', service, topic) - end - - def eval(topic, cmd, *args) - tk_call('dde', 'eval', topic, cmd, *args) - end - - def async_eval(topic, cmd, *args) - tk_call('dde', 'eval', -async, topic, cmd, *args) - end - - module_function :servername, :execute, :async_execute, - :poke, :request, :services, :eval -end - -module TkWinRegistry - extend Tk - extend TkWinRegistry - - TkCommandNames = ['registry'.freeze].freeze - - if self.const_defined? :FORCE_VERSION - tk_call('package', 'require', 'registry', FORCE_VERSION) - else - tk_call('package', 'require', 'registry') - end - - def broadcast(keynam, timeout=nil) - if timeout - tk_call('registry', 'broadcast', keynam, '-timeout', timeout) - else - tk_call('registry', 'broadcast', keynam) - end - end - - def delete(keynam, valnam=None) - tk_call('registry', 'delete', keynam, valnam) - end - - def get(keynam, valnam) - tk_call('registry', 'get', keynam, valnam) - end - - def keys(keynam, pattern=nil) - lst = tk_split_simplelist(tk_call('registry', 'keys', keynam)) - if pattern - lst.find_all{|key| key =~ pattern} - else - lst - end - end - - def set(keynam, valnam=None, data=None, dattype=None) - tk_call('registry', 'set', keynam, valnam, data, dattype) - end - - def type(keynam, valnam) - tk_call('registry', 'type', keynam, valnam) - end - - def values(keynam, pattern=nil) - lst = tk_split_simplelist(tk_call('registry', 'values', keynam)) - if pattern - lst.find_all{|val| val =~ pattern} - else - lst - end - end - - module_function :delete, :get, :keys, :set, :type, :values -end diff --git a/ext/tk/lib/tk/wm.rb b/ext/tk/lib/tk/wm.rb deleted file mode 100644 index a1002f7b96..0000000000 --- a/ext/tk/lib/tk/wm.rb +++ /dev/null @@ -1,280 +0,0 @@ -# -# tk/wm.rb : methods for wm command -# -require 'tk' - -module Tk - module Wm - include TkComm - - TkCommandNames = ['wm'.freeze].freeze - - def aspect(*args) - if args.length == 0 - list(tk_call_without_enc('wm', 'aspect', path)) - else - tk_call('wm', 'aspect', path, *args) - self - end - end - - def attributes(slot=nil,value=None) - if slot == nil - lst = tk_split_list(tk_call('wm', 'attributes', path)) - info = {} - while key = lst.shift - info[key[1..-1]] = lst.shift - end - info - elsif slot.kind_of? Hash - tk_call('wm', 'attributes', path, *hash_kv(slot)) - self - elsif value == None - tk_call('wm', 'attributes', path, "-#{slot}") - else - tk_call('wm', 'attributes', path, "-#{slot}", value) - self - end - end - - def client(name=None) - if name == None - tk_call('wm', 'client', path) - else - name = '' if name == nil - tk_call('wm', 'client', path, name) - self - end - end - - def colormapwindows(*args) - if args.size == 0 - list(tk_call_without_enc('wm', 'colormapwindows', path)) - else - tk_call_without_enc('wm', 'colormapwindows', path, *args) - self - end - end - - def wm_command(value=nil) - if value - tk_call('wm', 'command', path, value) - self - else - #procedure(tk_call('wm', 'command', path)) - tk_call('wm', 'command', path) - end - end - - def deiconify(ex = true) - tk_call_without_enc('wm', 'deiconify', path) if ex - self - end - - def focusmodel(mode = nil) - if mode - tk_call_without_enc('wm', 'focusmodel', path, mode) - self - else - tk_call_without_enc('wm', 'focusmodel', path) - end - end - - def frame - tk_call_without_enc('wm', 'frame', path) - end - - def geometry(geom=nil) - if geom - tk_call_without_enc('wm', 'geometry', path, geom) - self - else - tk_call_without_enc('wm', 'geometry', path) - end - end - - def wm_grid(*args) - if args.size == 0 - list(tk_call_without_enc('wm', 'grid', path)) - else - tk_call_without_enc('wm', 'grid', path, *args) - self - end - end - - def group(leader = nil) - if leader - tk_call('wm', 'group', path, leader) - self - else - window(tk_call('wm', 'group', path)) - end - end - - def iconbitmap(bmp=nil) - if bmp - tk_call_without_enc('wm', 'iconbitmap', path, bmp) - self - else - image_obj(tk_call_without_enc('wm', 'iconbitmap', path)) - end - end - - def iconify(ex = true) - tk_call_without_enc('wm', 'iconify', path) if ex - self - end - - def iconmask(bmp=nil) - if bmp - tk_call_without_enc('wm', 'iconmask', path, bmp) - self - else - image_obj(tk_call_without_enc('wm', 'iconmask', path)) - end - end - - def iconname(name=nil) - if name - tk_call('wm', 'iconname', path, name) - self - else - tk_call('wm', 'iconname', path) - end - end - - def iconposition(*args) - if args.size == 0 - list(tk_call_without_enc('wm', 'iconposition', path)) - else - tk_call_without_enc('wm', 'iconposition', path, *args) - self - end - end - - def iconwindow(win = nil) - if win - tk_call_without_enc('wm', 'iconwindow', path, win) - self - else - w = tk_call_without_enc('wm', 'iconwindow', path) - (w == '')? nil: window(w) - end - end - - def maxsize(*args) - if args.size == 0 - list(tk_call_without_enc('wm', 'maxsize', path)) - else - tk_call_without_enc('wm', 'maxsize', path, *args) - self - end - end - - def minsize(*args) - if args.size == 0 - list(tk_call_without_enc('wm', 'minsize', path)) - else - tk_call_without_enc('wm', 'minsize', path, *args) - self - end - end - - def overrideredirect(bool=None) - if bool == None - bool(tk_call_without_enc('wm', 'overrideredirect', path)) - else - tk_call_without_enc('wm', 'overrideredirect', path, bool) - self - end - end - - def positionfrom(who=None) - if who == None - r = tk_call_without_enc('wm', 'positionfrom', path) - (r == "")? nil: r - else - tk_call_without_enc('wm', 'positionfrom', path, who) - self - end - end - - def protocol(name=nil, cmd=nil, &b) - if cmd - tk_call_without_enc('wm', 'protocol', path, name, cmd) - self - elsif b - tk_call_without_enc('wm', 'protocol', path, name, proc(&b)) - self - elsif name - result = tk_call_without_enc('wm', 'protocol', path, name) - (result == "")? nil : tk_tcl2ruby(result) - else - tk_split_simplelist(tk_call_without_enc('wm', 'protocol', path)) - end - end - - def resizable(*args) - if args.length == 0 - list(tk_call_without_enc('wm', 'resizable', path)).collect{|e| bool(e)} - else - tk_call_without_enc('wm', 'resizable', path, *args) - self - end - end - - def sizefrom(who=None) - if who == None - r = tk_call_without_enc('wm', 'sizefrom', path) - (r == "")? nil: r - else - tk_call_without_enc('wm', 'sizefrom', path, who) - self - end - end - - def stackorder - list(tk_call('wm', 'stackorder', path)) - end - - def stackorder_isabove(win) - bool(tk_call('wm', 'stackorder', path, 'isabove', win)) - end - - def stackorder_isbelow(win) - bool(tk_call('wm', 'stackorder', path, 'isbelow', win)) - end - - def state(state=nil) - if state - tk_call_without_enc('wm', 'state', path, state) - self - else - tk_call_without_enc('wm', 'state', path) - end - end - - def title(str=nil) - if str - tk_call('wm', 'title', path, str) - self - else - tk_call('wm', 'title', path) - end - end - - def transient(master=nil) - if master - tk_call_without_enc('wm', 'transient', path, master) - self - else - window(tk_call_without_enc('wm', 'transient', path)) - end - end - - def withdraw(ex = true) - tk_call_without_enc('wm', 'withdraw', path) if ex - self - end - end -end diff --git a/ext/tk/lib/tk/xim.rb b/ext/tk/lib/tk/xim.rb deleted file mode 100644 index 701cd7531c..0000000000 --- a/ext/tk/lib/tk/xim.rb +++ /dev/null @@ -1,122 +0,0 @@ -# -# tk/xim.rb : control imput_method -# -require 'tk' - -module TkXIM - include Tk - extend Tk - - TkCommandNames = ['imconfigure'.freeze].freeze - - def TkXIM.useinputmethods(value = None, window = nil) - if value == None - if window - bool(tk_call_without_enc('tk', 'useinputmethods', - '-displayof', window)) - else - bool(tk_call_without_enc('tk', 'useinputmethods')) - end - else - if window - bool(tk_call_without_enc('tk', 'useinputmethods', - '-displayof', window, value)) - else - bool(tk_call_without_enc('tk', 'useinputmethods', value)) - end - end - end - - def TkXIM.useinputmethods_displayof(window, value = None) - TkXIM.useinputmethods(value, window) - end - - def TkXIM.caret(window, keys=nil) - if keys - tk_call_without_enc('tk', 'caret', window, *hash_kv(keys)) - self - else - lst = tk_split_list(tk_call_without_enc('tk', 'caret', window)) - info = {} - while key = lst.shift - info[key[1..-1]] = lst.shift - end - info - end - end - - def TkXIM.configure(window, slot, value=None) - begin - if /^8\.*/ === Tk::TK_VERSION && JAPANIZED_TK - if slot.kind_of? Hash - tk_call('imconfigure', window, *hash_kv(slot)) - else - tk_call('imconfigure', window, "-#{slot}", value) - end - end - rescue - end - end - - def TkXIM.configinfo(window, slot=nil) - if TkComm::GET_CONFIGINFOwoRES_AS_ARRAY - begin - if /^8\.*/ === Tk::TK_VERSION && JAPANIZED_TK - if slot - conf = tk_split_list(tk_call('imconfigure', window, "-#{slot}")) - conf[0] = conf[0][1..-1] - conf - else - tk_split_list(tk_call('imconfigure', window)).collect{|conf| - conf[0] = conf[0][1..-1] - conf - } - end - else - [] - end - rescue - [] - end - else # ! TkComm::GET_CONFIGINFOwoRES_AS_ARRAY - TkXIM.current_configinfo(window, slot) - end - end - - def TkXIM.current_configinfo(window, slot=nil) - begin - if /^8\.*/ === Tk::TK_VERSION && JAPANIZED_TK - if slot - conf = tk_split_list(tk_call('imconfigure', window, "-#{slot}")) - { conf[0][1..-1] => conf[1] } - else - ret = {} - tk_split_list(tk_call('imconfigure', window)).each{|conf| - ret[conf[0][1..-1]] = conf[1] - } - ret - end - else - {} - end - rescue - {} - end - end - - def useinputmethods(value=None) - TkXIM.useinputmethods(value, self) - end - - def caret(keys=nil) - TkXIM.caret(self, keys=nil) - end - - def imconfigure(slot, value=None) - TkXIM.configure(self, slot, value) - end - - def imconfiginfo(slot=nil) - TkXIM.configinfo(self, slot) - end -end diff --git a/ext/tk/lib/tkafter.rb b/ext/tk/lib/tkafter.rb deleted file mode 100644 index f65945884c..0000000000 --- a/ext/tk/lib/tkafter.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkafter.rb - load tk/after.rb -# -require 'tk/timer' diff --git a/ext/tk/lib/tkbgerror.rb b/ext/tk/lib/tkbgerror.rb deleted file mode 100644 index deba7a57fa..0000000000 --- a/ext/tk/lib/tkbgerror.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkbgerror.rb - load tk/bgerror.rb -# -require 'tk/bgerror' diff --git a/ext/tk/lib/tkcanvas.rb b/ext/tk/lib/tkcanvas.rb deleted file mode 100644 index 9524614291..0000000000 --- a/ext/tk/lib/tkcanvas.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkcanvas.rb - load tk/canvas.rb -# -require 'tk/canvas' diff --git a/ext/tk/lib/tkclass.rb b/ext/tk/lib/tkclass.rb deleted file mode 100644 index 87f5acc453..0000000000 --- a/ext/tk/lib/tkclass.rb +++ /dev/null @@ -1,47 +0,0 @@ -# -# tkclass.rb - Tk classes -# Date: 2000/11/27 09:23:36 -# by Yukihiro Matsumoto <matz@caelum.co.jp> -# -# $Id$ - -require "tk" - -TopLevel = TkToplevel -Frame = TkFrame -Label = TkLabel -Button = TkButton -Radiobutton = TkRadioButton -Checkbutton = TkCheckButton -Message = TkMessage -Entry = TkEntry -Spinbox = TkSpinbox -Text = TkText -Scale = TkScale -Scrollbar = TkScrollbar -Listbox = TkListbox -Menu = TkMenu -Menubutton = TkMenubutton -Canvas = TkCanvas -Arc = TkcArc -Bitmap = TkcBitmap -Line = TkcLine -Oval = TkcOval -Polygon = TkcPolygon -Rectangle = TkcRectangle -TextItem = TkcText -WindowItem = TkcWindow -BitmapImage = TkBitmapImage -PhotoImage = TkPhotoImage -Selection = TkSelection -Winfo = TkWinfo -Pack = TkPack -Grid = TkGrid -Place = TkPlace -Variable = TkVariable -Font = TkFont -VirtualEvent = TkVirtualEvent - -def Mainloop - Tk.mainloop -end diff --git a/ext/tk/lib/tkconsole.rb b/ext/tk/lib/tkconsole.rb deleted file mode 100644 index 9960ddb8ac..0000000000 --- a/ext/tk/lib/tkconsole.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkconsole.rb - load tk/console.rb -# -require 'tk/console' diff --git a/ext/tk/lib/tkdialog.rb b/ext/tk/lib/tkdialog.rb deleted file mode 100644 index bec5e5d29a..0000000000 --- a/ext/tk/lib/tkdialog.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkdialog.rb - load tk/dialog.rb -# -require 'tk/dialog' diff --git a/ext/tk/lib/tkentry.rb b/ext/tk/lib/tkentry.rb deleted file mode 100644 index 2dcfcab5da..0000000000 --- a/ext/tk/lib/tkentry.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkentry.rb - load tk/entry.rb -# -require 'tk/entry' diff --git a/ext/tk/lib/tkextlib/ICONS.rb b/ext/tk/lib/tkextlib/ICONS.rb deleted file mode 100644 index 18d84c05e9..0000000000 --- a/ext/tk/lib/tkextlib/ICONS.rb +++ /dev/null @@ -1,13 +0,0 @@ -# -# ICONS support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/ICONS/setup.rb' - -# load library -require 'tkextlib/ICONS/icons' diff --git a/ext/tk/lib/tkextlib/ICONS/icons.rb b/ext/tk/lib/tkextlib/ICONS/icons.rb deleted file mode 100644 index 20d706df65..0000000000 --- a/ext/tk/lib/tkextlib/ICONS/icons.rb +++ /dev/null @@ -1,108 +0,0 @@ -# -# tkextlib/ICONS/icons.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/ICONS/setup.rb' - -# TkPackage.require('icons', '1.0') -TkPackage.require('icons') - -module Tk - class ICONS < TkImage - extend Tk - - def self.package_version - begin - TkPackage.require('icons') - rescue - '' - end - end - - def self.create(*args) # icon, icon, ..., ?option=>value, ...? - if args[-1].kind_of?(Hash) - keys = args.pop - icons = simplelist(tk_call('::icons::icons', 'create', - *(hash_kv(keys) << (args.flatten)))) - else - icons = simplelist(tk_call('::icons::icons', 'create', - args.flatten)) - end - - icons.collect{|icon| self.new(icon, :without_creating=>true)} - end - - def self.delete(*icons) # icon, icon, ... - icons = icons.flatten - return if icons.empty? - icons.map!{|icon| - if icon.kind_of?(Tk::ICONS) - Tk_IMGTBL.delete(icon.path) - icon.name - elsif icon.to_s =~ /^::icon::(.*)/ - name = $1 - Tk_IMGTBL.delete(icon) - name - else - Tk_IMGTBL.delete("::icon::#{icon}") - icon - end - } - tk_call('::icons::icons', 'delete', icons) - end - - def self.query(*args) # icon, icon, ..., ?option=>value, ...? - if args[-1].kind_of?(Hash) - keys = args.pop - simplelist(tk_call('::icons::icons', 'query', - *(hash_kv(keys) << (args.flatten)))) - else - simplelist(tk_call('::icons::icons', 'query', args.flatten)) - end . map{|inf| list(inf) } - end - - ########################################## - - def self.new(name, keys=nil) - Tk_IMGTBL["::icon::#{name}"] || super - end - - def initialize(name, keys=nil) - if name.kind_of?(String) && name =~ /^::icon::(.+)$/ - @name = $1 - @path = name - else - @name = name.to_s - @path = "::icon::#{@name}" - end - keys = _symbolkey2str(keys) - unless keys.delete('without_creating') - tk_call('::icons::icons', 'create', *(hash_kv(keys) << @name)) - end - Tk_IMGTBL[@path] = self - end - - def name - @name - end - - def delete - Tk_IMGTBL.delete(@path) - tk_call('::icons::icons', 'delete', @name) - self - end - - def query(keys={}) - list(simplelist(tk_call('::icons::icons', 'query', - *(hash_kv(keys) << @name)) - )[0]) - end - end -end diff --git a/ext/tk/lib/tkextlib/ICONS/setup.rb b/ext/tk/lib/tkextlib/ICONS/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/ICONS/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/SUPPORT_STATUS b/ext/tk/lib/tkextlib/SUPPORT_STATUS deleted file mode 100644 index a13e2751e8..0000000000 --- a/ext/tk/lib/tkextlib/SUPPORT_STATUS +++ /dev/null @@ -1,173 +0,0 @@ - - [ current support status of Tcl/Tk extensions ] - -The following list shows *CURRENT* status when this file was modifyed -at last. If you want to add other Tcl/Tk extensions to the planed list -(or change its status position), please request them at the ruby-talk, -ruby-list, or ruby-dev ML. Although we cannot promise to support your -requests, we'll try to do. - -If you want to check that wrapper libraries are ready to use on your -environment, please execute 'pkg_checker.rb' with no arguments. The -script may give you some hints about that. - - - ***** IMPORTANT NOTE ********************************************** - - 'support' means that Ruby/Tk's wrapper libraries are released. - 'not support' does *NOT* mean that the extension doesn't work - on Ruby/Tk. - - Even if the status of the extension is 'not support', you can - control the functions/widgets of the extension without wrapper - libraries by Tk.tk_call(), Tk.ip_eval(), and so on. - - If you cannot use installed Tcl/Tk extension, please check the - followings. - - (1) On your Tcl/Tk, does the extention work? - - (2) Do DLL libraries of the extension exist on DLL load-path? - (See also "<ruby archive>/ext/tcltklib/README.ActiveTcl") - - (3) Is the Tcl library directory of the extension included in - library search-path of the Tcl interpreter linked Ruby/Tk? - - The check results may request you to do some setup operations - before using the extension. If so, then please write the step - of setup oprations into the "setup.rb" file in the directory - of the wrapper libraries for the extention (It is the wrapper - libraries have the standard structure of the libraries in this - directory). The "setup" file is required before requiring the - Tcl library package (TkPackage.require(<libname>)). - - ******************************************************************* - - -===< support with some examples (may be beta quality) >======================= - -Tcllib http://sf.net/projects/tcllib - ==> tcllib (partial support; Tklib part only) - -IWidgets http://sf.net/projects/incrTcl ==> iwidgets - -BWidgets http://sf.net/projects/tcllib ==> bwidget - -TkTable http://sf.net/projects/tktable ==> tktable - [ * see also <http://www.korus.hu/~fery/ruby/tktable.rb> - written by Ferenc Engard (ferenc@engard.hu) ] - -vu http://tktable.sourceforge.net ==> vu - -TkHTML http://www.hwaci.com/sw/tkhtml/index.html ==> tkHTML - -ICONS http://www.satisoft.com/tcltk/icons/ ==> ICONS - - - -===< support (may be alpha or beta quality) >================================= - -IncrTcl http://sf.net/projects/incrTcl ==> itcl, itk - -TclX http://sf.net/projects/tclx - ==> tclx (partial support; infox command and - XPG/3 message catalogs only) - -TkImg http://sf.net/projects/tkimg ==> tkimg - -TkTreeCtrl http://tktreectrl.sourceforge.net/ ==> treectrl - -Tile http://tktable.sourceforge.net/tile/ ==> tile - - - -===< possibly available (not tested; alpha quality) >========================= - -winico http://tktable.sourceforge.net - ==> winico (win32 only) - -TkTrans http://www2.cmp.uea.ac.uk/~fuzz/tktrans/default.html - ==> tktrans (win32 only) - -TkDND http://sourceforge.net/projects/tkdnd ==> tkDND - - - -===< plan to support (alpha quality libraries may be included) >============== - -GraphViz http://www.graphviz.org/ - -Tkgeomap http://tkgeomap.sourceforge.net/index.html - - - -===< not determined to supprt or not >======================================== - -BLT http://sourceforge.net/projects/blt - * see tcltk-ext library on RAA (http://raa.ruby-lang.org/) - -Tix http://tixlibrary.sourceforge.net/ - * see tcltk-ext library on RAA (http://raa.ruby-lang.org/) - -TkZinc http://www.tkzinc.org/ - -Wbc http://home.t-online.de/home/csaba.nemethi/ - -Mentry http://home.t-online.de/home/csaba.nemethi/ - -Tablelist http://home.t-online.de/home/csaba.nemethi/ - -ANIGIF http://cardtable.sourceforge.net/tcltk/ - -IMG_ROTATE http://cardtable.sourceforge.net/tcltk/ - -TclVfs http://sourceforge.net/projects/tclvfs/ - -vfwtcl http://sourceforge.net/projects/avicaptcl - * Win32 only - -multicast http://sourceforge.net/projects/avicaptcl - * Win32 only - -XBit http://www.geocities.com/~chengye/ - * current implementation is for Windows only - -QuickTimeTcl http://hem.fyristorg.com/matben/qt/ - * works under Mac OS (8,9,X) or Windows - - - -===< may not support (already exist, out of Ruby/Tk scope, and so on) >======= - -TkCon http://sf.net/projects/tkcon - -Expect http://sf.net/projects/expect - -TclXML http://sf.net/projects/tclxml - -TclXSLT http://sf.net/projects/tclxml - -TclDOM http://sf.net/projects/tclxml - -TclSOAP http://sf.net/projects/tclsoap - -Snack http://www.speech.kth.se/~kare/snack2.2.tar.gz - * use Snack for Ruby (see http://rbsnack.sourceforge.net/) - -Tcom http://www.vex.net/~cthuang/tcom/ - -tDOM http://www.tdom.org - -Mk4tcl http://www.equi4.com/metakit/tcl.html - -Memchan http://memchan.sourceforge.net/ - - - -===< tool (may not supprt) >================================================== - -tbcload/tclcompiler http://www.tcl.tk/software/tclpro/ - - - -(End of List)
\ No newline at end of file diff --git a/ext/tk/lib/tkextlib/bwidget.rb b/ext/tk/lib/tkextlib/bwidget.rb deleted file mode 100644 index 56009f4694..0000000000 --- a/ext/tk/lib/tkextlib/bwidget.rb +++ /dev/null @@ -1,146 +0,0 @@ -# -# BWidget extension support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/bwidget/setup.rb' - -# load all image format handlers -#TkPackage.require('BWidget', '1.7') -TkPackage.require('BWidget') - -module Tk - module BWidget - TkComm::TkExtlibAutoloadModule.unshift(self) - - extend TkCore - - LIBRARY = tk_call('set', '::BWIDGET::LIBRARY') - - def self.package_version - begin - TkPackage.require('BWidget') - rescue - '' - end - end - - def self.XLFDfont(cmd, *args) - if args[-1].kind_of?(Hash) - keys = args.pop - args.concat(hash_kv(keys)) - end - tk_call('BWidget::XLFDfont', cmd, *args) - end - - def self.assert(exp, msg=None) - tk_call('BWidget::assert', exp, msg) - end - - def self.badOptionString(type, value, list) - tk_call('BWidget::badOptionString', type, value, list) - end - - def self.bindMouseWheel(widget) - tk_call('BWidget::bindMouseWheel', widget) - end - - def self.classes(klass) - list(tk_call('BWidget::classes', klass)) - end - - def self.clonename(menu) - tk_call('BWidget::clonename', menu) - end - - def self.focus(opt, path) - tk_call('BWidget::focus', opt, path) - end - - def self.get3dcolor(path, bgcolor) - tk_call('BWidget::get3dcolor', path, bgcolor) - end - - def self.getname(name) - tk_call('BWidget::getname', name) - end - - def self.grab(opt, path) - tk_call('BWidget::grab', opt, path) - end - - def self.inuse(klass) - bool(tk_call('BWidget::inuse', klass)) - end - - def self.library(klass, *klasses) - tk_call('BWidget::library', klass, *klasses) - end - - def self.lreorder(list, neworder) - tk_call('BWidget::lreorder', list, neworder) - end - - def self.parsetext(text) - tk_call('BWidget::parsetext', text) - end - - def self.place(path, w, h, *args) - if args[-1].kind_of?(Hash) - keys = args.pop - args.concat(hash_kv(keys)) - end - tk_call('BWidget::place', path, w, h, *(args.flatten)) - end - - def self.write(file, mode=None) - tk_call('BWidget::write', file, mode) - end - - def self.wrongNumArgsString(str) - tk_call('BWidget::wrongNumArgsString', str) - end - - #################################################### - - autoload :ArrowButton, 'tkextlib/bwidget/arrowbutton' - autoload :Bitmap, 'tkextlib/bwidget/bitmap' - autoload :Button, 'tkextlib/bwidget/button' - autoload :ButtonBox, 'tkextlib/bwidget/buttonbox' - autoload :ComboBox, 'tkextlib/bwidget/combobox' - autoload :Dialog, 'tkextlib/bwidget/dialog' - autoload :DragSite, 'tkextlib/bwidget/dragsite' - autoload :DropSite, 'tkextlib/bwidget/dropsite' - autoload :DynamicHelp, 'tkextlib/bwidget/dynamichelp' - autoload :Entry, 'tkextlib/bwidget/entry' - autoload :Label, 'tkextlib/bwidget/label' - autoload :LabelEntry, 'tkextlib/bwidget/labelentry' - autoload :LabelFrame, 'tkextlib/bwidget/labelframe' - autoload :ListBox, 'tkextlib/bwidget/listbox' - autoload :MainFrame, 'tkextlib/bwidget/mainframe' - autoload :MessageDlg, 'tkextlib/bwidget/messagedlg' - autoload :NoteBook, 'tkextlib/bwidget/notebook' - autoload :PagesManager, 'tkextlib/bwidget/pagesmanager' - autoload :PanedWindow, 'tkextlib/bwidget/panedwindow' - autoload :PasswdDlg, 'tkextlib/bwidget/passwddlg' - autoload :ProgressBar, 'tkextlib/bwidget/progressbar' - autoload :ProgressDlg, 'tkextlib/bwidget/progressdlg' - autoload :ScrollableFrame, 'tkextlib/bwidget/scrollableframe' - autoload :ScrolledWindow, 'tkextlib/bwidget/scrolledwindow' - autoload :ScrollView, 'tkextlib/bwidget/scrollview' - autoload :SelectColor, 'tkextlib/bwidget/selectcolor' - autoload :SelectFont, 'tkextlib/bwidget/selectfont' - autoload :Separator, 'tkextlib/bwidget/separator' - autoload :SpinBox, 'tkextlib/bwidget/spinbox' - autoload :TitleFrame, 'tkextlib/bwidget/titleframe' - autoload :Tree, 'tkextlib/bwidget/tree' - autoload :Widget, 'tkextlib/bwidget/widget' - - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/arrowbutton.rb b/ext/tk/lib/tkextlib/bwidget/arrowbutton.rb deleted file mode 100644 index 770e5e9ef1..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/arrowbutton.rb +++ /dev/null @@ -1,21 +0,0 @@ -# -# tkextlib/bwidget/arrowbutton.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' -require 'tkextlib/bwidget/button' - -module Tk - module BWidget - class ArrowButton < Tk::BWidget::Button - end - end -end - -class Tk::BWidget::ArrowButton - TkCommandNames = ['ArrowButton'.freeze].freeze - WidgetClassName = 'ArrowButton'.freeze - WidgetClassNames[WidgetClassName] = self -end diff --git a/ext/tk/lib/tkextlib/bwidget/bitmap.rb b/ext/tk/lib/tkextlib/bwidget/bitmap.rb deleted file mode 100644 index 6cfde203e8..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/bitmap.rb +++ /dev/null @@ -1,21 +0,0 @@ -# -# tkextlib/bwidget/bitmap.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' -require 'tk/image' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class Bitmap < TkPhotoImage - end - end -end - -class Tk::BWidget::Bitmap - def initialize(name) - @path = tk_call_without_enc('Bitmap::get', name) - Tk_IMGTBL[@path] = self - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/button.rb b/ext/tk/lib/tkextlib/bwidget/button.rb deleted file mode 100644 index 246afebe29..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/button.rb +++ /dev/null @@ -1,21 +0,0 @@ -# -# tkextlib/bwidget/button.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/button' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class Button < TkButton - end - end -end - -class Tk::BWidget::Button - TkCommandNames = ['Button'.freeze].freeze - WidgetClassName = 'Button'.freeze - WidgetClassNames[WidgetClassName] = self -end diff --git a/ext/tk/lib/tkextlib/bwidget/buttonbox.rb b/ext/tk/lib/tkextlib/bwidget/buttonbox.rb deleted file mode 100644 index 477de8a61f..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/buttonbox.rb +++ /dev/null @@ -1,73 +0,0 @@ -# -# tkextlib/bwidget/buttonbox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' -require 'tkextlib/bwidget/button' - -module Tk - module BWidget - class ButtonBox < TkWindow - end - end -end - -class Tk::BWidget::ButtonBox - TkCommandNames = ['ButtonBox'.freeze].freeze - WidgetClassName = 'ButtonBox'.freeze - WidgetClassNames[WidgetClassName] = self - - include TkItemConfigMethod - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::BWidget::Button) - name = tagOrId[:name] - return index(name) unless name.empty? - end - if tagOrId.kind_of?(TkButton) - return index(tagOrId[:text]) - end - # index(tagOrId.to_s) - index(_get_eval_string(tagOrId)) - end - - def add(keys={}, &b) - win = window(tk_send('add', *hash_kv(keys))) - win.instance_eval(&b) if b - win - end - - def delete(idx) - tk_send('delete', tagid(idx)) - self - end - - def index(idx) - if idx.kind_of?(Tk::BWidget::Button) - name = idx[:name] - idx = name unless name.empty? - end - if idx.kind_of?(TkButton) - idx = idx[:text] - end - number(tk_send('index', idx.to_s)) - end - - def insert(idx, keys={}, &b) - win = window(tk_send('insert', tagid(idx), *hash_kv(keys))) - win.instance_eval(&b) if b - win - end - - def invoke(idx) - tk_send('invoke', tagid(idx)) - self - end - - def set_focus(idx) - tk_send('setfocus', tagid(idx)) - self - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/combobox.rb b/ext/tk/lib/tkextlib/bwidget/combobox.rb deleted file mode 100644 index 31f71c3aaf..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/combobox.rb +++ /dev/null @@ -1,45 +0,0 @@ -# -# tkextlib/bwidget/combobox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/entry' -require 'tkextlib/bwidget.rb' -require 'tkextlib/bwidget/listbox' -require 'tkextlib/bwidget/spinbox' - -module Tk - module BWidget - class ComboBox < Tk::BWidget::SpinBox - end - end -end - -class Tk::BWidget::ComboBox - include Scrollable - - TkCommandNames = ['ComboBox'.freeze].freeze - WidgetClassName = 'ComboBox'.freeze - WidgetClassNames[WidgetClassName] = self - - def get_listbox(&b) - win = window(tk_send_without_enc('getlistbox')) - win.instance_eval(&b) if b - win - end - - def icursor(idx) - tk_send_without_enc('icursor', idx) - end - - def post - tk_send_without_enc('post') - self - end - - def unpost - tk_send_without_enc('unpost') - self - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/dialog.rb b/ext/tk/lib/tkextlib/bwidget/dialog.rb deleted file mode 100644 index d175a2d8bb..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/dialog.rb +++ /dev/null @@ -1,147 +0,0 @@ -# -# tkextlib/bwidget/dialog.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/frame' -require 'tkextlib/bwidget.rb' -require 'tkextlib/bwidget/buttonbox' - -module Tk - module BWidget - class Dialog < TkWindow - end - end -end - -class Tk::BWidget::Dialog - TkCommandNames = ['Dialog'.freeze].freeze - WidgetClassName = 'Dialog'.freeze - WidgetClassNames[WidgetClassName] = self - - include TkItemConfigMethod - - def initialize(parent=nil, keys=nil) - @relative = '' - if parent.kind_of?(Hash) - keys = _symbolkey2str(parent) - @relative = keys['parent'] if keys.key?('parent') - @relative = keys.delete('relative') if keys.key?('relative') - super(keys) - elsif keys - keys = _symbolkey2str(keys) - @relative = keys.delete('parent') if keys.key?('parent') - @relative = keys.delete('relative') if keys.key?('relative') - super(parent, keys) - else - super(parent) - end - end - - def create_self(keys) - cmd = self.class::TkCommandNames[0] - if keys and keys != None - tk_call_without_enc(cmd, @path, '-parent', @relative, - *hash_kv(keys, true)) - else - tk_call_without_enc(cmd, @path, '-parent', @relative) - end - end - - def cget(slot) - if slot.to_s == 'relative' - super('parent') - else - super(slot) - end - end - - def configure(slot, value=None) - if slot.kind_of?(Hash) - slot = _symbolkey2str(slot) - slot['parent'] = slot.delete('relative') if slot.key?('relative') - super(slot) - else - if slot.to_s == 'relative' - super('parent', value) - else - super(slot, value) - end - end - end - - def configinfo(slot=nil) - if slot - if slot.to_s == 'relative' - super('parent') - else - super(slot) - end - else - ret = super() - if TkComm::GET_CONFIGINFO_AS_ARRAY - ret << ['relative', 'parent'] - else - ret['relative'] = 'parent' - end - end - end - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::BWidget::Button) - name = tagOrId[:name] - return index(name) unless name.empty? - end - if tagOrId.kind_of?(TkButton) - return index(tagOrId[:text]) - end - # index(tagOrId.to_s) - index(_get_eval_string(tagOrId)) - end - - def add(keys={}, &b) - win = window(tk_send('add', *hash_kv(keys))) - win.instance_eval(&b) if b - win - end - - def get_frame(&b) - win = window(tk_send('getframe')) - win.instance_eval(&b) if b - win - end - - def get_buttonbox(&b) - win = window(@path + '.bbox') - win.instance_eval(&b) if b - win - end - - def draw(focus_win=None) - tk_send('draw', focus_win) - end - - def enddialog(ret) - tk_send('enddialog', ret) - end - - def index(idx) - get_buttonbox.index(idx) - end - - def invoke(idx) - tk_send('invoke', tagid(idx)) - self - end - - def set_focus(idx) - tk_send('setfocus', tagid(idx)) - self - end - - def withdraw - tk_send('withdraw') - self - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/dragsite.rb b/ext/tk/lib/tkextlib/bwidget/dragsite.rb deleted file mode 100644 index 4d4de1780c..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/dragsite.rb +++ /dev/null @@ -1,31 +0,0 @@ -# -# tkextlib/bwidget/dragsite.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - module DragSite - end - end -end - -module Tk::BWidget::DragSite - include Tk - extend Tk - - def self.include(klass, type, event) - tk_call('DragSite::include', klass, type, event) - end - - def self.register(path, keys={}) - tk_call('DragSite::register', path, *hash_kv(keys)) - end - - def self.set_drag(path, subpath, initcmd, endcmd, force=None) - tk_call('DragSite::setdrag', path, subpath, initcmd, endcmd, force) - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/dropsite.rb b/ext/tk/lib/tkextlib/bwidget/dropsite.rb deleted file mode 100644 index e5e98fbc51..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/dropsite.rb +++ /dev/null @@ -1,39 +0,0 @@ -# -# tkextlib/bwidget/dropsite.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - module DropSite - end - end -end - -module Tk::BWidget::DropSite - include Tk - extend Tk - - def self.include(klass, type) - tk_call('DropSite::include', klass, type) - end - - def self.register(path, keys={}) - tk_call('DropSite::register', path, *hash_kv(keys)) - end - - def self.set_cursor(cursor) - tk_call('DropSite::setcursor', cursor) - end - - def self.set_drop(path, subpath, dropover, drop, force=None) - tk_call('DropSite::setdrop', path, subpath, dropover, drop, force) - end - - def self.set_operation(op) - tk_call('DropSite::setoperation', op) - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/dynamichelp.rb b/ext/tk/lib/tkextlib/bwidget/dynamichelp.rb deleted file mode 100644 index 4766a1ec6d..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/dynamichelp.rb +++ /dev/null @@ -1,51 +0,0 @@ -# -# tkextlib/bwidget/dynamichelp.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - module DynamicHelp - end - end -end - -module Tk::BWidget::DynamicHelp - include Tk - extend Tk - - def self.__pathname - 'DynamicHelp::configure' - end - - def self.__cget_cmd - ['DynamicHelp::configure'] - end - - def self.__config_cmd - ['DynamicHelp::configure'] - end - - def self.cget(slot) - self.current_configinfo(slot).values[0] - end - - def self.add(widget, keys={}) - tk_call('DynamicHelp::add', widget, *hash_kv(keys)) - end - - def self.delete(widget) - tk_call('DynamicHelp::delete', widget) - end - - def self.include(klass, type) - tk_call('DynamicHelp::include', klass, type) - end - - def self.sethelp(path, subpath, force=None) - tk_call('DynamicHelp::sethelp', path, subpath, force) - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/entry.rb b/ext/tk/lib/tkextlib/bwidget/entry.rb deleted file mode 100644 index 9867a1ac36..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/entry.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# tkextlib/bwidget/entry.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/entry' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class Entry < TkEntry - end - end -end - -class Tk::BWidget::Entry - include Scrollable - - TkCommandNames = ['Entry'.freeze].freeze - WidgetClassName = 'Entry'.freeze - WidgetClassNames[WidgetClassName] = self - - def invoke - tk_send_without_enc('invoke') - self - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/label.rb b/ext/tk/lib/tkextlib/bwidget/label.rb deleted file mode 100644 index 1d4c638705..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/label.rb +++ /dev/null @@ -1,26 +0,0 @@ -# -# tkextlib/bwidget/label.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/label' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class Label < TkLabel - end - end -end - -class Tk::BWidget::Label - TkCommandNames = ['Label'.freeze].freeze - WidgetClassName = 'Label'.freeze - WidgetClassNames[WidgetClassName] = self - - def set_focus - tk_send_without_enc('setfocus') - self - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/labelentry.rb b/ext/tk/lib/tkextlib/bwidget/labelentry.rb deleted file mode 100644 index 7a6a7f01d6..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/labelentry.rb +++ /dev/null @@ -1,45 +0,0 @@ -# -# tkextlib/bwidget/labelentry.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/entry' -require 'tkextlib/bwidget.rb' -require 'tkextlib/bwidget/labelframe' -require 'tkextlib/bwidget/entry' - -module Tk - module BWidget - class LabelEntry < TkEntry - end - end -end - -class Tk::BWidget::LabelEntry - include Scrollable - - TkCommandNames = ['LabelEntry'.freeze].freeze - WidgetClassName = 'LabelEntry'.freeze - WidgetClassNames[WidgetClassName] = self - - def entrybind(*args) - _bind([path, 'bind'], *args) - self - end - - def entrybind_append(*args) - _bind_append([path, 'bind'], *args) - self - end - - def entrybind_remove(*args) - _bind_remove([path, 'bind'], *args) - self - end - - def entrybindinfo(*args) - _bindinfo([path, 'bind'], *args) - self - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/labelframe.rb b/ext/tk/lib/tkextlib/bwidget/labelframe.rb deleted file mode 100644 index 453756a163..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/labelframe.rb +++ /dev/null @@ -1,30 +0,0 @@ -# -# tkextlib/bwidget/labelframe.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/frame' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class LabelFrame < TkWindow - end - end -end - -class Tk::BWidget::LabelFrame - TkCommandNames = ['LabelFrame'.freeze].freeze - WidgetClassName = 'LabelFrame'.freeze - WidgetClassNames[WidgetClassName] = self - - def self.align(*args) - tk_call('LabelFrame::align', *args) - end - def get_frame(&b) - win = window(tk_send_without_enc('getframe')) - win.instance_eval(&b) if b - win - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/listbox.rb b/ext/tk/lib/tkextlib/bwidget/listbox.rb deleted file mode 100644 index 9f505703f2..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/listbox.rb +++ /dev/null @@ -1,290 +0,0 @@ -# -# tkextlib/bwidget/listbox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/canvas' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class ListBox < TkWindow - # is NOT a subclass of a listbox widget class. - # because it constructed on a canvas widget. - - class Item < TkObject - end - end - end -end - -class Tk::BWidget::ListBox - include TkItemConfigMethod - include Scrollable - - TkCommandNames = ['ListBox'.freeze].freeze - WidgetClassName = 'ListBox'.freeze - WidgetClassNames[WidgetClassName] = self - - class Event_for_Items < TkEvent::Event - def self._get_extra_args_tbl - [ - TkComm.method(:string) # item idenfier - ] - end - end - - def tagid(tag) - if tag.kind_of?(Tk::BWidget::ListBox::Item) - tag.id - else - # tag - _get_eval_string(tag) - end - end - - def imagebind(*args) - _bind_for_event_class(Event_for_Items, [path, 'bindImage'], *args) - self - end - - def imagebind_append(*args) - _bind_append_for_event_class(Event_for_Items, [path, 'bindImage'], *args) - self - end - - def imagebind_remove(*args) - _bind_remove_for_event_class(Event_for_Items, [path, 'bindImage'], *args) - self - end - - def imagebindinfo(*args) - _bindinfo_for_event_class(Event_for_Items, [path, 'bindImage'], *args) - end - - def textbind(*args) - _bind_for_event_class(Event_for_Items, [path, 'bindText'], *args) - self - end - - def textbind_append(*args) - _bind_append_for_event_class(Event_for_Items, [path, 'bindText'], *args) - self - end - - def textbind_remove(*args) - _bind_remove_for_event_class(Event_for_Items, [path, 'bindText'], *args) - self - end - - def textbindinfo(*args) - _bindinfo_for_event_class(Event_for_Items, [path, 'bindText'], *args) - end - - def delete(*args) - tk_send('delete', *args) - self - end - - def edit(item, text, *args) - tk_send('edit', tagid(item), text, *args) - self - end - - def exist?(item) - bool(tk_send('exists', tagid(item))) - end - - def index(item) - num_or_str(tk_send('index', tagid(item))) - end - - def insert(idx, item, keys={}) - tk_send('insert', idx, tagid(item), *hash_kv(keys)) - self - end - - def get_item(idx) - tk_send('items', idx) - end - - def items(first=None, last=None) - list(tk_send('items', first, last)) - end - - def move(item, idx) - tk_send('move', tagid(item), idx) - self - end - - def reorder(neworder) - tk_send('reorder', neworder) - self - end - - def see(item) - tk_send('see', tagid(item)) - self - end - - def selection_clear - tk_send_without_enc('selection', 'clear') - self - end - - def selection_set(*args) - tk_send_without_enc('selection', 'set', - *(args.collect{|item| tagid(item)})) - self - end - - def selection_add(*args) - tk_send_without_enc('selection', 'add', - *(args.collect{|item| tagid(item)})) - self - end - - def selection_remove(*args) - tk_send_without_enc('selection', 'remove', - *(args.collect{|item| tagid(item)})) - self - end - - def selection_get(*args) - simplelist(tk_send_without_enc('selection', 'get')).collect{|item| - Tk::BWidget::ListBox::Item.id2obj(self, item) - } - end -end - -class Tk::BWidget::ListBox::Item - include TkTreatTagFont - - ListItem_TBL = TkCore::INTERP.create_table - ListItem_ID = ['bw:item'.freeze, '00000'.taint].freeze - - TkCore::INTERP.init_ip_env{ ListItem_TBL.clear } - - def self.id2obj(lbox, id) - lpath = lbox.path - return id unless ListItem_TBL[lpath] - ListItem_TBL[lpath][id]? ListItem_TBL[lpath][id]: id - end - - def initialize(lbox, *args) - if lbox.kind_of?(Tk::BWidget::ListBox) - @listbox = lbox - else - fail RuntimeError, - "expect Tk::BWidget::ListBox or Tk::BWidget::ListBox::Item for 1st argument" - end - - if args[-1].kind_of?(Hash) - keys = _symbolkey2str(args.pop) - else - keys = {} - end - - index = keys.delete('index') - unless args.empty? - index = args.shift - end - index = 'end' unless index - - unless args.empty? - fail RuntimeError, 'too much arguments' - end - - @lpath = @listbox.path - - if keys.key?('itemname') - @path = @id = keys.delete('itemname') - else - @path = @id = ListItem_ID.join(TkCore::INTERP._ip_id_) - ListItem_ID[1].succ! - end - - ListItem_TBL[@id] = self - ListItem_TBL[@lpath] = {} unless ListItem_TBL[@lpath] - ListItem_TBL[@lpath][@id] = self - - @listbox.insert(index, @id, keys) - end - - def listbox - @listbox - end - - def id - @id - end - - def [](key) - cget(key) - end - - def []=(key, val) - configure(key, val) - val - end - - def cget(key) - @listbox.itemcget(@id, key) - end - - def configure(key, val=None) - @listbox.itemconfigure(@id, key, val) - end - - def configinfo(key=nil) - @listbox.itemconfiginfo(@id, key) - end - - def current_configinfo(key=nil) - @listbox.current_itemconfiginfo(@id, key) - end - - def delete - @listbox.delete(@id) - self - end - - def edit(*args) - @listbox.edit(@id, *args) - self - end - - def exist? - @listbox.exist?(@id) - end - - def index - @listbox.index(@id) - end - - def move(index) - @listbox.move(@id, index) - end - - def see - @listbox.see(@id) - end - - def selection_add - @listbox.selection_add(@id) - end - - def selection_remove - @listbox.selection_remove(@id) - end - - def selection_set - @listbox.selection_set(@id) - end - - def selection_toggle - @listbox.selection_toggle(@id) - end -end - diff --git a/ext/tk/lib/tkextlib/bwidget/mainframe.rb b/ext/tk/lib/tkextlib/bwidget/mainframe.rb deleted file mode 100644 index e52f4b2f4c..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/mainframe.rb +++ /dev/null @@ -1,73 +0,0 @@ -# -# tkextlib/bwidget/mainframe.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/frame' -require 'tkextlib/bwidget.rb' -require 'tkextlib/bwidget/progressbar' - -module Tk - module BWidget - class MainFrame < TkWindow - end - end -end - -class Tk::BWidget::MainFrame - TkCommandNames = ['MainFrame'.freeze].freeze - WidgetClassName = 'MainFrame'.freeze - WidgetClassNames[WidgetClassName] = self - - def add_indicator(keys={}, &b) - win = window(tk_send('addindicator', *hash_kv(keys))) - win.instance_eval(&b) if b - win - end - - def add_toolbar(&b) - win = window(tk_send('addtoolbar')) - win.instance_eval(&b) if b - win - end - - def get_frame(&b) - win = window(tk_send('getframe')) - win.instance_eval(&b) if b - win - end - - def get_indicator(idx, &b) - win = window(tk_send('getindicator', idx)) - win.instance_eval(&b) if b - win - end - - def get_menu(menu_id, &b) - win = window(tk_send('getmenu', menu_id)) - win.instance_eval(&b) if b - win - end - - def get_toolbar(idx, &b) - win = window(tk_send('gettoolbar', idx)) - win.instance_eval(&b) if b - win - end - - def set_menustate(tag, state) - tk_send('setmenustate', tag, state) - self - end - - def show_statusbar(name) - tk_send('showstatusbar', name) - self - end - - def show_toolbar(idx, mode) - tk_send('showtoolbar', idx, mode) - self - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/messagedlg.rb b/ext/tk/lib/tkextlib/bwidget/messagedlg.rb deleted file mode 100644 index d7b2bbc32b..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/messagedlg.rb +++ /dev/null @@ -1,167 +0,0 @@ -# -# tkextlib/bwidget/messagedlg.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class MessageDlg < TkWindow - end - end -end - -class Tk::BWidget::MessageDlg - TkCommandNames = ['MessageDlg'.freeze].freeze - WidgetClassName = 'MessageDlg'.freeze - WidgetClassNames[WidgetClassName] = self - - def initialize(parent=nil, keys=nil) - @relative = '' - if parent.kind_of?(Hash) - keys = _symbolkey2str(parent) - @relative = keys['parent'] if keys.key?('parent') - @relative = keys.delete('relative') if keys.key?('relative') - super(keys) - elsif keys - keys = _symbolkey2str(keys) - @relative = keys.delete('parent') if keys.key?('parent') - @relative = keys.delete('relative') if keys.key?('relative') - super(parent, keys) - else - super(parent) - end - end - - def create_self(keys) - # NOT create widget. - # Because the widget no longer exist when returning from creation. - @keys = _symbolkey2str(keys).update('parent'=>@relative) - @info = nil - end - private :create_self - - def cget(slot) - slot = slot.to_s - if slot == 'relative' - slot = 'parent' - end - if winfo_exist? - val = super(slot) - @keys[slot] = val - end - @keys[slot] - end - - def configure(slot, value=None) - if winfo_exist? - super(slot, value) - end - if slot.kind_of?(Hash) - slot = _symbolkey2str(slot) - slot['parent'] = slot.delete('relative') if slot.key?('relative') - @keys.update(slot) - - if @info - # update @info - slot.each{|k, v| - if TkComm::GET_CONFIGINFO_AS_ARRAY - if (inf = @info.assoc(k)) - inf[-1] = v - else - @info << [k, '', '', '', v] - end - else - if (inf = @info[k]) - inf[-1] = v - else - @info[k] = ['', '', '', v] - end - end - } - end - - else # ! Hash - slot = slot.to_s - slot = 'parent' if slot == 'relative' - @keys[slot] = value - - if @info - # update @info - if TkComm::GET_CONFIGINFO_AS_ARRAY - if (inf = @info.assoc(slot)) - inf[-1] = value - else - @info << [slot, '', '', '', value] - end - else - if (inf = @info[slot]) - inf[-1] = value - else - @info[slot] = ['', '', '', value] - end - end - end - end - - self - end - - def configinfo(slot=nil) - if winfo_exist? - @info = super() - if TkComm::GET_CONFIGINFO_AS_ARRAY - @info << ['relative', 'parent'] - else - @info['relative'] = 'parent' - end - end - - if TkComm::GET_CONFIGINFO_AS_ARRAY - if @info - if winfo_exist? - # update @keys - @info.each{|inf| @keys[inf[0]] = inf[-1] if inf.size > 2 } - end - else - @info = [] - @keys.each{|k, v| - @info << [k, '', '', '', v] - } - @info << ['relative', 'parent'] - end - - if slot - @info.asoc(slot.to_s).dup - else - @info.dup - end - - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - if @info - if winfo_exist? - # update @keys - @info.each{|k, inf| @keys[k] = inf[-1] if inf.size > 2 } - end - else - @info = {} - @keys.each{|k, v| - @info[k] = ['', '', '', v] - } - @info['relative'] = 'parent' - end - - if slot - @info[slot.to_s].dup - else - @info.dup - end - end - end - - def create - num_or_str(tk_call(self.class::TkCommandNames[0], @path, *hash_kv(@keys))) - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/notebook.rb b/ext/tk/lib/tkextlib/bwidget/notebook.rb deleted file mode 100644 index e0cc04d30e..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/notebook.rb +++ /dev/null @@ -1,116 +0,0 @@ -# -# tkextlib/bwidget/notebook.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/frame' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class NoteBook < TkWindow - end - end -end - -class Tk::BWidget::NoteBook - include TkItemConfigMethod - - TkCommandNames = ['NoteBook'.freeze].freeze - WidgetClassName = 'NoteBook'.freeze - WidgetClassNames[WidgetClassName] = self - - class Event_for_Tabs < TkEvent::Event - def self._get_extra_args_tbl - [ - TkComm.method(:string) # page idenfier - ] - end - end - - def tagid(id) - if id.kind_of?(TkWindow) - id.path - elsif id.kind_of?(TkObject) - id.to_eval - else - # id.to_s - _get_eval_string(id) - end - end - - def tabbind(*args) - _bind_for_event_class(Event_for_Tabs, [path, 'bindtabs'], *args) - self - end - - def tabbind_append(*args) - _bind_append_for_event_class(Event_for_Tabs, [path, 'bindtabs'], *args) - self - end - - def tabbind_remove(*args) - _bind_remove_for_event_class(Event_for_Tabs, [path, 'bindtabs'], *args) - self - end - - def tabbindinfo(*args) - _bindinfo_for_event_class(Event_for_Tabs, [path, 'bindtabs'], *args) - end - - def add(page, &b) - win = window(tk_send('add', tagid(page))) - win.instance_eval(&b) if b - win - end - - def compute_size - tk_send('compute_size') - self - end - - def delete(page, destroyframe=None) - tk_send('delete', tagid(page), destroyframe) - self - end - - def get_frame(page, &b) - win = window(tk_send('getframe', tagid(page))) - win.instance_eval(&b) if b - win - end - - def index(page) - num_or_str(tk_send('index', tagid(page))) - end - - def insert(index, page, keys={}, &b) - win = window(tk_send('insert', index, tagid(page), *hash_kv(keys))) - win.instance_eval(&b) if b - win - end - - def move(page, index) - tk_send('move', tagid(page), index) - self - end - - def get_page(page) - tk_send('pages', page) - end - - def pages(first=None, last=None) - list(tk_send('pages', first, last)) - end - - def raise(page=None) - tk_send('raise', page) - self - end - - def see(page) - tk_send('see', page) - self - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/pagesmanager.rb b/ext/tk/lib/tkextlib/bwidget/pagesmanager.rb deleted file mode 100644 index fc01284be6..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/pagesmanager.rb +++ /dev/null @@ -1,61 +0,0 @@ -# -# tkextlib/bwidget/pagesmanager.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/frame' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class PagesManager < TkWindow - end - end -end - -class Tk::BWidget::PagesManager - TkCommandNames = ['PagesManager'.freeze].freeze - WidgetClassName = 'PagesManager'.freeze - WidgetClassNames[WidgetClassName] = self - - def tagid(id) - # id.to_s - _get_eval_string(id) - end - - def add(page, &b) - win = window(tk_send('add', tagid(page))) - win.instance_eval(&b) if b - win - end - - def compute_size - tk_send('compute_size') - self - end - - def delete(page) - tk_send('delete', tagid(page)) - self - end - - def get_frame(page, &b) - win = window(tk_send('getframe', tagid(page))) - win.instance_eval(&b) if b - win - end - - def get_page(page) - tk_send('pages', page) - end - - def pages(first=None, last=None) - list(tk_send('pages', first, last)) - end - - def raise(page=None) - tk_send('raise', page) - self - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/panedwindow.rb b/ext/tk/lib/tkextlib/bwidget/panedwindow.rb deleted file mode 100644 index 19982c6095..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/panedwindow.rb +++ /dev/null @@ -1,31 +0,0 @@ -# -# tkextlib/bwidget/panedwindow.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/frame' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class PanedWindow < TkWindow - end - end -end - -class Tk::BWidget::PanedWindow - TkCommandNames = ['PanedWindow'.freeze].freeze - WidgetClassName = 'PanedWindow'.freeze - WidgetClassNames[WidgetClassName] = self - - def add(keys={}) - window(tk_send('add', *hash_kv(keys))) - end - - def get_frame(idx, &b) - win = window(tk_send_without_enc('getframe', idx)) - win.instance_eval(&b) if b - win - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/passwddlg.rb b/ext/tk/lib/tkextlib/bwidget/passwddlg.rb deleted file mode 100644 index 7136ae8d72..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/passwddlg.rb +++ /dev/null @@ -1,27 +0,0 @@ -# -# tkextlib/bwidget/passwddlg.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' -require 'tkextlib/bwidget/messagedlg' - -module Tk - module BWidget - class PasswdDlg < Tk::BWidget::MessageDlg - end - end -end - -class Tk::BWidget::PasswdDlg - TkCommandNames = ['PasswdDlg'.freeze].freeze - WidgetClassName = 'PasswdDlg'.freeze - WidgetClassNames[WidgetClassName] = self - - def create - login, passwd = simplelist(tk_call(self.class::TkCommandNames[0], - @path, *hash_kv(@keys))) - [login, passwd] - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/progressbar.rb b/ext/tk/lib/tkextlib/bwidget/progressbar.rb deleted file mode 100644 index 0253ce2ada..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/progressbar.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# tkextlib/bwidget/progressbar.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class ProgressBar < TkWindow - end - end -end - -class Tk::BWidget::ProgressBar - TkCommandNames = ['ProgressBar'.freeze].freeze - WidgetClassName = 'ProgressBar'.freeze - WidgetClassNames[WidgetClassName] = self -end diff --git a/ext/tk/lib/tkextlib/bwidget/progressdlg.rb b/ext/tk/lib/tkextlib/bwidget/progressdlg.rb deleted file mode 100644 index fbf00f3b00..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/progressdlg.rb +++ /dev/null @@ -1,54 +0,0 @@ -# -# tkextlib/bwidget/progressdlg.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/variable' -require 'tkextlib/bwidget.rb' -require 'tkextlib/bwidget/progressbar' -require 'tkextlib/bwidget/messagedlg' - -module Tk - module BWidget - class ProgressDlg < Tk::BWidget::MessageDlg - end - end -end - -class Tk::BWidget::ProgressDlg - TkCommandNames = ['ProgressDlg'.freeze].freeze - WidgetClassName = 'ProgressDlg'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self(keys) - # NOT create widget for reusing the object - super(keys) - @keys['textvariable'] = TkVariable.new unless @keys.key?('textvariable') - @keys['variable'] = TkVariable.new unless @keys.key?('variable') - end - - def textvariable - @keys['textvariable'] - end - - def text - @keys['textvariable'].value - end - - def text= (txt) - @keys['textvariable'].value = txt - end - - def variable - @keys['variable'] - end - - def value - @keys['variable'].value - end - - def value= (val) - @keys['variable'].value = val - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/scrollableframe.rb b/ext/tk/lib/tkextlib/bwidget/scrollableframe.rb deleted file mode 100644 index a3986681a5..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/scrollableframe.rb +++ /dev/null @@ -1,34 +0,0 @@ -# -# tkextlib/bwidget/scrollableframe.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/frame' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class ScrollableFrame < TkWindow - end - end -end - -class Tk::BWidget::ScrollableFrame - include Scrollable - - TkCommandNames = ['ScrollableFrame'.freeze].freeze - WidgetClassName = 'ScrollableFrame'.freeze - WidgetClassNames[WidgetClassName] = self - - def get_frame(&b) - win = window(tk_send_without_enc('getframe')) - win.instance_eval(&b) if b - win - end - - def see(win, vert=None, horiz=None) - tk_send_without_enc('see', win, vert, horiz) - self - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb b/ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb deleted file mode 100644 index e9e53235b7..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb +++ /dev/null @@ -1,32 +0,0 @@ -# -# tkextlib/bwidget/scrolledwindow.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/frame' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class ScrolledWindow < TkWindow - end - end -end - -class Tk::BWidget::ScrolledWindow - TkCommandNames = ['ScrolledWindow'.freeze].freeze - WidgetClassName = 'ScrolledWindow'.freeze - WidgetClassNames[WidgetClassName] = self - - def get_frame(&b) - win = window(tk_send_without_enc('getframe')) - win.instance_eval(&b) if b - win - end - - def set_widget(win) - tk_send_without_enc('setwidget', win) - self - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/scrollview.rb b/ext/tk/lib/tkextlib/bwidget/scrollview.rb deleted file mode 100644 index 5da528bd49..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/scrollview.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# tkextlib/bwidget/scrollview.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class ScrollView < TkWindow - end - end -end - -class Tk::BWidget::ScrollView - TkCommandNames = ['ScrollView'.freeze].freeze - WidgetClassName = 'ScrollView'.freeze - WidgetClassNames[WidgetClassName] = self -end diff --git a/ext/tk/lib/tkextlib/bwidget/selectcolor.rb b/ext/tk/lib/tkextlib/bwidget/selectcolor.rb deleted file mode 100644 index 742a84cd84..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/selectcolor.rb +++ /dev/null @@ -1,45 +0,0 @@ -# -# tkextlib/bwidget/selectcolor.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' -require 'tkextlib/bwidget/messagedlg' - -module Tk - module BWidget - class SelectColor < Tk::BWidget::MessageDlg - end - end -end - -class Tk::BWidget::SelectColor - extend Tk - - TkCommandNames = ['SelectColor'.freeze].freeze - WidgetClassName = 'SelectColor'.freeze - WidgetClassNames[WidgetClassName] = self - - def dialog(keys={}) - newkeys = @keys.dup - newkeys.update(_symbolkey2str(keys)) - tk_call('SelectColor::dialog', @path, *hash_kv(newkeys)) - end - - def menu(*args) - if args[-1].kind_of?(Hash) - keys = args.pop - else - keys = {} - end - place = args.flatten - newkeys = @keys.dup - newkeys.update(_symbolkey2str(keys)) - tk_call('SelectColor::menu', @path, place, *hash_kv(newkeys)) - end - - def self.set_color(idx, color) - tk_call('SelectColor::setcolor', idx, color) - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/selectfont.rb b/ext/tk/lib/tkextlib/bwidget/selectfont.rb deleted file mode 100644 index 46ca0dbca8..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/selectfont.rb +++ /dev/null @@ -1,79 +0,0 @@ -# -# tkextlib/bwidget/selectfont.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' -require 'tkextlib/bwidget/messagedlg' - -module Tk - module BWidget - class SelectFont < Tk::BWidget::MessageDlg - class Dialog < Tk::BWidget::SelectFont - end - class Toolbar < TkWindow - end - end - end -end - -class Tk::BWidget::SelectFont - extend Tk - - TkCommandNames = ['SelectFont'.freeze].freeze - WidgetClassName = 'SelectFont'.freeze - WidgetClassNames[WidgetClassName] = self - - def __font_optkeys - [] # without fontobj operation - end - - def create - tk_call(self.class::TkCommandNames[0], @path, *hash_kv(@keys)) - end - - def self.load_font - tk_call('SelectFont::loadfont') - end -end - -class Tk::BWidget::SelectFont::Dialog - def __font_optkeys - [] # without fontobj operation - end - - def create_self(keys) - super(keys) - @keys['type'] = 'dialog' - end - - def configure(slot, value=None) - if slot.kind_of?(Hash) - slot.delete['type'] - slot.delete[:type] - return self if slot.empty? - else - return self if slot == 'type' || slot == :type - end - super(slot, value) - end - - def create - @keys['type'] = 'dialog' - tk_call(Tk::BWidget::SelectFont::TkCommandNames[0], @path, *hash_kv(@keys)) - end -end - -class Tk::BWidget::SelectFont::Toolbar - def __font_optkeys - [] # without fontobj operation - end - - def create_self(keys) - keys = {} unless keys - keys = _symbolkey2str(keys) - keys['type'] = 'toolbar' - tk_call(Tk::BWidget::SelectFont::TkCommandNames[0], @path, *hash_kv(keys)) - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/separator.rb b/ext/tk/lib/tkextlib/bwidget/separator.rb deleted file mode 100644 index d9c3458e51..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/separator.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# tkextlib/bwidget/separator.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class Separator < TkWindow - end - end -end - -class Tk::BWidget::Separator - TkCommandNames = ['Separator'.freeze].freeze - WidgetClassName = 'Separator'.freeze - WidgetClassNames[WidgetClassName] = self -end diff --git a/ext/tk/lib/tkextlib/bwidget/setup.rb b/ext/tk/lib/tkextlib/bwidget/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/bwidget/spinbox.rb b/ext/tk/lib/tkextlib/bwidget/spinbox.rb deleted file mode 100644 index 4380e38355..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/spinbox.rb +++ /dev/null @@ -1,58 +0,0 @@ -# -# tkextlib/bwidget/entry.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' -require 'tkextlib/bwidget/arrowbutton' -require 'tkextlib/bwidget/entry' - -module Tk - module BWidget - class SpinBox < TkEntry - end - end -end - -class Tk::BWidget::SpinBox - include Scrollable - - TkCommandNames = ['SpinBox'.freeze].freeze - WidgetClassName = 'SpinBox'.freeze - WidgetClassNames[WidgetClassName] = self - - def entrybind(*args) - _bind([path, 'bind'], *args) - self - end - - def entrybind_append(*args) - _bind_append([path, 'bind'], *args) - self - end - - def entrybind_remove(*args) - _bind_remove([path, 'bind'], *args) - self - end - - def entrybindinfo(*args) - _bindinfo([path, 'bind'], *args) - self - end - - def get_index_of_value - number(tk_send_without_enc('getvalue')) - end - alias get_value get_index_of_value - alias get_value_index get_index_of_value - - def set_value_by_index(idx) - idx = "@#{idx}" if idx.kind_of?(Integer) - tk_send_without_enc('setvalue', idx) - self - end - alias set_value set_value_by_index - alias set_index_value set_value_by_index -end diff --git a/ext/tk/lib/tkextlib/bwidget/titleframe.rb b/ext/tk/lib/tkextlib/bwidget/titleframe.rb deleted file mode 100644 index f519490430..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/titleframe.rb +++ /dev/null @@ -1,27 +0,0 @@ -# -# tkextlib/bwidget/titleframe.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/frame' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class TitleFrame < TkWindow - end - end -end - -class Tk::BWidget::TitleFrame - TkCommandNames = ['TitleFrame'.freeze].freeze - WidgetClassName = 'TitleFrame'.freeze - WidgetClassNames[WidgetClassName] = self - - def get_frame(&b) - win = window(tk_send_without_enc('getframe')) - win.instance_eval(&b) if b - win - end -end diff --git a/ext/tk/lib/tkextlib/bwidget/tree.rb b/ext/tk/lib/tkextlib/bwidget/tree.rb deleted file mode 100644 index 9a49a96bb7..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/tree.rb +++ /dev/null @@ -1,374 +0,0 @@ -# -# tkextlib/bwidget/tree.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/canvas' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - class Tree < TkWindow - class Node < TkObject - end - end - end -end - -class Tk::BWidget::Tree - include TkItemConfigMethod - include Scrollable - - TkCommandNames = ['Tree'.freeze].freeze - WidgetClassName = 'Tree'.freeze - WidgetClassNames[WidgetClassName] = self - - class Event_for_Items < TkEvent::Event - def self._get_extra_args_tbl - [ - TkComm.method(:string) # item idenfier - ] - end - end - - def tagid(tag) - if tag.kind_of?(Tk::BWidget::Tree::Node) - tag.id - else - # tag - _get_eval_string(tag) - end - end - - def imagebind(*args) - _bind_for_event_class(Event_for_Items, [path, 'bindImage'], *args) - self - end - - def imagebind_append(*args) - _bind_append_for_event_class(Event_for_Items, [path, 'bindImage'], *args) - self - end - - def imagebind_remove(*args) - _bind_remove_for_event_class(Event_for_Items, [path, 'bindImage'], *args) - self - end - - def imagebindinfo(*args) - _bindinfo_for_event_class(Event_for_Items, [path, 'bindImage'], *args) - end - - def textbind(*args) - _bind_for_event_class(Event_for_Items, [path, 'bindText'], *args) - self - end - - def textbind_append(*args) - _bind_append_for_event_class(Event_for_Items, [path, 'bindText'], *args) - self - end - - def textbind_remove(*args) - _bind_remove_for_event_class(Event_for_Items, [path, 'bindText'], *args) - self - end - - def textbindinfo(*args) - _bindinfo_for_event_class(Event_for_Items, [path, 'bindText'], *args) - end - - def close_tree(node, recurse=None) - tk_send('closetree', tagid(node), recurse) - self - end - - def delete(*args) - tk_send('delete', *(args.collect{|node| tagid(node)})) - self - end - - def edit(node, text, *args) - tk_send('edit', tagid(node), text, *args) - self - end - - def exist?(node) - bool(tk_send('exists', tagid(node))) - end - - def index(node) - num_or_str(tk_send('index', tagid(node))) - end - - def insert(idx, parent, node, keys={}) - tk_send('insert', idx, tagid(parent), tagid(node), *hash_kv(keys)) - self - end - - def move(parent, node, idx) - tk_send('move', tagid(parent), tagid(node), idx) - self - end - - def get_node(node, idx) - Tk::BWidget::Tree::Node.id2obj(self, tk_send('nodes', tagid(node), idx)) - end - - def nodes(node, first=None, last=None) - simplelist(tk_send('nodes', tagid(node), first, last)).collect{|node| - Tk::BWidget::Tree::Node.id2obj(self, node) - } - end - - def open?(node) - bool(@tree.itemcget(tagid(node), 'open')) - end - - def open_tree(node, recurse=None) - tk_send('opentree', tagid(node), recurse) - self - end - - def parent(node) - Tk::BWidget::Tree::Node.id2obj(self, tk_send('parent', tagid(node))) - end - - def reorder(node, neworder) - tk_send('reorder', tagid(node), neworder) - self - end - - def see(node) - tk_send('see', tagid(node)) - self - end - - def selection_add(*args) - tk_send_without_enc('selection', 'add', - *(args.collect{|node| tagid(node)})) - self - end - - def selection_clear - tk_send_without_enc('selection', 'clear') - self - end - - def selection_get - list(tk_send_without_enc('selection', 'get')) - end - - def selection_include?(*args) - bool(tk_send_without_enc('selection', 'get', - *(args.collect{|node| tagid(node)}))) - end - - def selection_range(*args) - tk_send_without_enc('selection', 'range', - *(args.collect{|node| tagid(node)})) - self - end - - def selection_remove(*args) - tk_send_without_enc('selection', 'remove', - *(args.collect{|node| tagid(node)})) - self - end - - def selection_set(*args) - tk_send_without_enc('selection', 'set', - *(args.collect{|node| tagid(node)})) - self - end - - def selection_toggle(*args) - tk_send_without_enc('selection', 'toggle', - *(args.collect{|node| tagid(node)})) - self - end - - def toggle(node) - tk_send_without_enc('toggle', tagid(node)) - self - end - - def visible(node) - bool(tk_send_without_enc('visible', tagid(node))) - end -end - -class Tk::BWidget::Tree::Node - include TkTreatTagFont - - TreeNode_TBL = TkCore::INTERP.create_table - TreeNode_ID = ['bw:node'.freeze, '00000'.taint].freeze - - TkCore::INTERP.init_ip_env{ TreeNode_TBL.clear } - - def self.id2obj(tree, id) - tpath = tree.path - return id unless TreeNode_TBL[tpath] - TreeNode_TBL[tpath][id]? TreeNode_TBL[tpath][id]: id - end - - def initialize(tree, *args) - if tree.kind_of?(Tk::BWidget::Tree) - @tree = tree - parent = args.shift - if parent.kind_of?(Tk::BWidget::Tree::Node) - if parent.tree.path != @tree.path - fail RuntimeError, 'tree of parent node is not match' - end - end - elsif tree.kind_of?(Tk::BWidget::Tree::Node) - @tree = tree.tree - parent = tree.parent - else - fail RuntimeError, - "expect Tk::BWidget::Tree or Tk::BWidget::Tree::Node for 1st argument" - end - - if args[-1].kind_of?(Hash) - keys = _symbolkey2str(args.pop) - else - keys = {} - end - - index = keys.delete('index') - unless args.empty? - index = args.shift - end - index = 'end' unless index - - unless args.empty? - fail RuntimeError, 'too much arguments' - end - - @tpath = @tree.path - - if keys.key?('nodename') - @path = @id = keys.delete('nodename') - else - @path = @id = TreeNode_ID.join(TkCore::INTERP._ip_id_) - TreeNode_ID[1].succ! - end - - TreeNode_TBL[@id] = self - TreeNode_TBL[@tpath] = {} unless TreeNode_TBL[@tpath] - TreeNode_TBL[@tpath][@id] = self - - @tree.insert(index, parent, @id, keys) - end - - def tree - @tree - end - - def id - @id - end - - def [](key) - cget(key) - end - - def []=(key, val) - configure(key, val) - val - end - - def cget(key) - @tree.itemcget(@id, key) - end - - def configure(key, val=None) - @tree.itemconfigure(@id, key, val) - end - - def configinfo(key=nil) - @tree.itemconfiginfo(@id, key) - end - - def current_configinfo(key=nil) - @tree.current_itemconfiginfo(@id, key) - end - - def close_tree(recurse=None) - @tree.close_tree(@id, recurse) - self - end - - def delete - @tree.delete(@id) - self - end - - def edit(*args) - @tree.edit(@id, *args) - self - end - - def exist? - @tree.exist?(@id) - end - - def index - @tree.index(@id) - end - - def move(index, parent=nil) - if parent - @tree.move(parent, @id, index) - else - @tree.move(self.parent, @id, index) - end - end - - def open_tree(recurse=None) - @tree.open_tree(@id, recurse) - self - end - - def open? - bool(@tree.itemcget(@id, 'open')) - end - - def parent - @tree.parent(@id) - end - - def reorder(neworder) - @tree.reorder(@id, neworder) - end - - def see - @tree.see(@id) - end - - def selection_add - @tree.selection_add(@id) - end - - def selection_remove - @tree.selection_remove(@id) - end - - def selection_set - @tree.selection_set(@id) - end - - def selection_toggle - @tree.selection_toggle(@id) - end - - def toggle - @tree.toggle(@id) - end - - def visible - @tree.visible(@id) - end -end - diff --git a/ext/tk/lib/tkextlib/bwidget/widget.rb b/ext/tk/lib/tkextlib/bwidget/widget.rb deleted file mode 100644 index eadf59c11c..0000000000 --- a/ext/tk/lib/tkextlib/bwidget/widget.rb +++ /dev/null @@ -1,113 +0,0 @@ -# -# tkextlib/bwidget/widget.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/bwidget.rb' - -module Tk - module BWidget - module Widget - end - end -end - -module Tk::BWidget::Widget - include Tk - extend Tk - - def self.__pathname - 'Widget::configure' - end - - def self.__cget_cmd - ['Widget::cget'] - end - - def self.__config_cmd - ['Widget::configure'] - end - - def self.cget(slot) - self.current_configinfo(slot).values[0] - end - - def self.add_map(klass, subclass, subpath, opts) - tk_call('Widget::addmap', klass, subclass, subpath, opts) - end - - def self.bwinclude(klass, subclass, subpath, *args) - tk_call('Widget::bwinclude', klass, subclass, subpath, *args) - end - - def self.create(klass, path, rename=None, &b) - win = window(tk_call('Widget::create', klass, path, rename)) - win.instance_eval(&b) if b - win - end - - def self.declare(klass, optlist) - tk_call('Widget::declare', klass, optlist) - end - - def self.define(klass, filename, *args) - tk_call('Widget::define', klass, filename, *args) - end - - def self.destroy(win) - tk_call('Widget::destroy', win) - end - - def self.focus_next(win) - tk_call('Widget::focusNext', win) - end - - def self.focus_ok(win) - tk_call('Widget::focusOk', win) - end - - def self.focus_prev(win) - tk_call('Widget::focusPrev', win) - end - - def self.generate_doc(dir, widgetlist) - tk_call('Widget::generate-doc', dir, widgetlist) - end - - def self.generate_widget_doc(klass, iscmd, file) - tk_call('Widget::generate-widget-doc', klass, iscmd, file) - end - - def self.get_option(win, option) - tk_call('Widget::getoption', win, option) - end - - def self.get_variable(win, varname, my_varname=None) - tk_call('Widget::getVariable', win, varname, my_varname) - end - - def self.has_changed(win, option, pvalue) - tk_call('Widget::hasChanged', win, option, pvalue) - end - - def self.init(klass, win, options) - tk_call('Widget::init', klass, win, options) - end - - def self.set_option(win, option, value) - tk_call('Widget::setoption', win, option, value) - end - - def self.sub_cget(win, subwidget) - tk_call('Widget::subcget', win, subwidget) - end - - def self.sync_options(klass, subclass, subpath, options) - tk_call('Widget::syncoptions', klass, subclass, subpath, options) - end - - def self.tkinclude(klass, tkwidget, subpath, *args) - tk_call('Widget::tkinclude', klass, tkwidget, subpath, *args) - end -end diff --git a/ext/tk/lib/tkextlib/itcl.rb b/ext/tk/lib/tkextlib/itcl.rb deleted file mode 100644 index 1d6ecf04f2..0000000000 --- a/ext/tk/lib/tkextlib/itcl.rb +++ /dev/null @@ -1,13 +0,0 @@ -# -# [incr Tcl] support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/itcl/setup.rb' - -# load library -require 'tkextlib/itcl/incr_tcl.rb' diff --git a/ext/tk/lib/tkextlib/itcl/incr_tcl.rb b/ext/tk/lib/tkextlib/itcl/incr_tcl.rb deleted file mode 100644 index c03f3c36cb..0000000000 --- a/ext/tk/lib/tkextlib/itcl/incr_tcl.rb +++ /dev/null @@ -1,167 +0,0 @@ -# -# tkextlib/itk/incr_tcl.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' - -# call setup script -require 'tkextlib/itcl.rb' - -# TkPackage.require('Itcl', '3.2') -TkPackage.require('Itcl') - -module Tk - module Itcl - include Tk - extend Tk - - LIBRARY = TkVarAccess.new('::itcl::library') - PURIST = TkVarAccess.new('::itcl::purist') - - VERSION = TkCore::INTERP._invoke("set", "::itcl::version").freeze - PATCHLEVEL = TkCore::INTERP._invoke("set", "::itcl::patchLevel").freeze - - def self.package_version - begin - TkPackage.require('Itcl') - rescue - '' - end - end - - ############################################## - - class ItclObject < TkObject - ITCL_CLASSNAME = ''.freeze - - ITCL_OBJ_ID = ['itclobj'.freeze, '00000'.taint].freeze - ITCL_OBJ_TBL = {}.taint - - def initialize(*args) - if (@klass = self.class::ITCL_CLASSNAME).empty? - fail RuntimeError, 'unknown itcl class (abstract class?)' - end - @id = Tk::Itcl::ItclObject::TCL_OBJ_ID.join(TkCore::INTERP._ip_id_) - @path = @id - Tk::Itcl::ItclObject::ITCL_OBJ_ID[1].succ! - end - - def self.call_proc(name, *args) - tk_call("#{ITCL_CLASSNAME}::#{cmd}", *args) - end - - def call_method(name, *args) - tk_call(@path, name, *args) - end - - def isa(klass) - bool(tk_call(@path, 'isa', klass)) - end - alias itcl_kind_of? isa - - def info_class - tk_call(@path, 'info', 'class') - end - - def info_inherit - simplelist(tk_call(@path, 'info', 'inherit')) - end - - def info_heritage - list(tk_call(@path, 'info', 'heritage')) - end - - def info_function(*args) - if args[-1].kind_of?(Array) - params = args.pop - params.each{|param| - param = param.to_s - args << ( (param[0] == ?-)? param: "-#{param}" ) - } - end - list(tk_call(@path, 'info', 'function', *args)) - end - - def info_variable(*args) - if args[-1].kind_of?(Array) - params = args.pop - params.each{|param| - param = param.to_s - args << ( (param[0] == ?-)? param: "-#{param}" ) - } - end - list(tk_call(@path, 'info', 'variable', *args)) - end - end - - ############################################## - - def self.body(klass, func, args, body) - tk_call('::itcl::body', "#{klass}::#{func}", args, body) - end - - def self.code(cmd, *args) - tk_call('::itcl::code', cmd, *args) - end - - def self.code_in_namespace(namespace, cmd, *args) - tk_call('::itcl::code', '-namespace', namespace, cmd, *args) - end - - def self.configbody(klass, var, body) - tk_call('::itcl::configbody', "#{klass}::#{var}", body) - end - - def self.create_itcl_class(name, body) - TkCore::INTERP._invoke('::itcl::class', name, body) - klass = Class.new(Tk::Itcl::ItclObject) - klass.const_set('ITCL_CLASSNAME', name.dup.freeze) - klass - end - - def self.delete_itcl_class(*names) - tk_call('::itcl::delete', 'class', *names) - end - - def self.delete_itcl_object(*names) - tk_call('::itcl::delete', 'object', *names) - end - - def self.delete_namespace(*names) - tk_call('::itcl::delete', 'namespace', *names) - end - - def self.ensemble(name, *args) - tk_call('::itcl::ensemble', name, *args) - end - - def self.find_classes(pat=None) - simplelist(tk_call('::itcl::find', 'classes', pat)) - end - - def self.find_objects(*args) - simplelist(tk_call('::itcl::find', 'objects', *args)) - end - - def self.is_itcl_class(target) - bool(tk_call('::itcl::is', 'class', target)) - end - - def self.is_itcl_object(target) - bool(tk_call('::itcl::is', 'object', target)) - end - - def self.create_local_obj(klass, name, *args) - tk_call('::itcl::local', klass, name, *args) - end - - def self.is_itcl_instance(klass, target) - bool(tk_call('::itcl::is', 'object', '-class', klass, target)) - end - - def self.scope(var) - tk_call('::itcl::scope', var) - end - end -end diff --git a/ext/tk/lib/tkextlib/itcl/setup.rb b/ext/tk/lib/tkextlib/itcl/setup.rb deleted file mode 100644 index 5be0588703..0000000000 --- a/ext/tk/lib/tkextlib/itcl/setup.rb +++ /dev/null @@ -1,13 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# - - -# set [incr Tcl] library directory - -# ENV['ITCL_LIBRARY'] = '/usr/local/ActiveTcl/lib/itcl3.2/' diff --git a/ext/tk/lib/tkextlib/itk.rb b/ext/tk/lib/tkextlib/itk.rb deleted file mode 100644 index 7492bd3eb4..0000000000 --- a/ext/tk/lib/tkextlib/itk.rb +++ /dev/null @@ -1,13 +0,0 @@ -# -# [incr Tk] support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/itk/setup.rb' - -# load library -require 'tkextlib/itk/incr_tk.rb' diff --git a/ext/tk/lib/tkextlib/itk/incr_tk.rb b/ext/tk/lib/tkextlib/itk/incr_tk.rb deleted file mode 100644 index a52c43e518..0000000000 --- a/ext/tk/lib/tkextlib/itk/incr_tk.rb +++ /dev/null @@ -1,381 +0,0 @@ -# -# tkextlib/itk/incr_tk.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/menuspec' -require 'tkextlib/itcl.rb' - -# call setup script -require 'tkextlib/itk.rb' - -#TkPackage.require('Itk', '3.2') -TkPackage.require('Itk') - -module Tk - module Itk - include Tk - extend Tk - - LIBRARY = TkVarAccess.new('::itk::library') - - def self.package_version - begin - TkPackage.require('Itk') - rescue - '' - end - end - - def self.usual(arg, *args) - tk_call('::itk::usual', arg, *args) - end - - def self.usual_names - list(tk_call('::itk::usual')) - end - - ############################ - - class Archetype < TkWindow - TkCommandNames = [].freeze - # WidgetClassName = 'Archetype'.freeze - # WidgetClassNames[WidgetClassName] = self - - def self.to_eval - '::itk::' << self::WidgetClassName - end - - def __destroy_hook__ - Tk::Itk::Component::ComponentID_TBL.delete(self.path) - end - - #### [incr Tk] public methods - def component - simplelist(tk_send('component')) - end - - def component_path(name) - window(tk_send('component', name)) - end - alias component_widget component_path - - def component_invoke(name, cmd, *args) - window(tk_send('component', name, cmd, *args)) - end - - def component_obj(*names) - names = component if names.empty? - names.collect{|name| Tk::Itk::Component.new(self.path, name) } - end - - #### [incr Tk] protected methods -=begin - def itk_component_add(visibility, name, create_cmds, option_cmds=None) - args = [] - visibility.each{|v| v = v.to_s; args << ( (v[0] == ?-)? v: "-#{v}" )} - args << '--' << name << create_cmd << option_cmds - tk_call('itk_component', 'add', *args) - end - - def itk_component_delete(*names) - tk_call('itk_component', 'delete', *names) - end - - def itk_initialize(keys={}) - tk_call('itk_initialize', keys) - end - - def itk_option_add(*args) - tk_call('itk_option', 'add', *args) - end - - def itk_option_define(name, resource, klass, init, config=None) - tk_call('itk_option', 'define', name, resource, klass, init, config) - end - - def itk_option_remove(*args) - tk_call('itk_option', 'remove', *args) - end -=end - end - - ############################ - - class Toplevel < Archetype - TkCommandNames = ['::itk::Toplevel'].freeze - WidgetClassName = 'Toplevel'.freeze - WidgetClassNames[WidgetClassName] = self - - include Wm - include TkMenuSpec - end - - ############################ - - class Widget < Archetype - TkCommandNames = ['::itk::Widget'].freeze - WidgetClassName = 'Widget'.freeze - WidgetClassNames[WidgetClassName] = self - end - - - ############################ - - class Component < TkObject - def __cget_cmd - [self.master, 'component', self.name, 'cget'] - end - - def __config_cmd - [self.master, 'component', self.name, 'configure'] - end - - ComponentID_TBL = TkCore::INTERP.create_table - Itk_Component_ID = ['itk:component'.freeze, '00000'.taint].freeze - - TkCore::INTERP.init_ip_env{ ComponentID_TBL.clear } - - def self.id2obj(master, id) - if master.kind_of?(TkObject) - master = master.path - else - master = master.to_s - end - return id unless ComponentID_TBL.key?(master) - (ComponentID_TBL.key?(id))? ComponentID_TBL[master][id]: id - end - - def self.new(master, component=nil) - if master.kind_of?(TkObject) - master = master.path - else - master = master.to_s - end - - if component.kind_of?(Tk::Itk::Component) - component = component.name - elsif component - component = component.to_s - else - component = Itk_Component_ID.join(TkCore::INTERP._ip_id_) - Itk_Component_ID[1].succ! - end - - if ComponentID_TBL.key?(master) - if ComponentID_TBL[master].key?(component) - return ComponentID_TBL[master][component] - end - else - ComponentID_TBL[master] = {} - end - - super(master, component) - end - - def initialize(master, component) - @master = master - @component = component - - ComponentID_TBL[@master][@component] = self - - begin - @widget = window(tk_call(@master, 'component', @component)) - @path = @widget.path - rescue - @widget = nil - @path = nil - end - end - - def path - unless @path - begin - @widget = window(tk_call(@master, 'component', @component)) - @path = @widget.path - rescue - fail RuntimeError, 'component is not assigned to a widget' - end - end - @path - end - - def epath - path() - end - - def to_eval - path() - end - - def master - @master - end - - def name - @component - end - - def widget - unless @widget - begin - @widget = window(tk_call(@master, 'component', @component)) - @path = @widget.path - rescue - fail RuntimeError, 'component is not assigned to a widget' - end - end - @widget - end - - def widget_class - unless @widget - begin - @widget = window(tk_call(@master, 'component', @component)) - @path = @widget.path - @widget.classname - rescue - nil - end - end - end - - def method_missing(id, *args) - name = id.id2name - - # try 1 : component command - begin - return tk_call(@master, 'component', @component, name, *args) - rescue - end - - # try 2 : component configure - len = args.length - begin - case len - when 1 - if name[-1] == ?= - return configure(name[0..-2], args[0]) - else - return configure(name, args[0]) - end - when 0 - return cget(name) - end - rescue - end - - # try 3 : widget method or widget configure - begin - unless @widget - @widget = window(tk_call(@master, 'component', @component)) - @path = @widget.path - end - @widget.__send__(id, *args) - rescue - end - - # unknown method - fail RuntimeError, "unknown method '#{name}' for #{self.inspect}" - end - - def tk_send(cmd, *rest) - begin - tk_call(@master, 'component', @component, cmd, *rest) - rescue - unless @path - begin - @widget = window(tk_call(@master, 'component', @component)) - @path = @widget.path - rescue - fail RuntimeError, 'component is not assigned to a widget' - end - end - tk_call(@path, cmd, *rest) - end - end - - def tk_send_without_enc(cmd, *rest) - begin - tk_call_without_enc(@master, 'component', @component, cmd, *rest) - rescue - unless @path - begin - @widget = window(tk_call(@master, 'component', @component)) - @path = @widget.path - rescue - fail RuntimeError, 'component is not assigned to a widget' - end - end - tk_call_without_enc(@path, cmd, *rest) - end - end - - def tk_send_with_enc(cmd, *rest) - begin - tk_call_with_enc(@master, 'component', @component, cmd, *rest) - rescue - unless @path - begin - @widget = window(tk_call(@master, 'component', @component)) - @path = @widget.path - rescue - fail RuntimeError, 'component is not assigned to a widget' - end - end - tk_call_with_enc(@path, cmd, *rest) - end - end - - def bind(*args) - unless @widget - begin - @widget = window(tk_call(@master, 'component', @component)) - @path = @widget.path - rescue - fail RuntimeError, 'component is not assigned to a widget' - end - end - @widget.bind(*args) - end - - def bind_append(*args) - unless @widget - begin - @widget = window(tk_call(@master, 'component', @component)) - @path = @widget.path - rescue - fail RuntimeError, 'component is not assigned to a widget' - end - end - @widget.bind_append(*args) - end - - def bind_remove(*args) - unless @widget - begin - @widget = window(tk_call(@master, 'component', @component)) - @path = @widget.path - rescue - fail RuntimeError, 'component is not assigned to a widget' - end - end - @widget.bind_remove(*args) - end - - def bindinfo(*args) - unless @widget - begin - @widget = window(tk_call(@master, 'component', @component)) - @path = @widget.path - rescue - fail RuntimeError, 'component is not assigned to a widget' - end - end - @widget.bindinfo(*args) - end - - end - end -end diff --git a/ext/tk/lib/tkextlib/itk/setup.rb b/ext/tk/lib/tkextlib/itk/setup.rb deleted file mode 100644 index e47b64adae..0000000000 --- a/ext/tk/lib/tkextlib/itk/setup.rb +++ /dev/null @@ -1,13 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# - - -# set [incr Tk] library directory - -# ENV['ITK_LIBRARY'] = '/usr/local/ActiveTcl/lib/itk3.2/' diff --git a/ext/tk/lib/tkextlib/iwidgets.rb b/ext/tk/lib/tkextlib/iwidgets.rb deleted file mode 100644 index 5ef82f68ca..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets.rb +++ /dev/null @@ -1,89 +0,0 @@ -# -# [incr Widgets] support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/itcl' -require 'tkextlib/itk' - -# call setup script for general 'tkextlib' libraries -#require 'tkextlib/setup.rb' - -# call setup script -#require 'tkextlib/iwidgets/setup.rb' - -# load all image format handlers -#TkPackage.require('Iwidgets', '4.0') -TkPackage.require('Iwidgets') - -module Tk - module Iwidgets - TkComm::TkExtlibAutoloadModule.unshift(self) - - extend TkCore - - def self.package_version - begin - TkPackage.require('Iwidgets') - rescue - '' - end - end - - #################################################### - - autoload :Buttonbox, 'tkextlib/iwidgets/buttonbox' - autoload :Calendar, 'tkextlib/iwidgets/calendar' - autoload :Canvasprintbox, 'tkextlib/iwidgets/canvasprintbox' - autoload :Canvasprintdialog, 'tkextlib/iwidgets/canvasprintdialog' - autoload :Checkbox, 'tkextlib/iwidgets/checkbox' - autoload :Combobox, 'tkextlib/iwidgets/combobox' - autoload :Dateentry, 'tkextlib/iwidgets/dateentry' - autoload :Datefield, 'tkextlib/iwidgets/datefield' - autoload :Dialog, 'tkextlib/iwidgets/dialog' - autoload :Dialogshell, 'tkextlib/iwidgets/dialogshell' - autoload :Disjointlistbox, 'tkextlib/iwidgets/disjointlistbox' - autoload :Entryfield, 'tkextlib/iwidgets/entryfield' - autoload :Extbutton, 'tkextlib/iwidgets/extbutton' - autoload :Extfileselectionbox, 'tkextlib/iwidgets/extfileselectionbox' - autoload :Extfileselectiondialog,'tkextlib/iwidgets/extfileselectiondialog' - autoload :Feedback, 'tkextlib/iwidgets/feedback' - autoload :Fileselectionbox, 'tkextlib/iwidgets/fileselectionbox' - autoload :Fileselectiondialog, 'tkextlib/iwidgets/fileselectiondialog' - autoload :Finddialog, 'tkextlib/iwidgets/finddialog' - autoload :Hierarchy, 'tkextlib/iwidgets/hierarchy' - autoload :Hyperhelp, 'tkextlib/iwidgets/hyperhelp' - autoload :Labeledframe, 'tkextlib/iwidgets/labeledframe' - autoload :Labeledwidget, 'tkextlib/iwidgets/labeledwidget' - autoload :Mainwindow, 'tkextlib/iwidgets/mainwindow' - autoload :Menubar, 'tkextlib/iwidgets/menubar' - autoload :Messagebox, 'tkextlib/iwidgets/messagebox' - autoload :Messagedialog, 'tkextlib/iwidgets/messagedialog' - autoload :Notebook, 'tkextlib/iwidgets/notebook' - autoload :Optionmenu, 'tkextlib/iwidgets/optionmenu' - autoload :Panedwindow, 'tkextlib/iwidgets/panedwindow' - autoload :Pushbutton, 'tkextlib/iwidgets/pushbutton' - autoload :Promptdialog, 'tkextlib/iwidgets/promptdialog' - autoload :Radiobox, 'tkextlib/iwidgets/radiobox' - autoload :Scrolledcanvas, 'tkextlib/iwidgets/scrolledcanvas' - autoload :Scrolledframe, 'tkextlib/iwidgets/scrolledframe' - autoload :Scrolledhtml, 'tkextlib/iwidgets/scrolledhtml' - autoload :Scrolledlistbox, 'tkextlib/iwidgets/scrolledlistbox' - autoload :Scrolledtext, 'tkextlib/iwidgets/scrolledtext' - autoload :Scrolledwidget, 'tkextlib/iwidgets/scrolledwidget' - autoload :Selectionbox, 'tkextlib/iwidgets/selectionbox' - autoload :Selectiondialog, 'tkextlib/iwidgets/selectiondialog' - autoload :Shell, 'tkextlib/iwidgets/shell' - autoload :Spindate, 'tkextlib/iwidgets/spindate' - autoload :Spinint, 'tkextlib/iwidgets/spinint' - autoload :Spinner, 'tkextlib/iwidgets/spinner' - autoload :Spintime, 'tkextlib/iwidgets/spintime' - autoload :Tabnotebook, 'tkextlib/iwidgets/tabnotebook' - autoload :Tabset, 'tkextlib/iwidgets/tabset' - autoload :Timeentry, 'tkextlib/iwidgets/timeentry' - autoload :Timefield, 'tkextlib/iwidgets/timefield' - autoload :Toolbar, 'tkextlib/iwidgets/toolbar' - autoload :Watch, 'tkextlib/iwidgets/watch' - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/buttonbox.rb b/ext/tk/lib/tkextlib/iwidgets/buttonbox.rb deleted file mode 100644 index 1ff190b9ff..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/buttonbox.rb +++ /dev/null @@ -1,114 +0,0 @@ -# -# tkextlib/iwidgets/buttonbox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Buttonbox < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Buttonbox - TkCommandNames = ['::iwidgets::buttonbox'.freeze].freeze - WidgetClassName = 'Buttonbox'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'buttoncget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'buttonconfigure', id] - end - private :__item_config_cmd - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::Itk::Component) - tagOrId.name - else - #_get_eval_string(tagOrId) - tagOrId - end - end - - alias buttoncget itemcget - alias buttonconfigure itemconfigure - alias buttonconfiginfo itemconfiginfo - alias current_buttonconfiginfo current_itemconfiginfo - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo - - #################################### - - def add(tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - tk_call(@path, 'add', tagid(tag), *hash_kv(keys)) - tag - end - - def default(idx) - tk_call(@path, 'default', index(idx)) - self - end - - def delete(idx) - tk_call(@path, 'delete', index(idx)) - self - end - - def hide(idx) - tk_call(@path, 'hide', index(idx)) - self - end - - def index(idx) - number(tk_call(@path, 'index', tagid(idx))) - end - - def insert(idx, tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys)) - tag - end - - def invoke(idx=nil) - if idx - tk_call(@path, 'invoke', index(idx)) - else - tk_call(@path, 'invoke') - end - self - end - - def show(idx) - tk_call(@path, 'show', index(idx)) - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/calendar.rb b/ext/tk/lib/tkextlib/iwidgets/calendar.rb deleted file mode 100644 index f382cfd143..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/calendar.rb +++ /dev/null @@ -1,88 +0,0 @@ -# -# tkextlib/iwidgets/calendar.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Calendar < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Calendar - TkCommandNames = ['::iwidgets::calendar'.freeze].freeze - WidgetClassName = 'Calendar'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include Tk::ValidateConfigure - - class CalendarCommand < TkValidateCommand - #class CalCmdArgs < TkUtil::CallbackSubst - class ValidateArgs < TkUtil::CallbackSubst - KEY_TBL = [ [?d, ?s, :date], nil ] - PROC_TBL = [ [?s, TkComm.method(:string) ], nil ] - _setup_subst_table(KEY_TBL, PROC_TBL); - - def self.ret_val(val) - val - end - end - - def self._config_keys - # array of config-option key (string or symbol) - ['command'] - end - - #def initialize(cmd = Proc.new, *args) - # _initialize_for_cb_class(CalCmdArgs, cmd, *args) - #end - end - - def __validation_class_list - super << CalendarCommand - end - - Tk::ValidateConfigure.__def_validcmd(binding, CalendarCommand) -=begin - def command(cmd = Proc.new, args = nil) - if cmd.kind_of?(CalendarCommand) - configure('command', cmd) - elsif args - configure('command', [cmd, args]) - else - configure('command', cmd) - end - end -=end - - #################################### - - def get_string - tk_call(@path, 'get', '-string') - end - alias get get_string - - def get_clicks - number(tk_call(@path, 'get', '-clicks')) - end - - def select(date) - tk_call(@path, 'select', date) - self - end - - def show(date) - tk_call(@path, 'show', date) - self - end - def show_now - tk_call(@path, 'show', 'now') - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/canvasprintbox.rb b/ext/tk/lib/tkextlib/iwidgets/canvasprintbox.rb deleted file mode 100644 index 1e2a476591..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/canvasprintbox.rb +++ /dev/null @@ -1,43 +0,0 @@ -# -# tkextlib/iwidgets/canvasprintbox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Canvasprintbox < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Canvasprintbox - TkCommandNames = ['::iwidgets::canvasprintbox'.freeze].freeze - WidgetClassName = 'Canvasprintbox'.freeze - WidgetClassNames[WidgetClassName] = self - - def get_output - tk_call(@path, 'getoutput') - end - - def print - bool(tk_call(@path, 'print')) - end - - def refresh - tk_call(@path, 'refresh') - self - end - - def set_canvas(win) - tk_call(@path, 'setcanvas', win) - self - end - - def stop - tk_call(@path, 'stop') - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/canvasprintdialog.rb b/ext/tk/lib/tkextlib/iwidgets/canvasprintdialog.rb deleted file mode 100644 index bbf507677c..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/canvasprintdialog.rb +++ /dev/null @@ -1,38 +0,0 @@ -# -# tkextlib/iwidgets/canvasprintdialog.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Canvasprintdialog < Tk::Iwidgets::Dialog - end - end -end - -class Tk::Iwidgets::Canvasprintdialog - TkCommandNames = ['::iwidgets::canvasprintdialog'.freeze].freeze - WidgetClassName = 'Canvasprintdialog'.freeze - WidgetClassNames[WidgetClassName] = self - - def get_output - tk_call(@path, 'getoutput') - end - - def print - bool(tk_call(@path, 'print')) - end - - def refresh - tk_call(@path, 'refresh') - self - end - - def set_canvas(win) - tk_call(@path, 'setcanvas', win) - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/checkbox.rb b/ext/tk/lib/tkextlib/iwidgets/checkbox.rb deleted file mode 100644 index 05d0e1d813..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/checkbox.rb +++ /dev/null @@ -1,111 +0,0 @@ -# -# tkextlib/iwidgets/checkbox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Checkbox < Tk::Iwidgets::Labeledframe - end - end -end - -class Tk::Iwidgets::Checkbox - TkCommandNames = ['::iwidgets::checkbox'.freeze].freeze - WidgetClassName = 'Checkbox'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'buttoncget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'buttonconfigure', id] - end - private :__item_config_cmd - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::Itk::Component) - tagOrId.name - else - #_get_eval_string(tagOrId) - tagOrId - end - end - - alias buttoncget itemcget - alias buttonconfigure itemconfigure - alias buttonconfiginfo itemconfiginfo - alias current_buttonconfiginfo current_itemconfiginfo - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo - - #################################### - - def add(tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - tk_call(@path, 'add', tagid(tag), *hash_kv(keys)) - tag - end - - def delete(idx) - tk_call(@path, 'delete', index(idx)) - self - end - - def deselect(idx) - tk_call(@path, 'deselect', index(idx)) - self - end - - def flash(idx) - tk_call(@path, 'flash', index(idx)) - self - end - - def get(idx) - simplelist(tk_call(@path, 'get', index(idx))).collect{|id| - Tk::Itk::Component.id2obj(id) - } - end - - def index(idx) - number(tk_call(@path, 'index', tagid(idx))) - end - - def insert(idx, tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys)) - tag - end - - def select(idx) - tk_call(@path, 'select', index(idx)) - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/combobox.rb b/ext/tk/lib/tkextlib/iwidgets/combobox.rb deleted file mode 100644 index 1cf10b4004..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/combobox.rb +++ /dev/null @@ -1,99 +0,0 @@ -# -# tkextlib/iwidgets/combobox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Combobox < Tk::Iwidgets::Entryfield - end - end -end - -class Tk::Iwidgets::Combobox - TkCommandNames = ['::iwidgets::combobox'.freeze].freeze - WidgetClassName = 'Combobox'.freeze - WidgetClassNames[WidgetClassName] = self - - def clear(component=None) - tk_call(@path, 'clear', component) - self - end - - def delete_list(first, last=None) - tk_call(@path, 'delete', 'list', first, last) - self - end - - def delete_entry(first, last=None) - tk_call(@path, 'delete', 'entry', first, last) - self - end - - def get_list_contents(index) - tk_call(@path, 'get', index) - end - - def insert_list(idx, *elems) - tk_call(@path, 'insert', 'list', idx, *elems) - self - end - - def insert_entry(idx, *elems) - tk_call(@path, 'insert', 'entry', idx, *elems) - self - end - - # listbox methods - def size - tk_send_without_enc('size').to_i - end - def see(index) - tk_send_without_enc('see', index) - self - end - def selection_anchor(index) - tk_send_without_enc('selection', 'anchor', index) - self - end - def selection_clear(first, last=None) - tk_send_without_enc('selection', 'clear', first, last) - self - end - def selection_includes(index) - bool(tk_send_without_enc('selection', 'includes', index)) - end - def selection_set(first, last=None) - tk_send_without_enc('selection', 'set', first, last) - self - end - - # scrolledlistbox methods - def get_curselection - tk_call(@path, 'getcurselection') - end - def justify(dir) - tk_call(@path, 'justify', dir) - self - end - def sort(*params, &b) - # see 'lsort' man page about params - if b - tk_call(@path, 'sort', '-command', proc(&b), *params) - else - tk_call(@path, 'sort', *params) - end - self - end - def sort_ascending - tk_call(@path, 'sort', 'ascending') - self - end - def sort_descending - tk_call(@path, 'sort', 'descending') - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/dateentry.rb b/ext/tk/lib/tkextlib/iwidgets/dateentry.rb deleted file mode 100644 index 0a8897f50d..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/dateentry.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# tkextlib/iwidgets/dateentry.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Dateentry < Tk::Iwidgets::Datefield - end - end -end - -class Tk::Iwidgets::Dateentry - TkCommandNames = ['::iwidgets::dateentry'.freeze].freeze - WidgetClassName = 'Dateentry'.freeze - WidgetClassNames[WidgetClassName] = self -end diff --git a/ext/tk/lib/tkextlib/iwidgets/datefield.rb b/ext/tk/lib/tkextlib/iwidgets/datefield.rb deleted file mode 100644 index 924aef9c4d..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/datefield.rb +++ /dev/null @@ -1,43 +0,0 @@ -# -# tkextlib/iwidgets/datefield.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Datefield < Tk::Iwidgets::Labeledwidget - end - end -end - -class Tk::Iwidgets::Datefield - TkCommandNames = ['::iwidgets::datefield'.freeze].freeze - WidgetClassName = 'Datefield'.freeze - WidgetClassNames[WidgetClassName] = self - - def get_string - tk_call(@path, 'get', '-string') - end - alias get get_string - - def get_clicks - number(tk_call(@path, 'get', '-clicks')) - end - - def valid? - bool(tk_call(@path, 'isvalid')) - end - alias isvalid? valid? - - def show(date=None) - tk_call(@path, 'show', date) - self - end - def show_now - tk_call(@path, 'show', 'now') - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/dialog.rb b/ext/tk/lib/tkextlib/iwidgets/dialog.rb deleted file mode 100644 index 8540eae1b5..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/dialog.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# tkextlib/iwidgets/dialog.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Dialog < Tk::Iwidgets::Dialogshell - end - end -end - -class Tk::Iwidgets::Dialog - TkCommandNames = ['::iwidgets::dialog'.freeze].freeze - WidgetClassName = 'Dialog'.freeze - WidgetClassNames[WidgetClassName] = self -end diff --git a/ext/tk/lib/tkextlib/iwidgets/dialogshell.rb b/ext/tk/lib/tkextlib/iwidgets/dialogshell.rb deleted file mode 100644 index 88b9a97094..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/dialogshell.rb +++ /dev/null @@ -1,114 +0,0 @@ -# -# tkextlib/iwidgets/dialogshell.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Dialogshell < Tk::Iwidgets::Shell - end - end -end - -class Tk::Iwidgets::Dialogshell - TkCommandNames = ['::iwidgets::dialogshell'.freeze].freeze - WidgetClassName = 'Dialogshell'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'buttoncget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'buttonconfigure', id] - end - private :__item_config_cmd - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::Itk::Component) - tagOrId.name - else - #_get_eval_string(tagOrId) - tagOrId - end - end - - alias buttoncget itemcget - alias buttonconfigure itemconfigure - alias buttonconfiginfo itemconfiginfo - alias current_buttonconfiginfo current_itemconfiginfo - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo - - #################################### - - def add(tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - tk_call(@path, 'add', tagid(tag), *hash_kv(keys)) - tag - end - - def default(idx) - tk_call(@path, 'default', index(idx)) - self - end - - def delete(idx) - tk_call(@path, 'delete', index(idx)) - self - end - - def hide(idx) - tk_call(@path, 'hide', index(idx)) - self - end - - def index(idx) - number(tk_call(@path, 'index', tagid(idx))) - end - - def insert(idx, tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys)) - tag - end - - def invoke(idx=nil) - if idx - tk_call(@path, 'invoke', index(idx)) - else - tk_call(@path, 'invoke') - end - self - end - - def show(idx) - tk_call(@path, 'show', index(idx)) - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/disjointlistbox.rb b/ext/tk/lib/tkextlib/iwidgets/disjointlistbox.rb deleted file mode 100644 index 8418467925..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/disjointlistbox.rb +++ /dev/null @@ -1,45 +0,0 @@ -# -# tkextlib/iwidgets/disjointlistbox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Disjointlistbox < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Disjointlistbox - TkCommandNames = ['::iwidgets::disjointlistbox'.freeze].freeze - WidgetClassName = 'Disjointlistbox'.freeze - WidgetClassNames[WidgetClassName] = self - - def set_lhs(*items) - tk_call(@path, 'setlhs', items) - self - end - def set_rhs(*items) - tk_call(@path, 'setrhs', items) - self - end - - def get_lhs - simplelist(tk_call(@path, 'getlhs')) - end - def get_rhs - simplelist(tk_call(@path, 'getrhs')) - end - - def insert_lhs(*items) - tk_call(@path, 'insertlhs', items) - self - end - def insert_rhs(*items) - tk_call(@path, 'insertrhs', items) - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/entryfield.rb b/ext/tk/lib/tkextlib/iwidgets/entryfield.rb deleted file mode 100644 index ae7d63f3f3..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/entryfield.rb +++ /dev/null @@ -1,161 +0,0 @@ -# -# tkextlib/iwidgets/entryfield.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Entryfield < Tk::Iwidgets::Labeledwidget - end - end -end - -class Tk::Iwidgets::Entryfield - TkCommandNames = ['::iwidgets::entryfield'.freeze].freeze - WidgetClassName = 'Entryfield'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include Tk::ValidateConfigure - - class EntryfieldValidate < TkValidateCommand - #class CalCmdArgs < TkUtil::CallbackSubst - class ValidateArgs < TkUtil::CallbackSubst - KEY_TBL = [ - [ ?c, ?s, :char ], - [ ?P, ?s, :post ], - [ ?S, ?s, :current ], - [ ?W, ?w, :widget ], - nil - ] - PROC_TBL = [ - [ ?s, TkComm.method(:string) ], - [ ?w, TkComm.method(:window) ], - nil - ] - _setup_subst_table(KEY_TBL, PROC_TBL); - end - - def self._config_keys - ['validate', 'invalid'] - end - end - - def __validation_class_list - super << EntryfieldValidate - end - - Tk::ValidateConfigure.__def_validcmd(binding, EntryfieldValidate) -=begin - def validate(cmd = Proc.new, args = nil) - if cmd.kind_of?(ValidateCmd) - configure('validate', cmd) - elsif args - configure('validate', [cmd, args]) - else - configure('validate', cmd) - end - end - - def invalid(cmd = Proc.new, args = nil) - if cmd.kind_of?(ValidateCmd) - configure('invalid', cmd) - elsif args - configure('invalid', [cmd, args]) - else - configure('invalid', cmd) - end - end -=end - - #################################### - - def clear - tk_call(@path, 'clear') - self - end - - def delete(first, last=None) - tk_send_without_enc('delete', first, last) - self - end - - def value - _fromUTF8(tk_send_without_enc('get')) - end - def value= (val) - tk_send_without_enc('delete', 0, 'end') - tk_send_without_enc('insert', 0, _get_eval_enc_str(val)) - val - end - alias get value - alias set value= - - def cursor=(index) - tk_send_without_enc('icursor', index) - #self - index - end - alias icursor cursor= - - def index(index) - number(tk_send_without_enc('index', index)) - end - - def insert(pos,text) - tk_send_without_enc('insert', pos, _get_eval_enc_str(text)) - self - end - - def mark(pos) - tk_send_without_enc('scan', 'mark', pos) - self - end - def dragto(pos) - tk_send_without_enc('scan', 'dragto', pos) - self - end - def selection_adjust(index) - tk_send_without_enc('selection', 'adjust', index) - self - end - def selection_clear - tk_send_without_enc('selection', 'clear') - self - end - def selection_from(index) - tk_send_without_enc('selection', 'from', index) - self - end - def selection_present() - bool(tk_send_without_enc('selection', 'present')) - end - def selection_range(s, e) - tk_send_without_enc('selection', 'range', s, e) - self - end - def selection_to(index) - tk_send_without_enc('selection', 'to', index) - self - end - - # based on tk/scrollable.rb - def xview(*index) - if index.size == 0 - list(tk_send_without_enc('xview')) - else - tk_send_without_enc('xview', *index) - self - end - end - def xview_moveto(*index) - xview('moveto', *index) - end - def xview_scroll(*index) - xview('scroll', *index) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/extbutton.rb b/ext/tk/lib/tkextlib/iwidgets/extbutton.rb deleted file mode 100644 index 7b1e35aa2d..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/extbutton.rb +++ /dev/null @@ -1,30 +0,0 @@ -# -# tkextlib/iwidgets/extbutton.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Extbutton < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Extbutton - TkCommandNames = ['::iwidgets::extbutton'.freeze].freeze - WidgetClassName = 'Extbutton'.freeze - WidgetClassNames[WidgetClassName] = self - - def invoke - tk_call(@path, 'invoke') - self - end - - def flash - tk_call(@path, 'flash') - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/extfileselectionbox.rb b/ext/tk/lib/tkextlib/iwidgets/extfileselectionbox.rb deleted file mode 100644 index 282647893c..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/extfileselectionbox.rb +++ /dev/null @@ -1,33 +0,0 @@ -# -# tkextlib/iwidgets/extfileselectionbox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Extfileselectionbox < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Extfileselectionbox - TkCommandNames = ['::iwidgets::extfileselectionbox'.freeze].freeze - WidgetClassName = 'Extfileselectionbox'.freeze - WidgetClassNames[WidgetClassName] = self - - def child_site - window(tk_call(@path, 'childsite')) - end - - def filter - tk_call(@path, 'filter') - self - end - - def get - tk_call(@path, 'get') - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/extfileselectiondialog.rb b/ext/tk/lib/tkextlib/iwidgets/extfileselectiondialog.rb deleted file mode 100644 index 14388be7c4..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/extfileselectiondialog.rb +++ /dev/null @@ -1,33 +0,0 @@ -# -# tkextlib/iwidgets/extfileselectiondialog.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Extfileselectiondialog < Tk::Iwidgets::Dialog - end - end -end - -class Tk::Iwidgets::Extfileselectiondialog - TkCommandNames = ['::iwidgets::extfileselectiondialog'.freeze].freeze - WidgetClassName = 'Extfileselectiondialog'.freeze - WidgetClassNames[WidgetClassName] = self - - def child_site - window(tk_call(@path, 'childsite')) - end - - def filter - tk_call(@path, 'filter') - self - end - - def get - tk_call(@path, 'get') - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/feedback.rb b/ext/tk/lib/tkextlib/iwidgets/feedback.rb deleted file mode 100644 index d7439d818a..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/feedback.rb +++ /dev/null @@ -1,30 +0,0 @@ -# -# tkextlib/iwidgets/feedback.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Feedback < Tk::Iwidgets::Labeledwidget - end - end -end - -class Tk::Iwidgets::Feedback - TkCommandNames = ['::iwidgets::feedback'.freeze].freeze - WidgetClassName = 'Feedback'.freeze - WidgetClassNames[WidgetClassName] = self - - def reset - tk_call(@path, 'reset') - self - end - - def step(inc=1) - tk_call(@path, 'step', inc) - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/fileselectionbox.rb b/ext/tk/lib/tkextlib/iwidgets/fileselectionbox.rb deleted file mode 100644 index 46de13d1b2..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/fileselectionbox.rb +++ /dev/null @@ -1,33 +0,0 @@ -# -# tkextlib/iwidgets/fileselectionbox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Fileselectionbox < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Fileselectionbox - TkCommandNames = ['::iwidgets::fileselectionbox'.freeze].freeze - WidgetClassName = 'Fileselectionbox'.freeze - WidgetClassNames[WidgetClassName] = self - - def child_site - window(tk_call(@path, 'childsite')) - end - - def filter - tk_call(@path, 'filter') - self - end - - def get - tk_call(@path, 'get') - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/fileselectiondialog.rb b/ext/tk/lib/tkextlib/iwidgets/fileselectiondialog.rb deleted file mode 100644 index 50f459e56d..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/fileselectiondialog.rb +++ /dev/null @@ -1,33 +0,0 @@ -# -# tkextlib/iwidgets/fileselectiondialog.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Fileselectiondialog < Tk::Iwidgets::Dialog - end - end -end - -class Tk::Iwidgets::Fileselectiondialog - TkCommandNames = ['::iwidgets::fileselectiondialog'.freeze].freeze - WidgetClassName = 'Fileselectiondialog'.freeze - WidgetClassNames[WidgetClassName] = self - - def child_site - window(tk_call(@path, 'childsite')) - end - - def filter - tk_call(@path, 'filter') - self - end - - def get - tk_call(@path, 'get') - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/finddialog.rb b/ext/tk/lib/tkextlib/iwidgets/finddialog.rb deleted file mode 100644 index a161c3c2a4..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/finddialog.rb +++ /dev/null @@ -1,29 +0,0 @@ -# -# tkextlib/iwidgets/finddialog.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Finddialog < Tk::Iwidgets::Dialogshell - end - end -end - -class Tk::Iwidgets::Finddialog - TkCommandNames = ['::iwidgets::finddialog'.freeze].freeze - WidgetClassName = 'Finddialog'.freeze - WidgetClassNames[WidgetClassName] = self - - def clear - tk_call(@path, 'clear') - self - end - - def find - tk_call(@path, 'find') - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/hierarchy.rb b/ext/tk/lib/tkextlib/iwidgets/hierarchy.rb deleted file mode 100644 index 077d84c7a4..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/hierarchy.rb +++ /dev/null @@ -1,294 +0,0 @@ -# -# tkextlib/iwidgets/hierarchy.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/text' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Hierarchy < Tk::Iwidgets::Scrolledwidget - end - end -end - -class Tk::Iwidgets::Hierarchy - ItemConfCMD = ['tag'.freeze, 'configure'.freeze].freeze - include TkTextTagConfig - - TkCommandNames = ['::iwidgets::hierarchy'.freeze].freeze - WidgetClassName = 'Hierarchy'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include Tk::ValidateConfigure - - class QueryCommand < TkValidateCommand - class ValidateArgs < TkUtil::CallbackSubst - KEY_TBL = [ [?n, ?s, :node], nil ] - PROC_TBL = [ [?s, TkComm.method(:string) ], nil ] - _setup_subst_table(KEY_TBL, PROC_TBL); - - def self.ret_val(val) - val - end - end - - def self._config_keys - # array of config-option key (string or symbol) - ['querycommand'] - end - end - - class IndicatorCommand < TkValidateCommand - class ValidateArgs < TkUtil::CallbackSubst - KEY_TBL = [ - [ ?n, ?s, :node ], - [ ?s, ?b, :status ], - nil - ] - - PROC_TBL = [ - [ ?s, TkComm.method(:string) ], - [ ?b, TkComm.method(:bool) ], - nil - ] - - _setup_subst_table(KEY_TBL, PROC_TBL); - - def self.ret_val(val) - val - end - end - - def self._config_keys - # array of config-option key (string or symbol) - ['iconcommand', 'icondblcommand', 'imagedblcommand'] - end - end - - class IconCommand < TkValidateCommand - class ValidateArgs < TkUtil::CallbackSubst - KEY_TBL = [ - [ ?n, ?s, :node ], - [ ?i, ?s, :icon ], - nil - ] - PROC_TBL = [ [ ?s, TkComm.method(:string) ], nil ] - _setup_subst_table(KEY_TBL, PROC_TBL); - - def self.ret_val(val) - val - end - end - - def self._config_keys - # array of config-option key (string or symbol) - ['dblclickcommand', 'imagecommand', 'selectcommand'] - end - end - - def __validation_class_list - super << QueryCommand << IndicatorCommand << IconCommand - end - - Tk::ValidateConfigure.__def_validcmd(binding, QueryCommand) - Tk::ValidateConfigure.__def_validcmd(binding, IndicatorCommand) - Tk::ValidateConfigure.__def_validcmd(binding, IconCommand) - - #################################### - - def clear - tk_call(@path, 'clear') - self - end - - def collapse(node) - tk_call(@path, 'collapse') - self - end - - def current - tk_call(@path, 'current') - end - - def draw(mode=None) - case mode - when None - # do nothing - when 'now', :now - mode = '-now' - when 'eventually', :eventually - mode = '-eventually' - when String, Symbol - mode = mode.to_s - mode = '-' << mode if mode[0] != ?- - end - tk_call(@path, 'draw', mode) - end - - def expand(node) - tk_call(@path, 'expand', node) - self - end - - def expanded?(node) - bool(tk_call(@path, 'expanded', node)) - end - - def exp_state - list(tk_call(@path, 'expState')) - end - alias expand_state exp_state - alias expanded_list exp_state - - def mark_clear - tk_call(@path, 'mark', 'clear') - self - end - def mark_add(*nodes) - tk_call(@path, 'mark', 'add', *nodes) - self - end - def mark_remove(*nodes) - tk_call(@path, 'mark', 'remove', *nodes) - self - end - def mark_get - list(tk_call(@path, 'mark', 'get')) - end - - def refresh(node) - tk_call(@path, 'refresh', node) - self - end - - def prune(node) - tk_call(@path, 'prune', node) - self - end - - def selection_clear - tk_call(@path, 'selection', 'clear') - self - end - def selection_add(*nodes) - tk_call(@path, 'selection', 'add', *nodes) - self - end - def selection_remove(*nodes) - tk_call(@path, 'selection', 'remove', *nodes) - self - end - def selection_get - list(tk_call(@path, 'selection', 'get')) - end - - def toggle(node) - tk_call(@path, 'toggle', node) - self - end - - # based on TkText widget - - def bbox(index) - list(tk_send_without_enc('bbox', _get_eval_enc_str(index))) - end - - def compare(idx1, op, idx2) - bool(tk_send_without_enc('compare', _get_eval_enc_str(idx1), - op, _get_eval_enc_str(idx2))) - end - - def debug - bool(tk_send_without_enc('debug')) - end - def debug=(boolean) - tk_send_without_enc('debug', boolean) - #self - boolean - end - - def delete(first, last=None) - tk_send_without_enc('delete', first, last) - self - end - - def dlineinfo(index) - list(tk_send_without_enc('dlineinfo', _get_eval_enc_str(index))) - end - - def get(*index) - _fromUTF8(tk_send_without_enc('get', *index)) - end - - def index(index) - tk_send_without_enc('index', _get_eval_enc_str(index)) - end - - def insert(index, chars, *tags) - if tags[0].kind_of? Array - # multiple chars-taglist argument :: str, [tag,...], str, [tag,...], ... - args = [chars] - while tags.size > 0 - args << tags.shift.collect{|x|_get_eval_string(x)}.join(' ') # taglist - args << tags.shift if tags.size > 0 # chars - end - super index, *args - else - # single chars-taglist argument :: str, tag, tag, ... - if tags.size == 0 - super index, chars - else - super index, chars, tags.collect{|x|_get_eval_string(x)}.join(' ') - end - end - end - - def scan_mark(x, y) - tk_send_without_enc('scan', 'mark', x, y) - self - end - def scan_dragto(x, y) - tk_send_without_enc('scan', 'dragto', x, y) - self - end - def see(index) - tk_send_without_enc('see', index) - self - end - - # based on tk/scrollable.rb - def xview(*index) - if index.size == 0 - list(tk_send_without_enc('xview')) - else - tk_send_without_enc('xview', *index) - self - end - end - def xview_moveto(*index) - xview('moveto', *index) - end - def xview_scroll(*index) - xview('scroll', *index) - end - - def yview(*index) - if index.size == 0 - list(tk_send_without_enc('yview')) - else - tk_send_without_enc('yview', *index) - self - end - end - def yview_moveto(*index) - yview('moveto', *index) - end - def yview_scroll(*index) - yview('scroll', *index) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb b/ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb deleted file mode 100644 index 22e86339a6..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb +++ /dev/null @@ -1,40 +0,0 @@ -# -# tkextlib/iwidgets/hyperhelp.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Hyperhelp < Tk::Iwidgets::Shell - end - end -end - -class Tk::Iwidgets::Hyperhelp - TkCommandNames = ['::iwidgets::hyperhelp'.freeze].freeze - WidgetClassName = 'Hyperhelp'.freeze - WidgetClassNames[WidgetClassName] = self - - def show_topic(topic) - tk_call(@path, 'showtopic', topic) - self - end - - def follow_link(href) - tk_call(@path, 'followlink', href) - self - end - - def forward - tk_call(@path, 'forward') - self - end - - def back - tk_call(@path, 'back') - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/labeledframe.rb b/ext/tk/lib/tkextlib/iwidgets/labeledframe.rb deleted file mode 100644 index 89669ea815..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/labeledframe.rb +++ /dev/null @@ -1,24 +0,0 @@ -# -# tkextlib/iwidgets/labeledframe.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Labeledframe < Tk::Itk::Archetype - end - end -end - -class Tk::Iwidgets::Labeledframe - TkCommandNames = ['::iwidgets::labeledframe'.freeze].freeze - WidgetClassName = 'Labeledframe'.freeze - WidgetClassNames[WidgetClassName] = self - - def child_site - window(tk_call(@path, 'childsite')) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb b/ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb deleted file mode 100644 index f847922386..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb +++ /dev/null @@ -1,30 +0,0 @@ -# -# tkextlib/iwidgets/labeledwidget.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Labeledwidget < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Labeledwidget - extend TkCore - - TkCommandNames = ['::iwidgets::labeledwidget'.freeze].freeze - WidgetClassName = 'Labeledwidget'.freeze - WidgetClassNames[WidgetClassName] = self - - def self.alignlabels(*wins) - tk_call('::iwidgets::Labeledwidget::alignlabels', *wins) - end - - def child_site - window(tk_call(@path, 'childsite')) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/mainwindow.rb b/ext/tk/lib/tkextlib/iwidgets/mainwindow.rb deleted file mode 100644 index 4570afc6d0..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/mainwindow.rb +++ /dev/null @@ -1,52 +0,0 @@ -# -# tkextlib/iwidgets/mainwindow.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Mainwindow < Tk::Iwidgets::Shell - end - end -end - -class Tk::Iwidgets::Mainwindow - TkCommandNames = ['::iwidgets::mainwindow'.freeze].freeze - WidgetClassName = 'Mainwindow'.freeze - WidgetClassNames[WidgetClassName] = self - - def child_site - window(tk_call(@path, 'childsite')) - end - - def menubar(*args) - unless args.empty? - tk_call(@path, 'menubar', *args) - end - window(tk_call(@path, 'menubar')) - end - - def mousebar(*args) - unless args.empty? - tk_call(@path, 'mousebar', *args) - end - window(tk_call(@path, 'mousebar')) - end - - def msgd(*args) - unless args.empty? - tk_call(@path, 'msgd', *args) - end - window(tk_call(@path, 'msgd')) - end - - def toolbar(*args) - unless args.empty? - tk_call(@path, 'toolbar', *args) - end - window(tk_call(@path, 'toolbar')) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/menubar.rb b/ext/tk/lib/tkextlib/iwidgets/menubar.rb deleted file mode 100644 index b60349be17..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/menubar.rb +++ /dev/null @@ -1,190 +0,0 @@ -# -# tkextlib/iwidgets/menubar.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Menubar < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Menubar - TkCommandNames = ['::iwidgets::menubar'.freeze].freeze - WidgetClassName = 'Menubar'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'menucget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'menuconfigure', id] - end - private :__item_config_cmd - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::Itk::Component) - tagOrId.name - else - #_get_eval_string(tagOrId) - tagOrId - end - end - - alias menucget itemcget - alias menuconfigure itemconfigure - alias menuconfiginfo itemconfiginfo - alias current_menuconfiginfo current_itemconfiginfo - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo - - #################################### - - def __methodcall_optkeys - {'menubuttons'=>'menubuttons'} - end - - def menubuttons(val = nil) - unless val - return tk_call(@path, 'cget', '-menubuttons') - end - - tk_call(@path, 'configure', '-menubuttons', _parse_menu_spec(val)) - self - end - - def _parse_menu_spec(menu_spec) - ret = '' - menu_spec.each{|spec| - next unless spec - - if spec.kind_of?(Hash) - args = [spec] - type = 'options' - else - type, *args = spec - end - - type = type.to_s - case type - when 'options' - keys = args[0] - ary = [type] - ary.concat(hash_kv(keys)) - ret << array2tk_list(ary) << "\n" - - when 'menubutton', 'cascade' - name, keys = args - if keys - ary = [type, name] - keys = _symbolkey2str(keys) - keys['menu'] = _parse_menu_spec(keys['menu']) if keys.key?('menu') - ary.concat(hash_kv(keys)) - ret << array2tk_list(ary) << "\n" - else - ret << array2tk_list([type, name]) << "\n" - end - - else - name, keys = args - if keys - ary = [type, name] - ary.concat(hash_kv(keys)) - ret << array2tk_list(ary) << "\n" - else - ret << array2tk_list([type, name]) << "\n" - end - end - } - ret - end - - #################################### - - def add(type, tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - keys = _symbolkey2str(keys) - keys['menu'] = _parse_menu_spec(keys['menu']) if keys.key?('menu') - tk_call(@path, 'add', type, tagid(tag), *hash_kv(keys)) - tag - end - - def delete(path1, path2=nil) - if path2 - else - tk_call(@path, 'delete', index(idx)) - end - self - end - - def index(idx) - number(tk_call(@path, 'index', tagid(idx))) - end - - def insert(idx, type, tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - keys = _symbolkey2str(keys) - keys['menu'] = _parse_menu_spec(keys['menu']) if keys.key?('menu') - tk_call(@path, 'insert', index(idx), type, tagid(tag), *hash_kv(keys)) - tag - end - - def invoke(idx) - tk_call(@path, 'invoke', index(idx)) - self - end - - def menupath(pat) - if (win = tk_call(@path, 'path', pat)) == '-1' - return nil - end - window(win) - end - def menupath_glob(pat) - if (win = tk_call(@path, 'path', '-glob', pat)) == '-1' - return nil - end - window(win) - end - def menupath_tclregexp(pat) - if (win = tk_call(@path, 'path', '-regexp', pat)) == '-1' - return nil - end - window(win) - end - - def type(path) - tk_call(@path, 'type', path) - end - - def yposition(path) - number(tk_call(@path, 'yposition', path)) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/messagebox.rb b/ext/tk/lib/tkextlib/iwidgets/messagebox.rb deleted file mode 100644 index 608f6f7adb..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/messagebox.rb +++ /dev/null @@ -1,81 +0,0 @@ -# -# tkextlib/iwidgets/messagebox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Messagebox < Tk::Iwidgets::Scrolledwidget - end - end -end - -class Tk::Iwidgets::Messagebox - TkCommandNames = ['::iwidgets::messagebox'.freeze].freeze - WidgetClassName = 'Messagebox'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'type', 'cget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'type', 'configure', id] - end - private :__item_config_cmd - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::Itk::Component) - tagOrId.name - else - #_get_eval_string(tagOrId) - tagOrId - end - end - - alias typecget itemcget - alias typeconfigure itemconfigure - alias typeconfiginfo itemconfiginfo - alias current_typeconfiginfo current_itemconfiginfo - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo - - #################################### - - def type_add(tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - unless tag - tag = Tk::Itk::Component.new(self) - end - tk_call(@path, 'type', 'add', tagid(tag), *hash_kv(keys)) - tag - end - - def clear - tk_call(@path, 'clear') - self - end - - def export(file) - tk_call(@path, 'export', file) - self - end - - def issue(string, type=None, *args) - tk_call(@path, 'issue', string, tagid(type), *args) - self - end - -end diff --git a/ext/tk/lib/tkextlib/iwidgets/messagedialog.rb b/ext/tk/lib/tkextlib/iwidgets/messagedialog.rb deleted file mode 100644 index c19b83e517..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/messagedialog.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# tkextlib/iwidgets/messagedialog.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Messagedialog < Tk::Iwidgets::Dialog - end - end -end - -class Tk::Iwidgets::Messagedialog - TkCommandNames = ['::iwidgets::messagedialog'.freeze].freeze - WidgetClassName = 'Messagedialog'.freeze - WidgetClassNames[WidgetClassName] = self -end diff --git a/ext/tk/lib/tkextlib/iwidgets/notebook.rb b/ext/tk/lib/tkextlib/iwidgets/notebook.rb deleted file mode 100644 index d9abf1b02b..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/notebook.rb +++ /dev/null @@ -1,163 +0,0 @@ -# -# tkextlib/iwidgets/notebook.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Notebook < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Notebook - TkCommandNames = ['::iwidgets::notebook'.freeze].freeze - WidgetClassName = 'Notebook'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'tabcget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'tabconfigure', id] - end - private :__item_config_cmd - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::Itk::Component) - tagOrId.name - else - #_get_eval_string(tagOrId) - tagOrId - end - end - - alias pagecget itemcget - alias pageconfigure itemconfigure - alias pageconfiginfo itemconfiginfo - alias current_pageconfiginfo current_itemconfiginfo - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo - - #################################### - - def add(keys={}) - window(tk_call(@path, 'add', *hash_kv(keys))) - end - - def child_site_list - list(tk_call(@path, 'childsite')) - end - - def child_site(idx) - if (new_idx = self.index(idx)) < 0 - new_idx = tagid(idx) - end - window(tk_call(@path, 'childsite', new_idx)) - end - - def delete(idx1, idx2=nil) - if (new_idx1 = self.index(idx1)) < 0 - new_idx1 = tagid(idx1) - end - if idx2 - if (new_idx2 = self.index(idx2)) < 0 - new_idx2 = tagid(idx2) - end - tk_call(@path, 'delete', new_idx1, new_idx2) - else - tk_call(@path, 'delete', new_idx1) - end - self - end - - def index(idx) - number(tk_call(@path, 'index', tagid(idx))) - end - - def insert(idx, keys={}) - if (new_idx = self.index(idx)) < 0 - new_idx = tagid(idx) - end - window(tk_call(@path, 'insert', new_idx, *hash_kv(keys))) - end - - def next - tk_call(@path, 'next') - self - end - - def prev - tk_call(@path, 'prev') - self - end - - def select(idx) - if (new_idx = self.index(idx)) < 0 - new_idx = tagid(idx) - end - tk_call(@path, 'select', new_idx) - self - end - - def scrollcommand(cmd=Proc.new) - configure_cmd 'scrollcommand', cmd - self - end - alias xscrollcommand scrollcommand - alias yscrollcommand scrollcommand - - def xscrollbar(bar=nil) - if bar - @scrollbar = bar - @scrollbar.orient 'horizontal' - self.scrollcommand {|*arg| @scrollbar.set(*arg)} - @scrollbar.command {|*arg| self.xview(*arg)} - Tk.update # avoid scrollbar trouble - end - @scrollbar - end - def yscrollbar(bar=nil) - if bar - @scrollbar = bar - @scrollbar.orient 'vertical' - self.scrollcommand {|*arg| @scrollbar.set(*arg)} - @scrollbar.command {|*arg| self.yview(*arg)} - Tk.update # avoid scrollbar trouble - end - @scrollbar - end - alias scrollbar yscrollbar - - def view(*index) - if index.size == 0 - window(tk_send_without_enc('view')) - else - tk_send_without_enc('view', *index) - self - end - end - alias xview view - alias yview view - - def view_moveto(*index) - view('moveto', *index) - end - alias xview_moveto view_moveto - alias yview_moveto view_moveto - def view_scroll(*index) - view('scroll', *index) - end - alias xview_scroll view_scroll - alias yview_scroll view_scroll -end diff --git a/ext/tk/lib/tkextlib/iwidgets/optionmenu.rb b/ext/tk/lib/tkextlib/iwidgets/optionmenu.rb deleted file mode 100644 index 226163a150..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/optionmenu.rb +++ /dev/null @@ -1,87 +0,0 @@ -# -# tkextlib/iwidgets/optionmenu.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Optionmenu < Tk::Iwidgets::Labeledwidget - end - end -end - -class Tk::Iwidgets::Optionmenu - TkCommandNames = ['::iwidgets::optionmenu'.freeze].freeze - WidgetClassName = 'Optionmenu'.freeze - WidgetClassNames[WidgetClassName] = self - - def delete(first, last=nil) - if last - tk_call(@path, 'delete', first, last) - else - tk_call(@path, 'delete', first) - end - self - end - - def disable(idx) - tk_call(@path, 'disable', idx) - self - end - - def enable(idx) - tk_call(@path, 'enable', idx) - self - end - - def get(first=nil, last=nil) - if last - simplelist(tk_call(@path, 'get', first, last)) - elsif first - tk_call(@path, 'get', first) - else - tk_call(@path, 'get') - end - end - def get_range(first, last) - get(first, last) - end - def get_selected - get() - end - - def index(idx) - number(tk_call(@path, 'index', idx)) - end - - def insert(idx, *args) - tk_call(@path, 'insert', idx, *args) - self - end - - def select(idx) - tk_call(@path, 'select', idx) - self - end - - def sort(*params, &b) - # see 'lsort' man page about params - if b - tk_call(@path, 'sort', '-command', proc(&b), *params) - else - tk_call(@path, 'sort', *params) - end - self - end - def sort_ascending - tk_call(@path, 'sort', 'ascending') - self - end - def sort_descending - tk_call(@path, 'sort', 'descending') - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/panedwindow.rb b/ext/tk/lib/tkextlib/iwidgets/panedwindow.rb deleted file mode 100644 index a205036239..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/panedwindow.rb +++ /dev/null @@ -1,127 +0,0 @@ -# -# tkextlib/iwidgets/panedwindow.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Panedwindow < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Panedwindow - TkCommandNames = ['::iwidgets::panedwindow'.freeze].freeze - WidgetClassName = 'Panedwindow'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'panecget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'paneconfigure', id] - end - private :__item_config_cmd - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::Itk::Component) - tagOrId.name - else - #_get_eval_string(tagOrId) - tagOrId - end - end - - alias panecget itemcget - alias paneconfigure itemconfigure - alias paneconfiginfo itemconfiginfo - alias current_paneconfiginfo current_itemconfiginfo - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo - - #################################### - - def add(tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - window(tk_call(@path, 'add', tagid(tag), *hash_kv(keys))) - tag - end - - def child_site_list - list(tk_call(@path, 'childsite')) - end - - def child_site(idx) - window(tk_call(@path, 'childsite', index(idx))) - end - - def delete(idx) - tk_call(@path, 'delete', index(idx)) - self - end - - def fraction(*percentages) - tk_call(@path, 'fraction', *percentages) - self - end - - def hide(idx) - tk_call(@path, 'hide', index(idx)) - self - end - - def index(idx) - number(tk_call(@path, 'index', tagid(idx))) - end - - def insert(idx, tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - window(tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys))) - tag - end - - def invoke(idx=nil) - if idx - tk_call(@path, 'invoke', index(idx)) - else - tk_call(@path, 'invoke') - end - self - end - - def reset - tk_call(@path, 'reset') - self - end - - def show(idx) - tk_call(@path, 'show', index(idx)) - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/promptdialog.rb b/ext/tk/lib/tkextlib/iwidgets/promptdialog.rb deleted file mode 100644 index ec18647511..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/promptdialog.rb +++ /dev/null @@ -1,131 +0,0 @@ -# -# tkextlib/iwidgets/promptdialog.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Promptdialog < Tk::Iwidgets::Dialog - end - end -end - -class Tk::Iwidgets::Promptdialog - TkCommandNames = ['::iwidgets::promptdialog'.freeze].freeze - WidgetClassName = 'Promptdialog'.freeze - WidgetClassNames[WidgetClassName] = self - - # index method is not available, because it shows index of the entry field - def default(name) - tk_call(@path, 'default', tagid(name)) - self - end - - def hide(name) - tk_call(@path, 'hide', tagid(name)) - self - end - - def invoke(name=nil) - if name - tk_call(@path, 'invoke', tagid(name)) - else - tk_call(@path, 'invoke') - end - self - end - - def show(name) - tk_call(@path, 'show', tagid(name)) - self - end - - - # based on Tk::Iwidgets::Entryfield - def clear - tk_call(@path, 'clear') - self - end - - def delete(first, last=None) - tk_send_without_enc('delete', first, last) - self - end - - def value - _fromUTF8(tk_send_without_enc('get')) - end - def value= (val) - tk_send_without_enc('delete', 0, 'end') - tk_send_without_enc('insert', 0, _get_eval_enc_str(val)) - val - end - alias get value - alias set value= - - def cursor=(index) - tk_send_without_enc('icursor', index) - #self - index - end - alias icursor cursor= - - def index(index) - number(tk_send_without_enc('index', index)) - end - - def insert(pos,text) - tk_send_without_enc('insert', pos, _get_eval_enc_str(text)) - self - end - - def mark(pos) - tk_send_without_enc('scan', 'mark', pos) - self - end - def dragto(pos) - tk_send_without_enc('scan', 'dragto', pos) - self - end - def selection_adjust(index) - tk_send_without_enc('selection', 'adjust', index) - self - end - def selection_clear - tk_send_without_enc('selection', 'clear') - self - end - def selection_from(index) - tk_send_without_enc('selection', 'from', index) - self - end - def selection_present() - bool(tk_send_without_enc('selection', 'present')) - end - def selection_range(s, e) - tk_send_without_enc('selection', 'range', s, e) - self - end - def selection_to(index) - tk_send_without_enc('selection', 'to', index) - self - end - - def xview(*index) - if index.size == 0 - list(tk_send_without_enc('xview')) - else - tk_send_without_enc('xview', *index) - self - end - end - def xview_moveto(*index) - xview('moveto', *index) - end - def xview_scroll(*index) - xview('scroll', *index) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/pushbutton.rb b/ext/tk/lib/tkextlib/iwidgets/pushbutton.rb deleted file mode 100644 index 25d3633507..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/pushbutton.rb +++ /dev/null @@ -1,30 +0,0 @@ -# -# tkextlib/iwidgets/pushbutton.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Pushbutton < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Pushbutton - TkCommandNames = ['::iwidgets::pushbutton'.freeze].freeze - WidgetClassName = 'Pushbutton'.freeze - WidgetClassNames[WidgetClassName] = self - - def invoke - tk_call_without_enc(@path, 'invoke') - self - end - - def flash - tk_call_without_enc(@path, 'flash') - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/radiobox.rb b/ext/tk/lib/tkextlib/iwidgets/radiobox.rb deleted file mode 100644 index 84c15082d6..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/radiobox.rb +++ /dev/null @@ -1,111 +0,0 @@ -# -# tkextlib/iwidgets/radiobox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Radiobox < Tk::Iwidgets::Labeledframe - end - end -end - -class Tk::Iwidgets::Radiobox - TkCommandNames = ['::iwidgets::radiobox'.freeze].freeze - WidgetClassName = 'Radiobox'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'buttoncget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'buttonconfigure', id] - end - private :__item_config_cmd - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::Itk::Component) - tagOrId.name - else - #_get_eval_string(tagOrId) - tagOrId - end - end - - alias buttoncget itemcget - alias buttonconfigure itemconfigure - alias buttonconfiginfo itemconfiginfo - alias current_buttonconfiginfo current_itemconfiginfo - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo - - #################################### - - def add(tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - tk_call(@path, 'add', tagid(tag), *hash_kv(keys)) - tag - end - - def delete(idx) - tk_call(@path, 'delete', index(idx)) - self - end - - def deselect(idx) - tk_call(@path, 'deselect', index(idx)) - self - end - - def flash(idx) - tk_call(@path, 'flash', index(idx)) - self - end - - def get(idx) - simplelist(tk_call(@path, 'get', index(idx))).collect{|id| - Tk::Itk::Component.id2obj(id) - } - end - - def index(idx) - number(tk_call(@path, 'index', tagid(idx))) - end - - def insert(idx, tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys)) - tag - end - - def select(idx) - tk_call(@path, 'select', index(idx)) - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/scopedobject.rb b/ext/tk/lib/tkextlib/iwidgets/scopedobject.rb deleted file mode 100644 index bddef50841..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/scopedobject.rb +++ /dev/null @@ -1,24 +0,0 @@ -# -# tkextlib/iwidgets/buttonbox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Scopedobject < TkObject - end - end -end - -class Tk::Iwidgets::Scopedobject - TkCommandNames = ['::iwidgets::scopedobject'.freeze].freeze - WidgetClassName = 'Scopedobject'.freeze - WidgetClassNames[WidgetClassName] = self - - def initialize(obj_name, keys={}) - @path = tk_call(self.class::TkCommandNames[0], obj_name, *hash_kv(keys)) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb deleted file mode 100644 index c26eda1586..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb +++ /dev/null @@ -1,315 +0,0 @@ -# -# tkextlib/iwidgets/scrolledcanvas.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/canvas' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Scrolledcanvas < Tk::Iwidgets::Scrolledwidget - end - end -end - -class Tk::Iwidgets::Scrolledcanvas - TkCommandNames = ['::iwidgets::scrolledcanvas'.freeze].freeze - WidgetClassName = 'Scrolledcanvas'.freeze - WidgetClassNames[WidgetClassName] = self - - ################################ - - def initialize(*args) - super(*args) - @canvas = component_widget('canvas') - end - - def method_missing(id, *args) - if @canvas.methods.include?(id.id2name) - @canvas.__send__(id, *args) - else - super(id, *args) - end - end - - ################################ - - def child_site - window(tk_call(@path, 'childsite')) - end - - def justify(dir) - tk_call(@path, 'justify', dir) - self - end - - ########################## - include TkCanvasItemConfig - - def tagid(tag) - if tag.kind_of?(TkcItem) || tag.kind_of?(TkcTag) - tag.id - elsif tag.kind_of?(Tk::Itk::Component) - tag.name - else - tag # maybe an Array of configure paramters - end - end - private :tagid - - # create a canvas item without creating a TkcItem object - def create(type, *args) - type.create(self, *args) - end - - ####################### - - def addtag(tag, mode, *args) - tk_send_without_enc('addtag', tagid(tag), mode, *args) - self - end - def addtag_above(tagOrId, target) - addtag(tagOrId, 'above', tagid(target)) - end - def addtag_all(tagOrId) - addtag(tagOrId, 'all') - end - def addtag_below(tagOrId, target) - addtag(tagOrId, 'below', tagid(target)) - end - def addtag_closest(tagOrId, x, y, halo=None, start=None) - addtag(tagOrId, 'closest', x, y, halo, start) - end - def addtag_enclosed(tagOrId, x1, y1, x2, y2) - addtag(tagOrId, 'enclosed', x1, y1, x2, y2) - end - def addtag_overlapping(tagOrId, x1, y1, x2, y2) - addtag(tagOrId, 'overlapping', x1, y1, x2, y2) - end - def addtag_withtag(tagOrId, tag) - addtag(tagOrId, 'withtag', tagid(tag)) - end - - def bbox(tagOrId, *tags) - list(tk_send_without_enc('bbox', tagid(tagOrId), - *tags.collect{|t| tagid(t)})) - end - - def itembind(tag, context, cmd=Proc.new, args=nil) - _bind([path, "bind", tagid(tag)], context, cmd, args) - self - end - - def itembind_append(tag, context, cmd=Proc.new, args=nil) - _bind_append([path, "bind", tagid(tag)], context, cmd, args) - self - end - - def itembind_remove(tag, context) - _bind_remove([path, "bind", tagid(tag)], context) - self - end - - def itembindinfo(tag, context=nil) - _bindinfo([path, "bind", tagid(tag)], context) - end - - def canvasx(screen_x, *args) - #tk_tcl2ruby(tk_send_without_enc('canvasx', screen_x, *args)) - number(tk_send_without_enc('canvasx', screen_x, *args)) - end - def canvasy(screen_y, *args) - #tk_tcl2ruby(tk_send_without_enc('canvasy', screen_y, *args)) - number(tk_send_without_enc('canvasy', screen_y, *args)) - end - - def coords(tag, *args) - if args == [] - tk_split_list(tk_send_without_enc('coords', tagid(tag))) - else - tk_send_without_enc('coords', tagid(tag), *(args.flatten)) - self - end - end - - def dchars(tag, first, last=None) - tk_send_without_enc('dchars', tagid(tag), - _get_eval_enc_str(first), _get_eval_enc_str(last)) - self - end - - def delete(*args) - if TkcItem::CItemID_TBL[self.path] - find('withtag', *args).each{|item| - TkcItem::CItemID_TBL[self.path].delete(item.id) - } - end - tk_send_without_enc('delete', *args.collect{|t| tagid(t)}) - self - end - alias remove delete - - def dtag(tag, tag_to_del=None) - tk_send_without_enc('dtag', tagid(tag), tag_to_del) - self - end - - def find(mode, *args) - list(tk_send_without_enc('find', mode, *args)).collect!{|id| - TkcItem.id2obj(self, id) - } - end - def find_above(target) - find('above', tagid(target)) - end - def find_all - find('all') - end - def find_below(target) - find('below', tagid(target)) - end - def find_closest(x, y, halo=None, start=None) - find('closest', x, y, halo, start) - end - def find_enclosed(x1, y1, x2, y2) - find('enclosed', x1, y1, x2, y2) - end - def find_overlapping(x1, y1, x2, y2) - find('overlapping', x1, y1, x2, y2) - end - def find_withtag(tag) - find('withtag', tag) - end - - def itemfocus(tagOrId=nil) - if tagOrId - tk_send_without_enc('focus', tagid(tagOrId)) - self - else - ret = tk_send_without_enc('focus') - if ret == "" - nil - else - TkcItem.id2obj(self, ret) - end - end - end - - def gettags(tagOrId) - list(tk_send_without_enc('gettags', tagid(tagOrId))).collect{|tag| - TkcTag.id2obj(self, tag) - } - end - - def icursor(tagOrId, index) - tk_send_without_enc('icursor', tagid(tagOrId), index) - self - end - - def index(tagOrId, index) - number(tk_send_without_enc('index', tagid(tagOrId), index)) - end - - def insert(tagOrId, index, string) - tk_send_without_enc('insert', tagid(tagOrId), index, - _get_eval_enc_str(string)) - self - end - - def lower(tag, below=nil) - if below - tk_send_without_enc('lower', tagid(tag), tagid(below)) - else - tk_send_without_enc('lower', tagid(tag)) - end - self - end - - def move(tag, x, y) - tk_send_without_enc('move', tagid(tag), x, y) - self - end - - def postscript(keys) - tk_send("postscript", *hash_kv(keys)) - end - - def raise(tag, above=nil) - if above - tk_send_without_enc('raise', tagid(tag), tagid(above)) - else - tk_send_without_enc('raise', tagid(tag)) - end - self - end - - def scale(tag, x, y, xs, ys) - tk_send_without_enc('scale', tagid(tag), x, y, xs, ys) - self - end - - def scan_mark(x, y) - tk_send_without_enc('scan', 'mark', x, y) - self - end - def scan_dragto(x, y) - tk_send_without_enc('scan', 'dragto', x, y) - self - end - - def select(mode, *args) - r = tk_send_without_enc('select', mode, *args) - (mode == 'item')? TkcItem.id2obj(self, r): self - end - def select_adjust(tagOrId, index) - select('adjust', tagid(tagOrId), index) - end - def select_clear - select('clear') - end - def select_from(tagOrId, index) - select('from', tagid(tagOrId), index) - end - def select_item - select('item') - end - def select_to(tagOrId, index) - select('to', tagid(tagOrId), index) - end - - def itemtype(tag) - TkcItem.type2class(tk_send('type', tagid(tag))) - end - - def xview(*index) - if index.size == 0 - list(tk_send_without_enc('xview')) - else - tk_send_without_enc('xview', *index) - self - end - end - def xview_moveto(*index) - xview('moveto', *index) - end - def xview_scroll(*index) - xview('scroll', *index) - end - - def yview(*index) - if index.size == 0 - list(tk_send_without_enc('yview')) - else - tk_send_without_enc('yview', *index) - self - end - end - def yview_moveto(*index) - yview('moveto', *index) - end - def yview_scroll(*index) - yview('scroll', *index) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledframe.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledframe.rb deleted file mode 100644 index 8b47460357..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/scrolledframe.rb +++ /dev/null @@ -1,59 +0,0 @@ -# -# tkextlib/iwidgets/scrolledframe.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Scrolledframe < Tk::Iwidgets::Scrolledwidget - end - end -end - -class Tk::Iwidgets::Scrolledframe - TkCommandNames = ['::iwidgets::scrolledframe'.freeze].freeze - WidgetClassName = 'Scrolledframe'.freeze - WidgetClassNames[WidgetClassName] = self - - def child_site - window(tk_call(@path, 'childsite')) - end - - def justify(dir) - tk_call(@path, 'justify', dir) - self - end - - def xview(*index) - if index.size == 0 - list(tk_send_without_enc('xview')) - else - tk_send_without_enc('xview', *index) - self - end - end - def xview_moveto(*index) - xview('moveto', *index) - end - def xview_scroll(*index) - xview('scroll', *index) - end - - def yview(*index) - if index.size == 0 - list(tk_send_without_enc('yview')) - else - tk_send_without_enc('yview', *index) - self - end - end - def yview_moveto(*index) - yview('moveto', *index) - end - def yview_scroll(*index) - yview('scroll', *index) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledhtml.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledhtml.rb deleted file mode 100644 index 7023d889d1..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/scrolledhtml.rb +++ /dev/null @@ -1,43 +0,0 @@ -# -# tkextlib/iwidgets/scrolledhtml.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Scrolledhtml < Tk::Iwidgets::Scrolledtext - end - end -end - -class Tk::Iwidgets::Scrolledhtml - TkCommandNames = ['::iwidgets::scrolledhtml'.freeze].freeze - WidgetClassName = 'Scrolledhtml'.freeze - WidgetClassNames[WidgetClassName] = self - - def import(href) - tk_call(@path, 'import', href) - self - end - - def import_link(href) - tk_call(@path, 'import', '-link', href) - self - end - - def pwd - tk_call(@path, 'pwd') - end - - def render(htmltext, workdir=None) - tk_call(@path, 'render', htmltext, workdir) - self - end - - def title - tk_call(@path, 'title') - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb deleted file mode 100644 index 9fe23b4edc..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb +++ /dev/null @@ -1,190 +0,0 @@ -# -# tkextlib/iwidgets/scrolledlistbox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/listbox' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Scrolledlistbox < Tk::Iwidgets::Scrolledwidget - end - end -end - -class Tk::Iwidgets::Scrolledlistbox - TkCommandNames = ['::iwidgets::scrolledlistbox'.freeze].freeze - WidgetClassName = 'Scrolledlistbox'.freeze - WidgetClassNames[WidgetClassName] = self - - ################################ - - def initialize(*args) - super(*args) - @listbox = component_widget('listbox') - end - - def method_missing(id, *args) - if @listbox.methods.include?(id.id2name) - @listbox.__send__(id, *args) - else - super(id, *args) - end - end - - ################################ - - def clear - tk_call(@path, 'clear') - self - end - - def get_curselection - tk_call(@path, 'getcurselection') - end - - def justify(dir) - tk_call(@path, 'justify', dir) - self - end - - def selected_item_count - number(tk_call(@path, 'selecteditemcount')) - end - - def sort(*params, &b) - # see 'lsort' man page about params - if b - tk_call(@path, 'sort', '-command', proc(&b), *params) - else - tk_call(@path, 'sort', *params) - end - self - end - def sort_ascending - tk_call(@path, 'sort', 'ascending') - self - end - def sort_descending - tk_call(@path, 'sort', 'descending') - self - end - - ##################################### - - def bbox(index) - list(tk_send_without_enc('bbox', index)) - end - def delete(first, last=None) - tk_send_without_enc('delete', first, last) - self - end - def get(*index) - _fromUTF8(tk_send_without_enc('get', *index)) - end - def insert(index, *args) - tk_send('insert', index, *args) - self - end - def scan_mark(x, y) - tk_send_without_enc('scan', 'mark', x, y) - self - end - def scan_dragto(x, y) - tk_send_without_enc('scan', 'dragto', x, y) - self - end - def see(index) - tk_send_without_enc('see', index) - self - end - - ##################################### - - include TkListItemConfig - - def tagid(tag) - if tag.kind_of?(Tk::Itk::Component) - tag.name - else - super(tag) - end - end - private :tagid - - ##################################### - - def activate(y) - tk_send_without_enc('activate', y) - self - end - def curselection - list(tk_send_without_enc('curselection')) - end - def get(first, last=nil) - if last - tk_split_simplelist(_fromUTF8(tk_send_without_enc('get', first, last))) - else - _fromUTF8(tk_send_without_enc('get', first)) - end - end - def nearest(y) - tk_send_without_enc('nearest', y).to_i - end - def size - tk_send_without_enc('size').to_i - end - def selection_anchor(index) - tk_send_without_enc('selection', 'anchor', index) - self - end - def selection_clear(first, last=None) - tk_send_without_enc('selection', 'clear', first, last) - self - end - def selection_includes(index) - bool(tk_send_without_enc('selection', 'includes', index)) - end - def selection_set(first, last=None) - tk_send_without_enc('selection', 'set', first, last) - self - end - - def index(index) - tk_send_without_enc('index', index).to_i - end - - ##################################### - - def xview(*index) - if index.size == 0 - list(tk_send_without_enc('xview')) - else - tk_send_without_enc('xview', *index) - self - end - end - def xview_moveto(*index) - xview('moveto', *index) - end - def xview_scroll(*index) - xview('scroll', *index) - end - - def yview(*index) - if index.size == 0 - list(tk_send_without_enc('yview')) - else - tk_send_without_enc('yview', *index) - self - end - end - def yview_moveto(*index) - yview('moveto', *index) - end - def yview_scroll(*index) - yview('scroll', *index) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb deleted file mode 100644 index 39a9ed63c8..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb +++ /dev/null @@ -1,518 +0,0 @@ -# -# tkextlib/iwidgets/scrolledtext.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/text' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Scrolledtext < Tk::Iwidgets::Scrolledwidget - end - end -end - -class Tk::Iwidgets::Scrolledtext - TkCommandNames = ['::iwidgets::scrolledtext'.freeze].freeze - WidgetClassName = 'Scrolledtext'.freeze - WidgetClassNames[WidgetClassName] = self - - ################################ - - def initialize(*args) - super(*args) - @text = component_widget('text') - end - - def method_missing(id, *args) - if @text.methods.include?(id.id2name) - @text.__send__(id, *args) - else - super(id, *args) - end - end - - ################################ - - def child_site - window(tk_call(@path, 'childsite')) - end - - def clear - tk_call(@path, 'clear') - self - end - - def import(file, idx=nil) - if idx - tk_call(@path, 'import', file, index(idx)) - else - tk_call(@path, 'import', file) - end - self - end - - def export(file) - tk_call(@path, 'export', file) - self - end - - ##################################### - - include TkTextTagConfig - - def tagid(tag) - if tag.kind_of?(Tk::Itk::Component) - tag.name - else - super(tag) - end - end - private :tagid - - def bbox(index) - list(tk_send('bbox', index)) - end - def compare(idx1, op, idx2) - bool(tk_send_without_enc('compare', _get_eval_enc_str(idx1), - op, _get_eval_enc_str(idx2))) - end - - def debug - bool(tk_send_without_enc('debug')) - end - def debug=(boolean) - tk_send_without_enc('debug', boolean) - #self - boolean - end - - def delete(first, last=None) - tk_send_without_enc('delete', first, last) - self - end - - def dlineinfo(index) - list(tk_send_without_enc('dlineinfo', _get_eval_enc_str(index))) - end - - def get(*index) - _fromUTF8(tk_send_without_enc('get', *index)) - end - def get_displaychars(*index) - # Tk8.5 feature - get('-displaychars', *index) - end - - def image_cget(index, slot) - case slot.to_s - when 'text', 'label', 'show', 'data', 'file' - _fromUTF8(tk_send_without_enc('image', 'cget', - _get_eval_enc_str(index), "-#{slot}")) - else - tk_tcl2ruby(_fromUTF8(tk_send_without_enc('image', 'cget', - _get_eval_enc_str(index), - "-#{slot}"))) - end - end - - def image_configure(index, slot, value=None) - if slot.kind_of? Hash - _fromUTF8(tk_send_without_enc('image', 'configure', - _get_eval_enc_str(index), - *hash_kv(slot, true))) - else - _fromUTF8(tk_send_without_enc('image', 'configure', - _get_eval_enc_str(index), - "-#{slot}", - _get_eval_enc_str(value))) - end - self - end - - def image_configinfo(index, slot = nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - case slot.to_s - when 'text', 'label', 'show', 'data', 'file' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"))) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"))) - end - conf[0] = conf[0][1..-1] - conf - else - tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)))).collect{|conflist| - conf = tk_split_simplelist(conflist) - conf[0] = conf[0][1..-1] - case conf[0] - when 'text', 'label', 'show', 'data', 'file' - else - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - if conf[4] - if conf[4].index('{') - conf[4] = tk_split_list(conf[4]) - else - conf[4] = tk_tcl2ruby(conf[4]) - end - end - end - conf[1] = conf[1][1..-1] if conf.size == 2 # alias info - conf - } - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - case slot.to_s - when 'text', 'label', 'show', 'data', 'file' - conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"))) - else - conf = tk_split_list(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"))) - end - key = conf.shift[1..-1] - { key => conf } - else - ret = {} - tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)))).each{|conflist| - conf = tk_split_simplelist(conflist) - key = conf.shift[1..-1] - case key - when 'text', 'label', 'show', 'data', 'file' - else - if conf[2] - if conf[2].index('{') - conf[2] = tk_split_list(conf[2]) - else - conf[2] = tk_tcl2ruby(conf[2]) - end - end - if conf[3] - if conf[3].index('{') - conf[3] = tk_split_list(conf[3]) - else - conf[3] = tk_tcl2ruby(conf[3]) - end - end - end - if conf.size == 1 - ret[key] = conf[0][1..-1] # alias info - else - ret[key] = conf - end - } - ret - end - end - end - - def current_image_configinfo(index, slot = nil) - if TkComm::GET_CONFIGINFO_AS_ARRAY - if slot - conf = image_configinfo(index, slot) - {conf[0] => conf[4]} - else - ret = {} - image_configinfo(index).each{|conf| - ret[conf[0]] = conf[4] if conf.size > 2 - } - ret - end - else # ! TkComm::GET_CONFIGINFO_AS_ARRAY - ret = {} - image_configinfo(index, slot).each{|k, conf| - ret[k] = conf[-1] if conf.kind_of?(Array) - } - ret - end - end - - def image_names - tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'names'))).collect{|elt| - tagid2obj(elt) - } - end - - def index(index) - tk_send_without_enc('index', _get_eval_enc_str(index)) - end - - def insert(index, *args) - tk_send('insert', index, *args) - self - end - - def mark_names - tk_split_simplelist(_fromUTF8(tk_send_without_enc('mark', 'names'))).collect{|elt| - tagid2obj(elt) - } - end - - def mark_gravity(mark, direction=nil) - if direction - tk_send_without_enc('mark', 'gravity', - _get_eval_enc_str(mark), direction) - self - else - tk_send_without_enc('mark', 'gravity', _get_eval_enc_str(mark)) - end - end - - def mark_set(mark, index) - tk_send_without_enc('mark', 'set', _get_eval_enc_str(mark), - _get_eval_enc_str(index)) - self - end - alias set_mark mark_set - - def mark_unset(*marks) - tk_send_without_enc('mark', 'unset', - *(marks.collect{|mark| _get_eval_enc_str(mark)})) - self - end - alias unset_mark mark_unset - - def mark_next(index) - tagid2obj(_fromUTF8(tk_send_without_enc('mark', 'next', - _get_eval_enc_str(index)))) - end - alias next_mark mark_next - - def mark_previous(index) - tagid2obj(_fromUTF8(tk_send_without_enc('mark', 'previous', - _get_eval_enc_str(index)))) - end - alias previous_mark mark_previous - - def scan_mark(x, y) - tk_send_without_enc('scan', 'mark', x, y) - self - end - def scan_dragto(x, y) - tk_send_without_enc('scan', 'dragto', x, y) - self - end - - - def _ktext_length(txt) - if $KCODE !~ /n/i - return txt.gsub(/[^\Wa-zA-Z_\d]/, ' ').length - end - - # $KCODE == 'NONE' - if JAPANIZED_TK - tk_call_without_enc('kstring', 'length', - _get_eval_enc_str(txt)).to_i - else - begin - tk_call_without_enc('encoding', 'convertto', 'ascii', - _get_eval_enc_str(txt)).length - rescue StandardError, NameError - # sorry, I have no plan - txt.length - end - end - end - private :_ktext_length - - def tksearch(*args) - # call 'search' subcommand of text widget - # args ::= [<array_of_opts>] <pattern> <start_index> [<stop_index>] - # If <pattern> is regexp, then it must be a regular expression of Tcl - if args[0].kind_of?(Array) - opts = args.shift.collect{|opt| '-' + opt.to_s } - else - opts = [] - end - - opts << '--' - - ret = tk_send('search', *(opts + args)) - if ret == "" - nil - else - ret - end - end - - def tksearch_with_count(*args) - # call 'search' subcommand of text widget - # args ::= [<array_of_opts>] <var> <pattern> <start_index> [<stop_index>] - # If <pattern> is regexp, then it must be a regular expression of Tcl - if args[0].kind_of?(Array) - opts = args.shift.collect{|opt| '-' + opt.to_s } - else - opts = [] - end - - opts << '-count' << args.shift << '--' - - ret = tk_send('search', *(opts + args)) - if ret == "" - nil - else - ret - end - end - - def search_with_length(pat,start,stop=None) - pat = pat.chr if pat.kind_of? Integer - if stop != None - return ["", 0] if compare(start,'>=',stop) - txt = get(start,stop) - if (pos = txt.index(pat)) - match = $& - #pos = txt[0..(pos-1)].split('').length if pos > 0 - pos = _ktext_length(txt[0..(pos-1)]) if pos > 0 - if pat.kind_of? String - #return [index(start + " + #{pos} chars"), pat.split('').length] - return [index(start + " + #{pos} chars"), - _ktext_length(pat), pat.dup] - else - #return [index(start + " + #{pos} chars"), $&.split('').length] - return [index(start + " + #{pos} chars"), - _ktext_length(match), match] - end - else - return ["", 0] - end - else - txt = get(start,'end - 1 char') - if (pos = txt.index(pat)) - match = $& - #pos = txt[0..(pos-1)].split('').length if pos > 0 - pos = _ktext_length(txt[0..(pos-1)]) if pos > 0 - if pat.kind_of? String - #return [index(start + " + #{pos} chars"), pat.split('').length] - return [index(start + " + #{pos} chars"), - _ktext_length(pat), pat.dup] - else - #return [index(start + " + #{pos} chars"), $&.split('').length] - return [index(start + " + #{pos} chars"), - _ktext_length(match), match] - end - else - txt = get('1.0','end - 1 char') - if (pos = txt.index(pat)) - match = $& - #pos = txt[0..(pos-1)].split('').length if pos > 0 - pos = _ktext_length(txt[0..(pos-1)]) if pos > 0 - if pat.kind_of? String - #return [index("1.0 + #{pos} chars"), pat.split('').length] - return [index("1.0 + #{pos} chars"), - _ktext_length(pat), pat.dup] - else - #return [index("1.0 + #{pos} chars"), $&.split('').length] - return [index("1.0 + #{pos} chars"), _ktext_length(match), match] - end - else - return ["", 0] - end - end - end - end - - def search(pat,start,stop=None) - search_with_length(pat,start,stop)[0] - end - - def rsearch_with_length(pat,start,stop=None) - pat = pat.chr if pat.kind_of? Integer - if stop != None - return ["", 0] if compare(start,'<=',stop) - txt = get(stop,start) - if (pos = txt.rindex(pat)) - match = $& - #pos = txt[0..(pos-1)].split('').length if pos > 0 - pos = _ktext_length(txt[0..(pos-1)]) if pos > 0 - if pat.kind_of? String - #return [index(stop + " + #{pos} chars"), pat.split('').length] - return [index(stop + " + #{pos} chars"), _ktext_length(pat), pat.dup] - else - #return [index(stop + " + #{pos} chars"), $&.split('').length] - return [index(stop + " + #{pos} chars"), _ktext_length(match), match] - end - else - return ["", 0] - end - else - txt = get('1.0',start) - if (pos = txt.rindex(pat)) - match = $& - #pos = txt[0..(pos-1)].split('').length if pos > 0 - pos = _ktext_length(txt[0..(pos-1)]) if pos > 0 - if pat.kind_of? String - #return [index("1.0 + #{pos} chars"), pat.split('').length] - return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup] - else - #return [index("1.0 + #{pos} chars"), $&.split('').length] - return [index("1.0 + #{pos} chars"), _ktext_length(match), match] - end - else - txt = get('1.0','end - 1 char') - if (pos = txt.rindex(pat)) - match = $& - #pos = txt[0..(pos-1)].split('').length if pos > 0 - pos = _ktext_length(txt[0..(pos-1)]) if pos > 0 - if pat.kind_of? String - #return [index("1.0 + #{pos} chars"), pat.split('').length] - return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup] - else - #return [index("1.0 + #{pos} chars"), $&.split('').length] - return [index("1.0 + #{pos} chars"), _ktext_length(match), match] - end - else - return ["", 0] - end - end - end - end - - def rsearch(pat,start,stop=None) - rsearch_with_length(pat,start,stop)[0] - end - - def see(index) - tk_send_without_enc('see', index) - self - end - - ############################### - - def xview(*index) - if index.size == 0 - list(tk_send_without_enc('xview')) - else - tk_send_without_enc('xview', *index) - self - end - end - def xview_moveto(*index) - xview('moveto', *index) - end - def xview_scroll(*index) - xview('scroll', *index) - end - - def yview(*index) - if index.size == 0 - list(tk_send_without_enc('yview')) - else - tk_send_without_enc('yview', *index) - self - end - end - def yview_moveto(*index) - yview('moveto', *index) - end - def yview_scroll(*index) - yview('scroll', *index) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledwidget.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledwidget.rb deleted file mode 100644 index eef093d314..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/scrolledwidget.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# tkextlib/iwidgets/scrolledwidget.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Scrolledwidget < Tk::Iwidgets::Labeledwidget - end - end -end - -class Tk::Iwidgets::Scrolledwidget - TkCommandNames = ['::iwidgets::scrolledwidget'.freeze].freeze - WidgetClassName = 'Scrolledwidget'.freeze - WidgetClassNames[WidgetClassName] = self -end diff --git a/ext/tk/lib/tkextlib/iwidgets/selectionbox.rb b/ext/tk/lib/tkextlib/iwidgets/selectionbox.rb deleted file mode 100644 index 91ba9248e1..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/selectionbox.rb +++ /dev/null @@ -1,92 +0,0 @@ -# -# tkextlib/iwidgets/selectionbox.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Selectionbox < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Selectionbox - TkCommandNames = ['::iwidgets::selectionbox'.freeze].freeze - WidgetClassName = 'Selectionbox'.freeze - WidgetClassNames[WidgetClassName] = self - - def child_site - window(tk_call(@path, 'childsite')) - end - - def clear_items - tk_call(@path, 'clear', 'items') - self - end - - def clear_selection - tk_call(@path, 'clear', 'selection') - self - end - - def get - tk_call(@path, 'get') - end - - def insert_items(idx, *args) - tk_call(@path, 'insert', 'items', idx, *args) - end - - def insert_selection(pos, text) - tk_call(@path, 'insert', 'selection', pos, text) - end - - def select_item - tk_call(@path, 'selectitem') - self - end - - # based on TkListbox ( and TkTextWin ) - def curselection - list(tk_send_without_enc('curselection')) - end - def delete(first, last=None) - tk_send_without_enc('delete', first, last) - self - end - def index(index) - tk_send_without_enc('index', index).to_i - end - def nearest(y) - tk_send_without_enc('nearest', y).to_i - end - def scan_mark(x, y) - tk_send_without_enc('scan', 'mark', x, y) - self - end - def scan_dragto(x, y) - tk_send_without_enc('scan', 'dragto', x, y) - self - end - def selection_anchor(index) - tk_send_without_enc('selection', 'anchor', index) - self - end - def selection_clear(first, last=None) - tk_send_without_enc('selection', 'clear', first, last) - self - end - def selection_includes(index) - bool(tk_send_without_enc('selection', 'includes', index)) - end - def selection_set(first, last=None) - tk_send_without_enc('selection', 'set', first, last) - self - end - def size - tk_send_without_enc('size').to_i - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb b/ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb deleted file mode 100644 index 794da5d61c..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb +++ /dev/null @@ -1,92 +0,0 @@ -# -# tkextlib/iwidgets/selectiondialog.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Selectiondialog < Tk::Iwidgets::Dialog - end - end -end - -class Tk::Iwidgets::Selectiondialog - TkCommandNames = ['::iwidgets::selectiondialog'.freeze].freeze - WidgetClassName = 'Selectiondialog'.freeze - WidgetClassNames[WidgetClassName] = self - - def child_site - window(tk_call(@path, 'childsite')) - end - - def clear_items - tk_call(@path, 'clear', 'items') - self - end - - def clear_selection - tk_call(@path, 'clear', 'selection') - self - end - - def get - tk_call(@path, 'get') - end - - def insert_items(idx, *args) - tk_call(@path, 'insert', 'items', idx, *args) - end - - def insert_selection(pos, text) - tk_call(@path, 'insert', 'selection', pos, text) - end - - def select_item - tk_call(@path, 'selectitem') - self - end - - # based on TkListbox ( and TkTextWin ) - def curselection - list(tk_send_without_enc('curselection')) - end - def delete(first, last=None) - tk_send_without_enc('delete', first, last) - self - end - def index(index) - tk_send_without_enc('index', index).to_i - end - def nearest(y) - tk_send_without_enc('nearest', y).to_i - end - def scan_mark(x, y) - tk_send_without_enc('scan', 'mark', x, y) - self - end - def scan_dragto(x, y) - tk_send_without_enc('scan', 'dragto', x, y) - self - end - def selection_anchor(index) - tk_send_without_enc('selection', 'anchor', index) - self - end - def selection_clear(first, last=None) - tk_send_without_enc('selection', 'clear', first, last) - self - end - def selection_includes(index) - bool(tk_send_without_enc('selection', 'includes', index)) - end - def selection_set(first, last=None) - tk_send_without_enc('selection', 'set', first, last) - self - end - def size - tk_send_without_enc('size').to_i - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/setup.rb b/ext/tk/lib/tkextlib/iwidgets/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/iwidgets/shell.rb b/ext/tk/lib/tkextlib/iwidgets/shell.rb deleted file mode 100644 index dabf2e6f25..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/shell.rb +++ /dev/null @@ -1,38 +0,0 @@ -# -# tkextlib/iwidgets/shell.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Shell < Tk::Itk::Toplevel - end - end -end - -class Tk::Iwidgets::Shell - TkCommandNames = ['::iwidgets::shell'.freeze].freeze - WidgetClassName = 'Shell'.freeze - WidgetClassNames[WidgetClassName] = self - - def activate - tk_call(@path, 'activate') # may return val of deactibate method - end - - def center(win=None) - tk_call(@path, 'center', win) - self - end - - def child_site - window(tk_call(@path, 'childsite')) - end - - def deactivate(val=None) - tk_call(@path, 'deactivate', val) - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/spindate.rb b/ext/tk/lib/tkextlib/iwidgets/spindate.rb deleted file mode 100644 index 6099ba77b9..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/spindate.rb +++ /dev/null @@ -1,38 +0,0 @@ -# -# tkextlib/iwidgets/spindate.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Spindate < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Spindate - TkCommandNames = ['::iwidgets::spindate'.freeze].freeze - WidgetClassName = 'Spindate'.freeze - WidgetClassNames[WidgetClassName] = self - - def get_string - tk_call(@path, 'get', '-string') - end - alias get get_string - - def get_clicks - number(tk_call(@path, 'get', '-clicks')) - end - - def show(date=None) - tk_call(@path, 'show', date) - self - end - def show_now - tk_call(@path, 'show', 'now') - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/spinint.rb b/ext/tk/lib/tkextlib/iwidgets/spinint.rb deleted file mode 100644 index 071b6ab8f7..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/spinint.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# tkextlib/iwidgets/spinint.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Spinint < Tk::Iwidgets::Spinner - end - end -end - -class Tk::Iwidgets::Spinint - TkCommandNames = ['::iwidgets::spinint'.freeze].freeze - WidgetClassName = 'Spinint'.freeze - WidgetClassNames[WidgetClassName] = self -end diff --git a/ext/tk/lib/tkextlib/iwidgets/spinner.rb b/ext/tk/lib/tkextlib/iwidgets/spinner.rb deleted file mode 100644 index b5c72b4df8..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/spinner.rb +++ /dev/null @@ -1,150 +0,0 @@ -# -# tkextlib/iwidgets/spinner.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Spinner < Tk::Iwidgets::Labeledwidget - end - end -end - -class Tk::Iwidgets::Spinner - TkCommandNames = ['::iwidgets::spinner'.freeze].freeze - WidgetClassName = 'Spinner'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include Tk::ValidateConfigure - - class EntryfieldValidate < TkValidateCommand - #class CalCmdArgs < TkUtil::CallbackSubst - class ValidateArgs < TkUtil::CallbackSubst - KEY_TBL = [ - [ ?c, ?s, :char ], - [ ?P, ?s, :post ], - [ ?S, ?s, :current ], - [ ?W, ?w, :widget ], - nil - ] - PROC_TBL = [ - [ ?s, TkComm.method(:string) ], - [ ?w, TkComm.method(:window) ], - nil - ] - _setup_subst_table(KEY_TBL, PROC_TBL); - end - - def self._config_keys - ['validate', 'invalid'] - end - end - - def __validation_class_list - super << EntryfieldValidate - end - - Tk::ValidateConfigure.__def_validcmd(binding, EntryfieldValidate) - - #################################### - - def up - tk_call_without_enc(@path, 'up') - self - end - - def down - tk_call_without_enc(@path, 'down') - self - end - - def clear - tk_call_without_enc(@path, 'clear') - self - end - - def delete(first, last=None) - tk_send_without_enc('delete', first, last) - self - end - - def value - _fromUTF8(tk_send_without_enc('get')) - end - def value= (val) - tk_send_without_enc('delete', 0, 'end') - tk_send_without_enc('insert', 0, _get_eval_enc_str(val)) - val - end - alias get value - alias set value= - - def cursor=(index) - tk_send_without_enc('icursor', index) - #self - index - end - alias icursor cursor= - - def index(index) - number(tk_send_without_enc('index', index)) - end - - def insert(pos,text) - tk_send_without_enc('insert', pos, _get_eval_enc_str(text)) - self - end - - def mark(pos) - tk_send_without_enc('scan', 'mark', pos) - self - end - def dragto(pos) - tk_send_without_enc('scan', 'dragto', pos) - self - end - def selection_adjust(index) - tk_send_without_enc('selection', 'adjust', index) - self - end - def selection_clear - tk_send_without_enc('selection', 'clear') - self - end - def selection_from(index) - tk_send_without_enc('selection', 'from', index) - self - end - def selection_present() - bool(tk_send_without_enc('selection', 'present')) - end - def selection_range(s, e) - tk_send_without_enc('selection', 'range', s, e) - self - end - def selection_to(index) - tk_send_without_enc('selection', 'to', index) - self - end - - # based on tk/scrollable.rb - def xview(*index) - if index.size == 0 - list(tk_send_without_enc('xview')) - else - tk_send_without_enc('xview', *index) - self - end - end - def xview_moveto(*index) - xview('moveto', *index) - end - def xview_scroll(*index) - xview('scroll', *index) - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/spintime.rb b/ext/tk/lib/tkextlib/iwidgets/spintime.rb deleted file mode 100644 index c1e1f5e5f1..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/spintime.rb +++ /dev/null @@ -1,38 +0,0 @@ -# -# tkextlib/iwidgets/spintime.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Spintime < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Spintime - TkCommandNames = ['::iwidgets::spintime'.freeze].freeze - WidgetClassName = 'Spintime'.freeze - WidgetClassNames[WidgetClassName] = self - - def get_string - tk_call(@path, 'get', '-string') - end - alias get get_string - - def get_clicks - number(tk_call(@path, 'get', '-clicks')) - end - - def show(date=None) - tk_call(@path, 'show', date) - self - end - def show_now - tk_call(@path, 'show', 'now') - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb b/ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb deleted file mode 100644 index 5321331551..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb +++ /dev/null @@ -1,154 +0,0 @@ -# -# tkextlib/iwidgets/tabnotebook.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Tabnotebook < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Tabnotebook - TkCommandNames = ['::iwidgets::tabnotebook'.freeze].freeze - WidgetClassName = 'Tabnotebook'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'tabcget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'tabconfigure', id] - end - private :__item_config_cmd - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::Itk::Component) - tagOrId.name - else - #_get_eval_string(tagOrId) - tagOrId - end - end - - alias pagecget itemcget - alias pageconfigure itemconfigure - alias pageconfiginfo itemconfiginfo - alias current_pageconfiginfo current_itemconfiginfo - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo - - #################################### - - def initialize(*args) - super(*args) - @tabset = self.component_widget('tabset') - end - - def add(keys={}) - window(tk_call(@path, 'add', *hash_kv(keys))) - end - - def child_site_list - list(tk_call(@path, 'childsite')) - end - - def child_site(idx) - window(tk_call(@path, 'childsite', index(idx))) - end - - def delete(idx1, idx2=nil) - if idx2 - tk_call(@path, 'delete', index(idx1), index(idx2)) - else - tk_call(@path, 'delete', index(idx1)) - end - self - end - - def index(idx) - #number(tk_call(@path, 'index', tagid(idx))) - @tabset.index(tagid(idx)) - end - - def insert(idx, keys={}) - window(tk_call(@path, 'insert', index(idx), *hash_kv(keys))) - end - - def next - tk_call(@path, 'next') - self - end - - def prev - tk_call(@path, 'prev') - self - end - - def select(idx) - tk_call(@path, 'select', index(idx)) - self - end - - def scrollcommand(cmd=Proc.new) - configure_cmd 'scrollcommand', cmd - self - end - alias xscrollcommand scrollcommand - alias yscrollcommand scrollcommand - - def xscrollbar(bar=nil) - if bar - @scrollbar = bar - @scrollbar.orient 'horizontal' - self.scrollcommand {|*arg| @scrollbar.set(*arg)} - @scrollbar.command {|*arg| self.xview(*arg)} - Tk.update # avoid scrollbar trouble - end - @scrollbar - end - def yscrollbar(bar=nil) - if bar - @scrollbar = bar - @scrollbar.orient 'vertical' - self.scrollcommand {|*arg| @scrollbar.set(*arg)} - @scrollbar.command {|*arg| self.yview(*arg)} - Tk.update # avoid scrollbar trouble - end - @scrollbar - end - alias scrollbar yscrollbar - - def view(*index) - if index.size == 0 - window(tk_send_without_enc('view')) - else - tk_send_without_enc('view', *index) - self - end - end - alias xview view - alias yview view - - def view_moveto(*index) - view('moveto', *index) - end - alias xview_moveto view_moveto - alias yview_moveto view_moveto - def view_scroll(*index) - view('scroll', *index) - end - alias xview_scroll view_scroll - alias yview_scroll view_scroll -end diff --git a/ext/tk/lib/tkextlib/iwidgets/tabset.rb b/ext/tk/lib/tkextlib/iwidgets/tabset.rb deleted file mode 100644 index 1b76916ab7..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/tabset.rb +++ /dev/null @@ -1,89 +0,0 @@ -# -# tkextlib/iwidgets/tabset.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Tabset < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Tabset - TkCommandNames = ['::iwidgets::tabset'.freeze].freeze - WidgetClassName = 'Tabset'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'tabcget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'tabconfigure', id] - end - private :__item_config_cmd - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::Itk::Component) - tagOrId.name - else - #_get_eval_string(tagOrId) - tagOrId - end - end - - alias tabcget itemcget - alias tabconfigure itemconfigure - alias tabconfiginfo itemconfiginfo - alias current_tabconfiginfo current_itemconfiginfo - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo - - #################################### - - def add(keys={}) - window(tk_call(@path, 'add', *hash_kv(keys))) - end - - def delete(idx1, idx2=nil) - if idx2 - tk_call(@path, 'delete', index(idx1), index(idx2)) - else - tk_call(@path, 'delete', index(idx1)) - end - self - end - - def index(idx) - number(tk_call(@path, 'index', tagid(idx))) - end - - def insert(idx, keys={}) - window(tk_call(@path, 'insert', index(idx), *hash_kv(keys))) - end - - def next - tk_call(@path, 'next') - self - end - - def prev - tk_call(@path, 'prev') - self - end - - def select(idx) - tk_call(@path, 'select', index(idx)) - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/timeentry.rb b/ext/tk/lib/tkextlib/iwidgets/timeentry.rb deleted file mode 100644 index 987cddc1e0..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/timeentry.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# tkextlib/iwidgets/timeentry.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Timeentry < Tk::Iwidgets::Timefield - end - end -end - -class Tk::Iwidgets::Timeentry - TkCommandNames = ['::iwidgets::timeentry'.freeze].freeze - WidgetClassName = 'Timeentry'.freeze - WidgetClassNames[WidgetClassName] = self -end diff --git a/ext/tk/lib/tkextlib/iwidgets/timefield.rb b/ext/tk/lib/tkextlib/iwidgets/timefield.rb deleted file mode 100644 index 602093eb7e..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/timefield.rb +++ /dev/null @@ -1,43 +0,0 @@ -# -# tkextlib/iwidgets/timefield.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Timefield < Tk::Iwidgets::Labeledwidget - end - end -end - -class Tk::Iwidgets::Timefield - TkCommandNames = ['::iwidgets::timefield'.freeze].freeze - WidgetClassName = 'Timefield'.freeze - WidgetClassNames[WidgetClassName] = self - - def get_string - tk_call(@path, 'get', '-string') - end - alias get get_string - - def get_clicks - number(tk_call(@path, 'get', '-clicks')) - end - - def valid? - bool(tk_call(@path, 'isvalid')) - end - alias isvalid? valid? - - def show(time=None) - tk_call(@path, 'show', time) - self - end - def show_now - tk_call(@path, 'show', 'now') - self - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/toolbar.rb b/ext/tk/lib/tkextlib/iwidgets/toolbar.rb deleted file mode 100644 index a2a7f31627..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/toolbar.rb +++ /dev/null @@ -1,87 +0,0 @@ -# -# tkextlib/iwidgets/toolbar.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Toolbar < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Toolbar - TkCommandNames = ['::iwidgets::toolbar'.freeze].freeze - WidgetClassName = 'Toolbar'.freeze - WidgetClassNames[WidgetClassName] = self - - #################################### - - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'itemcget', self.index(id)] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'itemconfigure', self.index(id)] - end - private :__item_config_cmd - - def tagid(tagOrId) - if tagOrId.kind_of?(Tk::Itk::Component) - tagOrId.name - else - #_get_eval_string(tagOrId) - tagOrId - end - end - - #################################### - - def add(type, tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - window(tk_call(@path, 'add', type, tagid(tag), *hash_kv(keys))) - tag - end - - def delete(idx1, idx2=nil) - if idx2 - tk_call(@path, 'delete', index(idx1), index(idx2)) - else - tk_call(@path, 'delete', index(idx1)) - end - self - end - - def index(idx) - number(tk_call(@path, 'index', tagid(idx))) - end - - def insert(idx, type, tag=nil, keys={}) - if tag.kind_of?(Hash) - keys = tag - tag = nil - end - if tag - tag = Tk::Itk::Component.new(self, tagid(tag)) - else - tag = Tk::Itk::Component.new(self) - end - window(tk_call(@path, 'insert', index(idx), type, - tagid(tag), *hash_kv(keys))) - tag - end -end diff --git a/ext/tk/lib/tkextlib/iwidgets/watch.rb b/ext/tk/lib/tkextlib/iwidgets/watch.rb deleted file mode 100644 index f62c0b931e..0000000000 --- a/ext/tk/lib/tkextlib/iwidgets/watch.rb +++ /dev/null @@ -1,45 +0,0 @@ -# -# tkextlib/iwidgets/watch.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tkextlib/iwidgets.rb' - -module Tk - module Iwidgets - class Watch < Tk::Itk::Widget - end - end -end - -class Tk::Iwidgets::Watch - TkCommandNames = ['::iwidgets::watch'.freeze].freeze - WidgetClassName = 'Watch'.freeze - WidgetClassNames[WidgetClassName] = self - - def get_string - tk_call(@path, 'get', '-string') - end - alias get get_string - - def get_clicks - number(tk_call(@path, 'get', '-clicks')) - end - - def show(time=None) - tk_call(@path, 'show', time) - self - end - def show_now - tk_call(@path, 'show', 'now') - self - end - - def watch(*args) - unless args.empty? - tk_call(@path, 'watch', *args) - end - component_path('canvas') - end -end diff --git a/ext/tk/lib/tkextlib/pkg_checker.rb b/ext/tk/lib/tkextlib/pkg_checker.rb deleted file mode 100755 index 5002ed7ff8..0000000000 --- a/ext/tk/lib/tkextlib/pkg_checker.rb +++ /dev/null @@ -1,184 +0,0 @@ -#!/usr/bin/env ruby -# -# Ruby/Tk extension library checker -# -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -TkRoot.new.withdraw # hide root window - -name = File.basename(__FILE__) - -add_path = false -verbose = false - -def help_msg - print "Usage: #{$0} [-l] [-v] [-h] [--] [dir]\n" - print "\tIf dir is omitted, check the directry that this command exists.\n" - print "\tAvailable options are \n" - print "\t -l : Add dir to $LOAD_PATH\n" - print "\t (If dir == '<parent>/tkextlib', add <parent> also.)\n" - print "\t -v : Verbose mode (show reason of fail)\n" - print "\t -h : Show this message\n" - print "\t -- : End of options\n" -end - -while(ARGV[0] && ARGV[0][0] == ?-) - case ARGV[0] - when '--' - ARGV.shift - break; - when '-l' - ARGV.shift - add_path = true - when '-v' - ARGV.shift - verbose = true - when '-h' - help_msg - exit(0) - else - print "Argument Error!! : unknown option '#{ARGV[0]}'\n" - help_msg - exit(1) - end -end - -if ARGV[0] - dir = File.expand_path(ARGV[0]) -else - dir = File.dirname(File.expand_path(__FILE__)) -end - -if add_path - $LOAD_PATH.unshift(dir) - if File.basename(dir) == 'tkextlib' - $LOAD_PATH.unshift(File.dirname(dir)) - end -end - -print "\nRuby/Tk extension library checker\n" -print "( Note:: This check is very simple one. Shown status may be wrong. )\n" -print "\n check directory :: #{dir}" -print "\n $LOAD_PATH :: #{$LOAD_PATH.inspect}\n" - -def get_pkg_list(file) - pkg_list = [] - - File.foreach(file){|l| - if l =~ /^(?:[^#]+\s|\s*)(?:|;\s*)TkPackage\s*\.\s*require\s*\(?\s*(["'])((\w|:)+)\1/ - pkg = [$2, :package] - pkg_list << pkg unless pkg_list.member?(pkg) - end - if l =~ /^(?:[^#]+\s|\s*)(?:|;\s*)Tk\s*\.\s*load_tcllibrary\s*\(?\s*(["'])((\w|:)+)\1/ - pkg = [$2, :library] - pkg_list << pkg unless pkg_list.member?(pkg) - end - if l =~ /^(?:[^#]+\s|\s*)(?:|;\s*)Tk\s*\.\s*load_tclscript\s*\(?\s*(["'])((\w|:)+)\1/ - pkg = [$2, :script] - pkg_list << pkg unless pkg_list.member?(pkg) - end - if l =~ /^(?:[^#]+\s|\s*)(?:|;\s*)require\s*\(?\s*(["'])((\w|\/|:)+)\1/ - pkg = [$2, :require_ruby_lib] - pkg_list << pkg unless pkg_list.member?(pkg) - end - } - - pkg_list -end - -def check_pkg(file, verbose=false) - pkg_list = get_pkg_list(file) - - error_list = [] - success_list = {} - - pkg_list.each{|name, type| - next if success_list[name] - - begin - case type - when :package - ver = TkPackage.require(name) - success_list[name] = ver - error_list.delete_if{|n, t| n == name} - - when :library - Tk.load_tcllibrary(name) - success_list[name] = :library - error_list.delete_if{|n, t| n == name} - - when :script - Tk.load_tclscript(name) - success_list[name] = :script - error_list.delete_if{|n, t| n == name} - - when :require_ruby_lib - require name - - end - rescue => e - if verbose - error_list << [name, type, e.message] - else - error_list << [name, type] - end - end - } - - success_list.dup.each{|name, ver| - unless ver.kind_of?(String) - begin - ver = TkPackage.require(name) - sccess_list[name] = ver - rescue - end - end - } - - [success_list, error_list] -end - -def subdir_check(dir, verbose=false) - Dir.foreach(dir){|f| - next if f == '.' || f == '..' - if File.directory?(f) - subdir_check(File.join(dir, f)) - elsif File.extname(f) == '.rb' - path = File.join(dir, f) - suc, err = check_pkg(path, verbose) - if err.empty? - print 'Ready : ', path, ' : require->', suc.inspect, "\n" - else - print '*LACK : ', path, ' : require->', suc.inspect, - ' FAIL->', err.inspect, "\n" - end - end - } -end - -Dir.chdir(dir) - -(Dir['*.rb'] - ['setup.rb', name]).each{|f| - subdir = File.basename(f, '.*') -=begin - begin - # read 'setup.rb' as if the library has standard structure - require File.join(subdir, 'setup.rb') - rescue LoadError - # ignore error - end -=end - print "\n" - - suc, err = check_pkg(f, verbose) - if err.empty? - print 'Ready : ', f, ' : require->', suc.inspect, "\n" - else - print '*LACK : ', f, ' : require->', suc.inspect, - ' FAIL->', err.inspect, "\n" - end - - subdir_check(subdir, verbose) if File.directory?(subdir) -} diff --git a/ext/tk/lib/tkextlib/setup.rb b/ext/tk/lib/tkextlib/setup.rb deleted file mode 100644 index 12867e8f9c..0000000000 --- a/ext/tk/lib/tkextlib/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before using Tk extension libraries -# -# If you need some setup operations for Tk extensions (for example, -# modify the dynamic library path) required, please write the setup -# operations in this file. This file is required at the last of -# "require 'tk'". -# diff --git a/ext/tk/lib/tkextlib/tcllib.rb b/ext/tk/lib/tkextlib/tcllib.rb deleted file mode 100644 index f238a975a4..0000000000 --- a/ext/tk/lib/tkextlib/tcllib.rb +++ /dev/null @@ -1,69 +0,0 @@ -# -# tcllib extension support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tcllib/setup.rb' - -err = '' - -# package:: autoscroll -target = 'tkextlib/tcllib/autoscroll' -begin - require target -rescue => e - err << "\n ['" << target << "'] " << e.class.name << ' : ' << e.message -end - -# package:: cursor -target = 'tkextlib/tcllib/cursor' -begin - require target -rescue => e - err << "\n ['" << target << "'] " << e.class.name << ' : ' << e.message -end - -# package:: style -target = 'tkextlib/tcllib/style' -begin - require target -rescue => e - err << "\n ['" << target << "'] " << e.class.name << ' : ' << e.message -end - -# autoload -module Tk - module Tcllib - TkComm::TkExtlibAutoloadModule.unshift(self) - - # package:: ctext - autoload :CText, 'tkextlib/tcllib/ctext' - - # package:: datefield - autoload :Datefield, 'tkextlib/tcllib/datefield' - autoload :DateField, 'tkextlib/tcllib/datefield' - - # package:: ico - autoload :ICO, 'tkextlib/tcllib/ico' - - # package:: ipentry - autoload :IP_Entry, 'tkextlib/tcllib/ip_entry' - autoload :IPEntry, 'tkextlib/tcllib/ip_entry' - - # package:: Plotchart - autoload :Plotchart, 'tkextlib/tcllib/plotchart' - - # package:: tkpiechart - autoload :Tkpiechart, 'tkextlib/tcllib/tkpiechart' - end -end - -if $VERBOSE && !err.empty? - warn("Warning: some sub-packages are failed to require : " + err) -end diff --git a/ext/tk/lib/tkextlib/tcllib/README b/ext/tk/lib/tkextlib/tcllib/README deleted file mode 100644 index 953239befa..0000000000 --- a/ext/tk/lib/tkextlib/tcllib/README +++ /dev/null @@ -1,135 +0,0 @@ - - [ tcllib extension support files ] - -Tcllib includes many utilities. But currently, supports TKLib part -only (see the following 'tcllib contents'). - -If you request to support others, please send your message to one of -ruby-talk/ruby-list/ruby-dev/ruby-ext mailing lists. - ------<from "What is tcllib?">---------------------------- -Tcllib is a collection of utility modules for Tcl. These modules provide -a wide variety of functionality, from implementations of standard data -structures to implementations of common networking protocols. The intent -is to collect commonly used function into a single library, which users -can rely on to be available and stable. ---------------------------------------------------------- - ------< tcllib contents (based on tcllib-1.6.1) >--------- -Programming tools - * cmdline - Procedures to process command lines and options. - * comm - A remote communications facility for Tcl (7.6, 8.0, and later) - * control - Procedures for control flow structures. - * fileutil - Procedures implementing some file utilities - * log - Procedures to log messages of libraries and applications. - * logger - System to control logging of events. - * multiplexer - One-to-many communication with sockets. - * snit - Snit's Not Incr Tcl - * snitfaq - Snit Frequently Asked Questions - * stooop - Object oriented extension. - * stoop - Simple Tcl Only Object Oriented Programming - * switched - stooop switched class - * profiler - Tcl source code profiler - -Mathematics - * math::statistics - Basic statistical functions and procedures - * math::calculus - Integration and ordinary differential equations - * math::optimize - Optimisation routines - * math::fuzzy - Fuzzy comparison of floating-point numbers - * counter - Procedures for counters and histograms - * combinatorics - Combinatorial functions in the Tcl Math Library - -Data structures - * struct::list - Procedures for manipulating lists - * struct::set - Procedures for manipulating sets - * struct::stack - Create and manipulate stack objects - * struct::queue - Create and manipulate queue objects - * struct::prioqueue - Create and manipulate prioqueue objects - * struct::skiplist - Create and manipulate skiplists - * struct::tree - Create and manipulate tree objects - * struct::graph - Create and manipulate directed graph objects - * struct::record - Define and create records (similar to 'C' structures) - * struct::matrix - Create and manipulate matrix objects - * struct::pool - Create and manipulate pool objects (of discrete items) - * report - Create and manipulate report objects - -Text processing - * expander - Procedures to process templates and expand text. - * base64 - Procedures to encode and decode base64 - * yencode - encode/decoding a binary file - * uuencode - encode/decoding a binary file - * csv - Procedures to handle CSV data. - * inifile - Parsing of Windows INI files - * htmlparse - Procedures to parse HTML strings - * mime - Manipulation of MIME body parts - * Tcl MIME - generates and parses MIME body parts - * textutil - Procedures to manipulate texts and strings. - * exif - Tcl EXIF extracts and parses EXIF fields from digital images - * EXIF - extract and parse EXIF fields from digital images - -Hashes, checksums, and encryption - * cksum - calculate a cksum(1) compatible checksum - * crc16 - Perform a 16bit Cyclic Redundancy Check - * crc32 - Perform a 32bit Cyclic Redundancy Check - * des - Perform DES encryption of Tcl data - * md4 - MD4 Message-Digest Algorithm - * md5 - MD5 Message-Digest Algorithm - * ripemd160 - RIPEMD-160 Message-Digest Algorithm - * ripemd128 - RIPEMD-128 Message-Digest Algorithm - * md5crypt - MD5-based password encryption - * sha1 - Perform sha1 hashing - * sum - calculate a sum(1) compatible checksum - * soundex - Soundex - -Documentation tools - * mpexpand - Markup processor - * doctools - Create and manipulate doctools converter object - * doctoc_fmt - Specification of simple tcl markup for table of contents - * doctools_api - Interface specification for formatter code - * doctools_fmt - Specification of simple tcl markup for manpages - * docidx - Create and manipulate docidx converter objects - * docidx_api - Interface specification for index formatting code - * docidx_fmt - Specification of simple tcl markup for an index - * doctoc - Create and manipulate doctoc converter objects - * doctoc_api - Interface specification for toc formatting code - * doctools::changelog - Handle text in Emacs ChangeLog format - * doctools::cvs - Handle text in 'cvs log' format - -Networking - * uri - URI utilities - * dns - Tcl Domain Name Service Client - * ntp_time - Tcl Time Service Client - * nntp - Tcl client for the NNTP protocol - * pop3 - Tcl client for POP3 email protocol - * pop3d - Tcl POP3 server implementation - * pop3d::udb - Simple user database for pop3d - * pop3d::dbox - Simple mailbox database for pop3d - * ftp - Client-side tcl implementation of the ftp protocol - * ftp - Client-side tcl implementation of the ftp protocol - * ftpd - Tcl FTP server implementation - * smtp - Client-side tcl implementation of the smtp protocol - * smtpd - Tcl SMTP server implementation - * irc - Create IRC connection and interface. - -CGI programming - * ncgi - Procedures to manipulate CGI values. - * html - Procedures to generate HTML structures - * javascript - Procedures to generate HTML and Java Script structures. - -Grammars and finite automata - * grammar::fa - Create and manipulate finite automatons - * grammar::fa::op - Operations on finite automatons - * grammar::dacceptor - Create and use deterministic acceptors - * grammar::dexec - Execute deterministic finite automatons - -TKLib - * Plotchart - Simple plotting and charting package - * autoscroll - Provides for a scrollbar to automatically mapped and - unmapped as needed - * ctext - An extended text widget with customizable Syntax highlighting - * cursor - Procedures to handle CURSOR data - * datefield - Tk datefield widget - * style - Changes default Tk look&feel - * ipentry - An IP address entry widget - * tkpiechart - Creates and dynamically updates 2D or 3D pie charts ---------------------------------------------------------- diff --git a/ext/tk/lib/tkextlib/tcllib/autoscroll.rb b/ext/tk/lib/tkextlib/tcllib/autoscroll.rb deleted file mode 100644 index 34e34046c6..0000000000 --- a/ext/tk/lib/tkextlib/tcllib/autoscroll.rb +++ /dev/null @@ -1,142 +0,0 @@ -# -# tkextlib/tcllib/autoscroll.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -# * Part of tcllib extension -# * Provides for a scrollbar to automatically mapped and unmapped as needed -# -# (The following is the original description of the library.) -# -# This package allows scrollbars to be mapped and unmapped as needed -# depending on the size and content of the scrollbars scrolled widget. -# The scrollbar must be managed by either pack or grid, other geometry -# managers are not supported. -# -# When managed by pack, any geometry changes made in the scrollbars parent -# between the time a scrollbar is unmapped, and when it is mapped will be -# lost. It is an error to destroy any of the scrollbars siblings while the -# scrollbar is unmapped. When managed by grid, if anything becomes gridded -# in the same row and column the scrollbar occupied it will be replaced by -# the scrollbar when remapped. -# -# This package may be used on any scrollbar-like widget as long as it -# supports the set subcommand in the same style as scrollbar. If the set -# subcommand is not used then this package will have no effect. -# - -require 'tk' -require 'tk/scrollbar' -require 'tkextlib/tcllib.rb' - -module Tk - module Tcllib - module Autoscroll - def self.package_version - begin - TkPackage.require('autoscroll') - rescue - '' - end - end - - def self.not_available - fail RuntimeError, "'tkextlib/tcllib/autoscroll' extension is not available on your current environment." - end - - def self.autoscroll(win) - Tk::Tcllib::Autoscroll.not_available - end - - def self.unautoscroll(win) - Tk::Tcllib::Autoscroll.not_available - end - end - end -end - -module Tk - module Scrollable - def autoscroll(mode = nil) - case mode - when :x, 'x' - if @xscrollbar - Tk::Tcllib::Autoscroll.autoscroll(@xscrollbar) - end - when :y, 'y' - if @yscrollbar - Tk::Tcllib::Autoscroll.autoscroll(@yscrollbar) - end - when nil, :both, 'both' - if @xscrollbar - Tk::Tcllib::Autoscroll.autoscroll(@xscrollbar) - end - if @yscrollbar - Tk::Tcllib::Autoscroll.autoscroll(@yscrollbar) - end - else - fail ArgumentError, "'x', 'y' or 'both' (String or Symbol) is expected" - end - self - end - def unautoscroll(mode = nil) - case mode - when :x, 'x' - if @xscrollbar - Tk::Tcllib::Autoscroll.unautoscroll(@xscrollbar) - end - when :y, 'y' - if @yscrollbar - Tk::Tcllib::Autoscroll.unautoscroll(@yscrollbar) - end - when nil, :both, 'both' - if @xscrollbar - Tk::Tcllib::Autoscroll.unautoscroll(@xscrollbar) - end - if @yscrollbar - Tk::Tcllib::Autoscroll.unautoscroll(@yscrollbar) - end - else - fail ArgumentError, "'x', 'y' or 'both' (String or Symbol) is expected" - end - self - end - end -end - -class TkScrollbar - def autoscroll - # Arranges for the already existing scrollbar to be mapped - # and unmapped as needed. - #tk_call_without_enc('::autoscroll::autoscroll', @path) - Tk::Tcllib::Autoscroll.autoscroll(self) - self - end - def unautoscroll - # Returns the scrollbar to its original static state. - #tk_call_without_enc('::autoscroll::unautoscroll', @path) - Tk::Tcllib::Autoscroll.unautoscroll(self) - self - end -end - -# TkPackage.require('autoscroll', '1.0') -TkPackage.require('autoscroll') - -module Tk - module Tcllib - class << Autoscroll - undef not_available - end - - module Autoscroll - def self.autoscroll(win) - tk_call_without_enc('::autoscroll::autoscroll', win.path) - end - - def self.unautoscroll(win) - tk_call_without_enc('::autoscroll::unautoscroll', win.path) - end - end - end -end - diff --git a/ext/tk/lib/tkextlib/tcllib/ctext.rb b/ext/tk/lib/tkextlib/tcllib/ctext.rb deleted file mode 100644 index 89bfeff0f3..0000000000 --- a/ext/tk/lib/tkextlib/tcllib/ctext.rb +++ /dev/null @@ -1,143 +0,0 @@ -# -# tkextlib/tcllib/ctext.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -# * Part of tcllib extension -# * Overloads the text widget and provides new commands -# - -require 'tk' -require 'tk/text' -require 'tkextlib/tcllib.rb' - -# TkPackage.require('ctext', '3.1') -TkPackage.require('ctext') - -module Tk - module Tcllib - class CText < TkText - def self.package_version - begin - TkPackage.require('ctext') - rescue - '' - end - end - end - end -end - -class Tk::Tcllib::CText - TkCommandNames = ['ctext'.freeze].freeze - WidgetClassName = 'Ctext'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self(keys) - if keys and keys != None - tk_call_without_enc('ctext', @path, *hash_kv(keys, true)) - else - tk_call_without_enc('ctext', @path) - end - end - private :create_self - - def append(*args) - tk_send('append', *args) - end - - def copy - tk_send('copy') - end - - def cut - tk_send('cut') - end - - def fast_delete(*args) - tk_send('fastdelete', *args) - end - - def fast_insert(*args) - tk_send('fastinsert', *args) - end - - def highlight(*args) - tk_send('highlight', *args) - end - - def paste - tk_send('paste') - end - - def edit(*args) - tk_send('edit', *args) - end - - def add_highlight_class(klass, col, *keywords) - tk_call('ctext::addHighlightClass', @path, klass, col, keywords.flatten) - self - end - - def add_highlight_class_for_special_chars(klass, col, *chrs) - tk_call('ctext::addHighlightClassForSpecialChars', - @path, klass, col, chrs.join('')) - self - end - - def add_highlight_class_for_regexp(klass, col, tcl_regexp) - tk_call('ctext::addHighlightClassForRegexp', - @path, klass, col, tcl_regexp) - self - end - - def add_highlight_class_with_only_char_start(klass, col, chr) - tk_call('ctext::addHighlightClassWithOnlyCharStart', - @path, klass, col, chr) - self - end - - def clear_highlight_classes - tk_call('ctext::clearHighlightClasses', @path) - self - end - - def get_highlight_classes - tk_split_simplelist(tk_call('ctext::getHighlightClasses', @path)) - end - - def delete_highlight_class(klass) - tk_call('ctext::deleteHighlightClass', @path, klass) - self - end - - def enable_C_comments - tk_call('ctext::enableComments', @path) - self - end - - def disable_C_comments - tk_call('ctext::disableComments', @path) - self - end - - def find_next_char(idx, chr) - tk_call('ctext::findNextChar', @path, idx, chr) - end - - def find_next_space(idx) - tk_call('ctext::findNextSpace', @path, idx) - end - - def find_previous_space(idx) - tk_call('ctext::findPreviousSpace', @path, idx) - end - - def set_update_proc(cmd=Proc.new) - tk_call('proc', 'ctext::update', '', cmd) - self - end - - def modified?(mode) - bool(tk_call('ctext::modified', @path, mode)) - end -end diff --git a/ext/tk/lib/tkextlib/tcllib/cursor.rb b/ext/tk/lib/tkextlib/tcllib/cursor.rb deleted file mode 100644 index cbe1e2f1be..0000000000 --- a/ext/tk/lib/tkextlib/tcllib/cursor.rb +++ /dev/null @@ -1,89 +0,0 @@ -# -# tkextlib/tcllib/cursor.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -# * Part of tcllib extension -# * Procedures to handle CURSOR data -# - -require 'tk' -require 'tkextlib/tcllib.rb' - -module Tk - module Tcllib - module Cursor - def self.package_version - begin - TkPackage.require('cursor') - rescue - '' - end - end - - def self.not_available - fail RuntimeError, "'tkextlib/tcllib/cursor' extension is not available on your current environment." - end - - def self.cursor_display(win=None) - Tk::Tcllib::Cursor.not_available - end - - def self.cursor_propagate(win, cursor) - Tk::Tcllib::Cursor.not_available - end - - def self.cursor_restore(win, cursor = None) - Tk::Tcllib::Cursor.not_available - end - end - end - - def self.cursor_display(parent=None) - # Pops up a dialog with a listbox containing all the cursor names. - # Selecting a cursor name will display it in that dialog. - # This is simply for viewing any available cursors on the platform . - #tk_call_without_enc('::cursor::display', parent) - Tk::Tcllib::Cursor.cursor_display(parent) - end -end - -class TkWindow - def cursor_propagate(cursor) - # Sets the cursor for self and all its descendants to cursor. - #tk_call_without_enc('::cursor::propagate', @path, cursor) - Tk::Tcllib::Cursor.cursor_propagate(cursor) - end - def cursor_restore(cursor = None) - # Restore the original or previously set cursor for self and all its - # descendants. If cursor is specified, that will be used if on any - # widget that did not have a preset cursor (set by a previous call - # to TkWindow#cursor_propagate). - #tk_call_without_enc('::cursor::restore', @path, cursor) - Tk::Tcllib::Cursor.cursor_restore(cursor) - end -end - -# TkPackage.require('cursor', '0.1') -TkPackage.require('cursor') - -module Tk - module Tcllib - class << Cursor - undef not_available - end - - module Cursor - def self.cursor_display(win=None) - tk_call_without_enc('::cursor::display', win) - end - - def self.cursor_propagate(win, cursor) - tk_call_without_enc('::cursor::propagate', win.path, cursor) - end - - def self.cursor_restore(win, cursor = None) - tk_call_without_enc('::cursor::restore', win.path, cursor) - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tcllib/datefield.rb b/ext/tk/lib/tkextlib/tcllib/datefield.rb deleted file mode 100644 index 1d029e4569..0000000000 --- a/ext/tk/lib/tkextlib/tcllib/datefield.rb +++ /dev/null @@ -1,52 +0,0 @@ -# -# tkextlib/tcllib/datefield.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -# * Part of tcllib extension -# * Tk datefield widget -# -# (The following is the original description of the library.) -# -# The datefield package provides the datefield widget which is an enhanced -# text entry widget for the purpose of date entry. Only valid dates of the -# form MM/DD/YYYY can be entered. -# -# The datefield widget is, in fact, just an entry widget with specialized -# bindings. This means all the command and options for an entry widget apply -# equally here. - -require 'tk' -require 'tk/entry' -require 'tkextlib/tcllib.rb' - -# TkPackage.require('datefield', '0.1') -TkPackage.require('datefield') - -module Tk - module Tcllib - class Datefield < TkEntry - def self.package_version - begin - TkPackage.require('datefield') - rescue - '' - end - end - end - DateField = Datefield - end -end - -class Tk::Tcllib::Datefield - TkCommandNames = ['::datefield::datefield'.freeze].freeze - - def create_self(keys) - if keys and keys != None - tk_call_without_enc('::datefield::datefield', @path, - *hash_kv(keys, true)) - else - tk_call_without_enc('::datefield::datefield', @path) - end - end - private :create_self -end diff --git a/ext/tk/lib/tkextlib/tcllib/ico.rb b/ext/tk/lib/tkextlib/tcllib/ico.rb deleted file mode 100644 index c87275126e..0000000000 --- a/ext/tk/lib/tkextlib/tcllib/ico.rb +++ /dev/null @@ -1,109 +0,0 @@ -# -# tkextlib/tcllib/ico.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -# * Part of tcllib extension -# * Reading and writing windows icons -# - -require 'tk' -require 'tk/image' -require 'tkextlib/tcllib.rb' - -# TkPackage.require('ico', '0.3') -TkPackage.require('ico') - -module Tk - module Tcllib - class ICO < TkImage - def self.package_version - begin - TkPackage.require('ico') - rescue - '' - end - end - end - end -end - -class Tk::Tcllib::ICO - def self.list(file, keys=nil) - tk_split_list(tk_call_without_enc('::ico::getIconList', file, - *hash_kv(keys, true))) - end - - def self.get(file, index, keys=nil) - tk_call_without_enc('::ico::getIcon', file, index, *hash_kv(keys, true)) - end - - def self.get_image(file, index, keys={}) - keys = _symbolkey2str(keys) - keys.delete('format') - self.new(file, index, keys) - end - - def self.get_data(file, index, keys={}) - keys['format'] = 'data' - tk_split_list(tk_call_without_enc('::ico::getIcon', file, index, - *hash_kv(keys, true))) - end - - def self.write(file, index, depth, data, keys=nil) - tk_call_without_enc('::ico::writeIcon', file, index, depth, data, - *hash_kv(keys, true)) - end - - def self.copy(from_file, from_index, to_file, to_index, keys=nil) - tk_call_without_enc('::ico::copyIcon', - from_file, from_index, to_file, to_index, - *hash_kv(keys, true)) - end - - def self.exe_to_ico(exe_file, ico_file, keys=nil) - tk_call_without_enc('::ico::copyIcon', exe_file, ico_file, - *hash_kv(keys, true)) - end - - def self.clear_cache(file=None) - tk_call_without_enc('::ico::clearCache', file) - end - - def self.transparent_color(image, color) - if image.kind_of?(Array) - tk_split_list(tk_call_without_enc('::ico::transparentColor', - image, color)) - else - tk_call_without_enc('::ico::transparentColor', image, color) - end - end - - def self.show(file, keys=nil) - tk_call_without_enc('::ico::Show', file, *hash_kv(keys, true)) - end - - ########################### - - def initialize(file, index, keys=nil) - keys = _symbolkey2str(keys) - if keys.key?('name') - @path = keys['name'].to_s - else - @path = Tk_Image_ID.join(TkCore::INTERP._ip_id_) - Tk_Image_ID[1].succ! - end - tk_call_without_enc('::ico::getIcon', file, index, '-name', @path, - '-format', 'image', *hash_kv(keys, true)) - Tk_IMGTBL[@path] = self - end - - def write(file, index, depth, keys=nil) - Tk::Tcllib::ICO.write(file, index, depth, @path, keys=nil) - self - end - - def transparent_color(color) - tk_call_without_enc('::ico::transparentColor', @path, color) - self - end -end diff --git a/ext/tk/lib/tkextlib/tcllib/ip_entry.rb b/ext/tk/lib/tkextlib/tcllib/ip_entry.rb deleted file mode 100644 index da9f1eb3a8..0000000000 --- a/ext/tk/lib/tkextlib/tcllib/ip_entry.rb +++ /dev/null @@ -1,55 +0,0 @@ -# -# tkextlib/tcllib/ip_entry.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -# * Part of tcllib extension -# * An IP address entry widget -# -# (The following is the original description of the library.) -# -# This package provides a widget for the entering of a IP address. -# It guarantees a valid address at all times. - -require 'tk' -require 'tkextlib/tcllib.rb' - -# TkPackage.require('ipentry', '0.1') -TkPackage.require('ipentry') - -module Tk - module Tcllib - class IP_Entry < TkEntry - def self.package_version - begin - TkPackage.require('ipentry') - rescue - '' - end - end - end - IPEntry = IP_Entry - end -end - -class Tk::Tcllib::IP_Entry - TkCommandNames = ['::ipentry::ipentry'.freeze].freeze - WidgetClassName = 'IPEntry'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self(keys) - if keys and keys != None - tk_call_without_enc('::ipentry::ipentry', @path, *hash_kv(keys, true)) - else - tk_call_without_enc('::ipentry::ipentry', @path) - end - end - private :create_self - - def complete? - bool(tk_send_without_enc('complete')) - end - - def insert(*ip) - tk_send_without_enc('insert', array2tk_list(ip.flatten)) - end -end diff --git a/ext/tk/lib/tkextlib/tcllib/plotchart.rb b/ext/tk/lib/tkextlib/tcllib/plotchart.rb deleted file mode 100644 index 86327ceff0..0000000000 --- a/ext/tk/lib/tkextlib/tcllib/plotchart.rb +++ /dev/null @@ -1,707 +0,0 @@ -# -# tkextlib/tcllib/plotchart.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -# * Part of tcllib extension -# * Simple plotting and charting package -# -# (The following is the original description of the library.) -# -# Plotchart is a Tcl-only package that focuses on the easy creation of -# xy-plots, barcharts and other common types of graphical presentations. -# The emphasis is on ease of use, rather than flexibility. The procedures -# that create a plot use the entire canvas window, making the layout of the -# plot completely automatic. -# -# This results in the creation of an xy-plot in, say, ten lines of code: -# -------------------------------------------------------------------- -# package require Plotchart -# -# canvas .c -background white -width 400 -height 200 -# pack .c -fill both -# -# # -# # Create the plot with its x- and y-axes -# # -# set s [::Plotchart::createXYPlot .c {0.0 100.0 10.0} {0.0 100.0 20.0}] -# -# foreach {x y} {0.0 32.0 10.0 50.0 25.0 60.0 78.0 11.0 } { -# $s plot series1 $x $y -# } -# -# $s title "Data series" -# -------------------------------------------------------------------- -# -# A drawback of the package might be that it does not do any data management. -# So if the canvas that holds the plot is to be resized, the whole plot must -# be redrawn. The advantage, though, is that it offers a number of plot and -# chart types: -# -# * XY-plots like the one shown above with any number of data series. -# * Stripcharts, a kind of XY-plots where the horizontal axis is adjusted -# automatically. The result is a kind of sliding window on the data -# series. -# * Polar plots, where the coordinates are polar instead of cartesian. -# * Isometric plots, where the scale of the coordinates in the two -# directions is always the same, i.e. a circle in world coordinates -# appears as a circle on the screen. -# You can zoom in and out, as well as pan with these plots (Note: this -# works best if no axes are drawn, the zooming and panning routines do -# not distinguish the axes), using the mouse buttons with the control -# key and the arrow keys with the control key. -# * Piecharts, with automatic scaling to indicate the proportions. -# * Barcharts, with either vertical or horizontal bars, stacked bars or -# bars side by side. -# * Timecharts, where bars indicate a time period and milestones or other -# important moments in time are represented by triangles. -# * 3D plots (both for displaying surfaces and 3D bars) -# - -require 'tk' -require 'tkextlib/tcllib.rb' - -# TkPackage.require('Plotchart', '0.9') -TkPackage.require('Plotchart') - -module Tk - module Tcllib - module Plotchart - def self.package_version - begin - TkPackage.require('Plotchart') - rescue - '' - end - end - end - end -end - -module Tk::Tcllib::Plotchart - ############################ - def self.view_port(w, *args) # args := pxmin, pymin, pxmax, pymax - tk_call_without_enc('::Plotchart::viewPort', w.path, *(args.flatten)) - end - - def self.world_coordinates(w, *args) # args := xmin, ymin, xmax, ymax - tk_call_without_enc('::Plotchart::worldCoordinates', - w.path, *(args.flatten)) - end - - def self.world_3D_coordinates(w, *args) - # args := xmin, ymin, zmin, xmax, ymax, zmax - tk_call_without_enc('::Plotchart::world3DCoordinates', - w.path, *(args.flatten)) - end - - def self.coords_to_pixel(w, x, y) - list(tk_call_without_enc('::Plotchart::coordsToPixel', w.path, x, y)) - end - - def self.coords_3D_to_pixel(w, x, y, z) - list(tk_call_without_enc('::Plotchart::coords3DToPixel', w.path, x, y, z)) - end - - def self.polar_coordinates(w, radmax) - tk_call_without_enc('::Plotchart::polarCoordinates', w.path, radmax) - end - - def self.polar_to_pixel(w, rad, phi) - list(tk_call_without_enc('::Plotchart::polarToPixel', w.path, rad, phi)) - end - - def self.pixel_to_coords(w, x, y) - list(tk_call_without_enc('::Plotchart::coordsToPixel', w.path, x, y)) - end - - def self.determine_scale(w, xmax, ymax) - tk_call_without_enc('::Plotchart::determineScale', w.path, xmax, ymax) - end - - def self.set_zoom_pan(w) - tk_call_without_enc('::Plotchart::setZoomPan', w.path) - end - - ############################ - module ChartMethod - include TkCore - - def title(str) - tk_call_without_enc(@chart, 'title', _get_eval_enc_str(str)) - self - end - - def save_plot(filename) - tk_call_without_enc(@chart, 'saveplot', filename) - self - end - - def xtext(str) - tk_call_without_enc(@chart, 'xtext', _get_eval_enc_str(str)) - self - end - - def ytext(str) - tk_call_without_enc(@chart, 'ytext', _get_eval_enc_str(str)) - self - end - - def xconfig(key, value=None) - if key.kind_of?(Hash) - tk_call_without_enc(@chart, 'xconfig', *hash_kv(key, true)) - else - tk_call_without_enc(@chart, 'xconfig', - "-#{key}", _get_eval_enc_str(value)) - end - self - end - - def yconfig(key, value=None) - if key.kind_of?(Hash) - tk_call_without_enc(@chart, 'yconfig', *hash_kv(key, true)) - else - tk_call_without_enc(@chart, 'yconfig', - "-#{key}", _get_eval_enc_str(value)) - end - self - end - - ############################ - def view_port(*args) # args := pxmin, pymin, pxmax, pymax - tk_call_without_enc('::Plotchart::viewPort', @path, *(args.flatten)) - self - end - - def world_coordinates(*args) # args := xmin, ymin, xmax, ymax - tk_call_without_enc('::Plotchart::worldCoordinates', - @path, *(args.flatten)) - self - end - - def world_3D_coordinates(*args) - # args := xmin, ymin, zmin, xmax, ymax, zmax - tk_call_without_enc('::Plotchart::world3DCoordinates', - @path, *(args.flatten)) - self - end - - def coords_to_pixel(x, y) - list(tk_call_without_enc('::Plotchart::coordsToPixel', @path, x, y)) - end - - def coords_3D_to_pixel(x, y, z) - list(tk_call_without_enc('::Plotchart::coords3DToPixel', @path, x, y, z)) - end - - def polar_coordinates(radmax) - tk_call_without_enc('::Plotchart::polarCoordinates', @path, radmax) - self - end - - def polar_to_pixel(rad, phi) - list(tk_call_without_enc('::Plotchart::polarToPixel', @path, rad, phi)) - end - - def pixel_to_coords(x, y) - list(tk_call_without_enc('::Plotchart::coordsToPixel', @path, x, y)) - end - - def determine_scale(xmax, ymax) - tk_call_without_enc('::Plotchart::determineScale', @path, xmax, ymax) - self - end - - def set_zoom_pan() - tk_call_without_enc('::Plotchart::setZoomPan', @path) - self - end - end - - ############################ - class XYPlot < TkCanvas - include ChartMethod - - TkCommandNames = [ - 'canvas'.freeze, - '::Plotchart::createXYPlot'.freeze - ].freeze - - def initialize(*args) # args := ([parent,] xaxis, yaxis [, keys]) - # xaxis := Array of [minimum, maximum, stepsize] - # yaxis := Array of [minimum, maximum, stepsize] - if args[0].kind_of?(Array) - @xaxis = args.shift - @yaxis = args.shift - - super(*args) # create canvas widget - else - parent = args.shift - - @xaxis = args.shift - @yaxis = args.shift - - if parent.kind_of?(TkCanvas) - @path = parent.path - else - super(parent, *args) # create canvas widget - end - end - - @chart = _create_chart - end - - def _create_chart - p self.class::TkCommandNames[1] if $DEBUG - tk_call_without_enc(self.class::TkCommandNames[1], @path, - array2tk_list(@xaxis), array2tk_list(@yaxis)) - end - private :_create_chart - - def __destroy_hook__ - Tk::Tcllib::Plotchart::PlotSeries::SeriesID_TBL.delete(@path) - end - - def plot(series, x, y) - tk_call_without_enc(@chart, 'plot', _get_eval_enc_str(series), x, y) - self - end - - def dataconfig(series, key, value=None) - if key.kind_of?(Hash) - tk_call_without_enc(@chart, 'dataconfig', series, *hash_kv(key, true)) - else - tk_call_without_enc(@chart, 'dataconfig', series, - "-#{key}", _get_eval_enc_str(value)) - end - end - end - - ############################ - class Stripchart < XYPlot - TkCommandNames = [ - 'canvas'.freeze, - '::Plotchart::createStripchart'.freeze - ].freeze - end - - ############################ - class PolarPlot < TkCanvas - include ChartMethod - - TkCommandNames = [ - 'canvas'.freeze, - '::Plotchart::createPolarplot'.freeze - ].freeze - - def initialize(*args) # args := ([parent,] radius_data [, keys]) - # radius_data := Array of [maximum_radius, stepsize] - if args[0].kind_of?(Array) - @radius_data = args.shift - - super(*args) # create canvas widget - else - parent = args.shift - - @radius_data = args.shift - - if parent.kind_of?(TkCanvas) - @path = parent.path - else - super(parent, *args) # create canvas widget - end - end - - @chart = _create_chart - end - - def _create_chart - p self.class::TkCommandNames[1] if $DEBUG - tk_call_without_enc(self.class::TkCommandNames[1], @path, - array2tk_list(@radius_data)) - end - private :_create_chart - - def __destroy_hook__ - Tk::Tcllib::Plotchart::PlotSeries::SeriesID_TBL.delete(@path) - end - - def plot(series, radius, angle) - tk_call_without_enc(@chart, 'plot', _get_eval_enc_str(series), - radius, angle) - self - end - - def dataconfig(series, key, value=None) - if key.kind_of?(Hash) - tk_call_without_enc(@chart, 'dataconfig', series, *hash_kv(key, true)) - else - tk_call_without_enc(@chart, 'dataconfig', series, - "-#{key}", _get_eval_enc_str(value)) - end - end - end - Polarplot = PolarPlot - - ############################ - class IsometricPlot < TkCanvas - include ChartMethod - - TkCommandNames = [ - 'canvas'.freeze, - '::Plotchart::createIsometricPlot'.freeze - ].freeze - - def initialize(*args) # args := ([parent,] xaxis, yaxis, [, step] [, keys]) - # xaxis := Array of [minimum, maximum] - # yaxis := Array of [minimum, maximum] - # step := Float of stepsize | "noaxes" | :noaxes - if args[0].kind_of?(Array) - @xaxis = args.shift - @yaxis = args.shift - - if args[0].kind_of?(Hash) - @stepsize = :noaxes - else - @stepsize = args.shift - end - - super(*args) # create canvas widget - else - parent = args.shift - - @xaxis = args.shift - @yaxis = args.shift - - if args[0].kind_of?(Hash) - @stepsize = :noaxes - else - @stepsize = args.shift - end - - if parent.kind_of?(TkCanvas) - @path = parent.path - else - super(parent, *args) # create canvas widget - end - end - - @chart = _create_chart - end - - def _create_chart - p self.class::TkCommandNames[1] if $DEBUG - tk_call_without_enc(self.class::TkCommandNames[1], @path, - array2tk_list(@xaxis), array2tk_list(@yaxis), - @stepsize) - end - private :_create_chart - - def plot(type, *args) - self.__send__("plot_#{type.to_s.tr('-', '_')}", *args) - end - - def plot_rectangle(*args) # args := x1, y1, x2, y2, color - tk_call_without_enc(@chart, 'plot', 'rectangle', *(args.flatten)) - self - end - - def plot_filled_rectangle(*args) # args := x1, y1, x2, y2, color - tk_call_without_enc(@chart, 'plot', 'filled-rectangle', *(args.flatten)) - self - end - - def plot_circle(*args) # args := xc, yc, radius, color - tk_call_without_enc(@chart, 'plot', 'circle', *(args.flatten)) - self - end - - def plot_filled_circle(*args) # args := xc, yc, radius, color - tk_call_without_enc(@chart, 'plot', 'filled-circle', *(args.flatten)) - self - end - end - Isometricplot = IsometricPlot - - ############################ - class Plot3D < TkCanvas - include ChartMethod - - TkCommandNames = [ - 'canvas'.freeze, - '::Plotchart::create3DPlot'.freeze - ].freeze - - def initialize(*args) # args := ([parent,] xaxis, yaxis, zaxis [, keys]) - # xaxis := Array of [minimum, maximum, stepsize] - # yaxis := Array of [minimum, maximum, stepsize] - # zaxis := Array of [minimum, maximum, stepsize] - if args[0].kind_of?(Array) - @xaxis = args.shift - @yaxis = args.shift - @zaxis = args.shift - - super(*args) # create canvas widget - else - parent = args.shift - - @xaxis = args.shift - @yaxis = args.shift - @zaxis = args.shift - - if parent.kind_of?(TkCanvas) - @path = parent.path - else - super(parent, *args) # create canvas widget - end - end - - @chart = _create_chart - end - - def _create_chart - p self.class::TkCommandNames[1] if $DEBUG - tk_call_without_enc(self.class::TkCommandNames[1], @path, - array2tk_list(@xaxis), - array2tk_list(@yaxis), - array2tk_list(@zaxis)) - end - private :_create_chart - - def plot_function(cmd=Proc.new) - Tk.ip_eval("proc #{@path}_#{@chart} {x y} {#{install_cmd(cmd)} $x $y}") - tk_call_without_enc(@chart, 'plotfunc', "#{@path}_#{@chart}") - self - end - - def grid_size(nxcells, nycells) - tk_call_without_enc(@chart, 'gridsize', nxcells, nycells) - self - end - - def plot_data(dat) - # dat has to be provided as a 2 level array. - # 1st level contains rows, drawn in y-direction, - # and each row is an array whose elements are drawn in x-direction, - # for the columns. - tk_call_without_enc(@chart, 'plotdata', dat) - self - end - - def colour(fill, border) - # configure the colours to use for polygon borders and inner area - tk_call_without_enc(@chart, 'colour', fill, border) - self - end - alias colours colour - alias colors colour - alias color colour - end - - ############################ - class Piechart < TkCanvas - include ChartMethod - - TkCommandNames = [ - 'canvas'.freeze, - '::Plotchart::createPiechart'.freeze - ].freeze - - def initialize(*args) # args := ([parent] [, keys]) - if args[0].kind_of?(TkCanvas) - parent = args.shift - @path = parent.path - else - super(*args) # create canvas widget - end - @chart = _create_chart - end - - def _create_chart - p self.class::TkCommandNames[1] if $DEBUG - tk_call_without_enc(self.class::TkCommandNames[1], @path) - end - private :_create_chart - - def plot(*dat) # argument is a list of [label, value] - tk_call_without_enc(@chart, 'plot', dat.flatten) - self - end - end - - ############################ - class Barchart < TkCanvas - include ChartMethod - - TkCommandNames = [ - 'canvas'.freeze, - '::Plotchart::createBarchart'.freeze - ].freeze - - def initialize(*args) - # args := ([parent,] xlabels, ylabels [, series] [, keys]) - # xlabels, ylabels := labels | axis ( depend on normal or horizontal ) - # labels := Array of [label, label, ...] - # (It determines the number of bars that will be plotted per series.) - # axis := Array of [minimum, maximum, stepsize] - # series := Integer number of data series | 'stacked' | :stacked - if args[0].kind_of?(Array) - @xlabels = args.shift - @ylabels = args.shift - - if args[0].kind_of?(Hash) - @series_size = :stacked - else - @series_size = args.shift - end - - super(*args) # create canvas widget - else - parent = args.shift - - @xlabels = args.shift - @ylabels = args.shift - - if args[0].kind_of?(Hash) - @series_size = :stacked - else - @series_size = args.shift - end - - if parent.kind_of?(TkCanvas) - @path = parent.path - else - super(parent, *args) # create canvas widget - end - end - - @chart = _create_chart - end - - def _create_chart - p self.class::TkCommandNames[1] if $DEBUG - tk_call_without_enc(self.class::TkCommandNames[1], @path, - array2tk_list(@xlabels), array2tk_list(@ylabels), - @series_size) - end - private :_create_chart - - def __destroy_hook__ - Tk::Tcllib::Plotchart::PlotSeries::SeriesID_TBL.delete(@path) - end - - def plot(series, dat, col=None) - tk_call_without_enc(@chart, 'plot', series, dat, col) - self - end - - def colours(*cols) - # set the colours to be used - tk_call_without_enc(@chart, 'colours', *cols) - self - end - alias colour colours - alias colors colours - alias color colours - end - - ############################ - class HorizontalBarchart < Barchart - TkCommandNames = [ - 'canvas'.freeze, - '::Plotchart::createHorizontalBarchart'.freeze - ].freeze - end - - ############################ - class Timechart < TkCanvas - include ChartMethod - - TkCommandNames = [ - 'canvas'.freeze, - '::Plotchart::createTimechart'.freeze - ].freeze - - def initialize(*args) - # args := ([parent,] time_begin, time_end, items [, keys]) - # time_begin := String of time format (e.g. "1 january 2004") - # time_end := String of time format (e.g. "1 january 2004") - # items := Expected/maximum number of items - # ( This determines the vertical spacing. ) - if args[0].kind_of?(Array) - @time_begin = args.shift - @time_end = args.shift - @items = args.shift - - super(*args) # create canvas widget - else - parent = args.shift - - @time_begin = args.shift - @time_end = args.shift - @items = args.shift - - if parent.kind_of?(TkCanvas) - @path = parent.path - else - super(parent, *args) # create canvas widget - end - end - - @chart = _create_chart - end - - def _create_chart - p self.class::TkCommandNames[1] if $DEBUG - tk_call_without_enc(self.class::TkCommandNames[1], @path, - @time_begin, @time_end, @items) - end - private :_create_chart - - def period(txt, time_begin, time_end, col=None) - tk_call_without_enc(@chart, 'period', txt, time_begin, time_end, col) - self - end - - def milestone(txt, time, col=None) - tk_call_without_enc(@chart, 'milestone', txt, time, col) - self - end - - def vertline(txt, time) - tk_call_without_enc(@chart, 'vertline', txt, time) - self - end - end - - ############################ - class PlotSeries < TkObject - SeriesID_TBL = TkCore::INTERP.create_table - Series_ID = ['series'.freeze, '00000'.taint].freeze - TkCore::INTERP.init_ip_env{ SeriesID_TBL.clear } - - def self.id2obj(chart, id) - path = chart.path - return id unless SeriesID_TBL[path] - SeriesID_TBL[path][id]? SeriesID_TBL[path][id]: id - end - - def initialize(chart, keys=nil) - @parent = @chart_obj = chart - @ppath = @chart_obj.path - @path = @series = @id = Series_ID.join(TkCore::INTERP._ip_id_) - # SeriesID_TBL[@id] = self - SeriesID_TBL[@ppath] = {} unless SeriesID_TBL[@ppath] - SeriesID_TBL[@ppath][@id] = self - Series_ID[1].succ! - dataconfig(keys) if keys.kind_of?(Hash) - end - - def plot(*args) - @chart_obj.plot(@series, *args) - end - - def dataconfig(key, value=None) - @chart_obj.dataconfig(@series, key, value) - end - end -end diff --git a/ext/tk/lib/tkextlib/tcllib/setup.rb b/ext/tk/lib/tkextlib/tcllib/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/tcllib/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/tcllib/style.rb b/ext/tk/lib/tkextlib/tcllib/style.rb deleted file mode 100644 index 9fc4e92329..0000000000 --- a/ext/tk/lib/tkextlib/tcllib/style.rb +++ /dev/null @@ -1,53 +0,0 @@ -# -# tkextlib/tcllib/style.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -# * Part of tcllib extension -# * select and use some 'style' of option (resource) DB -# - -require 'tk' -require 'tkextlib/tcllib.rb' - -module Tk::Tcllib - module Style - def self.package_version - begin - TkPackage.require('style') - rescue - '' - end - end - - def self.not_available - fail RuntimeError, "'tkextlib/tcllib/style' extension is not available on your current environment." - end - - def self.names - Tk::Tcllib::Style.not_available - end - - def self.use(style) - Tk::Tcllib::Style.not_available - end - end -end - -# TkPackage.require('style', '0.1') -TkPackage.require('style') - -module Tk::Tcllib - class << Style - undef not_available - end - - module Style - def self.names - tk_split_simplelist(tk_call('style::names')) - end - - def self.use(style) - tk_call('style::use', style) - end - end -end diff --git a/ext/tk/lib/tkextlib/tcllib/tkpiechart.rb b/ext/tk/lib/tkextlib/tcllib/tkpiechart.rb deleted file mode 100644 index 4e6008bb3b..0000000000 --- a/ext/tk/lib/tkextlib/tcllib/tkpiechart.rb +++ /dev/null @@ -1,287 +0,0 @@ -# -# tkextlib/tcllib/tkpiechart.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -# * Part of tcllib extension -# * Create 2D or 3D pies with labels in Tcl canvases -# - -require 'tk' -require 'tk/canvas' -require 'tkextlib/tcllib.rb' - -# TkPackage.require('tkpiechart', '6.6') -TkPackage.require('tkpiechart') - -module Tk - module Tcllib - module Tkpiechart - end - end -end - -module Tk::Tcllib::Tkpiechart - def self.package_version - begin - TkPackage.require('tkpiechart') - rescue - '' - end - end - - module ConfigMethod - include TkConfigMethod - - def __pathname - self.path + ';' + self.tag - end - private :__pathname - - def __cget_cmd - ['::switched::cget', self.tag] - end - - def __config_cmd - ['::switched::configure', self.tag] - end - private :__config_cmd - - def __configinfo_struct - {:key=>0, :alias=>nil, :db_name=>nil, :db_class=>nil, - :default_value=>1, :current_value=>2} - end - private :__configinfo_struct - end - - #################################### - class PieChartObj < TkcItem - include ConfigMethod - - def __font_optkeys - ['titlefont'] - end - private :__font_optkeys - end - - #################################### - class Pie < TkcItem - include ConfigMethod - - def create_self(x, y, width, height, keys=None) - if keys and keys != None - @tag_key = tk_call_without_enc('::stooop::new', 'pie', - @c, x, y, *hash_kv(keys, true)) - else - @tag_key = tk_call_without_enc('::stooop::new', 'pie', @c, x, y) - end - - @slice_tbl = {} - - id = "pie(#{@tag_key})" - - @tag = @tag_pie = TkcNamedTag(@c, id) - @tag_slices = TkcNamedTag(@c, "pieSlices(#{@tag_key})") - - id - end - private :create_self - - def tag_key - @tag_key - end - def tag - @tag - end - def canvas - @c - end - def _entry_slice(slice) - @slice_tbl[slice.to_eval] = slice - end - def _delete_slice(slice) - @slice_tbl.delete(slice.to_eval) - end - - def delete - tk_call_without_enc('::stooop::delete', @tag_key) - CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path] - self - end - - def new_slice(text=None) - Slice.new(self, text) - end - - def delete_slice(slice) - unless slice.kind_of?(Slice) - unless (slice = @slice_tbl[slice]) - return tk_call_without_enc('pie::deleteSlice', @tag_key, slice) - end - end - unless slice.kind_of?(Slice) && slice.pie == self - fail ArgumentError, "argument is not a slice of self" - end - slice.delete - end - - def selected_slices - tk_split_simplelist(tk_call_without_enc('pie::selectedSlices', - @tag_key)).collect{|slice| - @slice_tbl[slice] || Slice.new(:no_create, self, slice) - } - end - end - - #################################### - class Slice < TkcItem - include ConfigMethod - - def __config_cmd - ['::switched::configure', self.tag] - end - private :__config_cmd - - #------------------------ - - def initialize(pie, *args) - unless pie.kind_of?(Pie) && pie != :no_create - fail ArgumentError, "expects TkPiechart::Pie for 1st argument" - end - - if pie == :no_create - @pie, @tag_key = args - else - text = args[0] || None - @pie = pie - @tag_key = tk_call_without_enc('pie::newSlice', @pie.tag_key, text) - end - @parent = @c = @pie.canvas - @path = @parent.path - - @pie._entry_slice(self) - - @id = "slices(#{@tag_key})" - @tag = TkcNamedTag.new(@pie.canvas, @id) - - CItemID_TBL[@path] = {} unless CItemID_TBL[@path] - CItemID_TBL[@path][@id] = self - end - - def tag_key - @tag_key - end - def tag - @tag - end - def pie - @pie - end - - def delete - tk_call_without_enc('pie::deleteSlice', @pie.tag_key, @tag_key) - CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path] - @pie._delete_slice(self) - self - end - - def size(share, disp=None) - tk_call_without_enc('pie::sizeSlice', - @pie.tag_key, @tag_key, share, disp) - self - end - - def label(text) - tk_call_without_enc('pie::labelSlice', @pie.tag_key, @tag_key, text) - self - end - end - - #################################### - class BoxLabeler < TkcItem - include ConfigMethod - - def __config_cmd - ['::switched::configure', self.tag] - end - private :__config_cmd - - #------------------------ - - def create_self(keys=None) - if keys and keys != None - @tag_key = tk_call_without_enc('::stooop::new', 'pieBoxLabeler', - *hash_kv(keys, true)) - else - @tag_key = tk_call_without_enc('::stooop::new', 'pieBoxLabeler') - end - - id = "pieBoxLabeler(#{@tag_key})" - @tag = TkcNamedTag(@c, id) - - id - end - private :create_self - end - - #################################### - class PeripheralLabeler < TkcItem - include ConfigMethod - - def __font_optkeys - ['font', 'smallfont'] - end - private :__font_optkeys - - def __config_cmd - ['::switched::configure', self.tag] - end - private :__config_cmd - - #------------------------ - - def create_self(keys=None) - if keys and keys != None - @tag_key = tk_call_without_enc('::stooop::new', - 'piePeripheralLabeler', - *hash_kv(keys, true)) - else - @tag_key = tk_call_without_enc('::stooop::new', 'piePeripheralLabeler') - end - - id = "piePeripheralLabeler(#{@tag_key})" - @tag = TkcNamedTag(@c, id) - - id - end - private :create_self - end - - #################################### - class Label < TkcItem - include ConfigMethod - - def __config_cmd - ['::switched::configure', self.tag] - end - private :__config_cmd - - #------------------------ - - def create_self(x, y, keys=None) - if keys and keys != None - @tag_key = tk_call_without_enc('::stooop::new', 'canvasLabel', - @c, x, y, width, height, - *hash_kv(keys, true)) - else - @tag_key = tk_call_without_enc('::stooop::new', 'canvasLabel', - @c, x, y, width, height) - end - - id = "canvasLabel(#{@tag_key})" - @tag = TkcNamedTag(@c, id) - - id - end - private :create_self - end -end diff --git a/ext/tk/lib/tkextlib/tclx.rb b/ext/tk/lib/tkextlib/tclx.rb deleted file mode 100644 index 3a4ff27644..0000000000 --- a/ext/tk/lib/tkextlib/tclx.rb +++ /dev/null @@ -1,13 +0,0 @@ -# -# TclX support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tclx/setup.rb' - -# load library -require 'tkextlib/tclx/tclx' diff --git a/ext/tk/lib/tkextlib/tclx/setup.rb b/ext/tk/lib/tkextlib/tclx/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/tclx/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/tclx/tclx.rb b/ext/tk/lib/tkextlib/tclx/tclx.rb deleted file mode 100644 index 760ebd92b1..0000000000 --- a/ext/tk/lib/tkextlib/tclx/tclx.rb +++ /dev/null @@ -1,59 +0,0 @@ -# -# tclx/tclx.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tclx/setup.rb' - -# TkPackage.require('Tclx', '8.0') -TkPackage.require('Tclx') - -module Tk - module TclX - def self.package_version - begin - TkPackage.require('Tclx') - rescue - '' - end - end - - def self.infox(*args) - Tk.tk_call('infox', *args) - end - - ############################## - - class XPG3_MsgCat - class << self - alias open new - end - - def initialize(catname, fail_mode=false) - if fail_mode - @msgcat_id = Tk.tk_call('catopen', '-fail', catname) - else - @msgcat_id = Tk.tk_call('catopen', '-nofail', catname) - end - end - - def close(fail_mode=false) - if fail_mode - Tk.tk_call('catclose', '-fail', @msgcat_id) - else - Tk.tk_call('catclose', '-nofail', @msgcat_id) - end - self - end - - def get(setnum, msgnum, defaultstr) - Tk.tk_call('catgets', @msgcat_id, setnum, msgnum, defaultstr) - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tile.rb b/ext/tk/lib/tkextlib/tile.rb deleted file mode 100644 index 80a9083694..0000000000 --- a/ext/tk/lib/tkextlib/tile.rb +++ /dev/null @@ -1,69 +0,0 @@ -# -# Tile theme engin (tile widget set) support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# library directory -require 'tkextlib/tile/setup.rb' - -# load package -# TkPackage.require('tile', '0.4') -TkPackage.require('tile') - -# autoload -module Tk - module Tile - TkComm::TkExtlibAutoloadModule.unshift(self) - - def self.package_version - begin - TkPackage.require('tile') - rescue - '' - end - end - - module TileWidget - def instate(state, script=nil, &b) - if script - tk_send('instate', state, script) - elsif b - tk_send('instate', state, Proc.new(&b)) - else - bool(tk_send('instate', state)) - end - end - - def state(state=nil) - if state - tk_send('state', state) - else - list(tk_send('state')) - end - end - end - - ###################################### - - autoload :TButton, 'tkextlib/tile/tbutton' - - autoload :TCheckButton, 'tkextlib/tile/tcheckbutton' - autoload :TCheckbutton, 'tkextlib/tile/tcheckbutton' - - autoload :TLabel, 'tkextlib/tile/tlabel' - - autoload :TMenubutton, 'tkextlib/tile/tmenubutton' - - autoload :TNotebook, 'tkextlib/tile/tnotebook' - - autoload :TRadioButton, 'tkextlib/tile/tradiobutton' - autoload :TRadiobutton, 'tkextlib/tile/tradiobutton' - - autoload :Style, 'tkextlib/tile/style' - end -end diff --git a/ext/tk/lib/tkextlib/tile/setup.rb b/ext/tk/lib/tkextlib/tile/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/tile/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/tile/style.rb b/ext/tk/lib/tkextlib/tile/style.rb deleted file mode 100644 index 474c4f21b9..0000000000 --- a/ext/tk/lib/tkextlib/tile/style.rb +++ /dev/null @@ -1,69 +0,0 @@ -# -# style commands -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' -require 'tkextlib/tile.rb' - -module Tk - module Tile - module Style - end - end -end - -module Tk::Tile::Style -end - -class << Tk::Tile::Style - def default(style, keys=nil) - if keys && keys != None - tk_call('style', 'default', style, *hash_kv(keys)) - else - tk_call('style', 'default', style) - end - end - - def map(style, keys=nil) - if keys && keys != None - tk_call('style', 'map', style, *hash_kv(keys)) - else - tk_call('style', 'map', style) - end - end - - def layout(style, spec=nil) - if spec - tk_call('style', 'layout', style, spec) - else - tk_call('style', 'layout', style) - end - end - - def element_create(name, type, *args) - tk_call('style', 'element', 'create', name, type, *args) - end - - def element_names() - list(tk_call('style', 'element', 'names')) - end - - def theme_create(name, keys=nil) - if keys && keys != None - tk_call('style', 'theme', 'create', name, type, *hash_kv(keys)) - else - tk_call('style', 'theme', 'create', name, type) - end - end - - def theme_settings(name, cmd=nil, &b) - end - - def theme_names() - list(tk_call('style', 'theme', 'names')) - end - - def theme_use(name) - tk_call('style', 'use', name) - end -end diff --git a/ext/tk/lib/tkextlib/tile/tbutton.rb b/ext/tk/lib/tkextlib/tile/tbutton.rb deleted file mode 100644 index b5c3475692..0000000000 --- a/ext/tk/lib/tkextlib/tile/tbutton.rb +++ /dev/null @@ -1,30 +0,0 @@ -# -# tbutton widget -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' -require 'tkextlib/tile.rb' - -module Tk - module Tile - class TButton < TkButton - end - end -end - -class Tk::Tile::TButton < TkButton - include Tk::Tile::TileWidget - - TkCommandNames = ['tbutton'.freeze].freeze - WidgetClassName = 'TButton'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self(keys) - if keys and keys != None - tk_call_without_enc('tbutton', @path, *hash_kv(keys, true)) - else - tk_call_without_enc('tbutton', @path) - end - end - private :create_self -end diff --git a/ext/tk/lib/tkextlib/tile/tcheckbutton.rb b/ext/tk/lib/tkextlib/tile/tcheckbutton.rb deleted file mode 100644 index 4ba77d95d3..0000000000 --- a/ext/tk/lib/tkextlib/tile/tcheckbutton.rb +++ /dev/null @@ -1,31 +0,0 @@ -# -# tcheckbutton widget -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' -require 'tkextlib/tile.rb' - -module Tk - module Tile - class TCheckButton < TkCheckButton - end - TCheckbutton = TCheckButton - end -end - -class Tk::Tile::TCheckButton < TkCheckButton - include Tk::Tile::TileWidget - - TkCommandNames = ['tcheckbutton'.freeze].freeze - WidgetClassName = 'TCheckbutton'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self(keys) - if keys and keys != None - tk_call_without_enc('tcheckbutton', @path, *hash_kv(keys, true)) - else - tk_call_without_enc('tcheckbutton', @path) - end - end - private :create_self -end diff --git a/ext/tk/lib/tkextlib/tile/tlabel.rb b/ext/tk/lib/tkextlib/tile/tlabel.rb deleted file mode 100644 index d2eaf45273..0000000000 --- a/ext/tk/lib/tkextlib/tile/tlabel.rb +++ /dev/null @@ -1,30 +0,0 @@ -# -# tlabel widget -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' -require 'tkextlib/tile.rb' - -module Tk - module Tile - class TLabel < TkLabel - end - end -end - -class Tk::Tile::TLabel < TkLabel - include Tk::Tile::TileWidget - - TkCommandNames = ['tlabel'.freeze].freeze - WidgetClassName = 'TLabel'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self(keys) - if keys and keys != None - tk_call_without_enc('tlabel', @path, *hash_kv(keys, true)) - else - tk_call_without_enc('tlabel', @path) - end - end - private :create_self -end diff --git a/ext/tk/lib/tkextlib/tile/tmenubutton.rb b/ext/tk/lib/tkextlib/tile/tmenubutton.rb deleted file mode 100644 index 332db2b74e..0000000000 --- a/ext/tk/lib/tkextlib/tile/tmenubutton.rb +++ /dev/null @@ -1,30 +0,0 @@ -# -# tmenubutton widget -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' -require 'tkextlib/tile.rb' - -module Tk - module Tile - class TMenubutton < TkMenubutton - end - end -end - -class Tk::Tile::TMenubutton < TkMenubutton - include Tk::Tile::TileWidget - - TkCommandNames = ['tmenubutton'.freeze].freeze - WidgetClassName = 'TMenubutton'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self(keys) - if keys and keys != None - tk_call_without_enc('tmenubutton', @path, *hash_kv(keys, true)) - else - tk_call_without_enc('tmenubutton', @path) - end - end - private :create_self -end diff --git a/ext/tk/lib/tkextlib/tile/tnotebook.rb b/ext/tk/lib/tkextlib/tile/tnotebook.rb deleted file mode 100644 index c693d5ce2b..0000000000 --- a/ext/tk/lib/tkextlib/tile/tnotebook.rb +++ /dev/null @@ -1,92 +0,0 @@ -# -# tnotebook widget -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' -require 'tkextlib/tile.rb' - -module Tk - module Tile - class TNotebook < TkWindow - end - end -end - -class Tk::Tile::TNotebook < TkWindow - ################################ - include TkItemConfigMethod - - def __item_cget_cmd(id) - [self.path, 'tabcget', id] - end - private :__item_cget_cmd - - def __item_config_cmd(id) - [self.path, 'tabconfigure', id] - end - private :__item_config_cmd - - - def __item_listval_optkeys - [] - end - private :__item_listval_optkeys - - def __item_methodcall_optkeys # { key=>method, ... } - {} - end - private :__item_listval_optkeys - - alias tabcget itemcget - alias tabconfigure itemconfigure - alias tabconfiginfo itemconfiginfo - alias current_tabconfiginfo current_itemconfiginfo - ################################ - - include Tk::Tile::TileWidget - - TkCommandNames = ['tnotebook'.freeze].freeze - WidgetClassName = 'TNotebook'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self(keys) - if keys and keys != None - tk_call_without_enc('tnotebook', @path, *hash_kv(keys, true)) - else - tk_call_without_enc('tnotebook', @path) - end - end - private :create_self - - def enable_traversal() - tk_call_without_end('tile::enableNotebookTraversal', @path) - self - end - - def add(child, keys=nil) - if keys && keys != None - tk_send_without_enc('add', _epath(child), *hash_kv(keys)) - else - tk_send_without_enc('add', _epath(child)) - end - self - end - - def forget(idx) - tk_send('forget', idx) - self - end - - def index(idx) - number(tk_send('index', idx)) - end - - def select(idx) - tk_send('select', idx) - self - end - - def tabs - list(tk_send('tabs')) - end -end diff --git a/ext/tk/lib/tkextlib/tile/tradiobutton.rb b/ext/tk/lib/tkextlib/tile/tradiobutton.rb deleted file mode 100644 index 66cba62960..0000000000 --- a/ext/tk/lib/tkextlib/tile/tradiobutton.rb +++ /dev/null @@ -1,31 +0,0 @@ -# -# tradiobutton widget -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' -require 'tkextlib/tile.rb' - -module Tk - module Tile - class TRadioButton < TkRadioButton - end - TRadiobutton = TRadioButton - end -end - -class Tk::Tile::TRadioButton < TkRadioButton - include Tk::Tile::TileWidget - - TkCommandNames = ['tradiobutton'.freeze].freeze - WidgetClassName = 'TRadiobutton'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self(keys) - if keys and keys != None - tk_call_without_enc('tradiobutton', @path, *hash_kv(keys, true)) - else - tk_call_without_enc('tradiobutton', @path) - end - end - private :create_self -end diff --git a/ext/tk/lib/tkextlib/tkDND.rb b/ext/tk/lib/tkextlib/tkDND.rb deleted file mode 100644 index 5d52e34418..0000000000 --- a/ext/tk/lib/tkextlib/tkDND.rb +++ /dev/null @@ -1,18 +0,0 @@ -# -# TkDND (Tk Drag & Drop Extension) support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkDND/setup.rb' - -module Tk - module TkDND - autoload :DND, 'tkextlib/tkDND/tkdnd' - autoload :Shape, 'tkextlib/tkDND/shape' - end -end diff --git a/ext/tk/lib/tkextlib/tkDND/setup.rb b/ext/tk/lib/tkextlib/tkDND/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/tkDND/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/tkDND/shape.rb b/ext/tk/lib/tkextlib/tkDND/shape.rb deleted file mode 100644 index 7187f0a3b3..0000000000 --- a/ext/tk/lib/tkextlib/tkDND/shape.rb +++ /dev/null @@ -1,116 +0,0 @@ -# -# tkextlib/tkDND/shape.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkDND/setup.rb' - -# TkPackage.require('shape', '0.3') -TkPackage.require('shape') - -module Tk - module TkDND - module Shape -=begin - def self.package_version - begin - TkPackage.require('shape') - rescue - '' - end - end -=end - def self.package_version - Tk.tk_call('set', 'shape_version') - end - alias shape_version package_version - - def self.package_patchlevel - Tk.tk_call('set', 'shape_patchlevel') - end - alias shape_patchlevel package_patchlevel - - def self.version - tk_call('shape', 'version') - end - alias xshape_version version - - ############################ - - def shape_bounds(kind=nil) - if kind - ret = tk_call('shape', 'bounds', @path, "-#{kind}") - else - ret = tk_call('shape', 'bounds', @path) - end - if ret == "" - nil - else - list(ret) - end - end - - def shape_get(kind=nil) - if kind - list(tk_call('shape', 'get', @path, "-#{kind}")) - else - list(tk_call('shape', 'get', @path)) - end - end - - def shape_offset(x, y, kind=nil) - if kind - tk_call('shape', 'get', @path, "-#{kind}", x, y) - else - tk_call('shape', 'get', @path, x, y) - end - self - end - - def _parse_shapespec_param(args) - cmd = [] - - kind_keys = ['bounding', 'clip', 'both'] - offset_keys = ['offset'] - srckind_keys = ['bitmap', 'rectangles', 'reset', 'test', 'window'] - - cmd << "-#{args.shift}" if kind_keys.member?(args[0].to_s) - - if offset_keys.member?(args[0].to_s) - cmd << "-#{args.shift}" - cmd << args.shift # xOffset - cmd << args.shift # yOffset - end - - if srckind_keys.member?(args[0].to_s) - cmd << "-#{args.shift}" - end - - cmd.concat(args) - - cmd - end - private :_parse_shapespec_param - - def shape_set(*args) # ?kind? ?offset <x> <y>? srckind ?arg ...? - tk_call('shape', 'set', @path, *(_parse_shapespec_param(args))) - self - end - - def shape_update(op, *args) # ?kind? ?offset <x> <y>? srckind ?arg ...? - tk_call('shape', 'update', @path, op, *(_parse_shapespec_param(args))) - self - end - end - end -end - -class TkWindow - include Tk::TkDND::Shape -end diff --git a/ext/tk/lib/tkextlib/tkDND/tkdnd.rb b/ext/tk/lib/tkextlib/tkDND/tkdnd.rb deleted file mode 100644 index 78381f8df0..0000000000 --- a/ext/tk/lib/tkextlib/tkDND/tkdnd.rb +++ /dev/null @@ -1,124 +0,0 @@ -# -# tkextlib/tkDND/tkdnd.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkDND/setup.rb' - -TkPackage.require('tkdnd') - -module Tk - module TkDND - def self.package_version - begin - TkPackage.require('tkdnd') - rescue - '' - end - end - - class DND_Subst < TkUtil::CallbackSubst - KEY_TBL = [ - [ ?a, ?l, :actions ], - [ ?A, ?s, :action ], - [ ?b, ?L, :codes ], - [ ?c, ?s, :code ], - [ ?d, ?l, :descriptions ], - [ ?D, ?l, :data ], - [ ?L, ?l, :source_types ], - [ ?m, ?l, :modifiers ], - [ ?t, ?l, :types ], - [ ?T, ?s, :type ], - [ ?W, ?w, :widget ], - [ ?x, ?n, :x ], - [ ?X, ?n, :x_root ], - [ ?y, ?n, :y ], - [ ?Y, ?n, :y_root ], - nil - ] - - PROC_TBL = [ - [ ?n, TkComm.method(:num_or_str) ], - [ ?s, TkComm.method(:string) ], - [ ?l, TkComm.method(:list) ], - [ ?L, TkComm.method(:simplelist) ], - [ ?w, TkComm.method(:window) ], - nil - ] - - # setup tables - _setup_subst_table(KEY_TBL, PROC_TBL); - end - - module DND - def self.version - begin - TkPackage.require('tkdnd') - rescue - '' - end - end - - def dnd_bindtarget_info(type=nil, event=nil) - if event - procedure(tk_call('dnd', 'bindtarget', @path, type, event)) - elsif type - procedure(tk_call('dnd', 'bindtarget', @path, type)) - else - simplelist(tk_call('dnd', 'bindtarget', @path)) - end - end - - def dnd_bindtarget(type, event, cmd=Proc.new, prior=50, *args) - event = tk_event_sequence(event) - if prior.kind_of?(Numeric) - tk_call('dnd', 'bindtarget', @path, type, event, - install_bind_for_event_class(DND_Subst, cmd, *args), - prior) - else - tk_call('dnd', 'bindtarget', @path, type, event, - install_bind_for_event_class(DND_Subst, cmd, prior, *args)) - end - self - end - - def dnd_cleartarget - tk_call('dnd', 'cleartarget', @path) - self - end - - def dnd_bindsource_info(type=nil) - if type - procedure(tk_call('dnd', 'bindsource', @path, type)) - else - simplelist(tk_call('dnd', 'bindsource', @path)) - end - end - - def dnd_bindsource(type, cmd=Proc.new, prior=None) - tk_call('dnd', 'bindsource', @path, type, cmd, prior) - self - end - - def dnd_clearsource() - tk_call('dnd', 'clearsource', @path) - self - end - - def dnd_drag(keys=nil) - tk_call('dnd', 'drag', @path, *hash_kv(keys)) - self - end - end - end -end - -class TkWindow - include Tk::TkDND::DND -end diff --git a/ext/tk/lib/tkextlib/tkHTML.rb b/ext/tk/lib/tkextlib/tkHTML.rb deleted file mode 100644 index 5fddde72ff..0000000000 --- a/ext/tk/lib/tkextlib/tkHTML.rb +++ /dev/null @@ -1,13 +0,0 @@ -# -# TkHtml support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkHTML/setup.rb' - -# load library -require 'tkextlib/tkHTML/htmlwidget' diff --git a/ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb b/ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb deleted file mode 100644 index b9a203575a..0000000000 --- a/ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb +++ /dev/null @@ -1,433 +0,0 @@ -# -# tkextlib/tkHTML/htmlwidget.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkHTML/setup.rb' - -# TkPackage.require('Tkhtml', '2.0') -TkPackage.require('Tkhtml') - -module Tk - class HTML_Widget < TkWindow - def self.package_version - begin - TkPackage.require('Tkhtml') - rescue - '' - end - end - - class ClippingWindow < TkWindow - end - end -end - -class Tk::HTML_Widget::ClippingWindow - WidgetClassName = 'HtmlClip'.freeze - WidgetClassNames[WidgetClassName] = self - - HtmlClip_TBL = TkCore::INTERP.create_table - TkCore::INTERP.init_ip_env{ HtmlClip_TBL.clear } - - def self.new(parent, keys={}) - if parent.kind_of?(Hash) - keys = TkComm._symbolkey2str(parent) - parent = keys.delete('parent') - end - - if parent.kind_of?(String) - ppath = parent.path - elsif parent - ppath = parent - else - ppath = '' - end - return HtmlClip_TBL[ppath] if HtmlClip_TBL[ppath] - - widgetname = keys.delete('widgetname') - if widgetname =~ /^(.*)\.[^.]+$/ - ppath2 = $1 - if ppath2[0] != ?. - ppath2 = ppath + '.' + ppath2 - end - return HtmlClip_TBL[ppath2] if HtmlClip_TBL[ppath2] - - ppath = ppath2 - end - - parent = TkComm._genobj_for_tkwidget(ppath) - unless parent.kind_of?(Tk::HTML_Widget) - fail ArgumentError, "parent must be a Tk::HTML_Widget instance" - end - - super(parent) - end - - def initialize(parent) - @parent = parent - @ppath = parent.path - @path = @id = @ppath + '.x' - HtmlClip_TBL[@ppath] = self - end - - def method_missing(m, *args, &b) - @parent.__send__(m, *args, &b) - end -end - -class Tk::HTML_Widget - include Scrollable - - TkCommandNames = ['html'.freeze].freeze - WidgetClassName = 'Html'.freeze - WidgetClassNames[WidgetClassName] = self - - def create_self(keys) - if keys and keys != None - tk_call_without_enc('html', @path, *hash_kv(keys, true)) - else - tk_call_without_enc('html', @path) - end - end - private :create_self - - ################################### - # class methods - ################################### - def self.reformat(src, dst, txt) - tk_call('html', 'reformat', src, dst, txt) - end - - def self.url_join(*args) # args := sheme authority path query fragment - tk_call('html', 'urljoin', *args) - end - - def self.url_split(uri) - tk_call('html', 'urlsplit', uri) - end - - def self.lockcopy(src, dst) - tk_call('html', 'lockcopy', src, dst) - end - - def self.gzip_file(file, dat) - tk_call('html', 'gzip', 'file', file, dat) - end - - def self.gunzip_file(file, dat) - tk_call('html', 'gunzip', 'file', filet) - end - - def self.gzip_data(dat) - tk_call('html', 'gzip', 'data', file, dat) - end - - def self.gunzip_data(dat) - tk_call('html', 'gunzip', 'data', filet) - end - - def self.base64_encode(dat) - tk_call('html', 'base64', 'encode', dat) - end - - def self.base64_decode(dat) - tk_call('html', 'base64', 'encode', dat) - end - - def self.text_format(dat, len) - tk_call('html', 'text', 'format', dat, len) - end - - def self.xor(cmd, *args) - tk_call('html', 'xor', cmd, *args) - end - - def self.stdchan(cmd, channel) - tk_call('html', 'stdchan', cmd, channel) - end - - def self.crc32(data) - tk_call('html', 'crc32', data) - end - - ################################### - # instance methods - ################################### - def clipping_window - ClippingWindow.new(self) - end - alias clipwin clipping_window - alias htmlclip clipping_window - - def bgimage(image, tid=None) - tk_send('bgimage', image, tid) - self - end - - def clear() - tk_send('clear') - self - end - - def coords(index=None, percent=None) - tk_send('coords', index, percent) - end - - def forminfo(*args) - tk_send('forminfo', *args) - end - alias form_info forminfo - - def href(x, y) - simplelist(tk_send('href', x, y)) - end - - def image_add(id, img) - tk_send('imageadd', id, img) - self - end - - def image_at(x, y) - tk_send('imageat', x, y) - end - - def images() - list(tk_send('images')) - end - - def image_set(id, num) - tk_send('imageset', id, num) - self - end - - def image_update(id, imgs) - tk_send('imageupdate', id, imgs) - self - end - - def index(idx, count=None, unit=None) - tk_send('index', idx, count, unit) - end - - def insert_cursor(idx) - tk_send('insert', idx) - end - - def names() - simple_list(tk_send('names')) - end - - def on_screen(id, x, y) - bool(tk_send('onscreen', id, x, y)) - end - - def over(x, y) - list(tk_send('over', x, y)) - end - - def over_markup(x, y) - list(tk_send('over', x, y, '-muponly')) - end - - def over_attr(x, y, attrs) - list(tk_send('overattr', x, y, attrs)) - end - - def parse(txt) - tk_send('parse', txt) - self - end - - def resolver(*uri_args) - tk_send('resolver', *uri_args) - end - - def selection_clear() - tk_send('selection', 'clear') - self - end - - def selection_set(first, last) - tk_send('selection', 'set', first, last) - self - end - - def refresh(*opts) - tk_send('refresh', *opts) - end - - def layout() - tk_send('layout') - end - - def sizewindow(*args) - tk_send('sizewindow', *args) - end - - def postscript(*args) - tk_send('postscript', *args) - end - - def source() - tk_send('source') - end - - def plain_text(first, last) - tk_send('text', 'ascii', first, last) - end - alias ascii_text plain_text - alias text_ascii plain_text - - def text_delete(first, last) - tk_send('text', 'delete', first, last) - self - end - - def html_text(first, last) - tk_send('text', 'html', first, last) - end - alias text_html html_text - - def text_insert(idx, txt) - tk_send('text', 'insert', idx, txt) - self - end - - def break_text(idx) - tk_send('text', 'break', idx) - end - alias text_break break_text - - def text_find(txt, *args) - tk_send('text', 'find', txt, *args) - end - - def text_table(idx, imgs=None, attrs=None) - tk_send('text', 'table', idx, imgs, attrs) - end - - def token_append(tag, *args) - tk_send('token', 'append', tag, *args) - self - end - - def token_delete(first, last=None) - tk_send('token', 'delete', first, last) - self - end - - def token_define(*args) - tk_send('token', 'defile', *args) - self - end - - def token_find(tag, *args) - list(tk_send('token', 'find', tag, *args)) - end - - def token_get(first, last=None) - list(tk_send('token', 'get', first, last)) - end - - def token_list(first, last=None) - list(tk_send('token', 'list', first, last)) - end - - def token_markup(first, last=None) - list(tk_send('token', 'markup', first, last)) - end - - def token_DOM(first, last=None) - list(tk_send('token', 'domtokens', first, last)) - end - alias token_dom token_DOM - alias token_domtokens token_DOM - alias token_dom_tokens token_DOM - - def token_get_end(idx) - tk_send('token', 'getend', idx) - end - alias token_getend token_get_end - - def token_offset(start, num1, num2) - list(tk_send('token', 'offset', start, num1, num2)) - end - - def token_get_attr(idx, name=None) - list(tk_send('token', 'attr', idx, name)) - end - - def token_set_attr(idx, name=None, val=None) - tk_send('token', 'attr', idx, name, val) - self - end - - def token_handler(tag, cmd=nil, &b) - cmd = Proc.new(&b) if !cmd && b - if cmd - tk_send('token', 'handler', tag, cmd) - return self - else - return tk_send('token', 'handler', tag) - end - end - - def token_insert(idx, tag, *args) - tk_send('token', 'insert', idx, tag, *args) - self - end - - def token_attrs(*args) - list(tk_send('token', 'attrs', *args)) - end - - def token_unique(*args) - list(tk_send('token', 'unique', *args)) - end - - def token_on_events(*args) - list(tk_send('token', 'onEvents', *args)) - end - - def dom_nameidx(tag, name) - number(tk_send('dom', 'nameidx', tag, name)) - end - alias dom_name_index dom_nameidx - - def dom_radioidx(tag, name) - number(tk_send('dom', 'radioidx', tag, name)) - end - alias dom_radio_index dom_radioidx - - def dom_id(*spec) - tk_send('dom', 'id', *spec) - end - - def dom_ids(*spec) - list(tk_send('dom', 'ids', *spec)) - end - - def dom_value(*spec) - list(tk_send('dom', 'value', *spec)) - end - - def dom_attr(idx) - tk_send('dom', 'attr', idx) - end - - def dom_formel(name) - tk_send('dom', 'formel', name) - end - alias dom_form_element dom_formel - - def dom_tree(idx, val) - list(tk_send('dom', 'tree', idx, val)) - end -end diff --git a/ext/tk/lib/tkextlib/tkHTML/setup.rb b/ext/tk/lib/tkextlib/tkHTML/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/tkHTML/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/tkimg.rb b/ext/tk/lib/tkextlib/tkimg.rb deleted file mode 100644 index ffeafbb58e..0000000000 --- a/ext/tk/lib/tkextlib/tkimg.rb +++ /dev/null @@ -1,31 +0,0 @@ -# -# TkImg extension support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# load all image format handlers -#TkPackage.require('Img', '1.3') -TkPackage.require('Img') - -module Tk - module Img - def self.package_version - begin - TkPackage.require('Img') - rescue - '' - end - end - end -end - -# autoload -autoload :TkPixmapImage, 'tkextlib/tkimg/pixmap' diff --git a/ext/tk/lib/tkextlib/tkimg/README b/ext/tk/lib/tkextlib/tkimg/README deleted file mode 100644 index 65d36365d0..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/README +++ /dev/null @@ -1,26 +0,0 @@ - - [ Tcl/Tk Image formats (TkImg) support ] - -TkImg contains a collection of format handlers for the Tk photo -image type, and a new image type, pixmaps. - -Supported formats of TkImg version 1.3 are -------------------------------------------------------- - bmp : Windows Bitmap Format - gif : Graphics Interchange Format - ico : Windows Icon Format - jpeg : Joint Picture Expert Group format - pcx : Paintbrush Format - pixmap : Pixmap Image type - png : Portable Network Graphics format - ppm : Portable Pixmap format - ps : Adobe PostScript Format - sgi : SGI Native Format - sun : Sun Raster Format - tga : Truevision Targa Format - tiff : Tagged Image File Format - window : Tk Windows - xbm : X Window Bitmap Format - xpm : X Window Pixmap Format -------------------------------------------------------- - diff --git a/ext/tk/lib/tkextlib/tkimg/bmp.rb b/ext/tk/lib/tkextlib/tkimg/bmp.rb deleted file mode 100644 index 581483f8f4..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/bmp.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'bmp' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -#TkPackage.require('img::bmp', '1.3') -TkPackage.require('img::bmp') - -module Tk - module Img - module BMP - def self.package_version - begin - TkPackage.require('img::bmp') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/gif.rb b/ext/tk/lib/tkextlib/tkimg/gif.rb deleted file mode 100644 index 6ef18f8e90..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/gif.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'gif' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::gif', '1.3') -TkPackage.require('img::gif') - -module Tk - module Img - module GIF - def self.package_version - begin - TkPackage.require('img::gif') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/ico.rb b/ext/tk/lib/tkextlib/tkimg/ico.rb deleted file mode 100644 index 1e3cb5f497..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/ico.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'ico' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::ico', '1.3') -TkPackage.require('img::ico') - -module Tk - module Img - module ICO - def self.package_version - begin - TkPackage.require('img::ico') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/jpeg.rb b/ext/tk/lib/tkextlib/tkimg/jpeg.rb deleted file mode 100644 index 017c93ee0e..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/jpeg.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'jpeg' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::jpeg', '1.3') -TkPackage.require('img::jpeg') - -module Tk - module Img - module JPEG - def self.package_version - begin - TkPackage.require('img::jpeg') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/pcx.rb b/ext/tk/lib/tkextlib/tkimg/pcx.rb deleted file mode 100644 index e924d48869..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/pcx.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'pcx' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)# - -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::pcx', '1.3') -TkPackage.require('img::pcx') - -module Tk - module Img - module PCX - def self.package_version - begin - TkPackage.require('img::pcx') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/pixmap.rb b/ext/tk/lib/tkextlib/tkimg/pixmap.rb deleted file mode 100644 index f9aaa65a9b..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/pixmap.rb +++ /dev/null @@ -1,39 +0,0 @@ -# -# TkImg - format 'pixmap' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::pixmap', '1.3') -TkPackage.require('img::pixmap') - -module Tk - module Img - module PIXMAP - def self.package_version - begin - TkPackage.require('img::pixmap') - rescue - '' - end - end - end - end -end - -class TkPixmapImage<TkImage - def self.version - Tk::Img::PIXMAP.version - end - - def initialize(*args) - @type = 'pixmap' - super - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/png.rb b/ext/tk/lib/tkextlib/tkimg/png.rb deleted file mode 100644 index b155836395..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/png.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'png' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::png', '1.3') -TkPackage.require('img::png') - -module Tk - module Img - module PNG - def self.package_version - begin - TkPackage.require('img::png') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/ppm.rb b/ext/tk/lib/tkextlib/tkimg/ppm.rb deleted file mode 100644 index df56baee4a..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/ppm.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'ppm' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::ppm', '1.3') -TkPackage.require('img::ppm') - -module Tk - module Img - module PPM - def self.package_version - begin - TkPackage.require('img::ppm') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/ps.rb b/ext/tk/lib/tkextlib/tkimg/ps.rb deleted file mode 100644 index 3025066eb4..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/ps.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'ps' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::ps', '1.3') -TkPackage.require('img::ps') - -module Tk - module Img - module PS - def self.package_version - begin - TkPackage.require('img::ps') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/setup.rb b/ext/tk/lib/tkextlib/tkimg/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/tkimg/sgi.rb b/ext/tk/lib/tkextlib/tkimg/sgi.rb deleted file mode 100644 index e505c87e8b..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/sgi.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'sgi' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::sgi', '1.3') -TkPackage.require('img::sgi') - -module Tk - module Img - module SGI - def self.package_version - begin - TkPackage.require('img::sgi') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/sun.rb b/ext/tk/lib/tkextlib/tkimg/sun.rb deleted file mode 100644 index 25bfea8fb7..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/sun.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'sun' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::sun', '1.3') -TkPackage.require('img::sun') - -module Tk - module Img - module SUN - def self.package_version - begin - TkPackage.require('img::sun') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/tga.rb b/ext/tk/lib/tkextlib/tkimg/tga.rb deleted file mode 100644 index e3f84c3714..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/tga.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'tga' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::tga', '1.3') -TkPackage.require('img::tga') - -module Tk - module Img - module TGA - def self.package_version - begin - TkPackage.require('img::tga') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/tiff.rb b/ext/tk/lib/tkextlib/tkimg/tiff.rb deleted file mode 100644 index e7e12406ac..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/tiff.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'tiff' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::tiff', '1.3') -TkPackage.require('img::tiff') - -module Tk - module Img - module TIFF - def self.package_version - begin - TkPackage.require('img::tiff') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/window.rb b/ext/tk/lib/tkextlib/tkimg/window.rb deleted file mode 100644 index 00ed7d1b86..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/window.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'window' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::window', '1.3') -TkPackage.require('img::window') - -module Tk - module Img - module WINDOW - def self.package_version - begin - TkPackage.require('img::window') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/xbm.rb b/ext/tk/lib/tkextlib/tkimg/xbm.rb deleted file mode 100644 index 08b1b9876b..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/xbm.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'xbm' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::xbm', '1.3') -TkPackage.require('img::xbm') - -module Tk - module Img - module XBM - def self.package_version - begin - TkPackage.require('img::xbm') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tkimg/xpm.rb b/ext/tk/lib/tkextlib/tkimg/xpm.rb deleted file mode 100644 index e29c1d554f..0000000000 --- a/ext/tk/lib/tkextlib/tkimg/xpm.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# TkImg - format 'xpm' -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tkimg/setup.rb' - -# TkPackage.require('img::xpm', '1.3') -TkPackage.require('img::xpm') - -module Tk - module Img - module XPM - def self.package_version - begin - TkPackage.require('img::xpm') - rescue - '' - end - end - end - end -end diff --git a/ext/tk/lib/tkextlib/tktable.rb b/ext/tk/lib/tkextlib/tktable.rb deleted file mode 100644 index 385eb13497..0000000000 --- a/ext/tk/lib/tkextlib/tktable.rb +++ /dev/null @@ -1,14 +0,0 @@ -# -# TkTable support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tktable/setup.rb' - -# load library -require 'tkextlib/tktable/tktable' diff --git a/ext/tk/lib/tkextlib/tktable/setup.rb b/ext/tk/lib/tkextlib/tktable/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/tktable/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/tktable/tktable.rb b/ext/tk/lib/tkextlib/tktable/tktable.rb deleted file mode 100644 index 2f2b14a69f..0000000000 --- a/ext/tk/lib/tkextlib/tktable/tktable.rb +++ /dev/null @@ -1,796 +0,0 @@ -# -# tkextlib/tktable/tktable.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' -require 'tk/validation' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tktable/setup.rb' - -# TkPackage.require('Tktable', '2.8') -TkPackage.require('Tktable') - -module Tk - class TkTable < TkWindow - def self.package_version - begin - TkPackage.require('Tktable') - rescue - '' - end - end - - class CellTag < TkObject - end - - module ConfigMethod - end - end -end - -module Tk::TkTable::ConfigMethod - include TkItemConfigMethod - - def __item_cget_cmd(id) # id := [ type, tagOrId ] - [self.path, id[0], 'cget', id[1]] - end - private :__item_cget_cmd - - def __item_config_cmd(id) # id := [ type, tagOrId ] - [self.path, id[0], 'configure', id[1]] - end - private :__item_config_cmd - - def __item_pathname(id) - if id.kind_of?(Array) - id = tagid(id[1]) - end - [self.path, id].join(';') - end - private :__item_pathname - - def tag_cget(tagOrId, option) - itemcget(['tag', tagid(tagOrId)], option) - end - def tag_configure(tagOrId, slot, value=None) - itemconfigure(['tag', tagid(tagOrId)], slot, value) - end - def tag_configinfo(tagOrId, slot=nil) - itemconfigure(['tag', tagid(tagOrId)], slot) - end - def current_tag_configinfo(tagOrId, slot=nil) - itemconfigure(['tag', tagid(tagOrId)], slot) - end - - def window_cget(tagOrId, option) - itemcget(['window', tagid(tagOrId)], option) - end - def window_configure(tagOrId, slot, value=None) - itemconfigure(['window', tagid(tagOrId)], slot, value) - end - def window_configinfo(tagOrId, slot=nil) - itemconfigure(['window', tagid(tagOrId)], slot) - end - def current_window_configinfo(tagOrId, slot=nil) - itemconfigure(['window', tagid(tagOrId)], slot) - end - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo -end - -##################################################### - -class Tk::TkTable::CellTag - include TkTreatTagFont - - CellTagID_TBL = TkCore::INTERP.create_table - CellTag_ID = ['tktbl:celltag'.freeze, '00000'.taint].freeze - - TkCore::INTERP.init_ip_env{ CellTagID_TBL.clear } - - def self.id2obj(table, id) - tpath = table.path - return id unless CellTagID_TBL[tpath] - CellTagID_TBL[tpath][id]? CellTagID_TBL[tpath][id] : id - end - - def initialize(parent, keys=nil) - @parent = @t = parent - @tpath - parent.path - @path = @id = CellTag_ID.join(TkCore::INTERP._ip_id_) - CellTagID_TBL[@tpath] = {} unless CellTagID_TBL[@tpath] - CellTagID_TBL[@tpath][@id] = self - CellTag_ID[1].succ! - configure(keys) if keys - end - - def id - @id - end - - def destroy - tk_call(@tpath, 'tag', 'delete', @id) - CellTagID_TBL[@tpath].delete(@id) if CellTagID_TBL[@tpath] - self - end - alias delete destroy - - def exist? - @t.tag_exist?(@id) - end - def include?(idx) - @t.tag_include?(@id, idx) - end - - def add_cell(*args) - @t.tag_cell(@id, *args) - end - def add_col(*args) - @t.tag_col(@id, *args) - end - def add_row(*args) - @t.tag_row(@id, *args) - end - - def raise(target=None) - @t.tag_raise(@id, target) - end - def lower(target=None) - @t.tag_lower(@id, target) - end - - def cget(key) - @t.tag_cget(@id, key) - end - def configure(key, val=None) - @t.tag_configure(@id, key, val) - end - def configinfo(key=nil) - @t.tag_configinfo(@id, key) - end - def current_configinfo(key=nil) - @t.current_tag_configinfo(@id, key) - end -end - -class Tk::TkTable::NamedCellTag < Tk::TkTable::CellTag - def self.new(parent, name, keys=nil) - if CellTagID_TBL[parent.path] && CellTagID_TBL[parent.path][name] - cell = CellTagID_TBL[parent.path][name] - cell.configure(keys) if keys - return cell - else - super(parent, name, keys) - end - end - - def initialize(parent, name, keys=nil) - @parent = @t = parent - @tpath - parent.path - @path = @id = name - CellTagID_TBL[@tpath] = {} unless CellTagID_TBL[@tpath] - CellTagID_TBL[@tpath][@id] = self - configure(keys) if keys - end -end - -##################################################### - -class Tk::TkTable - TkCommandNames = ['table'.freeze].freeze - WidgetClassName = 'Table'.freeze - WidgetClassNames[WidgetClassName] = self - - include Scrollable - include Tk::TkTable::ConfigMethod - include Tk::ValidateConfigure - - def __destroy_hook__ - Tk::TkTable::CelTag::CellTagID_TBL.delete(@path) - end - - ################################# - - class BrowseCommand < TkValidateCommand - class ValidateArgs < TkUtil::CallbackSubst - KEY_TBL = [ - [ ?c, ?n, :column ], - [ ?C, ?s, :index ], - [ ?i, ?x, :cursor ], - [ ?r, ?n, :row ], - [ ?s, ?s, :last_index ], - [ ?S, ?s, :new_index ], - [ ?W, ?w, :widget ], - nil - ] - - PROC_TBL = [ - [ ?n, TkComm.method(:number) ], - [ ?x, TkComm.method(:num_or_str) ], - [ ?s, TkComm.method(:string) ], - [ ?w, TkComm.method(:window) ], - nil - ] - - _setup_subst_table(KEY_TBL, PROC_TBL); - - def self.ret_val(val) - val - end - end - - def self._config_keys - ['browsecommand', 'browsecmd'] - end - end - #-------------------------------- - class CellCommand < TkValidateCommand - class ValidateArgs < TkUtil::CallbackSubst - KEY_TBL = [ - [ ?c, ?n, :column ], - [ ?C, ?s, :index ], - [ ?i, ?m, :rw_mode ], - [ ?r, ?n, :row ], - [ ?s, ?v, :value ], - [ ?W, ?w, :widget ], - nil - ] - - PROC_TBL = [ - [ ?n, TkComm.method(:number) ], - [ ?s, TkComm.method(:string) ], - [ ?w, TkComm.method(:window) ], - [ ?m, proc{|val| (val == '0')? (:r) : (:w)} ], - [ ?v, proc{|val| TkComm.tk_tcl2ruby(val, true, false)} ], - nil - ] - - _setup_subst_table(KEY_TBL, PROC_TBL); - - def self.ret_val(val) - TkComm._get_eval_string(val) - end - end - - def self._config_keys - ['command'] - end - end - #-------------------------------- - class SelectionCommand < TkValidateCommand - class ValidateArgs < TkUtil::CallbackSubst - KEY_TBL = [ - [ ?c, ?n, :sel_columns ], - [ ?C, ?s, :sel_area ], - [ ?i, ?n, :total ], - [ ?r, ?n, :sel_rows ], - [ ?s, ?s, :value ], - [ ?W, ?w, :widget ], - nil - ] - - PROC_TBL = [ - [ ?n, TkComm.method(:number) ], - [ ?s, TkComm.method(:string) ], - [ ?w, TkComm.method(:window) ], - nil - ] - - _setup_subst_table(KEY_TBL, PROC_TBL); - - def self.ret_val(val) - val.to_s - end - end - - def self._config_keys - ['selectioncommand', 'selcmd'] - end - end - #-------------------------------- - class ValidateCommand < TkValidateCommand - class ValidateArgs < TkUtil::CallbackSubst - KEY_TBL = [ - [ ?c, ?n, :column ], - [ ?C, ?s, :index ], - [ ?i, ?x, :cursor ], - [ ?r, ?n, :row ], - [ ?s, ?v, :current_value ], - [ ?S, ?v, :new_value ], - [ ?W, ?w, :widget ], - nil - ] - - PROC_TBL = [ - [ ?n, TkComm.method(:number) ], - [ ?x, TkComm.method(:num_or_str) ], - [ ?s, TkComm.method(:string) ], - [ ?w, TkComm.method(:window) ], - [ ?v, proc{|val| TkComm.tk_tcl2ruby(val, true, false)} ], - nil - ] - - _setup_subst_table(KEY_TBL, PROC_TBL); - end - - def self._config_keys - ['vcmd', 'validatecommand'] - end - end - - ################################# - - def __validation_class_list - super << - BrowseCommand << CellCommand << SelectionCommand << ValidateCommand - end - - Tk::ValidateConfigure.__def_validcmd(binding, BrowseCommand) - Tk::ValidateConfigure.__def_validcmd(binding, CellCommand) - Tk::ValidateConfigure.__def_validcmd(binding, SelectionCommand) - Tk::ValidateConfigure.__def_validcmd(binding, ValidateCommand) - - ################################# - - def activate(idx) - tk_send('activate', tagid(idx)) - end - - def bbox(idx) - list(tk_send('bbox', tagid(idx))) - end - - def border_mark(x, y) - simplelist(tk_send('scan', 'mark', x, y)) - end - def border_mark_row(x, y) - tk_send('scan', 'mark', x, y, 'row') - end - def border_mark_col(x, y) - tk_send('scan', 'mark', x, y, 'col') - end - def border_dragto(x, y) - tk_send('scan', 'dragto', x, y) - end - - def clear_cache(first=None, last=None) - tk_send('clear', 'cache', tagid(first), tagid(last)) - self - end - def clear_sizes(first=None, last=None) - tk_send('clear', 'sizes', tagid(first), tagid(last)) - self - end - def clear_tags(first=None, last=None) - tk_send('clear', 'tags', tagid(first), tagid(last)) - self - end - def clear_all(first=None, last=None) - tk_send('clear', 'all', tagid(first), tagid(last)) - self - end - - def curselection - simplelist(tk_send('curselection')) - end - def curselection=(val) - tk_send('curselection', val) - val - end - - def curvalue - tk_tcl2ruby(tk_send('curvalue'), true, false) - end - def curvalue=(val) - tk_send('curvalue', val) - val - end - - def delete_active(idx1, idx2=None) - tk_send('delete', 'active', tagid(idx1), tagid(idx2)) - self - end - def delete_cols(*args) # ?switches_array?, index, ?count? - params = [] - if args[0].kind_of?(Array) - switches = args.shift - switches.each{|k| params << "-#{k}"} - end - params << '--' - params << tagid(args.shift) - params.concat(args) - tk_send('delete', 'cols', *params) - self - end - def delete_rows(*args) # ?switches_array?, index, ?count? - params = [] - if args[0].kind_of?(Array) - switches = args.shift - switches.each{|k| params << "-#{k}"} - end - params << '--' - params << tagid(args.shift) - params.concat(args) - tk_send('delete', 'rows', *params) - self - end - - def get(idx) - tk_tcl2ruby(tk_send('get', tagid(idx)), true, false) - end - def get_area(idx1, idx2) - simplelist(tk_send('get', tagid(idx1), tagid(idx2))).collect{|v| - tk_tcl2ruby(v, true, false) - } - end - - def height_list - list(tk_send('height')) - end - def height(row) - number(tk_send('height', row)) - end - def set_height(*pairs) - tk_send('height', *(pairs.flatten)) - self - end - - def hidden_list - simplelist(tk_send('hidden')) - end - def hidden?(idx, *args) - if args.empty? - if (ret = tk_send('hidden', tagid(idx))) == '' - false - else - ret - end - else - bool(tk_send('hidden', tagid(idx), *(args.collect{|i| tagid(i)}))) - end - end - - def icursor - number(tk_send('icursor')) - end - def icursor_set(idx) - number(tk_send('icursor', tagid(idx))) - end - - def index(idx) - tk_send('index', tagid(idx)) - end - def row_index(idx) - number(tk_send('index', tagid(idx), 'row')) - end - def col_index(idx) - number(tk_send('index', tagid(idx), 'col')) - end - - def insert_active(idx, val) - tk_send('insert', 'active', tagid(idx), val) - self - end - def insert_cols(*args) # ?switches_array?, index, ?count? - params = [] - if args[0].kind_of?(Array) - switches = args.shift - switches.each{|k| params << "-#{k}"} - end - params << '--' - params.concat(args) - params << tagid(args.shift) - tk_send('insert', 'cols', *params) - self - end - def insert_rows(*args) # ?switches_array?, index, ?count? - params = [] - if args[0].kind_of?(Array) - switches = args.shift - switches.each{|k| params << "-#{k}"} - end - params << '--' - params << tagid(args.shift) - params.concat(args) - tk_send('insert', 'rows', *params) - self - end - - # def postscript(*args) - # tk_send('postscript', *args) - # end - - def reread - tk_send('reread') - self - end - - def scan_mark(x, y) - tk_send('scan', 'mark', x, y) - self - end - def scan_dragto(x, y) - tk_send('scan', 'dragto', x, y) - self - end - - def see(idx) - tk_send('see', tagid(idx)) - self - end - - def selection_anchor(idx) - tk_send('selection', 'anchor', tagid(idx)) - self - end - def selection_clear(first, last=None) - tk_send('selection', 'clear', tagid(first), tagid(last)) - self - end - def selection_clear_all - selection_clear('all') - end - def selection_include?(idx) - bool(tk_send('selection', 'includes', tagid(idx))) - end - def selection_set(first, last=None) - tk_send('selection', 'set', tagid(first), tagid(last)) - self - end - - def set(*pairs) # idx, val, idx, val, ... - args = [] - 0.step(pairs.size-1, 2){|i| - args << tagid(pairs[i]) - args << pairs[i+1] - } - tk_send('set', *args) - self - end - def set_row(*pairs) # idx, val, idx, val, ... - args = [] - 0.step(pairs.size-1, 2){|i| - args << tagid(pairs[i]) - args << pairs[i+1] - } - tk_send('set', 'row', *args) - self - end - def set_col(*pairs) # idx, val, idx, val, ... - args = [] - 0.step(pairs.size-1, 2){|i| - args << tagid(pairs[i]) - args << pairs[i+1] - } - tk_send('set', 'col', *args) - self - end -=begin - def set(*pairs) # idx, val, idx, val, ... OR [idx, val], [idx, val], ... - if pairs[0].kind_of?(Array) - # [idx, val], [idx, val], ... - args = [] - pairs.each{|idx, val| args << tagid(idx) << val } - tk_send('set', *args) - else - # idx, val, idx, val, ... - args = [] - 0.step(pairs.size-1, 2){|i| - args << tagid(pairs[i]) - args << pairs[i+1] - } - tk_send('set', *args) - end - self - end - def set_row(*pairs) - if pairs[0].kind_of?(Array) - # [idx, val], [idx, val], ... - args = [] - pairs.each{|idx, val| args << tagid(idx) << val } - tk_send('set', 'row', *args) - else - # idx, val, idx, val, ... - args = [] - 0.step(pairs.size-1, 2){|i| - args << tagid(pairs[i]) - args << pairs[i+1] - } - tk_send('set', 'row', *args) - end - self - end - def set_col(*pairs) - if pairs[0].kind_of?(Array) - # [idx, val], [idx, val], ... - args = [] - pairs.each{|idx, val| args << idx << val } - tk_send('set', 'col', *args) - else - # idx, val, idx, val, ... - args = [] - 0.step(pairs.size-1, 2){|i| - args << tagid(pairs[i]) - args << pairs[i+1] - } - tk_send('set', 'col', *args) - end - self - end -=end - - def spans - simplelist(tk_send('spans')).collect{|inf| - lst = simplelist(inf) - idx = lst[0] - rows, cols = lst[1].split(',').map!{|n| Integer(n)} - [idx [rows, cols]] - } - end - alias span_list spans - def span(idx) - lst = simplelist(tk_send('spans', tagid(idx))) - idx = lst[0] - rows, cols = lst[1].split(',').map!{|n| Integer(n)} - [idx [rows, cols]] - end - def set_spans(*pairs) - # idx, val, idx, val, ... - args = [] - 0.step(pairs.size-1, 2){|i| - args << tagid(pairs[i]) - val = pairs[i+1] - if val.kind_of?(Array) - args << val.join(',') - else - args << val - end - } - tk_send('spans', *args) - self - end -=begin - def set_spans(*pairs) - if pairs[0].kind_of?(Array) - # [idx, val], [idx, val], ... - args = [] - pairs.each{|idx, val| - args << tagid(idx) - if val.kind_of?(Array) - args << val.join(',') - else - args << val - end - } - tk_send('spans', *args) - else - # idx, val, idx, val, ... - args = [] - 0.step(pairs.size-1, 2){|i| - args << tagid(pairs[i]) - val = pairs[i+1] - if val.kind_of?(Array) - args << val.join(',') - else - args << val - end - } - tk_send('spans', *args) - end - self - end -=end - - def tagid(tag) - if tag.kind_of?(Tk::TkTable::CellTag) - tag.id - elsif tag.kind_of?(Array) - if tag[0].kind_of?(Integer) && tag[1].kind_of?(Integer) - # [row, col] - tag.join(',') - else - tag - end - else - tag - end - end - - def tagid2obj(tagid) - if Tk::TkTable::CellTag::CellTagID_TBL.key?(@path) - if Tk::TkTable::CellTag::CellTagID_TBL[@path].key?(tagid) - Tk::TkTable::CellTag::CellTagID_TBL[@path][tagid] - else - tagid - end - else - tagid - end - end - - def tag_cell(tag, *cells) - tk_send('tag', 'cell', tagid(tag), *(cells.collect{|idx| tagid(idx)})) - self - end - def tag_reset(*cells) - tk_send('tag', 'cell', '', *(cells.collect{|idx| tagid(idx)})) - self - end - def tag_col(tag, *cols) - tk_send('tag', 'col', tagid(tag), *cols) - self - end - def tag_col_reset(*cols) - tk_send('tag', 'col', '', *cols) - self - end - def tag_delete(tag) - tk_send('tag', 'delete', tagid(tag)) - if Tk::TkTable::CellTag::CellTagID_TBL[@path] - if tag.kind_of? Tk::TkTable::CellTag - Tk::TkTable::CellTag::CellTagID_TBL[@path].delete(tag.id) - else - Tk::TkTable::CellTag::CellTagID_TBL[@path].delete(tag) - end - end - self - end - def tag_exist?(tag) - bool(tk_send('tag', 'exists', tagid(tag))) - end - def tag_include?(tag, idx) - bool(tk_send('tag', 'includes', tagid(tag), tagid(idx))) - end - def tag_lower(tag, target=None) - tk_send('tag', 'lower', tagid(tag), tagid(target)) - self - end - def tag_names(pat=None) - simplelist(tk_send('tag', 'names', pat)).collect{|tag| tagid2obj(tag)} - end - def tag_raise(tag, target=None) - tk_send('tag', 'raise', tagid(tag), tagid(target)) - self - end - def tag_row(tag, *rows) - tk_send('tag', 'row', tagid(tag), *rows) - self - end - def tag_row_reset(*rows) - tk_send('tag', 'row', '', *rows) - self - end - - def validate(idx) - bool(tk_send('validate', tagid(idx))) - end - - def width_list - list(tk_send('width')) - end - def width(row) - number(tk_send('width', row)) - end - def set_width(*pairs) - tk_send('width', *(pairs.flatten)) - self - end - - def window_delete(*args) - tk_send('window', 'delete', *(args.collect{|idx| tagid(idx)})) - self - end - def window_move(from_idx, to_idx) - tk_send('window', 'move', tagid(from_idx), tagid(to_idx)) - self - end - def window_names(pat=None) - simplelist(tk_send('window', 'names', pat)) - end -end diff --git a/ext/tk/lib/tkextlib/tktrans.rb b/ext/tk/lib/tkextlib/tktrans.rb deleted file mode 100644 index c5de5be5e6..0000000000 --- a/ext/tk/lib/tkextlib/tktrans.rb +++ /dev/null @@ -1,14 +0,0 @@ -# -# TkTrans support (win32 only) -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tktrans/setup.rb' - -# load library -require 'tkextlib/tktrans/tktrans' diff --git a/ext/tk/lib/tkextlib/tktrans/setup.rb b/ext/tk/lib/tkextlib/tktrans/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/tktrans/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/tktrans/tktrans.rb b/ext/tk/lib/tkextlib/tktrans/tktrans.rb deleted file mode 100644 index 55ac03e563..0000000000 --- a/ext/tk/lib/tkextlib/tktrans/tktrans.rb +++ /dev/null @@ -1,59 +0,0 @@ -# -# TkTrans support (win32 only) -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tktrans/setup.rb' - -TkPackage.require('tktrans') rescue Tk.load_tcllibrary('tktrans') - -module Tk - module TkTrans - def self.package_version - begin - TkPackage.require('tktrans') - rescue - '' - end - end - end -end - -class TkWindow - def tktrans_set_image(img) - tk_send('tktrans::setwidget', @path, img) - self - end - def tktrans_get_image() - tk_send('tktrans::setwidget', @path) - end -end - -class TkRoot - undef tktrans_set_image, tktrans_get_image - - def tktrans_set_image(img) - tk_send('tktrans::settoplevel', @path, img) - self - end - def tktrans_get_image() - tk_send('tktrans::settoplevel', @path) - end -end - -class TkToplevel - undef tktrans_set_image, tktrans_get_image - - def tktrans_set_image(img) - tk_send('tktrans::settoplevel', @path, img) - self - end - def tktrans_get_image() - tk_send('tktrans::settoplevel', @path) - end -end diff --git a/ext/tk/lib/tkextlib/treectrl.rb b/ext/tk/lib/tkextlib/treectrl.rb deleted file mode 100644 index 1944fb83e3..0000000000 --- a/ext/tk/lib/tkextlib/treectrl.rb +++ /dev/null @@ -1,13 +0,0 @@ -# -# TkTreeCtrl support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/treectrl/setup.rb' - -# load library -require 'tkextlib/treectrl/tktreectrl' diff --git a/ext/tk/lib/tkextlib/treectrl/setup.rb b/ext/tk/lib/tkextlib/treectrl/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/treectrl/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/treectrl/tktreectrl.rb b/ext/tk/lib/tkextlib/treectrl/tktreectrl.rb deleted file mode 100644 index cc23857c5f..0000000000 --- a/ext/tk/lib/tkextlib/treectrl/tktreectrl.rb +++ /dev/null @@ -1,923 +0,0 @@ -# -# tkextlib/treectrl/tktreectrl.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/treectrl/setup.rb' - -# TkPackage.require('treectrl', '1.0') -TkPackage.require('treectrl') - -module Tk - class TreeCtrl < TkWindow - def self.package_version - begin - TkPackage.require('treectrl') - rescue - '' - end - end - - # dummy :: - # pkgIndex.tcl of TreeCtrl-1.0 doesn't support auto_load for - # 'loupe' command (probably it is bug, I think). - # So, calling a 'treectrl' command for loading the dll with - # the auto_load facility. - begin - tk_call('treectrl') - rescue - end - def self.loupe(img, x, y, w, h, zoom) - # NOTE: platform == 'unix' only - - # img => TkPhotoImage - # x, y => screen coords - # w, h => magnifier width and height - # zoom => zooming rate - Tk.tk_call_without_enc('loupe', img, x, y, w, h, zoom) - end - - class NotifyEvent < TkUtil::CallbackSubst - end - - module ConfigMethod - end - end - TreeCtrl_Widget = TreeCtrl -end - -############################################## - -class Tk::TreeCtrl::NotifyEvent - # [ <'%' subst-key char>, <proc type char>, <instance var (accessor) name>] - KEY_TBL = [ - [ ?c, ?n, :item_num ], - [ ?d, ?s, :detail ], - [ ?D, ?l, :items ], - [ ?e, ?e, :event ], - [ ?I, ?n, :id ], - [ ?l, ?b, :lower_bound ], - [ ?p, ?n, :active_id ], - [ ?S, ?l, :sel_items ], - [ ?T, ?w, :widget ], - [ ?U, ?b, :upper_bound ], - [ ?W, ?o, :object ], - nil - ] - - # [ <proc type char>, <proc/method to convert tcl-str to ruby-obj>] - PROC_TBL = [ - [ ?n, TkComm.method(:num_or_str) ], - [ ?s, TkComm.method(:string) ], - [ ?l, TkComm.method(:list) ], - [ ?w, TkComm.method(:window) ], - - [ ?b, proc{|val| list(val)} ], - - [ ?e, proc{|val| - case val - when /^<<[^<>]+>>$/ - TkVirtualEvent.getobj(val[1..-2]) - when /^<[^<>]+>$/ - val[1..-2] - else - val - end - } - ], - - [ ?o, proc{|val| tk_tcl2ruby(val)} ], - - nil - ] - - # setup tables to be used by scan_args, _get_subst_key, _get_all_subst_keys - # - # _get_subst_key() and _get_all_subst_keys() generates key-string - # which describe how to convert callback arguments to ruby objects. - # When binding parameters are given, use _get_subst_key(). - # But when no parameters are given, use _get_all_subst_keys() to - # create a Event class object as a callback parameter. - # - # scan_args() is used when doing callback. It convert arguments - # ( which are Tcl strings ) to ruby objects based on the key string - # that is generated by _get_subst_key() or _get_all_subst_keys(). - # - _setup_subst_table(KEY_TBL, PROC_TBL); -end - -############################################## - -module Tk::TreeCtrl::ConfigMethod - include TkItemConfigMethod - - def treectrl_tagid(key, obj) - if key.kind_of?(Array) - key = key.join(' ') - else - key = key.to_s - end - - case key - when 'column' - obj - - when 'dragimage' - obj - - when 'element' - obj - - when 'item element' - obj - - when 'marquee' - obj - - when 'notify' - obj - - when 'style' - obj - - else - obj - end - end - - def tagid(mixed_id) - if mixed_id.kind_of?(Array) - [mixed_id[0], treectrl_tagid(*mixed_id)] - else - tagid(mixed_id.split(':')) - end - fail ArgumentError, "unknown id format" - end - - def __item_cget_cmd(mixed_id) - if mixed_id[1].kind_of?(Array) - id = mixed_id[1] - else - id = [mixed_id[1]] - end - - if mixed_id[0].kind_of?(Array) - ([self.path].concat(mixed_id[0]) << 'cget').concat(id) - else - [self.path, mixed_id[0], 'cget'].concat(id) - end - end - private :__item_cget_cmd - - def __item_config_cmd(mixed_id) - if mixed_id[1].kind_of?(Array) - id = mixed_id[1] - else - id = [mixed_id[1]] - end - - if mixed_id[0].kind_of?(Array) - ([self.path].concat(mixed_id[0]) << 'configure').concat(id) - else - [self.path, mixed_id[0], 'configure'].concat(id) - end - end - private :__item_config_cmd - - def __item_pathname(id) - if id.kind_of?(Array) - key = id[0] - if key.kind_of?(Array) - key = key.join(' ') - end - - tag = id[1] - if tag.kind_of?(Array) - tag = tag.join(' ') - end - - id = [key, tag].join(':') - end - [self.path, id].join(';') - end - private :__item_pathname - - def __item_configinfo_struct(id) - if id.kind_of?(Array) && id[0].to_s == 'notify' - {:key=>0, :alias=>nil, :db_name=>nil, :db_class=>nil, - :default_value=>nil, :current_value=>1} - else - {:key=>0, :alias=>1, :db_name=>1, :db_class=>2, - :default_value=>3, :current_value=>4} - end - end - private :__item_configinfo_struct - - def __item_listval_optkeys(id) - [] - end - private :__item_listval_optkeys - - def __item_keyonly_optkeys(id) # { def_key=>(undef_key|nil), ... } - { - 'notreally'=>nil, - 'increasing'=>'decreasing', - 'decreasing'=>'increasing', - 'ascii'=>nil, - 'dictionary'=>nil, - 'integer'=>nil, - 'real'=>nil - } - end - private :__item_keyonly_optkeys - - def column_cget(tagOrId, option) - itemcget(['column', tagOrId], option) - end - def column_configure(tagOrId, slot, value=None) - itemconfigure(['column', tagOrId], slot, value) - end - def column_configinfo(tagOrId, slot=nil) - itemconfigure(['column', tagOrId], slot) - end - def current_column_configinfo(tagOrId, slot=nil) - itemconfigure(['column', tagOrId], slot) - end - - def dragimage_cget(tagOrId, option) - itemcget(['dragimage', tagOrId], option) - end - def dragimage_configure(tagOrId, slot, value=None) - itemconfigure(['dragimage', tagOrId], slot, value) - end - def dragimage_configinfo(tagOrId, slot=nil) - itemconfigure(['dragimage', tagOrId], slot) - end - def current_dragimage_configinfo(tagOrId, slot=nil) - itemconfigure(['dragimage', tagOrId], slot) - end - - def element_cget(tagOrId, option) - itemcget(['element', tagOrId], option) - end - def element_configure(tagOrId, slot, value=None) - itemconfigure(['element', tagOrId], slot, value) - end - def element_configinfo(tagOrId, slot=nil) - itemconfigure(['element', tagOrId], slot) - end - def current_element_configinfo(tagOrId, slot=nil) - itemconfigure(['element', tagOrId], slot) - end - - def item_element_cget(tagOrId, option) - itemcget([['item', 'element'], tagOrId], option) - end - def item_element_configure(tagOrId, slot, value=None) - itemconfigure([['item', 'element'], tagOrId], slot, value) - end - def item_element_configinfo(tagOrId, slot=nil) - itemconfigure([['item', 'element'], tagOrId], slot) - end - def current_item_element_configinfo(tagOrId, slot=nil) - itemconfigure([['item', 'element'], tagOrId], slot) - end - - def marquee_cget(tagOrId, option) - itemcget(['marquee', tagOrId], option) - end - def marquee_configure(tagOrId, slot, value=None) - itemconfigure(['marquee', tagOrId], slot, value) - end - def marquee_configinfo(tagOrId, slot=nil) - itemconfigure(['marquee', tagOrId], slot) - end - def current_marquee_configinfo(tagOrId, slot=nil) - itemconfigure(['marquee', tagOrId], slot) - end - - def notify_cget(win, pattern, option) - itemconfigure(['notify', [win, pattern]], option) - end - def notify_configure(win, pattern, slot, value=None) - itemconfigure(['notify', [win, pattern]], slot, value) - end - def notify_configinfo(win, pattern, slot=nil) - itemconfigure(['notify', [win, pattern]], slot) - end - alias current_notify_configinfo notify_configinfo - - def style_cget(tagOrId, option) - itemcget(['style', tagOrId], option) - end - def style_configure(tagOrId, slot, value=None) - itemconfigure(['style', tagOrId], slot, value) - end - def style_configinfo(tagOrId, slot=nil) - itemconfigure(['style', tagOrId], slot) - end - def current_style_configinfo(tagOrId, slot=nil) - itemconfigure(['style', tagOrId], slot) - end - - private :itemcget, :itemconfigure - private :itemconfiginfo, :current_itemconfiginfo -end - -############################################## - -class Tk::TreeCtrl - include Tk::TreeCtrl::ConfigMethod - include Scrollable - - TkCommandNames = ['treectrl'.freeze].freeze - WidgetClassName = ''.freeze - WidgetClassNames[WidgetClassName] = self - - def install_bind(cmd, *args) - install_bind_for_event_class(Tk::TreeCtrl::NotifyEvent, cmd, *args) - end - - ######################### - - def create_self(keys) - if keys and keys != None - tk_call_without_enc('treectrl', @path, *hash_kv(keys, true)) - else - tk_call_without_enc('treectrl', @path) - end - end - private :create_self - - ######################### - - def activate(desc) - tk_send('activate', desc) - self - end - - def canvasx(x) - number(tk_send('canvasx', x)) - end - - def canvasy(y) - number(tk_send('canvasy', y)) - end - - def collapse(*dsc) - tk_send('collapse', *dsc) - self - end - - def collapse_recurse(*dsc) - tk_send('collapse', '-recurse', *dsc) - self - end - - def column_bbox(idx) - list(tk_send('column', 'bbox', idx)) - end - - def column_delete(idx) - tk_send('column', 'delete', idx) - self - end - - def column_index(idx) - num_or_str(tk_send('column', 'index', idx)) - end - - def column_move(idx, to) - tk_send('column', 'move', idx, to) - self - end - - def column_needed_width(idx) - num_or_str(tk_send('column', 'neededwidth', idx)) - end - alias column_neededwidth column_needed_width - - def column_width(idx) - num_or_str(tk_send('column', 'width', idx)) - end - - def compare(item1, op, item2) - number(tk_send('compare', item1, op, item2)) - end - - def contentbox() - list(tk_send('contentbox')) - end - - def depth(item=None) - num_or_str(tk_send('depth', item)) - end - - def dragimage_add(item, *args) - tk_send('dragimage', 'add', item, *args) - self - end - - def dragimage_clear() - tk_send('dragimage', 'clear') - self - end - - def dragimage_offset(*args) # x, y - if args.empty? - list(tk_send('dragimage', 'offset')) - else - tk_send('dragimage', 'offset', *args) - self - end - end - - def dragimage_visible(*args) # mode - if args..empty? - bool(tk_send('dragimage', 'visible')) - else - tk_send('dragimage', 'visible', *args) - self - end - end - def dragimage_visible? - dragimage_visible() - end - - def element_create(elem, type, keys=nil) - if keys && keys.kind_of?(Hash) - tk_send('element', 'create', elem, type, *hash_kv(keys)) - else - tk_send('element', 'create', elem, type) - end - end - - def element_delete(*elems) - tk_send('element', 'delete', *elems) - self - end - - def element_names() - list(tk_send('element', 'names')) - end - - def element_type(elem) - tk_send('element', 'type', elem) - end - - def expand(*dsc) - tk_send('expand', *dsc) - self - end - - def expand_recurse(*dsc) - tk_send('expand', '-recurse', *dsc) - self - end - - def identify(x, y) - list(tk_send('identify', x, y)) - end - - def index(idx) - num_or_str(tk_send('index', idx)) - end - - def item_ancestors(item) - list(tk_send('item', 'ancestors', item)) - end - - def item_bbox(item, *args) - list(tk_send('item', 'bbox', item, *args)) - end - - def item_children(item) - list(tk_send('item', 'children', item)) - end - - def item_complex(item, *args) - tk_send('item', 'complex', item, *args) - self - end - - def item_create() - num_or_str(tk_send('item', 'create')) - end - - def item_delete(first, last=None) - tk_send('item', 'delete', first, last) - self - end - - def item_dump(item) - list(tk_send('item', 'dump', item)) - end - - def item_element_actual(item, column, elem, key) - tk_send('item', 'element', 'actual', item, column, elem, "-#{key}") - end - - def item_firstchild(parent, child=nil) - if child - tk_send('item', 'firstchild', parent, child) - self - else - num_or_str(tk_send('item', 'firstchild', parent)) - end - end - alias item_first_child item_firstchild - - def item_hashbutton(item, st=None) - if st == None - bool(tk_send('item', 'hashbutton')) - else - tk_send('item', 'hashbutton', st) - self - end - end - def item_hashbutton?(item) - item_hashbutton(item) - end - - def item_index(item) - list(tk_send('item', 'index', item)) - end - - def item_isancestor(item, des) - bool(tk_send('item', 'isancestor', item, des)) - end - alias item_is_ancestor item_isancestor - alias item_isancestor? item_isancestor - alias item_is_ancestor? item_isancestor - - def item_isopen(item) - bool(tk_send('item', 'isopen', item)) - end - alias item_is_open item_isopen - alias item_isopen? item_isopen - alias item_is_open? item_isopen - alias item_isopened? item_isopen - alias item_is_opened? item_isopen - - def item_lastchild(parent, child=nil) - if child - tk_send('item', 'lastchild', parent, child) - self - else - num_or_str(tk_send('item', 'lastchild', parent)) - end - end - alias item_last_child item_lastchild - - def item_nextsibling(sibling, nxt=nil) - if nxt - tk_send('item', 'nextsibling', sibling, nxt) - self - else - num_or_str(tk_send('item', 'nextsibling', sibling)) - end - end - alias item_next_sibling item_nextsibling - - def item_numchildren() - number(tk_send('item', 'numchildren')) - end - alias item_num_children item_numchildren - alias item_children_size item_numchildren - - def item_parent(item) - num_or_str(tk_send('item', 'parent', item)) - end - - def item_prevsibling(sibling, prev=nil) - if prev - tk_send('item', 'prevsibling', sibling, prev) - self - else - num_or_str(tk_send('item', 'prevsibling', sibling)) - end - end - alias item_prev_sibling item_prevsibling - - def item_remove(item) - list(tk_send('item', 'remove', item)) - end - - def item_rnc(item) - list(tk_send('item', 'rnc', item)) - end - - def item_sort(item, *opts) - flag = false - if opts[-1].kind_of?(Hash) - opts[-1,1] = __conv_item_keyonly_opts(item, opts[-1]).to_a - end - - opts = opts.collect{|opt| - if opt.kind_of?(Array) - key = "-#{opt[0]}" - flag = true if key == '-notreally' - ["-#{opt[0]}", opt[1]] - else - key = "-#{opt}" - flag = true if key == '-notreally' - key - end - }.flatten - - ret = tk_send('item', 'sort', item, *opts) - if flag - list(ret) - else - ret - end - end - - def item_state_get(item, *args) - if args.empty? - list(tk_send('item', 'state', 'get', item *args)) - else - bool(tk_send('item', 'state', 'get', item)) - end - end - - def item_state_set(item, *args) - tk_send('item', 'state', 'set', *args) - self - end - - def item_style_elements(item, colun) - list(tk_send('item', 'style', 'elements', item, column)) - end - - def item_style_map(item, column, style, map) - tk_send('item', 'style', 'map', item, column, style, map) - self - end - - def item_style_set(item, column=nil, *args) - if args.empty? - if column - tk_send('item', 'style', 'set', item, column) - else - list(tk_send('item', 'style', 'set', item)) - end - else - tk_send('item', 'style', 'set', item, *(args.flatten)) - self - end - end - - def item_text(item, column, txt=nil, *args) - if args.empty? - if txt - tk_send('item', 'text', item, column, txt) - self - else - tk_send('item', 'text', item, column) - end - else - tk_send('item', 'text', item, txt, *args) - self - end - end - - def item_visible(item, st=None) - if st == None - bool(tk_send('item', 'visible', item)) - else - tk_send('item', 'visible', item, st) - self - end - end - def item_visible?(item) - item_visible(item) - end - - def marquee_anchor(*args) - if args.empty? - list(tk_send('marquee', 'anchor')) - else - tk_send('marquee', 'anchor', *args) - self - end - end - - def marquee_coords(*args) - if args.empty? - list(tk_send('marquee', 'coords')) - else - tk_send('marquee', 'coords', *args) - self - end - end - - def marquee_corner(*args) - if args.empty? - tk_send('marquee', 'corner') - else - tk_send('marquee', 'corner', *args) - self - end - end - - def marquee_identify() - list(tk_send('marquee', 'identify')) - end - - def marquee_visible(st=None) - if st == None - bool(tk_send('marquee', 'visible')) - else - tk_send('marquee', 'visible', st) - self - end - end - def marquee_visible?() - marquee_visible() - end - - def notify_bind(obj, event, cmd=Proc.new, args=nil) - _bind([@path, 'notify', 'bind', obj], event, cmd, args) - self - end - - def notify_bind_append(obj, event, cmd=Proc.new, args=nil) - _bind([@path, 'notify', 'bind', obj], event, cmd, args) - self - end - - def notify_bindinfo(obj, event=nil) - _bindinfo([@path, 'notify', 'bind', obj], event) - end - - def notify_detailnames(event) - list(tk_send('notify', 'detailnames', event)) - end - - def notify_eventnames() - list(tk_send('notify', 'eventnames')) - end - - def notify_generate(pattern, char_map=None) - tk_send('notify', 'generate', pattern, char_map) - self - end - - def notify_install_detail(event, detail, percents_cmd=nil, &b) - percents_cmd = Proc.new(&b) if !percents_cmd && b - if percents_cmd - tk_send('notify', 'install', 'detail', event, detail, percents_cmd) - else - tk_send('notify', 'install', 'detail', event, detail) - end - end - - def notify_install_event(event, percents_cmd=nil, &b) - percents_cmd = Proc.new(&b) if !percents_cmd && b - if percents_cmd - tk_send('notify', 'install', 'event', event, percents_cmd) - else - tk_send('notify', 'install', 'event', event) - end - end - - def notify_linkage(event, detail=None) - tk_send('notify', 'linkage', event, detail) - end - - def notify_uninstall_detail(event, detail) - tk_send('notify', 'uninstall', 'detail', event, detail) - self - end - - def notify_uninstall_event(event) - tk_send('notify', 'uninstall', 'event', event) - self - end - - def numcolumns() - num_or_str(tk_send('numcolumns')) - end - - def numitems() - num_or_str(tk_send('numitems')) - end - - def orphans() - list(tk_send('orphans')) - end - - def range(first, last) - list(tk_send('range', first, last)) - end - - def state_define(name) - tk_send('state', 'define', name) - self - end - - def state_linkage(name) - tk_send('state', 'linkage', name) - end - - def state_names() - list(tk_send('state', 'names')) - end - - def state_undefine(*names) - tk_send('state', 'undefine', *names) - self - end - - def see(item) - tk_send('see', item) - self - end - - def selection_add(first, last=None) - tk_send('selection', 'add', first, last) - self - end - - def selection_anchor(item=None) - num_or_str(tk_send('selection', 'anchor', item)) - end - - def selection_clear(*args) # first, last - tk_send('selection', 'clear' *args) - self - end - - def selection_count() - number(tk_send('selection', 'count')) - end - - def selection_get() - list(tk_send('selection', 'get')) - end - - def selection_includes(item) - bool(tk_send('selection', 'includes', item)) - end - - def selection_modify(sel, desel) - tk_send('selection', 'modify', sel, desel) - self - end - - def style_create(style, keys=None) - if keys && keys != None - tk_send('style', 'create', style, *hash_kv(keys)) - else - tk_send('style', 'create', style) - end - end - - def style_delete(*args) - tk_send('style', 'delete', *args) - self - end - - def style_elements(style, *elems) - if elems.empty? - list(tk_send('style', 'elements', style)) - else - tk_send('style', 'elements', style, elems.flatten) - self - end - end - - def style_layout(style, elem, keys=None) - if keys && keys != None - if keys.kind_of?(Hash) - tk_send('style', 'layout', style, elem, *hash_kv(keys)) - self - else - tk_send('style', 'layout', style, elem, "-#{keys}") - end - else - list(tk_send('style', 'layout', style, elem)) - end - end - - def style_names() - list(tk_send('style', 'names')) - end - - def toggle(*items) - tk_send('toggle', *items) - self - end - - def toggle_recurse() - tk_send('toggle', '-recurse', *items) - self - end -end diff --git a/ext/tk/lib/tkextlib/vu.rb b/ext/tk/lib/tkextlib/vu.rb deleted file mode 100644 index c4ea1b86e6..0000000000 --- a/ext/tk/lib/tkextlib/vu.rb +++ /dev/null @@ -1,43 +0,0 @@ -# -# The vu widget set support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/vu/setup.rb' - -# load package -# TkPackage.require('vu', '2.1') -TkPackage.require('vu') - -# autoload -module Tk - module Vu - TkComm::TkExtlibAutoloadModule.unshift(self) - - def self.package_version - begin - TkPackage.require('vu') - rescue - '' - end - end - - ########################################## - - autoload :Dial, 'tkextlib/vu/dial' - - autoload :Pie, 'tkextlib/vu/pie' - autoload :PieSlice, 'tkextlib/vu/pie' - autoload :NamedPieSlice, 'tkextlib/vu/pie' - - autoload :Spinbox, 'tkextlib/vu/spinbox' - - autoload :Bargraph, 'tkextlib/vu/bargraph' - end -end diff --git a/ext/tk/lib/tkextlib/vu/bargraph.rb b/ext/tk/lib/tkextlib/vu/bargraph.rb deleted file mode 100644 index 3ac08a26a5..0000000000 --- a/ext/tk/lib/tkextlib/vu/bargraph.rb +++ /dev/null @@ -1,51 +0,0 @@ -# -# ::vu::bargraph widget -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# create module/class -module Tk - module Vu - class Bargraph < TkWindow - end - end -end - - -# call setup script -- <libdir>/tkextlib/vu.rb -require 'tkextlib/vu.rb' - -class Tk::Vu::Bargraph < TkWindow - TkCommandNames = ['::vu::bargraph'.freeze].freeze - WidgetClassName = 'Bargraph'.freeze - WidgetClassNames[WidgetClassName] = self - - ############################### - - def __boolval_optkeys - ['showminmax', 'showvalue'] - end - private :__boolval_optkeys - - def __listval_optkeys - ['alabels', 'blabels'] - end - private :__listval_optkeys - - def __font_optkeys - ['alabfont', 'blabfont'] - end - private :__font_optkeys - - ############################### - - def set(val = None) - tk_call_without_enc(@path, 'set', val) - self - end - - def get() - num_or_str(tk_call_without_enc(@path, 'get')) - end -end diff --git a/ext/tk/lib/tkextlib/vu/charts.rb b/ext/tk/lib/tkextlib/vu/charts.rb deleted file mode 100644 index a578c6979b..0000000000 --- a/ext/tk/lib/tkextlib/vu/charts.rb +++ /dev/null @@ -1,47 +0,0 @@ -# -# charts -- Create and manipulate canvas Add-On Items -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' -require 'tk/canvas' - -# call setup script -- <libdir>/tkextlib/vu.rb -require 'tkextlib/vu.rb' - -module Tk - module Vu - module ChartsConfig - include TkItemConfigOptkeys - def __item_boolval_optkeys(id) - super(id) << 'lefttrunc' << 'autocolor' - end - private :__item_boolval_optkeys - - def __item_listval_optkeys(id) - super(id) << 'values' << 'tags' - end - private :__item_listval_optkeys - end - - class TkcSticker < TkcItem - include ChartsConfig - - CItemTypeName = 'sticker'.freeze - CItemTypeToClass[CItemTypeName] = self - end - - class TkcStripchart < TkcItem - include ChartsConfig - - CItemTypeName = 'stripchart'.freeze - CItemTypeToClass[CItemTypeName] = self - end - - class TkcBarchart < TkcItem - include ChartsConfig - - CItemTypeName = 'barchart'.freeze - CItemTypeToClass[CItemTypeName] = self - end - end -end diff --git a/ext/tk/lib/tkextlib/vu/dial.rb b/ext/tk/lib/tkextlib/vu/dial.rb deleted file mode 100644 index e27a38ae42..0000000000 --- a/ext/tk/lib/tkextlib/vu/dial.rb +++ /dev/null @@ -1,102 +0,0 @@ -# -# ::vu::dial widget -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# create module/class -module Tk - module Vu - class Dial < TkWindow - end - end -end - -# call setup script -- <libdir>/tkextlib/vu.rb -require 'tkextlib/vu.rb' - -# define module/class -class Tk::Vu::Dial < TkWindow - TkCommandNames = ['::vu::dial'.freeze].freeze - WidgetClassName = 'Dial'.freeze - WidgetClassNames[WidgetClassName] = self - - ############################### - - def __methodcall_optkeys # { key=>method, ... } - {'coords'=>'coords'} - end - private :__methodcall_optkeys - - ############################### - - def coords(val = nil) - if val - tk_split_list(tk_send_without_enc('coords')) - else - tk_send_without_enc('coords', val) - self - end - end - - def constrain(val = None) - num_or_str(tk_call(@path, 'constrain', val)) - end - - def get(*args) - num_or_str(tk_call(@path, 'get', *args)) - end - - def identify(x, y) - tk_call(@path, 'identify', x, y) - end - - def get_label(val=nil) - if val - tk_call(@path, 'label', val) - else - ret = [] - lst = simplelist(tk_call(@path, 'label')) - while lst.size > 0 - ret << ([num_or_str(lst.shift)] << lst.shift) - end - end - end - - def set_label(val, str, *args) - tk_call(@path, 'label', val, str, *args) - self - end - - def set_label_constrain(val, str, *args) - tk_call(@path, 'label', '-constrain', val, str, *args) - self - end - - def get_tag(val=nil) - if val - tk_call(@path, 'tag', val) - else - ret = [] - lst = simplelist(tk_call(@path, 'tag')) - while lst.size > 0 - ret << ([num_or_str(lst.shift)] << lst.shift) - end - end - end - - def set_tag(val, str, *args) - tk_call(@path, 'tag', val, str, *args) - self - end - - def set_tag_constrain(val, str, *args) - tk_call(@path, 'tag', '-constrain', val, str, *args) - self - end - - def set(val = None) - tk_call_without_enc(@path, 'set', val) - self - end -end diff --git a/ext/tk/lib/tkextlib/vu/pie.rb b/ext/tk/lib/tkextlib/vu/pie.rb deleted file mode 100644 index dc676ad765..0000000000 --- a/ext/tk/lib/tkextlib/vu/pie.rb +++ /dev/null @@ -1,235 +0,0 @@ -# -# ::vu::pie widget -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# create module/class -module Tk - module Vu - module PieSliceConfigMethod - end - class Pie < TkWindow - end - class PieSlice < TkObject - end - class NamedPieSlice < PieSlice - end - end -end - -# call setup script -- <libdir>/tkextlib/vu.rb -require 'tkextlib/vu.rb' - -module Tk::Vu::PieSliceConfigMethod - include TkItemConfigMethod - - def __item_pathname(tagOrId) - if tagOrId.kind_of?(Tk::Vu::PieSlice) - self.path + ';' + tagOrId.id.to_s - else - self.path + ';' + tagOrId.to_s - end - end - private :__item_pathname -end - -class Tk::Vu::Pie < TkWindow - TkCommandNames = ['::vu::pie'.freeze].freeze - WidgetClassName = 'Pie'.freeze - WidgetClassNames[WidgetClassName] = self - - def __destroy_hook__ - Tk::Vu::PieSlice::SliceID_TBL.delete(@path) - end - - ############################### - - include Tk::Vu::PieSliceConfigMethod - - def tagid(tag) - if tag.kind_of?(Tk::Vu::PieSlice) - tag.id - else - # tag - _get_eval_string(tag) - end - end - - ############################### - - def delete(*glob_pats) - tk_call(@path, 'delete', *glob_pats) - self - end - - def explode(slice, *args) - tk_call(@path, 'explode', slice, *args) - self - end - - def explode_value(slice) - num_or_str(tk_call(@path, 'explode', slice)) - end - - def lower(slice, below=None) - tk_call(@path, 'lower', slice, below) - self - end - - def names(*glob_pats) - simplelist(tk_call(@path, 'names', *glob_pats)) - end - alias slices names - - def order(*args) - tk_call(@path, 'order', *args) - self - end - - def raise(slice, above=None) - tk_call(@path, 'raise', slice, above) - self - end - - def swap(slice1, slice2) - tk_call(@path, 'swap', slice1, slice2) - self - end - - def set(slice, *args) - num_or_str(tk_call(@path, 'set', slice, *args)) - end - alias set_value set - alias set_values set - alias create set - - def slice_value(slice) - num_or_str(tk_call(@path, 'set', slice)) - end - - def value(val = None) - num_or_str(tk_call_without_enc(@path, 'value')) - end - alias sum_value value -end - -class Tk::Vu::PieSlice - SliceID_TBL = TkCore::INTERP.create_table - Pie_Slice_ID = ['vu:pie'.freeze, '00000'.taint].freeze - TkCore::INTERP.init_ip_env{ SliceID_TBL.clear } - - def self.id2obj(pie, id) - pie_path = pie.path - return id unless SliceID_TBL[pie_path] - SliceID_TBL[pie_path][id]? SliceID_TBL[pie_path][id]: id - end - - def initialize(parent, *args) - unless parent.kind_of?(Tk::Vu::Pie) - fail ArguemntError, "expect a Tk::Vu::Pie instance for 1st argument" - end - @parent = @pie = parent - @ppath = parent.path - @path = @id = Pie_Slice_ID.join(TkCore::INTERP._ip_id_) - SliceID_TBL[@ppath] = {} unless SliceID_TBL[@ppath] - SliceID_TBL[@ppath][@id] = self - Pie_Slice_ID[1].succ! - - if args[-1].kind_of?(Hash) - keys = args.unshift - end - @pie.set(@id, *args) - configure(keys) - end - - def id - @id - end - - def [](key) - cget key - end - - def []=(key,val) - configure key, val - val - end - - def cget(slot) - @pie.itemcget(@id, slot) - end - - def configure(*args) - @pie.itemconfigure(@id, *args) - self - end - - def configinfo(*args) - @pie.itemconfiginfo(@id, *args) - end - - def current_configinfo(*args) - @pie.current_itemconfiginfo(@id, *args) - end - - def delete - @pie.delete(@id) - end - - def explode(value) - @pie.explode(@id, value) - self - end - - def explode_value - @pie.explode_value(@id) - end - - def lower(other=None) - @pie.lower(@id, other) - self - end - - def raise(other=None) - @pie.raise(@id, other) - self - end - - def set(value) - @pie.set(@id, value) - self - end - alias set_value set - - def value - @pie.set(@id) - end -end - -class Tk::Vu::NamedPieSlice - def self.new(parent, name, *args) - if SliceID_TBL[parent.path] && SliceID_TBL[parent.path][name] - return SliceID_TBL[parent.path][name] - else - super(parent, name, *args) - end - end - - def initialize(parent, name, *args) - unless parent.kind_of?(Tk::Vu::Pie) - fail ArguemntError, "expect a Tk::Vu::Pie instance for 1st argument" - end - @parent = @pie = parent - @ppath = parent.path - @path = @id = name.to_s - SliceID_TBL[@ppath] = {} unless SliceID_TBL[@ppath] - SliceID_TBL[@ppath][@id] = self - - if args[-1].kind_of?(Hash) - keys = args.unshift - end - @pie.set(@id, *args) - configure(keys) - end -end diff --git a/ext/tk/lib/tkextlib/vu/setup.rb b/ext/tk/lib/tkextlib/vu/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/vu/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/vu/spinbox.rb b/ext/tk/lib/tkextlib/vu/spinbox.rb deleted file mode 100644 index b6499645a3..0000000000 --- a/ext/tk/lib/tkextlib/vu/spinbox.rb +++ /dev/null @@ -1,22 +0,0 @@ -# -# ::vu::spinbox widget -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -# a standard spinbox (<= 8.3) -# This is the same as the 8.4 core spinbox widget. -# -require 'tk' - -if (Tk::TK_MAJOR_VERSION < 8 || - (Tk::TK_MAJOR_VERSION == 8 && Tk::TK_MINOR_VERSION < 4)) - # call setup script -- <libdir>/tkextlib/vu.rb - require 'tkextlib/vu.rb' - - Tk.tk_call('namespace', 'import', '::vu::spinbox') -end - -module Tk - module Vu - Spinbox = TkSpinbox - end -end diff --git a/ext/tk/lib/tkextlib/winico.rb b/ext/tk/lib/tkextlib/winico.rb deleted file mode 100644 index ce7b8eac5c..0000000000 --- a/ext/tk/lib/tkextlib/winico.rb +++ /dev/null @@ -1,14 +0,0 @@ -# -# winico -- Windows Icon extension support -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/tktable/setup.rb' - -# load library -require 'tkextlib/winico/winico' diff --git a/ext/tk/lib/tkextlib/winico/setup.rb b/ext/tk/lib/tkextlib/winico/setup.rb deleted file mode 100644 index ce0f0bd4d4..0000000000 --- a/ext/tk/lib/tkextlib/winico/setup.rb +++ /dev/null @@ -1,8 +0,0 @@ -# -# setup.rb -- setup script before calling TkPackage.require() -# -# If you need some setup operations (for example, add a library path -# to the library search path) before using Tcl/Tk library packages -# wrapped by Ruby scripts in this directory, please write the setup -# operations in this file. -# diff --git a/ext/tk/lib/tkextlib/winico/winico.rb b/ext/tk/lib/tkextlib/winico/winico.rb deleted file mode 100644 index 8a71cbb401..0000000000 --- a/ext/tk/lib/tkextlib/winico/winico.rb +++ /dev/null @@ -1,181 +0,0 @@ -# -# tkextlib/winico/winico.rb -# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) -# - -require 'tk' - -# call setup script for general 'tkextlib' libraries -require 'tkextlib/setup.rb' - -# call setup script -require 'tkextlib/winico/setup.rb' - -# TkPackage.require('winico', '0.5') -TkPackage.require('winico') - -module Tk - class Winico < TkObject - def self.package_version - begin - TkPackage.require('winico') - rescue - '' - end - end - end -end - -class Tk::Winico - WinicoID_TBL = TkCore::INTERP.create_table - TkCore::INTERP.init_ip_env{ WinicoID_TBL.clear } - - def self.id2obj(id) - (WinicoID_TBL.key?(id))? WinicoID_TBL[id] : id - end - - def self.info - simplelist(Tk.tk_call('winico', 'info')).collect{|id| - Tk::Winico.id2obj(id) - } - end - - def self.icon_info(id) - simplelist(Tk.tk_call('winico', 'info', id)).collect{|inf| - h = Hash[*list(inf)] - h.keys.each{|k| h[k[1..-1]] = h.delete(k)} - } - end - - ################################# - - def self.new_from_file(file_name) - self.new(file_name) - end - - def self.new_from_resource(resource_name, file_name = nil) - self.new(file_name, resource_name) - end - - def initialize(file_name, resource_name=nil, winico_id=nil) - if resource_name - # from resource - if file_name - @id = Tk.tk_call('winico', 'load', resource_name, file_name) - else - @id = Tk.tk_call('winico', 'load', resource_name) - end - elsif file_name - # from .ico file - @id = Tk.tk_call('winico', 'createfrom', file_name) - elsif winico_id - @id = winico_id - else - fail ArgumentError, - "must be given proper information from where loading icons" - end - @path = @id - WinicoID_TBL[@id] = self - end - - def id - @id - end - - def set_window(win_id, *opts) # opts := ?'big'|'small'?, ?pos? - # NOTE:: the window, which is denoted by win_id, MUST BE MAPPED. - # If not, then this may fail or crash. - tk_call('winico', 'setwindow', win_id, @id, *opts) - end - - def delete - tk_call('winico', 'delete', @id) - WinicoID_TBL.delete(@id) - self - end - alias destroy delete - - def info - Tk::Winico.icon_info(@id) - end - - ################################# - - class Winico_callback < TkValidateCommand - class ValidateArgs < TkUtil::CallbackSubst - KEY_TBL = [ - [ ?m, ?s, :message ], - [ ?i, ?x, :icon ], - [ ?x, ?n, :x ], - [ ?y, ?n, :y ], - [ ?X, ?n, :last_x ], - [ ?Y, ?n, :last_y ], - [ ?t, ?n, :tickcount ], - [ ?w, ?n, :icon_idnum ], - [ ?l, ?n, :msg_idnum ], - nil - ] - - PROC_TBL = [ - [ ?n, TkComm.method(:number) ], - [ ?s, TkComm.method(:string) ], - [ ?x, proc{|id| - if Tk::Winico::WinicoID_TBL.key?(id) - Tk::Winico::WinicoID_TBL[id] - else - Tk::Winico.new(nil, nil, id) - end - } ], - nil - ] - - _setup_subst_table(KEY_TBL, PROC_TBL); - - def self.ret_val(val) - val - end - end - - def self._config_keys - ['callback'] - end - end - - ################################# - - def add_to_taskbar(keys = {}) - keys = _symbolkey2str(keys) - Winico_callback._config_keys.each{|k| - if keys[k].kind_of?(Array) - cmd, *args = keys[k] - keys[k] = Winico_callback.new(cmd, args.join(' ')) - elsif keys[k].kind_of?(Proc) - keys[k] = Winico_callback.new(keys[k]) - end - } - tk_call('winico', 'taskbar', 'add', @id, *(hash_kv(keys))) - self - end - alias taskbar_add add_to_taskbar - - def modify_taskbar(keys = {}) - keys = _symbolkey2str(keys) - Winico_callback._config_keys.each{|k| - if keys[k].kind_of?(Array) - cmd, *args = keys[k] - keys[k] = Winico_callback.new(cmd, args.join(' ')) - elsif keys[k].kind_of?(Proc) - keys[k] = Winico_callback.new(keys[k]) - end - } - tk_call('winico', 'taskbar', 'modify', @id, *(hash_kv(keys))) - self - end - alias taskbar_modify modify_taskbar - - def delete_from_taskbar - tk_call('winico', 'taskbar', 'delete', @id) - self - end - alias taskbar_delete delete_from_taskbar -end diff --git a/ext/tk/lib/tkfont.rb b/ext/tk/lib/tkfont.rb deleted file mode 100644 index 38a96633de..0000000000 --- a/ext/tk/lib/tkfont.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkfont.rb - load tk/font.rb -# -require 'tk/font' diff --git a/ext/tk/lib/tkmacpkg.rb b/ext/tk/lib/tkmacpkg.rb deleted file mode 100644 index 35560e78ce..0000000000 --- a/ext/tk/lib/tkmacpkg.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkmacpkg.rb - load tk/macpkg.rb -# -require 'tk/macpkg' diff --git a/ext/tk/lib/tkmenubar.rb b/ext/tk/lib/tkmenubar.rb deleted file mode 100644 index 70214fda1a..0000000000 --- a/ext/tk/lib/tkmenubar.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkmenubar.rb - load tk/menubar.rb -# -require 'tk/menubar' diff --git a/ext/tk/lib/tkmngfocus.rb b/ext/tk/lib/tkmngfocus.rb deleted file mode 100644 index fe70950e8e..0000000000 --- a/ext/tk/lib/tkmngfocus.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkmngfocus.rb - load tk/mngfocus.rb -# -require 'tk/mngfocus' diff --git a/ext/tk/lib/tkpalette.rb b/ext/tk/lib/tkpalette.rb deleted file mode 100644 index 56b203bbb9..0000000000 --- a/ext/tk/lib/tkpalette.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkpalette.rb - load tk/palette.rb -# -require 'tk/palette' diff --git a/ext/tk/lib/tkscrollbox.rb b/ext/tk/lib/tkscrollbox.rb deleted file mode 100644 index 6093b2e4e7..0000000000 --- a/ext/tk/lib/tkscrollbox.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkscrollbox.rb - load tk/scrollbox.rb -# -require 'tk/scrollbox' diff --git a/ext/tk/lib/tktext.rb b/ext/tk/lib/tktext.rb deleted file mode 100644 index 97ad62a3ea..0000000000 --- a/ext/tk/lib/tktext.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tktext.rb - load tk/text.rb -# -require 'tk/text' diff --git a/ext/tk/lib/tkvirtevent.rb b/ext/tk/lib/tkvirtevent.rb deleted file mode 100644 index f4fae19a0a..0000000000 --- a/ext/tk/lib/tkvirtevent.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkvirtevent.rb - load tk/virtevent.rb -# -require 'tk/virtevent' diff --git a/ext/tk/lib/tkwinpkg.rb b/ext/tk/lib/tkwinpkg.rb deleted file mode 100644 index 83371c546d..0000000000 --- a/ext/tk/lib/tkwinpkg.rb +++ /dev/null @@ -1,4 +0,0 @@ -# -# tkwinpkg.rb - load tk/winpkg.rb -# -require 'tk/winpkg' |
