1# 2# tk/wm.rb : methods for wm command 3# 4require 'tk' 5 6module 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', win.epath, value) 87 win 88 else 89 #procedure(tk_call('wm', 'command', win.epath)) 90 tk_call('wm', 'command', win.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 552end 553