module Tk
methods to control default widget set
string with Tcl's encoding
ttk_selector
toplevel classes/modules
autoload
tkextlib/tcllib/tablelist_core.rb
by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) * Part of tcllib extension * This file is required by 'tkextlib/tcllib/tablelist.rb' or 'tkextlib/tcllib/tablelist_tile.rb'.
autoload
release date of tkextlib
autoload
create module/class
create module/class
create module/class
Constants
- AUTO_PATH
- CloneMenu
- Fontchooser
- LIBRARY_PATH
- Labelframe
- MenuButton
- OptionMenuButton
- PACKAGE_PATH
- Panedwindow
- TCL_LIBRARY_PATH
- TCL_PACKAGE_PATH
AUTO_OLDPATH = tk_split_simplelist(INTERP._invoke('set', 'auto_oldpath')) AUTO_OLDPATH.each{|s| s.freeze} AUTO_OLDPATH.freeze
- TCL_PRECISION
- Tkextlib_RELEASE_DATE
- TreeCtrl_Widget
- X_Scrollable
- Y_Scrollable
Public Class Methods
BinaryString(str)
click to toggle source
# File lib/tk/autoload.rb, line 114 def Tk.BinaryString(str); Tk::BinaryString.new(str); end
EncodedString(str, enc = nil)
click to toggle source
# File lib/tk/autoload.rb, line 111 def Tk.EncodedString(str, enc = nil); Tk::EncodedString.new(str, enc); end
UTF8_String(str)
click to toggle source
# File lib/tk/autoload.rb, line 117 def Tk.UTF8_String(str); Tk::UTF8_String.new(str); end
__create_widget_set__(new_set, src_set={})
click to toggle source
# File lib/tk/autoload.rb, line 722 def __create_widget_set__(new_set, src_set={}) new_set = new_set.to_sym if @TOPLEVEL_ALIAS_TABLE[new_set] fail RuntimeError, "A widget-set #{new_set.inspect} is already exist." end if src_set.kind_of?(Symbol) # new_set is an alias name of existed widget set. @TOPLEVEL_ALIAS_TABLE[new_set] = @TOPLEVEL_ALIAS_TABLE[src_set] else @TOPLEVEL_ALIAS_TABLE[new_set] = {} src_set.each{|sym, obj| set_topalias(new_set, obj, sym.to_sym) } end end
__disable_toplevel_control__(*symbols)
click to toggle source
# File lib/tk/autoload.rb, line 718 def __disable_toplevel_control__(*symbols) symbols.each{|sym| @TOPLEVEL_ALIAS_OWNER[sym.to_sym] = false} end
__import_toplevel_aliases__(target, *symbols)
click to toggle source
# File lib/tk/autoload.rb, line 669 def __import_toplevel_aliases__(target, *symbols) current = @current_default_widget_set symbols.each{|sym| sym = sym.to_sym if (obj = @TOPLEVEL_ALIAS_TABLE[target][sym]).nil? # remove @TOPLEVEL_ALIAS_TABLE[current].delete(sym) @TOPLEVEL_ALIAS_OWNER.delete(sym) Tk::TOPLEVEL_ALIASES.module_eval{remove_const sym} if topalias_defined?(sym) Object.class_eval{remove_const sym} if topobj_defined?(sym) elsif obj == false # remove, but OWNER[sym] <- false and not treat Object::sym @TOPLEVEL_ALIAS_TABLE[current].delete(sym) @TOPLEVEL_ALIAS_OWNER[sym] = false Tk::TOPLEVEL_ALIASES.module_eval{remove_const sym} if topalias_defined?(sym) elsif @TOPLEVEL_ALIAS_OWNER[sym] == false # Object::sym is out of control. --> not change # Keep OWNER[sym]. @TOPLEVEL_ALIAS_TABLE[current][sym] = obj replace_topalias(sym, obj) else # new definition under control @TOPLEVEL_ALIAS_OWNER[sym] = current @TOPLEVEL_ALIAS_TABLE[current][sym] = obj replace_topalias(sym, obj) replace_topobj(sym, obj) end } end
__regist_toplevel_aliases__(target, obj, *symbols)
click to toggle source
# File lib/tk/autoload.rb, line 436 def __regist_toplevel_aliases__(target, obj, *symbols) # initial regist @TOPLEVEL_ALIAS_TABLE[target = target.to_sym] ||= {} symbols.each{|sym| @TOPLEVEL_ALIAS_TABLE[target][sym = sym.to_sym] = obj if !topalias_defined?(sym) || target == @current_default_widget_set @TOPLEVEL_ALIAS_OWNER[sym] = target replace_topalias(sym, obj) replace_topobj(sym, obj) unless obj.kind_of?(String) # NOT autoload end } end
__remove_toplevel_aliases__(*symbols)
click to toggle source
# File lib/tk/autoload.rb, line 702 def __remove_toplevel_aliases__(*symbols) # remove toplevel aliases of current widget set current = @current_default_widget_set symbols.each{|sym| sym = sym.to_sym @TOPLEVEL_ALIAS_TABLE[current].delete(sym) @TOPLEVEL_ALIAS_OWNER.delete(sym) Tk::TOPLEVEL_ALIASES.module_eval{remove_const sym} if topalias_defined?(sym) Object.class_eval{remove_const sym} if topobj_defined?(sym) } end
__reset_toplevel_owner__(*symbols)
click to toggle source
# File lib/tk/autoload.rb, line 714 def __reset_toplevel_owner__(*symbols) symbols.each{|sym| @TOPLEVEL_ALIAS_OWNER.delete(sym.to_sym)} end
__set_loaded_toplevel_aliases__(autopath, target, obj, *symbols)
click to toggle source
# File lib/tk/autoload.rb, line 586 def __set_loaded_toplevel_aliases__(autopath, target, obj, *symbols) # autopath is an autoload file # Currently, this method doesn't support that autoload loads # different toplevels between <basename>.rb and <basename>.so extension. shortpath = (autopath =~ /^(.*)(.rb|.so)$/)? $1: autopath target = target.to_sym symbols.map!{|sym| sym.to_sym} symbols.each{|sym| regist_sym_for_loaded_file(shortpath, obj, sym) } symbols.each{|sym| set_topalias(target, obj, sym)} end
__set_toplevel_aliases__(target, obj, *symbols)
click to toggle source
# File lib/tk/autoload.rb, line 579 def __set_toplevel_aliases__(target, obj, *symbols) # obj is a kind of String : define autoload path # Class : use the class object target = target.to_sym symbols.each{|sym| set_topalias(target, obj, sym.to_sym)} end
__toplevel_alias_setup_proc__(*target_list, &cmd)
click to toggle source
# File lib/tk/autoload.rb, line 369 def __toplevel_alias_setup_proc__(*target_list, &cmd) target_list.each{|target| @TOPLEVEL_ALIAS_SETUP_PROC[target.to_sym] = cmd} end
cursor_display(parent=None)
click to toggle source
# File lib/tkextlib/tcllib/cursor.rb, line 46 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
default_widget_set()
click to toggle source
# File lib/tk/autoload.rb, line 342 def default_widget_set @current_default_widget_set end
default_widget_set=(target)
click to toggle source
# File lib/tk/autoload.rb, line 346 def default_widget_set=(target) target = target.to_sym return target if target == @current_default_widget_set if (cmd = @TOPLEVEL_ALIAS_SETUP_PROC[target]) cmd.call(target) end _replace_toplevel_aliases(target) end
load_tclscript_rsrc(resource_name, file=None)
click to toggle source
# File lib/tk/macpkg.rb, line 12 def Tk.load_tclscript_rsrc(resource_name, file=None) # Mac only tk_call('source', '-rsrc', resource_name, file) end
load_tclscript_rsrcid(resource_id, file=None)
click to toggle source
# File lib/tk/macpkg.rb, line 17 def Tk.load_tclscript_rsrcid(resource_id, file=None) # Mac only tk_call('source', '-rsrcid', resource_id, file) end
toplevel_aliases_on_widget_set(widget_set)
click to toggle source
# File lib/tk/autoload.rb, line 361 def toplevel_aliases_on_widget_set(widget_set) if (tbl = @TOPLEVEL_ALIAS_TABLE[widget_set.to_sym]) tbl.collect{|k, v| (v.nil?)? nil: k}.compact else fail ArgumentError, "unknown widget_set #{widget_set.to_sym.inspect}" end end
widget_set_symbols()
click to toggle source
# File lib/tk/autoload.rb, line 357 def widget_set_symbols @TOPLEVEL_ALIAS_TABLE.keys end
Private Class Methods
_replace_toplevel_aliases(target)
click to toggle source
# File lib/tk/autoload.rb, line 643 def _replace_toplevel_aliases(target) # backup @TOPLEVEL_ALIAS_TABLE[target].each_key{|sym| backup_current_topdef(sym) } # replace @TOPLEVEL_ALIAS_TABLE[target].each_key{|sym| next if (obj = @TOPLEVEL_ALIAS_TABLE[target][sym]).nil? if @TOPLEVEL_ALIAS_OWNER[sym] == false # Object::sym is out of control. --> not change # Keep OWNER[sym]. replace_topalias(sym, obj) else # New definition @TOPLEVEL_ALIAS_OWNER[sym] = target replace_topalias(sym, obj) replace_topobj(sym, obj) end } # change default_widget_set @current_default_widget_set = target end
backup_current_topdef(sym)
click to toggle source
# File lib/tk/autoload.rb, line 598 def backup_current_topdef(sym) return if (current = @current_default_widget_set).nil? case @TOPLEVEL_ALIAS_OWNER[sym] when false # Object::sym is out of control. if (cur_alias = topalias_defined?(sym)) && ! cur_alias.kind_of?(String) @TOPLEVEL_ALIAS_TABLE[current][sym] = cur_alias end when current if cur_obj = topobj_defined?(sym) if ! cur_obj.kind_of?(String) && (cur_alias = topalias_defined?(sym)) if cur_alias.kind_of?(String) # Maybe, user replaced Object::sym. # Make Object::sym out of control. @TOPLEVEL_ALIAS_OWNER[sym] = false elsif cur_obj == cur_alias # Possibly, defined normally. Backup it @TOPLEVEL_ALIAS_TABLE[current][sym] = cur_alias else # Maybe, user replaced Object::sym. # Make Object::sym out of control. @TOPLEVEL_ALIAS_OWNER[sym] = false end end else # Maybe, user replaced Object::sym. # Make Object::sym out of control. @TOPLEVEL_ALIAS_OWNER[sym] = false end when nil # Object::sym is out of control. if (cur_alias = topalias_defined?(sym)) && ! cur_alias.kind_of?(String) # Possibly, defined normally. Backup it. @TOPLEVEL_ALIAS_TABLE[current][sym] = cur_alias end else # No authority to control Object::sym and ALIASES::sym. # Do nothing. end end
define_topalias(sym, obj)
click to toggle source
# File lib/tk/autoload.rb, line 400 def define_topalias(sym, obj) if obj.kind_of? String # obj is an autoload path Tk::TOPLEVEL_ALIASES.autoload(sym, obj) unless Tk::TOPLEVEL_ALIASES.autoload?(sym) # file is autoloaded? if @AUTOLOAD_FILE_SYM_TABLE.has_key?(obj) && (loaded_obj = @AUTOLOAD_FILE_SYM_TABLE[obj][sym]) Tk::TOPLEVEL_ALIASES.const_set(sym, loaded_obj) else fail ArgumentError, "cannot define autoload file (already loaded?)" end end else # object Tk::TOPLEVEL_ALIASES.const_set(sym, obj) end end
define_topobj(sym, obj)
click to toggle source
# File lib/tk/autoload.rb, line 382 def define_topobj(sym, obj) if obj.kind_of? String # obj is an autoload path Object.autoload(sym, obj) unless Object.autoload?(sym) # file is autoloaded? if @AUTOLOAD_FILE_SYM_TABLE.has_key?(obj) && (loaded_obj = @AUTOLOAD_FILE_SYM_TABLE[obj][sym]) Object.const_set(sym, loaded_obj) else fail ArgumentError, "cannot define autoload file (already loaded?)" end end else # object Object.const_set(sym, obj) end end
regist_sym_for_loaded_file(auto, obj, sym)
click to toggle source
# File lib/tk/autoload.rb, line 449 def regist_sym_for_loaded_file(auto, obj, sym) @AUTOLOAD_FILE_SYM_TABLE[auto][sym] = obj reg = /^#{Regexp.quote(auto)}(\.rb|\.so|)$/ @TOPLEVEL_ALIAS_TABLE.each_key{|set| if @TOPLEVEL_ALIAS_TABLE[set][sym] =~ reg @TOPLEVEL_ALIAS_TABLE[set][sym] = obj if @TOPLEVEL_ALIAS_OWNER[sym].nil? || @TOPLEVEL_ALIAS_OWNER[sym] == set replace_topalias(sym, obj) replace_topobj(sym, obj) if set == @current_default_widget_set end end } if (f = Object.autoload?(sym)) && f =~ reg replace_topobj(sym, obj) end if (f = Tk::TOPLEVEL_ALIASES.autoload?(sym)) && f =~ reg replace_topalias(sym, obj) end end
replace_topalias(sym, obj)
click to toggle source
# File lib/tk/autoload.rb, line 425 def replace_topalias(sym, obj) #=> old_obj (alias_filename or object) or nil if old_obj = topalias_defined?(sym) Tk::TOPLEVEL_ALIASES.module_eval{remove_const sym} rescue nil #ignore err end define_topalias(sym, obj) old_obj end
replace_topobj(sym, obj)
click to toggle source
# File lib/tk/autoload.rb, line 418 def replace_topobj(sym, obj) #=> old_obj (alias_filename or object) or nil if old_obj = topobj_defined?(sym) Object.class_eval{remove_const sym} rescue nil # ignore err end define_topobj(sym, obj) old_obj end
set_topalias(target, obj, sym)
click to toggle source
# File lib/tk/autoload.rb, line 471 def set_topalias(target, obj, sym) # obj is a kind of String : define autoload path # Class : use the class object if target == @current_default_widget_set case @TOPLEVEL_ALIAS_OWNER[sym] when false # Object::sym is out of control. --> not change # Make ALIAS::sym under control, because target widget set is current. # Keep OWNER[sym] @TOPLEVEL_ALIAS_TABLE[target][sym] = obj replace_topalias(sym, obj) when target if current_obj = topobj_defined?(sym) if current_obj == obj # Make current_obj under control. # Keep Object::sym. # Keep OWNER[sym]. @TOPLEVEL_ALIAS_TABLE[target][sym] = obj replace_topalias(sym, obj) else # current_obj != obj if current_obj == topalias_defined?(sym) # Change controlled object # Keep OWNER[sym]. @TOPLEVEL_ALIAS_TABLE[target][sym] = obj replace_topalias(sym, obj) replace_topobj(sym, obj) else # current_obj != topalias_defined?(sym) # Maybe current_obj is defined by user. --> OWNER[sym] = false # Keep Object::sym. @TOPLEVEL_ALIAS_OWNER[sym] = false @TOPLEVEL_ALIAS_TABLE[target][sym] = obj replace_topalias(sym, obj) end end else # NOT topobj_defined?(sym) # New definition for sym at target. # Keep OWNER[sym]. @TOPLEVEL_ALIAS_TABLE[target][sym] = obj replace_topalias(sym, obj) define_topobj(sym, obj) end when nil # New definition for sym at target. @TOPLEVEL_ALIAS_OWNER[sym] = target @TOPLEVEL_ALIAS_TABLE[target][sym] = obj replace_topalias(sym, obj) else # others # Maybe planning to make sym under control. @TOPLEVEL_ALIAS_OWNER[sym] = target @TOPLEVEL_ALIAS_TABLE[target][sym] = obj replace_topalias(sym, obj) replace_topobj(sym, obj) end else # target != @current_default_widget_set case @TOPLEVEL_ALIAS_OWNER[sym] when false # Object::sym is out of control. --> not change if topalias_defined?(sym) # ALIAS[sym] may be defined by other widget set. # Keep Object::sym (even if it is not defined) # Keep ALIAS[sym]. # Keep OWNER[sym]. @TOPLEVEL_ALIAS_TABLE[target][sym] = obj else # NOT topalias_defined?(sym) # Nobody controls ALIAS[sym]. # At least, current widget set doesn't control ALIAS[sym]. # Keep Object::sym (even if it is not defined) # Keep OWNER[sym]. @TOPLEVEL_ALIAS_TABLE[target][sym] = obj define_topalias(sym, obj) end when target # Maybe change controlled object, because Object::sym is under control. # Keep OWNER[sym]. @TOPLEVEL_ALIAS_TABLE[target][sym] = obj replace_topalias(sym, obj) replace_topobj(sym, obj) when nil # New definition for sym @TOPLEVEL_ALIAS_OWNER[sym] = target @TOPLEVEL_ALIAS_TABLE[target][sym] = obj replace_topalias(sym, obj) replace_topobj(sym, obj) else # others # An other widget set controls sym. # Keep Object::sym (even if it is not defined) # Keep ALIAS[sym]. # Keep OWNER[sym]. @TOPLEVEL_ALIAS_TABLE[target][sym] = obj end end sym end
topalias_defined?(sym)
click to toggle source
# File lib/tk/autoload.rb, line 377 def topalias_defined?(sym) #=> alias_filename or object or false Tk::TOPLEVEL_ALIASES.autoload?(sym) || (Tk::TOPLEVEL_ALIASES.const_defined?(sym) && Tk::TOPLEVEL_ALIASES.const_get(sym)) end
topobj_defined?(sym)
click to toggle source
# File lib/tk/autoload.rb, line 373 def topobj_defined?(sym) #=> alias_filename or object or false Object.autoload?(sym) || (Object.const_defined?(sym) && Object.const_get(sym)) end
Public Instance Methods
Grid(*args)
click to toggle source
# File lib/tk/autoload.rb, line 8 def Grid(*args); TkGrid.configure(*args); end
Pack(*args)
click to toggle source
# File lib/tk/autoload.rb, line 11 def Pack(*args); TkPack.configure(*args); end
Place(*args)
click to toggle source
# File lib/tk/autoload.rb, line 14 def Place(*args); TkPlace.configure(*args); end