File: tk/autoload.rb

Overview
Module Structure
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Tk#6, #29, #86, #250
extends
  Encoding ( Unknown-Module )
  Tk   
includes
  TkCore   
has properties
method: Grid / 1 #8
method: Pack / 1 #11
method: Place / 1 #14
module method: EncodedString / 2 #107
module method: BinaryString / 1 #110
module method: UTF8_String / 1 #113

Code

   1  #
   2  #  autoload
   3  #
   4  ############################################
   5  #  geometry manager
   6  module Tk
   7    autoload :Grid,             'tk/grid'
   8    def Grid(*args); TkGrid.configure(*args); end
   9 
  10    autoload :Pack,             'tk/pack'
  11    def Pack(*args); TkPack.configure(*args); end
  12 
  13    autoload :Place,            'tk/place'
  14    def Place(*args); TkPlace.configure(*args); end
  15  end
  16 
  17  autoload :TkGrid,             'tk/grid'
  18  def TkGrid(*args); TkGrid.configure(*args); end
  19 
  20  autoload :TkPack,             'tk/pack'
  21  def TkPack(*args); TkPack.configure(*args); end
  22 
  23  autoload :TkPlace,            'tk/place'
  24  def TkPlace(*args); TkPlace.configure(*args); end
  25 
  26 
  27  ############################################
  28  # classes on Tk module
  29  module Tk
  30    autoload :Button,           'tk/button'
  31 
  32    autoload :Canvas,           'tk/canvas'
  33 
  34    autoload :CheckButton,      'tk/checkbutton'
  35    autoload :Checkbutton,      'tk/checkbutton'
  36 
  37    autoload :Entry,            'tk/entry'
  38 
  39    autoload :Frame,            'tk/frame'
  40 
  41    autoload :Label,            'tk/label'
  42 
  43    autoload :LabelFrame,       'tk/labelframe'
  44    autoload :Labelframe,       'tk/labelframe'
  45 
  46    autoload :Listbox,          'tk/listbox'
  47 
  48    autoload :Menu,             'tk/menu'
  49    autoload :MenuClone,        'tk/menu'
  50    autoload :CloneMenu,        'tk/menu'
  51    autoload :SystemMenu,       'tk/menu'
  52    autoload :SysMenu_Help,     'tk/menu'
  53    autoload :SysMenu_System,   'tk/menu'
  54    autoload :SysMenu_Apple,    'tk/menu'
  55    autoload :Menubutton,       'tk/menu'
  56    autoload :MenuButton,       'tk/menu'
  57    autoload :OptionMenubutton, 'tk/menu'
  58    autoload :OptionMenBbutton, 'tk/menu'
  59 
  60    autoload :Message,          'tk/message'
  61 
  62    autoload :PanedWindow,      'tk/panedwindow'
  63    autoload :Panedwindow,      'tk/panedwindow'
  64 
  65    autoload :RadioButton,      'tk/radiobutton'
  66    autoload :Radiobutton,      'tk/radiobutton'
  67 
  68    autoload :Root,             'tk/root'
  69 
  70    autoload :Scale,            'tk/scale'
  71 
  72    autoload :Scrollbar,        'tk/scrollbar'
  73    autoload :XScrollbar,       'tk/scrollbar'
  74    autoload :YScrollbar,       'tk/scrollbar'
  75 
  76    autoload :Spinbox,          'tk/spinbox'
  77 
  78    autoload :Text,             'tk/text'
  79 
  80    autoload :Toplevel,         'tk/toplevel'
  81  end
  82 
  83 
  84  ############################################
  85  # sub-module of Tk
  86  module Tk
  87    autoload :Clock,            'tk/clock'
  88 
  89    autoload :OptionObj,        'tk/optionobj'
  90 
  91    autoload :X_Scrollable,     'tk/scrollable'
  92    autoload :Y_Scrollable,     'tk/scrollable'
  93    autoload :Scrollable,       'tk/scrollable'
  94 
  95    autoload :Wm,               'tk/wm'
  96    autoload :Wm_for_General,   'tk/wm'
  97 
  98    autoload :MacResource,      'tk/macpkg'
  99 
 100    autoload :WinDDE,           'tk/winpkg'
 101    autoload :WinRegistry,      'tk/winpkg'
 102 
 103    autoload :ValidateConfigure,     'tk/validation'
 104    autoload :ItemValidateConfigure, 'tk/validation'
 105 
 106    autoload :EncodedString,    'tk/encodedstr'
 107    def Tk.EncodedString(str, enc = nil); Tk::EncodedString.new(str, enc); end
 108 
 109    autoload :BinaryString,     'tk/encodedstr'
 110    def Tk.BinaryString(str); Tk::BinaryString.new(str); end
 111 
 112    autoload :UTF8_String,      'tk/encodedstr'
 113    def Tk.UTF8_String(str); Tk::UTF8_String.new(str); end
 114 
 115  end
 116 
 117 
 118  ############################################
 119  #  toplevel classes/modules (fixed)
 120  autoload :TkBgError,          'tk/bgerror'
 121 
 122  autoload :TkBindTag,          'tk/bindtag'
 123  autoload :TkBindTagAll,       'tk/bindtag'
 124  autoload :TkDatabaseClass,    'tk/bindtag'
 125 
 126  autoload :TkConsole,          'tk/console'
 127 
 128  autoload :TkcItem,            'tk/canvas'
 129  autoload :TkcArc,             'tk/canvas'
 130  autoload :TkcBitmap,          'tk/canvas'
 131  autoload :TkcImage,           'tk/canvas'
 132  autoload :TkcLine,            'tk/canvas'
 133  autoload :TkcOval,            'tk/canvas'
 134  autoload :TkcPolygon,         'tk/canvas'
 135  autoload :TkcRectangle,       'tk/canvas'
 136  autoload :TkcText,            'tk/canvas'
 137  autoload :TkcWindow,          'tk/canvas'
 138 
 139  autoload :TkcTagAccess,       'tk/canvastag'
 140  autoload :TkcTag,             'tk/canvastag'
 141  autoload :TkcTagString,       'tk/canvastag'
 142  autoload :TkcNamedTag,        'tk/canvastag'
 143  autoload :TkcTagAll,          'tk/canvastag'
 144  autoload :TkcTagCurrent,      'tk/canvastag'
 145  autoload :TkcTagGroup,        'tk/canvastag'
 146 
 147  autoload :TkClipboard,        'tk/clipboard'
 148 
 149  autoload :TkComposite,        'tk/composite'
 150 
 151  autoload :TkConsole,          'tk/console'
 152 
 153  autoload :TkDialog,           'tk/dialog'
 154  autoload :TkDialog2,          'tk/dialog'
 155  autoload :TkDialogObj,        'tk/dialog'
 156  autoload :TkWarning,          'tk/dialog'
 157  autoload :TkWarning2,         'tk/dialog'
 158  autoload :TkWarningObj,       'tk/dialog'
 159 
 160  autoload :TkEvent,            'tk/event'
 161 
 162  autoload :TkFont,             'tk/font'
 163  autoload :TkNamedFont,        'tk/font'
 164 
 165  autoload :TkImage,            'tk/image'
 166  autoload :TkBitmapImage,      'tk/image'
 167  autoload :TkPhotoImage,       'tk/image'
 168 
 169  autoload :TkItemConfigMethod, 'tk/itemconfig'
 170 
 171  autoload :TkTreatItemFont,    'tk/itemfont'
 172 
 173  autoload :TkKinput,           'tk/kinput'
 174 
 175  autoload :TkSystemMenu,       'tk/menu'
 176 
 177  autoload :TkMenubar,          'tk/menubar'
 178 
 179  autoload :TkMenuSpec,         'tk/menuspec'
 180 
 181  autoload :TkManageFocus,      'tk/mngfocus'
 182 
 183  autoload :TkMsgCatalog,       'tk/msgcat'
 184  autoload :TkMsgCat,           'tk/msgcat'
 185 
 186  autoload :TkNamespace,        'tk/namespace'
 187 
 188  autoload :TkOptionDB,         'tk/optiondb'
 189  autoload :TkOption,           'tk/optiondb'
 190  autoload :TkResourceDB,       'tk/optiondb'
 191 
 192  autoload :TkPackage,          'tk/package'
 193 
 194  autoload :TkPalette,          'tk/palette'
 195 
 196  autoload :TkRoot,             'tk/root'
 197 
 198  autoload :TkScrollbox,        'tk/scrollbox'
 199 
 200  autoload :TkSelection,        'tk/selection'
 201 
 202  autoload :TkTreatTagFont,     'tk/tagfont'
 203 
 204  autoload :TkTextImage,        'tk/textimage'
 205  autoload :TktImage,           'tk/textimage'
 206 
 207  autoload :TkTextMark,         'tk/textmark'
 208  autoload :TkTextNamedMark,    'tk/textmark'
 209  autoload :TkTextMarkInsert,   'tk/textmark'
 210  autoload :TkTextMarkCurrent,  'tk/textmark'
 211  autoload :TkTextMarkAnchor,   'tk/textmark'
 212  autoload :TktMark,            'tk/textmark'
 213  autoload :TktNamedMark,       'tk/textmark'
 214  autoload :TktMarkInsert,      'tk/textmark'
 215  autoload :TktMarkCurrent,     'tk/textmark'
 216  autoload :TktMarkAnchor,      'tk/textmark'
 217 
 218  autoload :TkTextTag,          'tk/texttag'
 219  autoload :TkTextNamedTag,     'tk/texttag'
 220  autoload :TkTextTagSel,       'tk/texttag'
 221  autoload :TktTag,             'tk/texttag'
 222  autoload :TktNamedTag,        'tk/texttag'
 223  autoload :TktTagSel,          'tk/texttag'
 224 
 225  autoload :TkTextWindow,       'tk/textwindow'
 226  autoload :TktWindow,          'tk/textwindow'
 227 
 228  autoload :TkAfter,            'tk/timer'
 229  autoload :TkTimer,            'tk/timer'
 230  autoload :TkRTTimer,          'tk/timer'
 231 
 232  autoload :TkTextWin,          'tk/txtwin_abst'
 233 
 234  autoload :TkValidation,       'tk/validation'
 235  autoload :TkValidateCommand,  'tk/validation'
 236 
 237  autoload :TkVariable,         'tk/variable'
 238  autoload :TkVarAccess,        'tk/variable'
 239 
 240  autoload :TkVirtualEvent,     'tk/virtevent'
 241  autoload :TkNamedVirtualEvent,'tk/virtevent'
 242 
 243  autoload :TkWinfo,            'tk/winfo'
 244 
 245  autoload :TkXIM,              'tk/xim'
 246 
 247 
 248  ############################################
 249  #  toplevel classes/modules (switchable)
 250  module Tk
 251    @TOPLEVEL_ALIAS_TABLE = {}
 252    @TOPLEVEL_ALIAS_TABLE[:Tk] = {
 253      :TkButton             => 'tk/button', 
 254 
 255      :TkCanvas             => 'tk/canvas', 
 256 
 257      :TkCheckButton        => 'tk/checkbutton', 
 258      :TkCheckbutton        => 'tk/checkbutton', 
 259 
 260      # :TkDialog             => 'tk/dialog', 
 261      # :TkDialog2            => 'tk/dialog', 
 262      # :TkDialogObj          => 'tk/dialog', 
 263      # :TkWarning            => 'tk/dialog', 
 264      # :TkWarning2           => 'tk/dialog', 
 265      # :TkWarningObj         => 'tk/dialog', 
 266 
 267      :TkEntry              => 'tk/entry', 
 268 
 269      :TkFrame              => 'tk/frame', 
 270 
 271      :TkLabel              => 'tk/label', 
 272 
 273      :TkLabelFrame         => 'tk/labelframe', 
 274      :TkLabelframe         => 'tk/labelframe', 
 275 
 276      :TkListbox            => 'tk/listbox', 
 277 
 278      :TkMacResource        => 'tk/macpkg', 
 279 
 280      :TkMenu               => 'tk/menu', 
 281      :TkMenuClone          => 'tk/menu', 
 282      :TkCloneMenu          => 'tk/menu', 
 283      # :TkSystemMenu         => 'tk/menu', 
 284      :TkSysMenu_Help       => 'tk/menu', 
 285      :TkSysMenu_System     => 'tk/menu', 
 286      :TkSysMenu_Apple      => 'tk/menu', 
 287      :TkMenubutton         => 'tk/menu', 
 288      :TkMenuButton         => 'tk/menu', 
 289      :TkOptionMenubutton   => 'tk/menu', 
 290      :TkOptionMenuButton   => 'tk/menu', 
 291 
 292      :TkMessage            => 'tk/message', 
 293 
 294      :TkPanedWindow        => 'tk/panedwindow', 
 295      :TkPanedwindow        => 'tk/panedwindow', 
 296 
 297      :TkRadioButton        => 'tk/radiobutton', 
 298      :TkRadiobutton        => 'tk/radiobutton', 
 299 
 300      # :TkRoot               => 'tk/root', 
 301 
 302      :TkScale              => 'tk/scale', 
 303 
 304      :TkScrollbar          => 'tk/scrollbar', 
 305      :TkXScrollbar         => 'tk/scrollbar', 
 306      :TkYScrollbar         => 'tk/scrollbar', 
 307 
 308      :TkSpinbox            => 'tk/spinbox', 
 309 
 310      :TkText               => 'tk/text', 
 311 
 312      :TkToplevel           => 'tk/toplevel', 
 313 
 314      :TkWinDDE             => 'tk/winpkg', 
 315      :TkWinRegistry        => 'tk/winpkg', 
 316    }
 317 
 318    @TOPLEVEL_ALIAS_OWNER = {}
 319 
 320    @TOPLEVEL_ALIAS_SETUP_PROC = {}
 321 
 322    @current_default_widget_set = nil
 323  end
 324 
 325 
 326  ############################################
 327  #  methods to control default widget set
 328  ############################################
 329 
 330  class << Tk
 331    def default_widget_set
 332      @current_default_widget_set
 333    end
 334 
 335    def default_widget_set=(target)
 336      target = target.to_sym
 337      return target if target == @current_default_widget_set
 338 
 339      if (cmd = @TOPLEVEL_ALIAS_SETUP_PROC[target])
 340        cmd.call(target)
 341      end
 342 
 343      _replace_toplevel_aliases(target)
 344    end
 345 
 346    def __set_toplevel_aliases__(target, obj, *symbols)
 347      @TOPLEVEL_ALIAS_TABLE[target = target.to_sym] ||= {}
 348      symbols.each{|sym|
 349        @TOPLEVEL_ALIAS_TABLE[target][sym = sym.to_sym] = obj
 350        # if @current_default_widget_set == target
 351        if @TOPLEVEL_ALIAS_OWNER[sym] == target
 352          Object.class_eval{remove_const sym} if Object.const_defined?(sym)
 353          Object.const_set(sym, obj)
 354        end
 355      }
 356    end
 357 
 358    ###################################
 359    private
 360    def _replace_toplevel_aliases(target)
 361      # check already autoloaded
 362      if (table = @TOPLEVEL_ALIAS_TABLE[current = @current_default_widget_set])
 363        table.each{|sym, file|
 364          if !Object.autoload?(sym) && Object.const_defined?(sym) && 
 365              @TOPLEVEL_ALIAS_TABLE[current][sym].kind_of?(String)
 366            # autoload -> class
 367            @TOPLEVEL_ALIAS_TABLE[current][sym] = Object.const_get(sym)
 368          end
 369        }
 370      end
 371 
 372      # setup autoloads
 373      @TOPLEVEL_ALIAS_TABLE[target].each{|sym, file|
 374        Object.class_eval{remove_const sym} if Object.const_defined?(sym)
 375        if file.kind_of?(String)
 376          # file => autoload target file
 377          Object.autoload(sym, file)
 378        else
 379          # file => loaded class object
 380          Object.const_set(sym, file)
 381        end
 382        @TOPLEVEL_ALIAS_OWNER[sym] = target
 383      }
 384 
 385      # update current alias
 386      @current_default_widget_set = target
 387    end
 388  end
 389 
 390  ############################################
 391  # setup default widget set => :Tk
 392  Tk.default_widget_set = :Tk
 393 
 394 
 395  ############################################
 396  #  depend on the version of Tcl/Tk
 397  # major, minor, type, type_name, patchlevel = TclTkLib.get_version
 398 
 399  ############################################
 400  # Ttk (Tile) support
 401  =begin
 402  if major > 8 || 
 403      (major == 8 && minor > 5) || 
 404      (major == 8 && minor == 5 && type >= TclTkLib::RELEASE_TYPE::BETA) 
 405    # Tcl/Tk 8.5 beta or later
 406    Object.autoload :Ttk, 'tkextlib/tile'
 407    Tk.autoload :Tile, 'tkextlib/tile'
 408 
 409    require 'tk/ttk_selector'
 410  end
 411  =end
 412  Object.autoload :Ttk, 'tkextlib/tile'
 413  Tk.autoload :Tile, 'tkextlib/tile'
 414  require 'tk/ttk_selector'