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'