1 #
2 # tk/wm.rb : methods for wm command
3 #
4 require 'tk'
5
6 module Tk
7 module Wm
8 #include TkComm
9 extend TkCore
10
11 TkCommandNames = ['wm'.freeze].freeze
12
13 TOPLEVEL_METHODCALL_OPTKEYS = {}
14
15 def Wm.aspect(win, *args)
16 if args.length == 0
17 list(tk_call_without_enc('wm', 'aspect', win.epath))
18 else
19 args = args[0] if args.length == 1 && args[0].kind_of?(Array)
20 tk_call('wm', 'aspect', win.epath, *args)
21 win
22 end
23 end
24 def aspect(*args)
25 Wm.aspect(self, *args)
26 end
27 alias wm_aspect aspect
28 TOPLEVEL_METHODCALL_OPTKEYS['aspect'] = 'aspect'
29
30 def Wm.attributes(win, slot=nil,value=TkComm::None)
31 if slot == nil
32 lst = tk_split_list(tk_call('wm', 'attributes', win.epath))
33 info = {}
34 while key = lst.shift
35 info[key[1..-1]] = lst.shift
36 end
37 info
38 elsif slot.kind_of? Hash
39 tk_call('wm', 'attributes', win.epath, *hash_kv(slot))
40 win
41 elsif value == TkComm::None
42 tk_call('wm', 'attributes', win.epath, "-#{slot}")
43 else
44 tk_call('wm', 'attributes', win.epath, "-#{slot}", value)
45 win
46 end
47 end
48 def attributes(slot=nil,value=TkComm::None)
49 Wm.attributes(self, slot, value)
50 end
51 alias wm_attributes attributes
52 TOPLEVEL_METHODCALL_OPTKEYS['attributes'] = 'attributes'
53
54 def Wm.client(win, name=TkComm::None)
55 if name == TkComm::None
56 tk_call('wm', 'client', win.epath)
57 else
58 name = '' if name == nil
59 tk_call('wm', 'client', win.epath, name)
60 win
61 end
62 end
63 def client(name=TkComm::None)
64 Wm.client(self, name)
65 end
66 alias wm_client client
67 TOPLEVEL_METHODCALL_OPTKEYS['client'] = 'client'
68
69 def Wm.colormapwindows(win, *args)
70 if args.size == 0
71 list(tk_call_without_enc('wm', 'colormapwindows', win.epath))
72 else
73 args = args[0] if args.length == 1 && args[0].kind_of?(Array)
74 tk_call_without_enc('wm', 'colormapwindows', win.epath, *args)
75 win
76 end
77 end
78 def colormapwindows(*args)
79 Wm.colormapwindows(self, *args)
80 end
81 alias wm_colormapwindows colormapwindows
82 TOPLEVEL_METHODCALL_OPTKEYS['colormapwindows'] = 'colormapwindows'
83
84 def Wm.command(win, value=nil)
85 if value
86 tk_call('wm', 'command', epath, value)
87 win
88 else
89 #procedure(tk_call('wm', 'command', epath))
90 tk_call('wm', 'command', epath)
91 end
92 end
93 def wm_command(value=nil)
94 Wm.command(self, value)
95 end
96 TOPLEVEL_METHODCALL_OPTKEYS['wm_command'] = 'wm_command'
97
98 def Wm.deiconify(win, ex = true)
99 if ex
100 tk_call_without_enc('wm', 'deiconify', win.epath)
101 else
102 Wm.iconify(win)
103 end
104 win
105 end
106 def deiconify(ex = true)
107 Wm.deiconify(self, ex)
108 end
109 alias wm_deiconify deiconify
110
111 def Wm.focusmodel(win, mode = nil)
112 if mode
113 tk_call_without_enc('wm', 'focusmodel', win.epath, mode)
114 win
115 else
116 tk_call_without_enc('wm', 'focusmodel', win.epath)
117 end
118 end
119 def focusmodel(mode = nil)
120 Wm.focusmodel(self, mode)
121 end
122 alias wm_focusmodel focusmodel
123 TOPLEVEL_METHODCALL_OPTKEYS['focusmodel'] = 'focusmodel'
124
125 def Wm.forget(win)
126 # Tcl/Tk 8.5+
127 # work with dockable frames
128 tk_call_without_enc('wm', 'forget', win.epath)
129 win
130 end
131 def wm_forget
132 Wm.forget(self)
133 end
134
135 def Wm.frame(win)
136 tk_call_without_enc('wm', 'frame', win.epath)
137 end
138 def frame
139 Wm.frame(self)
140 end
141 alias wm_frame frame
142
143 def Wm.geometry(win, geom=nil)
144 if geom
145 tk_call_without_enc('wm', 'geometry', win.epath, geom)
146 win
147 else
148 tk_call_without_enc('wm', 'geometry', win.epath)
149 end
150 end
151 def geometry(geom=nil)
152 Wm.geometry(self, geom)
153 end
154 alias wm_geometry geometry
155 TOPLEVEL_METHODCALL_OPTKEYS['geometry'] = 'geometry'
156
157 def Wm.grid(win, *args)
158 if args.size == 0
159 list(tk_call_without_enc('wm', 'grid', win.epath))
160 else
161 args = args[0] if args.length == 1 && args[0].kind_of?(Array)
162 tk_call_without_enc('wm', 'grid', win.epath, *args)
163 win
164 end
165 end
166 def wm_grid(*args)
167 Wm.grid(self, *args)
168 end
169 TOPLEVEL_METHODCALL_OPTKEYS['wm_grid'] = 'wm_grid'
170
171 def Wm.group(win, leader = nil)
172 if leader
173 tk_call('wm', 'group', win.epath, leader)
174 win
175 else
176 window(tk_call('wm', 'group', win.epath))
177 end
178 end
179 def group(leader = nil)
180 Wm.group(self, leader)
181 end
182 alias wm_group group
183 TOPLEVEL_METHODCALL_OPTKEYS['group'] = 'group'
184
185 def Wm.iconbitmap(win, bmp=nil)
186 if bmp
187 tk_call_without_enc('wm', 'iconbitmap', win.epath, bmp)
188 win
189 else
190 image_obj(tk_call_without_enc('wm', 'iconbitmap', win.epath))
191 end
192 end
193 def iconbitmap(bmp=nil)
194 Wm.iconbitmap(self, bmp)
195 end
196 alias wm_iconbitmap iconbitmap
197 TOPLEVEL_METHODCALL_OPTKEYS['iconbitmap'] = 'iconbitmap'
198
199 def Wm.iconphoto(win, *imgs)
200 if imgs.empty?
201 win.instance_eval{
202 @wm_iconphoto = nil unless defined? @wm_iconphoto
203 return @wm_iconphoto
204 }
205 end
206
207 imgs = imgs[0] if imgs.length == 1 && imgs[0].kind_of?(Array)
208 tk_call_without_enc('wm', 'iconphoto', win.epath, *imgs)
209 win.instance_eval{ @wm_iconphoto = imgs }
210 win
211 end
212 def iconphoto(*imgs)
213 Wm.iconphoto(self, *imgs)
214 end
215 alias wm_iconphoto iconphoto
216 TOPLEVEL_METHODCALL_OPTKEYS['iconphoto'] = 'iconphoto'
217
218 def Wm.iconphoto_default(win, *imgs)
219 imgs = imgs[0] if imgs.length == 1 && imgs[0].kind_of?(Array)
220 tk_call_without_enc('wm', 'iconphoto', win.epath, '-default', *imgs)
221 win
222 end
223 def iconphoto_default(*imgs)
224 Wm.iconphoto_default(self, *imgs)
225 end
226 alias wm_iconphoto_default iconphoto_default
227
228 def Wm.iconify(win, ex = true)
229 if ex
230 tk_call_without_enc('wm', 'iconify', win.epath)
231 else
232 Wm.deiconify(win)
233 end
234 win
235 end
236 def iconify(ex = true)
237 Wm.iconify(self, ex)
238 end
239 alias wm_iconify iconify
240
241 def Wm.iconmask(win, bmp=nil)
242 if bmp
243 tk_call_without_enc('wm', 'iconmask', win.epath, bmp)
244 win
245 else
246 image_obj(tk_call_without_enc('wm', 'iconmask', win.epath))
247 end
248 end
249 def iconmask(bmp=nil)
250 Wm.iconmask(self, bmp)
251 end
252 alias wm_iconmask iconmask
253 TOPLEVEL_METHODCALL_OPTKEYS['iconmask'] = 'iconmask'
254
255 def Wm.iconname(win, name=nil)
256 if name
257 tk_call('wm', 'iconname', win.epath, name)
258 win
259 else
260 tk_call('wm', 'iconname', win.epath)
261 end
262 end
263 def iconname(name=nil)
264 Wm.iconname(self, name)
265 end
266 alias wm_iconname iconname
267 TOPLEVEL_METHODCALL_OPTKEYS['iconname'] = 'iconname'
268
269 def Wm.iconposition(win, *args)
270 if args.size == 0
271 list(tk_call_without_enc('wm', 'iconposition', win.epath))
272 else
273 args = args[0] if args.length == 1 && args[0].kind_of?(Array)
274 tk_call_without_enc('wm', 'iconposition', win.epath, *args)
275 win
276 end
277 end
278 def iconposition(*args)
279 Wm.iconposition(self, *args)
280 end
281 alias wm_iconposition iconposition
282 TOPLEVEL_METHODCALL_OPTKEYS['iconposition'] = 'iconposition'
283
284 def Wm.iconwindow(win, iconwin = nil)
285 if iconwin
286 tk_call_without_enc('wm', 'iconwindow', win.epath, iconwin)
287 win
288 else
289 w = tk_call_without_enc('wm', 'iconwindow', win.epath)
290 (w == '')? nil: window(w)
291 end
292 end
293 def iconwindow(iconwin = nil)
294 Wm.iconwindow(self, iconwin)
295 end
296 alias wm_iconwindow iconwindow
297 TOPLEVEL_METHODCALL_OPTKEYS['iconwindow'] = 'iconwindow'
298
299 def Wm.manage(win)
300 # Tcl/Tk 8.5+ feature
301 tk_call_without_enc('wm', 'manage', win.epath)
302 win
303 end
304 def wm_manage
305 Wm.manage(self)
306 end
307 =begin
308 def Wm.manage(win, use_id = nil)
309 # Tcl/Tk 8.5+ feature
310 # --------------------------------------------------------------
311 # In the future release, I want to support to embed the 'win'
312 # into the container which has window-id 'use-id'.
313 # It may give users frexibility on controlling their GUI.
314 # However, it may be difficult for current Tcl/Tk (Tcl/Tk8.5.1),
315 # because it seems to require to modify Tcl/Tk's source code.
316 # --------------------------------------------------------------
317 if use_id
318 tk_call_without_enc('wm', 'manage', win.epath, '-use', use_id)
319 else
320 tk_call_without_enc('wm', 'manage', win.epath)
321 end
322 win
323 end
324 =end
325
326 def Wm.maxsize(win, *args)
327 if args.size == 0
328 list(tk_call_without_enc('wm', 'maxsize', win.epath))
329 else
330 args = args[0] if args.length == 1 && args[0].kind_of?(Array)
331 tk_call_without_enc('wm', 'maxsize', win.epath, *args)
332 win
333 end
334 end
335 def maxsize(*args)
336 Wm.maxsize(self, *args)
337 end
338 alias wm_maxsize maxsize
339 TOPLEVEL_METHODCALL_OPTKEYS['maxsize'] = 'maxsize'
340
341 def Wm.minsize(win, *args)
342 if args.size == 0
343 list(tk_call_without_enc('wm', 'minsize', win.epath))
344 else
345 args = args[0] if args.length == 1 && args[0].kind_of?(Array)
346 tk_call_without_enc('wm', 'minsize', win.path, *args)
347 win
348 end
349 end
350 def minsize(*args)
351 Wm.minsize(self, *args)
352 end
353 alias wm_minsize minsize
354 TOPLEVEL_METHODCALL_OPTKEYS['minsize'] = 'minsize'
355
356 def Wm.overrideredirect(win, mode=TkComm::None)
357 if mode == TkComm::None
358 bool(tk_call_without_enc('wm', 'overrideredirect', win.epath))
359 else
360 tk_call_without_enc('wm', 'overrideredirect', win.epath, mode)
361 win
362 end
363 end
364 def overrideredirect(mode=TkComm::None)
365 Wm.overrideredirect(self, mode)
366 end
367 alias wm_overrideredirect overrideredirect
368 TOPLEVEL_METHODCALL_OPTKEYS['overrideredirect'] = 'overrideredirect'
369
370 def Wm.positionfrom(win, who=TkComm::None)
371 if who == TkComm::None
372 r = tk_call_without_enc('wm', 'positionfrom', win.epath)
373 (r == "")? nil: r
374 else
375 tk_call_without_enc('wm', 'positionfrom', win.epath, who)
376 win
377 end
378 end
379 def positionfrom(who=TkComm::None)
380 Wm.positionfrom(self, who)
381 end
382 alias wm_positionfrom positionfrom
383 TOPLEVEL_METHODCALL_OPTKEYS['positionfrom'] = 'positionfrom'
384
385 def Wm.protocol(win, name=nil, cmd=nil, &b)
386 if cmd
387 tk_call_without_enc('wm', 'protocol', win.epath, name, cmd)
388 win
389 elsif b
390 tk_call_without_enc('wm', 'protocol', win.epath, name, proc(&b))
391 win
392 elsif name
393 result = tk_call_without_enc('wm', 'protocol', win.epath, name)
394 (result == "")? nil : tk_tcl2ruby(result)
395 else
396 tk_split_simplelist(tk_call_without_enc('wm', 'protocol', win.epath))
397 end
398 end
399 def protocol(name=nil, cmd=nil, &b)
400 Wm.protocol(self, name, cmd, &b)
401 end
402 alias wm_protocol protocol
403
404 def Wm.protocols(win, kv=nil)
405 unless kv
406 ret = {}
407 Wm.protocol(win).each{|name|
408 ret[name] = Wm.protocol(win, name)
409 }
410 return ret
411 end
412
413 unless kv.kind_of?(Hash)
414 fail ArgumentError, 'expect a hash of protocol=>command'
415 end
416 kv.each{|k, v| Wm.protocol(win, k, v)}
417 win
418 end
419 def protocols(kv=nil)
420 Wm.protocols(self, kv)
421 end
422 alias wm_protocols protocols
423 TOPLEVEL_METHODCALL_OPTKEYS['protocols'] = 'protocols'
424
425 def Wm.resizable(win, *args)
426 if args.length == 0
427 list(tk_call_without_enc('wm', 'resizable', win.epath)).map!{|e| bool(e)}
428 else
429 args = args[0] if args.length == 1 && args[0].kind_of?(Array)
430 tk_call_without_enc('wm', 'resizable', win.epath, *args)
431 win
432 end
433 end
434 def resizable(*args)
435 Wm.resizable(self, *args)
436 end
437 alias wm_resizable resizable
438 TOPLEVEL_METHODCALL_OPTKEYS['resizable'] = 'resizable'
439
440 def Wm.sizefrom(win, who=TkComm::None)
441 if who == TkComm::None
442 r = tk_call_without_enc('wm', 'sizefrom', win.epath)
443 (r == "")? nil: r
444 else
445 tk_call_without_enc('wm', 'sizefrom', win.epath, who)
446 win
447 end
448 end
449 def sizefrom(who=TkComm::None)
450 Wm.sizefrom(self, who)
451 end
452 alias wm_sizefrom sizefrom
453 TOPLEVEL_METHODCALL_OPTKEYS['sizefrom'] = 'sizefrom'
454
455 def Wm.stackorder(win)
456 list(tk_call('wm', 'stackorder', win.epath))
457 end
458 def stackorder
459 Wm.stackorder(self)
460 end
461 alias wm_stackorder stackorder
462
463 def Wm.stackorder_isabove(win, target)
464 bool(tk_call('wm', 'stackorder', win.epath, 'isabove', target))
465 end
466 def Wm.stackorder_is_above(win, target)
467 Wm.stackorder_isabove(win, target)
468 end
469 def stackorder_isabove(target)
470 Wm.stackorder_isabove(self, target)
471 end
472 alias stackorder_is_above stackorder_isabove
473 alias wm_stackorder_isabove stackorder_isabove
474 alias wm_stackorder_is_above stackorder_isabove
475
476 def Wm.stackorder_isbelow(win, target)
477 bool(tk_call('wm', 'stackorder', win.epath, 'isbelow', target))
478 end
479 def Wm.stackorder_is_below(win, target)
480 Wm.stackorder_isbelow(win, target)
481 end
482 def stackorder_isbelow(target)
483 Wm.stackorder_isbelow(self, target)
484 end
485 alias stackorder_is_below stackorder_isbelow
486 alias wm_stackorder_isbelow stackorder_isbelow
487 alias wm_stackorder_is_below stackorder_isbelow
488
489 def Wm.state(win, st=nil)
490 if st
491 tk_call_without_enc('wm', 'state', win.epath, st)
492 win
493 else
494 tk_call_without_enc('wm', 'state', win.epath)
495 end
496 end
497 def state(st=nil)
498 Wm.state(self, st)
499 end
500 alias wm_state state
501 TOPLEVEL_METHODCALL_OPTKEYS['state'] = 'state'
502
503 def Wm.title(win, str=nil)
504 if str
505 tk_call('wm', 'title', win.epath, str)
506 win
507 else
508 tk_call('wm', 'title', win.epath)
509 end
510 end
511 def title(str=nil)
512 Wm.title(self, str)
513 end
514 alias wm_title title
515 TOPLEVEL_METHODCALL_OPTKEYS['title'] = 'title'
516
517 def Wm.transient(win, master=nil)
518 if master
519 tk_call_without_enc('wm', 'transient', win.epath, master)
520 win
521 else
522 window(tk_call_without_enc('wm', 'transient', win.epath))
523 end
524 end
525 def transient(master=nil)
526 Wm.transient(self, master)
527 end
528 alias wm_transient transient
529 TOPLEVEL_METHODCALL_OPTKEYS['transient'] = 'transient'
530
531 def Wm.withdraw(win, ex = true)
532 if ex
533 tk_call_without_enc('wm', 'withdraw', win.epath)
534 else
535 Wm.deiconify(win)
536 end
537 win
538 end
539 def withdraw(ex = true)
540 Wm.withdraw(self, ex)
541 end
542 alias wm_withdraw withdraw
543 end
544
545 module Wm_for_General
546 Wm.instance_methods.each{|m|
547 if (m = m.to_s) =~ /^wm_(.*)$/
548 eval "def #{m}(*args, &b); Tk::Wm.#{$1}(self, *args, &b); end"
549 end
550 }
551 end
552 end