diff options
Diffstat (limited to 'ext/tk/lib/tk/autoload.rb')
-rw-r--r-- | ext/tk/lib/tk/autoload.rb | 383 |
1 files changed, 235 insertions, 148 deletions
diff --git a/ext/tk/lib/tk/autoload.rb b/ext/tk/lib/tk/autoload.rb index ace0787fc2..bc8274c2e2 100644 --- a/ext/tk/lib/tk/autoload.rb +++ b/ext/tk/lib/tk/autoload.rb @@ -1,21 +1,7 @@ # # autoload # -major, minor, type, type_name, patchlevel = TclTkLib.get_version - -###################################### -# depend on version of Tcl/Tk -if major > 8 || - (major == 8 && minor > 5) || - (major == 8 && minor == 5 && type >= TclTkLib::RELEASE_TYPE::BETA) - # Tcl/Tk 8.5 beta or later - autoload :Ttk, 'tkextlib/tile' - module Tk - autoload :Tile, 'tkextlib/tile' - end -end - -###################################### +############################################ # geometry manager module Tk autoload :Grid, 'tk/grid' @@ -38,12 +24,7 @@ autoload :TkPlace, 'tk/place' def TkPlace(*args); TkPlace.configure(*args); end -###################################### -# Ttk (Tile) support -require 'tk/ttk_selector' - - -###################################### +############################################ # classes on Tk module module Tk autoload :Button, 'tk/button' @@ -66,12 +47,15 @@ module Tk autoload :Menu, 'tk/menu' autoload :MenuClone, 'tk/menu' + autoload :CloneMenu, 'tk/menu' autoload :SystemMenu, 'tk/menu' autoload :SysMenu_Help, 'tk/menu' autoload :SysMenu_System, 'tk/menu' autoload :SysMenu_Apple, 'tk/menu' autoload :Menubutton, 'tk/menu' + autoload :MenuButton, 'tk/menu' autoload :OptionMenubutton, 'tk/menu' + autoload :OptionMenBbutton, 'tk/menu' autoload :Message, 'tk/message' @@ -97,7 +81,7 @@ module Tk end -###################################### +############################################ # sub-module of Tk module Tk autoload :Clock, 'tk/clock' @@ -129,184 +113,287 @@ module Tk end -###################################### -# toplevel classes/modules -autoload_list = { - :TkBgError => 'tk/bgerror', - :TkBindTag => 'tk/bindtag', - :TkBindTagAll => 'tk/bindtag', - :TkDatabaseClass => 'tk/bindtag', +############################################ +# toplevel classes/modules (fixed) +autoload :TkBgError, 'tk/bgerror' - :TkButton => 'tk/button', +autoload :TkBindTag, 'tk/bindtag' +autoload :TkBindTagAll, 'tk/bindtag' +autoload :TkDatabaseClass, 'tk/bindtag' - :TkCanvas => 'tk/canvas', +autoload :TkConsole, 'tk/console' - :TkcItem => 'tk/canvas', - :TkcArc => 'tk/canvas', - :TkcBitmap => 'tk/canvas', - :TkcImage => 'tk/canvas', - :TkcLine => 'tk/canvas', - :TkcOval => 'tk/canvas', - :TkcPolygon => 'tk/canvas', - :TkcRectangle => 'tk/canvas', - :TkcText => 'tk/canvas', - :TkcWindow => 'tk/canvas', +autoload :TkcItem, 'tk/canvas' +autoload :TkcArc, 'tk/canvas' +autoload :TkcBitmap, 'tk/canvas' +autoload :TkcImage, 'tk/canvas' +autoload :TkcLine, 'tk/canvas' +autoload :TkcOval, 'tk/canvas' +autoload :TkcPolygon, 'tk/canvas' +autoload :TkcRectangle, 'tk/canvas' +autoload :TkcText, 'tk/canvas' +autoload :TkcWindow, 'tk/canvas' - :TkcTagAccess => 'tk/canvastag', - :TkcTag => 'tk/canvastag', - :TkcTagString => 'tk/canvastag', - :TkcNamedTag => 'tk/canvastag', - :TkcTagAll => 'tk/canvastag', - :TkcTagCurrent => 'tk/canvastag', - :TkcTagGroup => 'tk/canvastag', +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' - :TkCheckButton => 'tk/checkbutton', - :TkCheckbutton => 'tk/checkbutton', +autoload :TkClipboard, 'tk/clipboard' - :TkClipboard => 'tk/clipboard', +autoload :TkComposite, 'tk/composite' - :TkComposite => 'tk/composite', +autoload :TkConsole, 'tk/console' - :TkConsole => 'tk/console', +autoload :TkDialog, 'tk/dialog' +autoload :TkDialog2, 'tk/dialog' +autoload :TkDialogObj, 'tk/dialog' +autoload :TkWarning, 'tk/dialog' +autoload :TkWarning2, 'tk/dialog' +autoload :TkWarningObj, 'tk/dialog' - :TkDialog => 'tk/dialog', - :TkDialog2 => 'tk/dialog', - :TkDialogObj => 'tk/dialog', - :TkWarning => 'tk/dialog', - :TkWarning2 => 'tk/dialog', - :TkWarningObj => 'tk/dialog', +autoload :TkEvent, 'tk/event' - :TkEntry => 'tk/entry', +autoload :TkFont, 'tk/font' +autoload :TkTreatTagFont, 'tk/font' - :TkEvent => 'tk/event', +autoload :TkImage, 'tk/image' +autoload :TkBitmapImage, 'tk/image' +autoload :TkPhotoImage, 'tk/image' - :TkFont => 'tk/font', - :TkTreatTagFont => 'tk/font', +autoload :TkItemConfigMethod, 'tk/itemconfig' - :TkFrame => 'tk/frame', +autoload :TkTreatItemFont, 'tk/itemfont' - :TkImage => 'tk/image', - :TkBitmapImage => 'tk/image', - :TkPhotoImage => 'tk/image', +autoload :TkKinput, 'tk/kinput' - :TkItemConfigMethod => 'tk/itemconfig', +autoload :TkSystemMenu, 'tk/menu' - :TkTreatItemFont => 'tk/itemfont', +autoload :TkMenubar, 'tk/menubar' - :TkKinput => 'tk/kinput', +autoload :TkMenuSpec, 'tk/menuspec' - :TkLabel => 'tk/label', +autoload :TkManageFocus, 'tk/mngfocus' - :TkLabelFrame => 'tk/labelframe', - :TkLabelframe => 'tk/labelframe', +autoload :TkMsgCatalog, 'tk/msgcat' +autoload :TkMsgCat, 'tk/msgcat' - :TkListbox => 'tk/listbox', +autoload :TkNamespace, 'tk/namespace' - :TkMacResource => 'tk/macpkg', +autoload :TkOptionDB, 'tk/optiondb' +autoload :TkOption, 'tk/optiondb' +autoload :TkResourceDB, 'tk/optiondb' - :TkMenu => 'tk/menu', - :TkMenuClone => 'tk/menu', - :TkSystemMenu => 'tk/menu', - :TkSysMenu_Help => 'tk/menu', - :TkSysMenu_System => 'tk/menu', - :TkSysMenu_Apple => 'tk/menu', - :TkMenubutton => 'tk/menu', - :TkOptionMenubutton => 'tk/menu', +autoload :TkPackage, 'tk/package' - :TkMenubar => 'tk/menubar', +autoload :TkPalette, 'tk/palette' - :TkMenuSpec => 'tk/menuspec', +autoload :TkScrollbox, 'tk/scrollbox' - :TkMessage => 'tk/message', +autoload :TkSelection, 'tk/selection' - :TkManageFocus => 'tk/mngfocus', +autoload :TkTreatTagFont, 'tk/tagfont' - :TkMsgCatalog => 'tk/msgcat', - :TkMsgCat => 'tk/msgcat', +autoload :TkTextImage, 'tk/textimage' +autoload :TktImage, 'tk/textimage' - :TkNamespace => 'tk/namespace', +autoload :TkTextMark, 'tk/textmark' +autoload :TkTextNamedMark, 'tk/textmark' +autoload :TkTextMarkInsert, 'tk/textmark' +autoload :TkTextMarkCurrent, 'tk/textmark' +autoload :TkTextMarkAnchor, 'tk/textmark' +autoload :TktMark, 'tk/textmark' +autoload :TktNamedMark, 'tk/textmark' +autoload :TktMarkInsert, 'tk/textmark' +autoload :TktMarkCurrent, 'tk/textmark' +autoload :TktMarkAnchor, 'tk/textmark' - :TkOptionDB => 'tk/optiondb', - :TkOption => 'tk/optiondb', - :TkResourceDB => 'tk/optiondb', +autoload :TkTextTag, 'tk/texttag' +autoload :TkTextNamedTag, 'tk/texttag' +autoload :TkTextTagSel, 'tk/texttag' +autoload :TktTag, 'tk/texttag' +autoload :TktNamedTag, 'tk/texttag' +autoload :TktTagSel, 'tk/texttag' - :TkPackage => 'tk/package', +autoload :TkTextWindow, 'tk/textwindow' +autoload :TktWindow, 'tk/textwindow' - :TkPalette => 'tk/palette', +autoload :TkAfter, 'tk/timer' +autoload :TkTimer, 'tk/timer' +autoload :TkRTTimer, 'tk/timer' - :TkPanedWindow => 'tk/panedwindow', - :TkPanedwindow => 'tk/panedwindow', +autoload :TkTextWin, 'tk/txtwin_abst' - :TkRadioButton => 'tk/radiobutton', - :TkRadiobutton => 'tk/radiobutton', +autoload :TkValidation, 'tk/validation' +autoload :TkValidateCommand, 'tk/validation' - :TkRoot => 'tk/root', +autoload :TkVariable, 'tk/variable' +autoload :TkVarAccess, 'tk/variable' - :TkScale => 'tk/scale', +autoload :TkVirtualEvent, 'tk/virtevent' +autoload :TkNamedVirtualEvent,'tk/virtevent' - :TkScrollbar => 'tk/scrollbar', - :TkXScrollbar => 'tk/scrollbar', - :TkYScrollbar => 'tk/scrollbar', +autoload :TkWinfo, 'tk/winfo' - :TkScrollbox => 'tk/scrollbox', +autoload :TkXIM, 'tk/xim' - :TkSelection => 'tk/selection', - :TkSpinbox => 'tk/spinbox', +############################################ +# toplevel classes/modules (switchable) +module Tk + @TOPLEVEL_ALIAS_TABLE = {} + @TOPLEVEL_ALIAS_TABLE[:Tk] = { + :TkButton => 'tk/button', + + :TkCanvas => 'tk/canvas', + + :TkCheckButton => 'tk/checkbutton', + :TkCheckbutton => 'tk/checkbutton', + + # :TkDialog => 'tk/dialog', + # :TkDialog2 => 'tk/dialog', + # :TkDialogObj => 'tk/dialog', + # :TkWarning => 'tk/dialog', + # :TkWarning2 => 'tk/dialog', + # :TkWarningObj => 'tk/dialog', + + :TkEntry => 'tk/entry', + + :TkFrame => 'tk/frame', - :TkTreatTagFont => 'tk/tagfont', + :TkLabel => 'tk/label', - :TkText => 'tk/text', + :TkLabelFrame => 'tk/labelframe', + :TkLabelframe => 'tk/labelframe', - :TkTextImage => 'tk/textimage', - :TktImage => 'tk/textimage', + :TkListbox => 'tk/listbox', - :TkTextMark => 'tk/textmark', - :TkTextNamedMark => 'tk/textmark', - :TkTextMarkInsert => 'tk/textmark', - :TkTextMarkCurrent => 'tk/textmark', - :TkTextMarkAnchor => 'tk/textmark', - :TktMark => 'tk/textmark', - :TktNamedMark => 'tk/textmark', - :TktMarkInsert => 'tk/textmark', - :TktMarkCurrent => 'tk/textmark', - :TktMarkAnchor => 'tk/textmark', + :TkMacResource => 'tk/macpkg', - :TkTextTag => 'tk/texttag', - :TkTextNamedTag => 'tk/texttag', - :TkTextTagSel => 'tk/texttag', - :TktTag => 'tk/texttag', - :TktNamedTag => 'tk/texttag', - :TktTagSel => 'tk/texttag', + :TkMenu => 'tk/menu', + :TkMenuClone => 'tk/menu', + :TkCloneMenu => 'tk/menu', + # :TkSystemMenu => 'tk/menu', + :TkSysMenu_Help => 'tk/menu', + :TkSysMenu_System => 'tk/menu', + :TkSysMenu_Apple => 'tk/menu', + :TkMenubutton => 'tk/menu', + :TkMenuButton => 'tk/menu', + :TkOptionMenubutton => 'tk/menu', + :TkOptionMenuButton => 'tk/menu', - :TkTextWindow => 'tk/textwindow', - :TktWindow => 'tk/textwindow', + :TkMessage => 'tk/message', - :TkAfter => 'tk/timer', - :TkTimer => 'tk/timer', - :TkRTTimer => 'tk/timer', + :TkPanedWindow => 'tk/panedwindow', + :TkPanedwindow => 'tk/panedwindow', - :TkToplevel => 'tk/toplevel', + :TkRadioButton => 'tk/radiobutton', + :TkRadiobutton => 'tk/radiobutton', - :TkTextWin => 'tk/txtwin_abst', + :TkRoot => 'tk/root', - :TkValidation => 'tk/validation', + :TkScale => 'tk/scale', - :TkVariable => 'tk/variable', - :TkVarAccess => 'tk/variable', + :TkScrollbar => 'tk/scrollbar', + :TkXScrollbar => 'tk/scrollbar', + :TkYScrollbar => 'tk/scrollbar', - :TkVirtualEvent => 'tk/virtevent', - :TkNamedVirtualEvent => 'tk/virtevent', + :TkSpinbox => 'tk/spinbox', - :TkWinfo => 'tk/winfo', + :TkText => 'tk/text', + + :TkToplevel => 'tk/toplevel', + + :TkWinDDE => 'tk/winpkg', + :TkWinRegistry => 'tk/winpkg', + } + + @TOPLEVEL_ALIAS_SETUP_PROC = {} + + @current_default_widget_set = nil +end - :TkWinDDE => 'tk/winpkg', - :TkWinRegistry => 'tk/winpkg', +############################################ - :TkXIM => 'tk/xim', -} -autoload_list.each{|mod, lib| - #autoload mod, lib unless - autoload mod, lib unless (Object.const_defined? mod) && (autoload? mod) -} +class << Tk + def default_widget_set + @current_default_widget_set + end + + 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 + + def __set_toplevel_aliases__(target, obj, *symbols) + @TOPLEVEL_ALIAS_TABLE[target = target.to_sym] ||= {} + symbols.each{|sym| + @TOPLEVEL_ALIAS_TABLE[target][sym = sym.to_sym] = obj + if @current_default_widget_set == target + Object.class_eval{remove_const sym} if Object.const_defined?(sym) + Object.const_set(sym, obj) + end + } + end + + ################################### + private + def _replace_toplevel_aliases(target) + # check already autoloaded + if (table = @TOPLEVEL_ALIAS_TABLE[current = @current_default_widget_set]) + table.each{|sym, file| + if !Object.autoload?(sym) && Object.const_defined?(sym) && + @TOPLEVEL_ALIAS_TABLE[current][sym].kind_of?(String) + # autoload -> class + @TOPLEVEL_ALIAS_TABLE[current][sym] = Object.const_get(sym) + end + } + end + + # setup autoloads + @TOPLEVEL_ALIAS_TABLE[target].each{|sym, file| + Object.class_eval{remove_const sym} if Object.const_defined?(sym) + if file.kind_of?(String) + # file => autoload target file + Object.autoload(sym, file) + else + # file => loaded class object + Object.const_set(sym, file) + end + } + + # update current alias + @current_default_widget_set = target + end +end + +############################################ +# setup default widget set => :Tk +Tk.default_widget_set = :Tk + + +############################################ +# depend on the version of Tcl/Tk +major, minor, type, type_name, patchlevel = TclTkLib.get_version + +############################################ +# Ttk (Tile) support +if major > 8 || + (major == 8 && minor > 5) || + (major == 8 && minor == 5 && type >= TclTkLib::RELEASE_TYPE::BETA) + # Tcl/Tk 8.5 beta or later + Object.autoload :Ttk, 'tkextlib/tile' + Tk.autoload :Tile, 'tkextlib/tile' + + require 'tk/ttk_selector' +end |