module Tk

methods to control default widget set

string with Tcl's encoding

frozen_string_literal: false

ttk_selector

toplevel classes/modules

autoload

frozen_string_literal: false

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

frozen_string_literal: false

release date of tkextlib

autoload

create module/class

create module/class

create module/class

Constants

AUTO_PATH
Checkbutton
CloneMenu
Fontchooser
LIBRARY_PATH
Labelframe
OptionMenuButton
PACKAGE_PATH
Panedwindow
Radiobutton
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 115
def Tk.BinaryString(str); Tk::BinaryString.new(str); end
EncodedString(str, enc = nil) click to toggle source
# File lib/tk/autoload.rb, line 112
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 118
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 723
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 719
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 670
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 437
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 703
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 715
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 587
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 580
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 370
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 47
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 343
def default_widget_set
  @current_default_widget_set
end
default_widget_set=(target) click to toggle source
# File lib/tk/autoload.rb, line 347
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 13
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 18
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 362
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 358
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 644
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 599
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 401
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 383
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 450
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 426
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 419
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 472
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 378
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 374
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 9
def Grid(*args); TkGrid.configure(*args); end
Pack(*args) click to toggle source
# File lib/tk/autoload.rb, line 12
def Pack(*args); TkPack.configure(*args); end
Place(*args) click to toggle source
# File lib/tk/autoload.rb, line 15
def Place(*args); TkPlace.configure(*args); end