panedwindow.test
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:84k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test entry widgets in Tk.  It is
  2. # organized in the standard fashion for Tcl tests.
  3. #
  4. # Copyright (c) 1994 The Regents of the University of California.
  5. # Copyright (c) 1994-1997 Sun Microsystems, Inc.
  6. # Copyright (c) 1998-1999 by Scriptics Corporation.
  7. # All rights reserved.
  8. #
  9. # RCS: @(#) $Id: panedwindow.test,v 1.8.2.4 2005/05/31 05:22:06 hobbs Exp $
  10. package require tcltest 2.1
  11. namespace import -force tcltest::configure
  12. namespace import -force tcltest::testsDirectory
  13. configure -testdir [file join [pwd] [file dirname [info script]]]
  14. configure -loadfile [file join [testsDirectory] constraints.tcl]
  15. tcltest::loadTestedCommands
  16. set i 1
  17. panedwindow .p
  18. foreach test {
  19.     {-background "#ff0000" "#ff0000" non-existent 
  20. {unknown color name "non-existent"}}
  21.     {-bd 4 4 badValue {bad screen distance "badValue"}}
  22.     {-bg "#ff0000" "#ff0000" non-existent {unknown color name "non-existent"}}
  23.     {-borderwidth 1.3 1 badValue {bad screen distance "badValue"}}
  24.     {-cursor arrow arrow badValue {bad cursor spec "badValue"}}
  25.     {-handlesize 20 20 badValue {bad screen distance "badValue"}}
  26.     {-height 20 20 badValue {bad screen distance "badValue"}}
  27.     {-opaqueresize true 1 foo {expected boolean value but got "foo"}}
  28.     {-orient horizontal horizontal badValue 
  29. {bad orient "badValue": must be horizontal or vertical}}
  30.     {-relief groove groove 1.5 {bad relief "1.5": must be flat, groove, raised, ridge, solid, or sunken}}
  31.     {-sashcursor arrow arrow badValue {bad cursor spec "badValue"}}
  32.     {-sashpad 1.3 1 badValue {bad screen distance "badValue"}}
  33.     {-sashrelief groove groove 1.5 {bad relief "1.5": must be flat, groove, raised, ridge, solid, or sunken}}
  34.     {-sashwidth 10 10 badValue {bad screen distance "badValue"}}
  35.     {-showhandle true 1 foo {expected boolean value but got "foo"}}
  36.     {-width 402 402 badValue {bad screen distance "badValue"}}
  37. } {
  38.     set name [lindex $test 0]
  39.     test panedwindow-1.$i {configuration options} {
  40. .p configure $name [lindex $test 1]
  41. list [lindex [.p configure $name] 4] [.p cget $name]
  42.     } [list [lindex $test 2] [lindex $test 2]]
  43.     incr i
  44.     if {[lindex $test 3] != ""} {
  45. test panedwindow-1.$i {configuration options} {
  46.     list [catch {.p configure $name [lindex $test 3]} msg] $msg
  47. } [list 1 [lindex $test 4]]
  48.     }
  49.     .p configure $name [lindex [.p configure $name] 3]
  50.     incr i
  51. }
  52. .p add [button .b]
  53. .p add [button .c]
  54. foreach test {
  55.     {-after .c .c badValue {bad window path name "badValue"}}
  56.     {-before .c .c badValue {bad window path name "badValue"}}
  57.     {-height 10 10 badValue {bad screen distance "badValue"}}
  58.     {-minsize 10 10 badValue {bad screen distance "badValue"}}
  59.     {-padx 1.3 1 badValue {bad screen distance "badValue"}}
  60.     {-pady 1.3 1 badValue {bad screen distance "badValue"}}
  61.     {-sticky nsew nesw abcd {bad stickyness value "abcd": must be a string containing zero or more of n, e, s, and w}}
  62.     {-width 10 10 badValue {bad screen distance "badValue"}}
  63. } {
  64.     set name [lindex $test 0]
  65.     test panedwindow-1.$i {configuration options} {
  66. .p paneconfigure .b $name [lindex $test 1]
  67. list [lindex [.p paneconfigure .b $name] 4] [.p panecget .b $name]
  68.     } [list [lindex $test 2] [lindex $test 2]]
  69.     incr i
  70.     if {[lindex $test 3] != ""} {
  71. test panedwindow-1.$i {configuration options} {
  72.     list [catch {.p paneconfigure .b $name [lindex $test 3]} msg] $msg
  73. } [list 1 [lindex $test 4]]
  74.     }
  75.     .p paneconfigure .b $name [lindex [.p paneconfigure .b $name] 3]
  76.     incr i
  77. }
  78. destroy .p .b .c
  79. test panedwindow-2.1 {panedwindow widget command} {
  80.     panedwindow .p
  81.     set result [list [catch {.p foo} msg] $msg]
  82.     destroy .p
  83.     set result
  84. } {1 {bad command "foo": must be add, cget, configure, forget, identify, panecget, paneconfigure, panes, proxy, or sash}}
  85. test panedwindow-3.1 {panedwindow panes subcommand} {
  86.     panedwindow .p
  87.     .p add [button .b]
  88.     .p add [button .c]
  89.     set result [list [.p panes]]
  90.     .p forget .b
  91.     lappend result [.p panes]
  92.     destroy .p .b .c
  93.     set result
  94. } [list [list .b .c] [list .c]]
  95. test panedwindow-4.1 {forget subcommand} {
  96.     panedwindow .p
  97.     set result [list [catch {.p forget} msg] $msg]
  98.     destroy .p
  99.     set result
  100. } [list 1 "wrong # args: should be ".p forget widget ?widget ...?""]
  101. test panedwindow-4.2 {forget subcommand, forget one from start} {
  102.     panedwindow .p
  103.     .p add [button .b]
  104.     .p add [button .c]
  105.     set result [list [.p panes]]
  106.     .p forget .b
  107.     lappend result [.p panes]
  108.     destroy .p .b .c
  109.     set result
  110. } [list {.b .c} .c]
  111. test panedwindow-4.3 {forget subcommand, forget one from end} {
  112.     panedwindow .p
  113.     .p add [button .b]
  114.     .p add [button .c]
  115.     .p add [button .d]
  116.     set result [list [.p panes]]
  117.     .p forget .d
  118.     update
  119.     lappend result [.p panes]
  120.     destroy .p .b .c .d
  121.     set result
  122. } [list {.b .c .d} {.b .c}]
  123. test panedwindow-4.4 {forget subcommand, forget multiple} {
  124.     panedwindow .p
  125.     .p add [button .b]
  126.     .p add [button .c]
  127.     .p add [button .d]
  128.     set result [list [.p panes]]
  129.     .p forget .b .c
  130.     update
  131.     lappend result [.p panes]
  132.     destroy .p .b .c .d
  133.     set result
  134. } [list {.b .c .d} .d]
  135. test panedwindow-4.5 {forget subcommand, panes are unmapped} {
  136.     panedwindow .p
  137.     .p add [button .b]
  138.     .p add [button .c]
  139.     pack .p
  140.     update
  141.     set result [list [winfo ismapped .b] [winfo ismapped .c]]
  142.     .p forget .b
  143.     update
  144.     lappend result [winfo ismapped .b] [winfo ismapped .c]
  145.     destroy .p .b .c
  146.     
  147.     set result
  148. } [list 1 1 0 1]
  149. test panedwindow-4.6 {forget subcommand, changes reqsize of panedwindow} {
  150.     panedwindow .p -borderwidth 0 -sashpad 0 -sashwidth 4 -showhandle false
  151.     .p add [frame .f -width 20 -height 20] [frame .g -width 20 -height 20]
  152.     set result [list [winfo reqwidth .p]]
  153.     .p forget .f
  154.     lappend result [winfo reqwidth .p]
  155.     destroy .p .f .g
  156.     set result
  157. } [list 44 20]
  158. test panedwindow-5.1 {sash subcommand} {
  159.     panedwindow .p
  160.     set result [list [catch {.p sash} msg] $msg]
  161.     destroy .p
  162.     set result
  163. } [list 1 "wrong # args: should be ".p sash option ?arg ...?""]
  164. test panedwindow-5.2 {sash subcommand} {
  165.     panedwindow .p
  166.     set result [list [catch {.p sash foo} msg] $msg]
  167.     destroy .p
  168.     set result
  169. } [list 1 "bad option "foo": must be coord, dragto, mark, or place"]
  170. test panedwindow-6.1 {sash coord subcommand, errors} {
  171.     panedwindow .p
  172.     set result [list [catch {.p sash coord} msg] $msg]
  173.     destroy .p
  174.     set result
  175. } [list 1 "wrong # args: should be ".p sash coord index""]
  176. test panedwindow-6.2 {sash coord subcommand, errors} {
  177.     panedwindow .p -borderwidth 0 -sashpad 0 -sashwidth 4
  178.     set result [list [catch {.p sash coord 0} msg] $msg]
  179.     destroy .p
  180.     set result
  181. } [list 1 "invalid sash index"]
  182. test panedwindow-6.3 {sash coord subcommand, errors} {
  183.     panedwindow .p
  184.     set result [list [catch {.p sash coord foo} msg] $msg]
  185.     destroy .p
  186.     set result
  187. } [list 1 "expected integer but got "foo""]
  188. test panedwindow-6.4 {sash coord subcommand sashes correctly placed} {
  189.     panedwindow .p -borderwidth 0 -sashpad 2 -sashwidth 4 -showhandle false
  190.     .p add [frame .p.f -width 20 -height 20] 
  191.     [frame .p.f2 -width 20 -height 20] 
  192.     [frame .p.f3 -width 20 -height 20]
  193.     set result [.p sash coord 0]
  194.     destroy .p .p.f .p.f2 .p.f3
  195.     set result
  196. } [list 22 0]
  197. test panedwindow-6.5 {sash coord subcommand sashes correctly placed} {
  198.     panedwindow .p -borderwidth 0 -sashpad 2 -sashwidth 4 -showhandle false
  199.     .p add [frame .p.f -width 20 -height 20] 
  200.     [frame .p.f2 -width 20 -height 20] 
  201.     [frame .p.f3 -width 20 -height 20]
  202.     set result [.p sash coord 1]
  203.     destroy .p .p.f .p.f2 .p.f3
  204.     set result
  205. } [list 50 0]
  206. test panedwindow-6.6 {sash coord subcommand, sashes correctly placed} {
  207.     panedwindow .p -borderwidth 0 -sashpad 2 -sashwidth 4 -orient vertical 
  208.             -showhandle false
  209.     .p add [frame .p.f -width 20 -height 20] 
  210.     [frame .p.f2 -width 20 -height 20] 
  211.     [frame .p.f3 -width 20 -height 20]
  212.     set result [.p sash coord 0]
  213.     destroy .p .p.f .p.f2 .p.f3
  214.     set result
  215. } [list 0 22]
  216. test panedwindow-6.7 {sash coord subcommand, sashes correctly placed} {
  217.     panedwindow .p -borderwidth 0 -sashpad 2 -sashwidth 4 -orient vertical 
  218.             -showhandle false
  219.     .p add [frame .p.f -width 20 -height 20] 
  220.     [frame .p.f2 -width 20 -height 20] 
  221.     [frame .p.f3 -width 20 -height 20]
  222.     set result [.p sash coord 1]
  223.     destroy .p .p.f .p.f2 .p.f3
  224.     set result
  225. } [list 0 50]
  226. test panedwindow-6.8 {sash coord subcommand, errors} {
  227.     panedwindow .p
  228.     set result [list 
  229.     [catch {.p sash coord -1} msg] $msg 
  230.     [catch {.p sash coord  0} msg] $msg 
  231.     [catch {.p sash coord  1} msg] $msg 
  232.     ]
  233.     destroy .p
  234.     set result
  235. } [list 1 "invalid sash index" 1 "invalid sash index" 1 "invalid sash index"]
  236. test panedwindow-6.9 {sash coord subcommand, errors} {
  237.     # There are no sashes until you have 2 panes
  238.     panedwindow .p
  239.     .p add [frame .p.f]
  240.     set result [list 
  241.     [catch {.p sash coord -1} msg] $msg 
  242.     [catch {.p sash coord  0} msg] $msg 
  243.     [catch {.p sash coord  1} msg] $msg 
  244.     ]
  245.     destroy .p
  246.     set result
  247. } [list 1 "invalid sash index" 1 "invalid sash index" 1 "invalid sash index"]
  248. test panedwindow-6.10 {sash coord subcommand, errors} {
  249.     # There are no sashes until you have 2 panes
  250.     panedwindow .p
  251.     .p add [frame .p.f] [frame .p.f2]
  252.     set result [list 
  253.     [catch {.p sash coord -1} msg] $msg 
  254.     [catch {.p sash coord  0} msg] 
  255.     [catch {.p sash coord  1} msg] $msg 
  256.     [catch {.p sash coord  2} msg] $msg 
  257.     ]
  258.     destroy .p
  259.     set result
  260. } [list 1 "invalid sash index" 0 1 "invalid sash index" 1 "invalid sash index"]
  261. test panedwindow-8.1 {sash mark subcommand, errors} {
  262.     panedwindow .p
  263.     set result [list [catch {.p sash mark} msg] $msg]
  264.     destroy .p
  265.     set result
  266. } [list 1 "wrong # args: should be ".p sash mark index ?x y?""]
  267. test panedwindow-8.2 {sash mark subcommand, errors} {
  268.     panedwindow .p
  269.     set result [list [catch {.p sash mark foo} msg] $msg]
  270.     destroy .p
  271.     set result
  272. } [list 1 "expected integer but got "foo""]
  273. test panedwindow-8.3 {sash mark subcommand, errors} {
  274.     panedwindow .p
  275.     set result [list [catch {.p sash mark 0 foo bar} msg] $msg]
  276.     destroy .p
  277.     set result
  278. } [list 1 "invalid sash index"]
  279. test panedwindow-8.4 {sash mark subcommand, errors} {
  280.     panedwindow .p
  281.     .p add [button .b] [button .c]
  282.     set result [list [catch {.p sash mark 0 foo bar} msg] $msg]
  283.     destroy .p .b .c
  284.     set result
  285. } [list 1 "expected integer but got "foo""]
  286. test panedwindow-8.5 {sash mark subcommand, errors} {
  287.     panedwindow .p
  288.     .p add [button .b] [button .c]
  289.     set result [list [catch {.p sash mark 0 0 bar} msg] $msg]
  290.     destroy .p .b .c
  291.     set result
  292. } [list 1 "expected integer but got "bar""]
  293. test panedwindow-8.6 {sash mark subcommand, mark defaults to 0 0} {
  294.     panedwindow .p
  295.     .p add [button .b] [button .c]
  296.     set result [.p sash mark 0]
  297.     destroy .p .b .c
  298.     set result
  299. } [list 0 0]
  300. test panedwindow-8.7 {sash mark subcommand, set mark} {
  301.     panedwindow .p
  302.     .p add [button .b] [button .c]
  303.     .p sash mark 0 10 10
  304.     set result [.p sash mark 0]
  305.     destroy .p .b .c
  306.     set result
  307. } [list 10 10]
  308. test panedwindow-9.1 {sash dragto subcommand, errors} {
  309.     panedwindow .p
  310.     set result [list [catch {.p sash dragto} msg] $msg]
  311.     destroy .p
  312.     set result
  313. } [list 1 "wrong # args: should be ".p sash dragto index x y""]
  314. test panedwindow-9.2 {sash dragto subcommand, errors} {
  315.     panedwindow .p
  316.     set result [list [catch {.p sash dragto foo bar baz} msg] $msg]
  317.     destroy .p
  318.     set result
  319. } [list 1 "expected integer but got "foo""]
  320. test panedwindow-9.3 {sash dragto subcommand, errors} {
  321.     panedwindow .p
  322.     set result [list [catch {.p sash dragto 0 foo bar} msg] $msg]
  323.     destroy .p
  324.     set result
  325. } [list 1 "invalid sash index"]
  326. test panedwindow-9.4 {sash dragto subcommand, errors} {
  327.     panedwindow .p
  328.     .p add [button .b] [button .c]
  329.     set result [list [catch {.p sash dragto 0 foo bar} msg] $msg]
  330.     destroy .p .b .c
  331.     set result
  332. } [list 1 "expected integer but got "foo""]
  333. test panedwindow-9.5 {sash dragto subcommand, errors} {
  334.     panedwindow .p
  335.     .p add [button .b] [button .c]
  336.     set result [list [catch {.p sash dragto 0 0 bar} msg] $msg]
  337.     destroy .p .b .c
  338.     set result
  339. } [list 1 "expected integer but got "bar""]
  340.     
  341. test panedwindow-10.1 {sash mark/sash dragto interaction} {
  342.     panedwindow .p -borderwidth 0 -sashpad 0 -sashwidth 4 -showhandle false
  343.     .p add [frame .f -width 20 -height 20] [button .c -text foobar]
  344.     .p sash mark 0 10 10
  345.     .p sash dragto 0 20 10
  346.     set result [.p sash coord 0]
  347.     destroy .p .f .c
  348.     set result
  349. } [list 30 0]
  350. test panedwindow-10.2 {sash mark/sash dragto interaction} {
  351.     panedwindow .p -borderwidth 0 -sashpad 0 -sashwidth 4 -orient vertical 
  352.             -showhandle false
  353.     .p add [frame .p.f -width 20 -height 20] [button .p.c -text foobar]
  354.     .p sash mark 0 10 10
  355.     .p sash dragto 0 10 20
  356.     set result [.p sash coord 0]
  357.     destroy .p .p.f .p.c
  358.     set result
  359. } [list 0 30]
  360. test panedwindow-10.3 {sash mark/sash dragto, respects minsize}  {
  361.     panedwindow .p -borderwidth 0 -sashpad 0 -sashwidth 4 -showhandle false
  362.     .p add [frame .f -width 20 -height 20] [button .c] -minsize 15
  363.     .p sash mark 0 20 10
  364.     .p sash dragto 0 10 10
  365.     set result [.p sash coord 0]
  366.     destroy .p .f .c
  367.     set result
  368. } [list 15 0]
  369. test panedwindow-11.1 {sash place subcommand, errors} {
  370.     panedwindow .p
  371.     set result [list [catch {.p sash place} msg] $msg]
  372.     destroy .p
  373.     set result
  374. } [list 1 "wrong # args: should be ".p sash place index x y""]
  375. test panedwindow-11.2 {sash place subcommand, errors} {
  376.     destroy .p
  377.     panedwindow .p
  378.     list [catch {.p sash place foo bar baz} msg] $msg
  379. } [list 1 "expected integer but got "foo""]
  380. test panedwindow-11.3 {sash place subcommand, errors} {
  381.     destroy .p
  382.     panedwindow .p
  383.     list [catch {.p sash place 0 foo bar} msg] $msg
  384. } [list 1 "invalid sash index"]
  385. test panedwindow-11.4 {sash place subcommand, errors} {
  386.     destroy .p .b .c
  387.     panedwindow .p
  388.     .p add [button .b] [button .c]
  389.     list [catch {.p sash place 0 foo bar} msg] $msg
  390. } [list 1 "expected integer but got "foo""]
  391. test panedwindow-11.5 {sash place subcommand, errors} {
  392.     destroy .p .f .c .b
  393.     panedwindow .p
  394.     .p add [button .b] [button .c]
  395.     list [catch {.p sash place 0 0 bar} msg] $msg
  396. } [list 1 "expected integer but got "bar""]
  397. test panedwindow-11.6 {sash place subcommand, moves sash} {
  398.     destroy .p .f .c .b
  399.     panedwindow .p -borderwidth 0 -sashpad 0 -sashwidth 4
  400.     .p add [frame .f -width 20 -height 20] [button .c]
  401.     .p sash place 0 10 0
  402.     .p sash coord 0
  403. } [list 10 0]
  404. test panedwindow-11.7 {sash place subcommand, moves sash} {
  405.     destroy .p .f .c
  406.     panedwindow .p -borderwidth 0 -sashpad 0 -sashwidth 4 -orient vertical
  407.     .p add [frame .f -width 20 -height 20] [button .c]
  408.     .p sash place 0 0 10
  409.     .p sash coord 0
  410. } [list 0 10]
  411. test panedwindow-11.8 {sash place subcommand, respects minsize} {
  412.     destroy .p .f .c
  413.     panedwindow .p -borderwidth 0 -sashpad 0 -sashwidth 4 -showhandle false
  414.     .p add [frame .f -width 20 -height 20] [button .c] -minsize 15
  415.     .p sash place 0 10 0
  416.     .p sash coord 0
  417. } [list 15 0]
  418. test panedwindow-11.9 {sash place subcommand, respects minsize} {
  419.     destroy .p .f .c
  420.     panedwindow .p
  421.     .p add [frame .f -width 20 -height 20 -bg pink]
  422.     list [catch {.p sash place 0 2 0} msg] $msg
  423. } [list 1 {invalid sash index}]
  424. test panedwindow-12.1 {moving sash changes size of pane to left} {
  425.     destroy .p .f .c
  426.     panedwindow .p -borderwidth 0 -sashpad 0 -sashwidth 4 -showhandle false
  427.     .p add [frame .f -width 20 -height 20] [button .c -text foobar] -sticky nsew
  428.     .p sash place 0 30 0
  429.     pack .p
  430.     update
  431.     winfo width .f
  432. } 30
  433. test panedwindow-12.2 {moving sash changes size of pane to right} {
  434.     destroy .p .f .f2
  435.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4
  436.     .p add [frame .f -width 20 -height 20] [frame .f2 -width 20 -height 20]
  437.     pack .p
  438.     update
  439.     set result [winfo width .f2]
  440.     .p sash place 0 30 0
  441.     update
  442.     lappend result [winfo width .f2]
  443. } {20 10}
  444. test panedwindow-12.3 {moving sash does not change reqsize of panedwindow} {
  445.     destroy .p .f .f2
  446.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4
  447.     .p add [frame .f -width 20 -height 20] [frame .f2 -width 20 -height 20]
  448.     .p sash place 0 30 0
  449.     winfo reqwidth .p
  450. } 44
  451. test panedwindow-12.4 {moving sash changes size of pane above} {
  452.     destroy .p .f .c
  453.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4 
  454.             -orient vertical
  455.     .p add [frame .f -width 20 -height 10] [button .c -text foobar] -sticky nsew
  456.     .p sash place 0 0 20
  457.     pack .p
  458.     update
  459.     set result [winfo height .f]
  460.     destroy .p .f .c
  461.     set result
  462. } 20
  463. test panedwindow-12.5 {moving sash changes size of pane below} {
  464.     destroy .p .f .f2
  465.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4 
  466.             -orient vertical
  467.     .p add [frame .f -width 20 -height 10] [frame .f2 -width 20 -height 10]
  468.     pack .p
  469.     update
  470.     set result [winfo height .f2]
  471.     .p sash place 0 0 15
  472.     update
  473.     lappend result [winfo height .f2]
  474.     destroy .p .f .f2
  475.     set result
  476. } {10 5}
  477. test panedwindow-12.6 {moving sash does not change reqsize of panedwindow} {
  478.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4 
  479.             -orient vertical
  480.     .p add [frame .f -width 20 -height 10] [frame .f2 -width 20 -height 10]
  481.     set result [winfo reqheight .p]
  482.     .p sash place 0 0 20
  483.     lappend result [winfo reqheight .p]
  484.     destroy .p .f .f2
  485.     set result
  486. } [list 24 24]
  487. test panedwindow-12.7 {moving sash does not alter reqsize of widget} {
  488.     destroy .p .f .f2
  489.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4 
  490.             -orient vertical
  491.     .p add [frame .f -width 20 -height 10] [frame .f2 -width 20 -height 10]
  492.     set result [winfo reqheight .f]
  493.     .p sash place 0 0 20
  494.     lappend result [winfo reqheight .f]
  495.     destroy .p .f .f2
  496.     set result
  497. } [list 10 10]
  498. test panedwindow-12.8 {moving sash restricted to minsize} {
  499.     destroy .p .f .c
  500.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4
  501.     .p add [frame .f -width 20 -height 20] [button .c] -minsize 15
  502.     .p sash place 0 10 0
  503.     pack .p
  504.     update
  505.     set result [winfo width .f]
  506.     destroy .p .f .c
  507.     set result
  508. } 15
  509. test panedwindow-12.10 {moving sash restricted to minsize} {
  510.     destroy .p .f .c
  511.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4 
  512.             -orient vertical
  513.     .p add [frame .f -width 20 -height 30] [button .c] -minsize 10
  514.     .p sash place 0 0 5
  515.     pack .p
  516.     update
  517.     set result [winfo height .f]
  518.     destroy .p .f .c
  519.     set result
  520. } 10
  521. test panedwindow-12.12 {moving sash in unmapped window restricted to reqsize} {
  522.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4
  523.     .p add [frame .f -width 20 -height 30] [frame .f2 -width 20 -height 20]
  524.     set result [list [.p sash coord 0]]
  525.     .p sash place 0 100 0
  526.     lappend result [.p sash coord 0]
  527.     destroy .p .f .f2
  528.     set result
  529. } [list {20 0} {40 0}]
  530. test panedwindow-12.13 {moving sash right pushes other sashes} {
  531.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4
  532.     .p add [frame .f -width 20 -height 30] [frame .f2 -width 20 -height 20] 
  533.     [frame .f3 -width 20 -height 30]
  534.     .p sash place 0 80 0
  535.     set result [list [.p sash coord 0] [.p sash coord 1]]
  536.     destroy .p .f .f2 .f3
  537.     set result
  538. } {{60 0} {64 0}}
  539. test panedwindow-12.14 {moving sash left pushes other sashes} {
  540.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4
  541.     .p add [frame .f -width 20 -height 30] [frame .f2 -width 20 -height 20] 
  542.     [frame .f3 -width 20 -height 30]
  543.     .p sash place 1 0 0
  544.     set result [list [.p sash coord 0] [.p sash coord 1]]
  545.     destroy .p .f .f2 .f3
  546.     set result
  547. } {{0 0} {4 0}}
  548. test panedwindow-12.15 {move sash in mapped window restricted to visible win} {
  549.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4
  550.     .p add [frame .f -width 20 -height 30] [frame .f2 -width 20 -height 20] 
  551.     [frame .f3 -width 20 -height 30]
  552.     place .p -width 50
  553.     update
  554.     .p sash place 1 100 0
  555.     update
  556.     set result [.p sash coord 1]
  557.     destroy .p .f .f2 .f3
  558.     set result
  559. } {46 0}
  560. test panedwindow-12.16 {move sash in mapped window restricted to visible win} {
  561.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4
  562.     .p add [frame .f -width 20 -height 30] [frame .f2 -width 20 -height 20] 
  563.     [frame .f3 -width 20 -height 30]
  564.     place .p -width 100
  565.     update
  566.     .p sash place 1 200 0
  567.     update
  568.     set result [.p sash coord 1]
  569.     destroy .p .f .f2 .f3
  570.     set result
  571. } {96 0}
  572. test panedwindow-12.17 {moving sash into "virtual" space on 
  573. last pane increases reqsize} {
  574.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4
  575.     .p add [frame .f -width 20 -height 30] [frame .f2 -width 20 -height 20] 
  576.     [frame .f3 -width 20 -height 30]
  577.     place .p -width 100
  578.     set result [winfo reqwidth .p]
  579.     update
  580.     .p sash place 1 200 0
  581.     update
  582.     lappend result [winfo reqwidth .p]
  583.     destroy .p .f .f2 .f3
  584.     set result
  585. } {68 100}
  586.     
  587. test panedwindow-13.1 {horizontal panedwindow lays out widgets properly} {
  588.     panedwindow .p -showhandle false -borderwidth 2 -sashpad 2 -sashwidth 2
  589.     foreach win {.p.f .p.f2 .p.f3} {.p add [frame $win -width 20 -height 10]}
  590.     pack .p
  591.     update
  592.     set result {}
  593.     foreach w [.p panes] {lappend result [winfo x $w] [winfo y $w]}
  594.     destroy .p .p.f .p.f2 .p.f3
  595.     set result
  596. } [list 2 2 28 2 54 2]
  597. test panedwindow-13.2 {vertical panedwindow lays out widgets properly} {
  598.     panedwindow .p -showhandle false -borderwidth 2 -sashpad 2 -sashwidth 2 
  599.             -orient vertical
  600.     foreach win {.p.f .p.f2 .p.f3} {.p add [frame $win -width 20 -height 10]}
  601.     pack .p
  602.     update
  603.     set result {}
  604.     foreach w [.p panes] {lappend result [winfo x $w] [winfo y $w]}
  605.     destroy .p .p.f .p.f2 .p.f3
  606.     set result
  607. } [list 2 2 2 18 2 34]
  608. test panedwindow-13.3 {horizontal panedwindow lays out widgets properly} {
  609.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0
  610.     foreach {win color} {.p.f blue .p.f2 green} {
  611. .p add [frame $win -width 20 -height 20 -bg $color] -padx 10 -pady 5 
  612.                 -sticky ""
  613.     }
  614.     pack .p
  615.     update
  616.     set result [list [winfo reqwidth .p] [winfo reqheight .p]]
  617.     foreach win {.p.f .p.f2} {lappend result [winfo x $win] [winfo y $win]}
  618.     .p paneconfigure .p.f -padx 0 -pady 0
  619.     update
  620.     lappend result [winfo reqwidth .p] [winfo reqheight .p]
  621.     foreach win {.p.f .p.f2} {lappend result [winfo x $win] [winfo y $win]}
  622.     destroy .p .p.f .p.f2
  623.     set result
  624. } [list 80 30 10 5 50 5 60 30 0 5 30 5]
  625. test panedwindow-13.4 {vertical panedwindow lays out widgets properly} {
  626.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0 
  627.             -orient vertical
  628.     foreach win {.p.f .p.f2} {
  629. .p add [frame $win -width 20 -height 20] -padx 10 -pady 5 -sticky ""
  630.     }
  631.     pack .p
  632.     update
  633.     set result [list [winfo reqwidth .p] [winfo reqheight .p]]
  634.     foreach win {.p.f .p.f2} {lappend result [winfo x $win] [winfo y $win]}
  635.     .p paneconfigure .p.f -padx 0 -pady 0
  636.     update
  637.     lappend result [winfo reqwidth .p] [winfo reqheight .p]
  638.     foreach win {.p.f .p.f2} {lappend result [winfo x $win] [winfo y $win]}
  639.     destroy .p .p.f .p.f2
  640.     set result
  641. } [list 40 60 10 5 10 35 40 50 10 0 10 25]
  642. test panedwindow-13.5 {panedwindow respects reqsize of panes when possible} {
  643.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0
  644.     .p add [frame .p.f -width 20 -height 20] -sticky ""
  645.     place .p -width 40
  646.     update
  647.     set result [list [winfo width .p.f]]
  648.     .p.f configure -width 30
  649.     update
  650.     lappend result [winfo width .p.f]
  651.     destroy .p .p.f
  652.     set result
  653. } [list 20 30]
  654. test panedwindow-13.6 {panedwindow takes explicit widget width over reqwidth} {
  655.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0
  656.     .p add [frame .p.f -width 20 -height 20] -width 20 -sticky ""
  657.     place .p -width 40
  658.     update
  659.     set result [list [winfo width .p.f]]
  660.     .p.f configure -width 30
  661.     update
  662.     lappend result [winfo width .p.f]
  663.     destroy .p .p.f
  664.     set result
  665. } [list 20 20]
  666. test panedwindow-13.7 {horizontal panedwindow reqheight is max slave height} {
  667.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4
  668.     .p add [frame .p.f -width 20 -height 20] [frame .p.f2 -width 20 -height 20]
  669.     set result [winfo reqheight .p]
  670.     .p.f config -height 40
  671.     lappend result [winfo reqheight .p]
  672.     destroy .p .p.f .p.f2
  673.     set result
  674. } {20 40}
  675. test panedwindow-13.8 {horizontal panedwindow reqheight is max slave height} {
  676.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4
  677.     foreach win {.p.f .p.f2} {.p add [frame $win -width 20 -height 20]}
  678.     .p paneconfigure .p.f -height 15
  679.     set result [winfo reqheight .p]
  680.     .p.f config -height 40
  681.     lappend result [winfo reqheight .p]
  682.     destroy .p .p.f .p.f2
  683.     set result
  684. } {20 20}
  685. test panedwindow-13.9 {panedwindow pane width overrides widget width} {
  686.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4
  687.     foreach win {.p.f .p.f2} {.p add [frame $win -width 20 -height 20]}
  688.     .p sash place 0 10 0
  689.     pack .p
  690.     update
  691.     set result [winfo width .p.f]
  692.     .p paneconfigure .p.f -width 30
  693.     lappend result [winfo width .p.f]
  694.     destroy .p .p.f .p.f2
  695.     set result
  696. } [list 10 10]
  697. test panedwindow-13.10 {panedwindow respects reqsize of panes when possible} {
  698.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0
  699.     .p add [frame .p.f -width 20 -height 20] -sticky ""
  700.     place .p -height 40
  701.     update
  702.     set result [list [winfo height .p.f]]
  703.     .p.f configure -height 30
  704.     update
  705.     lappend result [winfo height .p.f]
  706.     destroy .p .p.f
  707.     set result
  708. } [list 20 30]
  709. test panedwindow-13.11 {panedwindow takes explicit height over reqheight} {
  710.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0
  711.     .p add [frame .p.f -width 20 -height 20] -height 20 -sticky ""
  712.     place .p -height 40
  713.     update
  714.     set result [list [winfo height .p.f]]
  715.     .p.f configure -height 30
  716.     update
  717.     lappend result [winfo height .p.f]
  718.     destroy .p .p.f
  719.     set result
  720. } [list 20 20]
  721. test panedwindow-13.12 {vertical panedwindow reqwidth is max slave width} {
  722.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4 
  723.             -orient vertical
  724.     .p add [frame .p.f -width 20 -height 20] [frame .p.f2 -width 20 -height 20]
  725.     set result [winfo reqwidth .p]
  726.     .p.f config -width 40
  727.     lappend result [winfo reqwidth .p]
  728.     destroy .p .p.f .p.f2
  729.     set result
  730. } {20 40}
  731. test panedwindow-13.13 {vertical panedwindow reqwidth is max slave width} {
  732.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4 
  733.             -orient vertical
  734.     foreach win {.p.f .p.f2} {.p add [frame $win -width 20 -height 20]}
  735.     .p paneconfigure .p.f -width 15
  736.     set result [winfo reqwidth .p]
  737.     .p.f config -width 40
  738.     lappend result [winfo reqwidth .p]
  739.     destroy .p .p.f .p.f2
  740.     set result
  741. } {20 20}
  742. test panedwindow-13.14 {panedwindow pane height overrides widget width} {
  743.     destroy .p
  744.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 4 
  745.             -orient vertical
  746.     foreach win {.p.f .p.f2} {.p add [frame $win -width 20 -height 20]}
  747.     .p sash place 0 0 10
  748.     pack .p
  749.     update
  750.     set result [winfo height .p.f]
  751.     .p paneconfigure .p.f -height 30
  752.     lappend result [winfo height .p.f]
  753.     destroy .p
  754.     set result
  755. } [list 10 10]
  756. test panedwindow-14.1 {PanestructureProc, widget yields managements} {
  757.     # Check that the panedwindow correctly yields geometry management of
  758.     # a slave when the slave is destroyed.
  759.     # This test should not cause a core dump, and it should not cause
  760.     # a memory leak.
  761.     destroy .p .b
  762.     panedwindow .p
  763.     .p add [button .b]
  764.     destroy .p
  765.     pack .b
  766.     destroy .b
  767.     set result ""
  768. } ""
  769. test panedwindow-14.2 {PanedWindowLostSlaveProc, widget yields management} {
  770.     # Check that the paned window correctly yields geometry management of
  771.     # a slave when some other geometry manager steals the slave from us.
  772.     
  773.     # This test should not cause a core dump, and it should not cause a
  774.     # memory leak.
  775.     destroy .p .b
  776.     panedwindow .p
  777.     .p add [button .b]
  778.     pack .p
  779.     update
  780.     pack .b
  781.     update
  782.     set result [.p panes]
  783.     destroy .p .b
  784.     set result
  785. } {}
  786. set stickysets [list n s e w sn ns en ne wn nw esn nse nsw nsew ""]
  787. set stickygets [list n s e w ns ns ne ne nw nw nes nes nsw nesw ""]
  788. set i 0
  789. foreach s $stickysets g $stickygets {
  790.     test panedwindow-15.[incr i] {panedwindow sticky settings} {
  791. destroy .p .b
  792. panedwindow .p -showhandle false
  793. .p add [button .b]
  794. .p paneconfigure .b -sticky $s
  795. set result [.p panecget .b -sticky]
  796. destroy .p .b
  797. set result
  798.     } $g
  799. }
  800. set i 0
  801. foreach s [list {}  n  s  e  w ns ew nw ne se sw nse nsw sew new news] 
  802. x [list 10 10 10 20  0 10  0  0 20 20  0  20   0   0   0    0] 
  803. y [list 10  0 20 10 10  0 10  0  0 20 20   0   0  20   0    0] 
  804. w [list 20 20 20 20 20 20 40 20 20 20 20  20  20  40  40   40] 
  805. h [list 20 20 20 20 20 40 20 20 20 20 20  40  40  20  20   40] {
  806.     test panedwindow-16.[incr i] {panedwindow sticky works} {
  807. panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0
  808. .p add [frame .p.f -height 20 -width 20 -bg red] -sticky $s
  809. place .p -width 40 -height 40
  810. update
  811. set result [list $s [winfo x .p.f] [winfo y .p.f] 
  812. [winfo width .p.f] [winfo height .p.f]]
  813. destroy .p .p.f
  814. set result
  815.     } [list $s $x $y $w $h]
  816. }
  817. test panedwindow-17.1 {setting minsize when pane is too small snaps width} {
  818.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  819.     .p add [frame .p.f -height 20 -width 20 -bg red]
  820.     set result [winfo reqwidth .p]
  821.     .p paneconfigure .p.f -minsize 40
  822.     lappend result [winfo reqwidth .p]
  823.     destroy .p .p.f .p.f2
  824.     set result
  825. } [list 20 40]
  826. test panedwindow-18.1 {MoveSash, move right} {
  827.     set result {}
  828.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  829.     foreach w {.f1 .f2} c {red blue} {
  830. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  831.     }
  832.     # Get the requested width of the paned window
  833.     lappend result [winfo reqwidth .p]
  834.     
  835.     .p sash place 0 30 0
  836.     
  837.     # Get the reqwidth again, to make sure it hasn't changed
  838.     lappend result [winfo reqwidth .p]
  839.     # Check that the sash moved
  840.     lappend result [.p sash coord 0]
  841.     
  842.     # Cleanup
  843.     destroy .p .f1 .f2
  844.     set result
  845. } [list 42 42 {30 0}]
  846. test panedwindow-18.2 {MoveSash, move right (unmapped) clipped by reqwidth} {
  847.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  848.     foreach w {.f1 .f2} c {red blue} {
  849. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  850.     }
  851.     .p sash place 0 100 0
  852.     
  853.     # Get the new sash coord; it should be clipped by the reqwidth of
  854.     # the panedwindow.
  855.     set result [.p sash coord 0]
  856.     
  857.     # Cleanup
  858.     destroy .p .f1 .f2
  859.     set result
  860. } [list 40 0]
  861. test panedwindow-18.3 {MoveSash, move right (mapped, width < reqwidth) clipped by width} {
  862.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  863.     foreach w {.f1 .f2} c {red blue} {
  864. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  865.     }
  866.     
  867.     # Put the panedwindow up on the display and give it a width < reqwidth
  868.     place .p -x 0 -y 0 -width 32
  869.     update
  870.     .p sash place 0 100 0
  871.     
  872.     # Get the new sash coord; it should be clipped by the visible width of
  873.     # the panedwindow.
  874.     set result [.p sash coord 0]
  875.     
  876.     # Cleanup
  877.     destroy .p .f1 .f2
  878.     set result
  879. } [list 30 0]
  880. test panedwindow-18.4 {MoveSash, move right (mapped, width > reqwidth) clipped by width} {
  881.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  882.     foreach w {.f1 .f2} c {red blue} {
  883. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  884.     }
  885.     
  886.     # Put the panedwindow up on the display and give it a width > reqwidth
  887.     place .p -x 0 -y 0 -width 102
  888.     update
  889.     .p sash place 0 200 0
  890.     
  891.     # Get the new sash coord; it should be clipped by the visible width of
  892.     # the panedwindow.
  893.     set result [.p sash coord 0]
  894.     
  895.     # Cleanup
  896.     destroy .p .f1 .f2
  897.     set result
  898. } [list 100 0]
  899. test panedwindow-18.5 {MoveSash, move right respects minsize} {
  900.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  901.     foreach w {.f1 .f2} c {red blue} {
  902. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew -minsize 10
  903.     }
  904.     .p sash place 0 100 0
  905.     
  906.     # Get the new sash coord; it should have moved as far as possible while
  907.     # respecting minsizes.
  908.     set result [.p sash coord 0]
  909.     
  910.     # Cleanup
  911.     destroy .p .f1 .f2
  912.     set result
  913. } [list 30 0]
  914. test panedwindow-18.6 {MoveSash, move right respects minsize} {
  915.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  916.     foreach w {.f1 .f2 .f3} c {red blue} {
  917. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew -minsize 10
  918.     }
  919.     .p sash place 0 100 0
  920.     
  921.     # Get the new sash coord; it should have moved as far as possible.
  922.     set result [.p sash coord 0]
  923.     
  924.     # Cleanup
  925.     destroy .p .f1 .f2 .f3
  926.     set result
  927. } [list 40 0]
  928. test panedwindow-18.7 {MoveSash, move right pushes other sashes} {
  929.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  930.     foreach w {.f1 .f2 .f3} c {red blue} {
  931. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  932.     }
  933.     .p sash place 0 100 0
  934.     
  935.     # Get the new sash coord; it should have moved as far as possible while
  936.     # respecting minsizes.
  937.     set result [.p sash coord 1]
  938.     
  939.     # Cleanup
  940.     destroy .p .f1 .f2 .f3
  941.     set result
  942. } [list 62 0]
  943. test panedwindow-18.8 {MoveSash, move right pushes other sashes, respects minsize} {
  944.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  945.     foreach w {.f1 .f2 .f3} c {red blue} {
  946. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew -minsize 10
  947.     }
  948.     .p sash place 0 100 0
  949.     
  950.     # Get the new sash coord; it should have moved as far as possible while
  951.     # respecting minsizes.
  952.     set result [.p sash coord 1]
  953.     
  954.     # Cleanup
  955.     destroy .p .f1 .f2 .f3
  956.     set result
  957. } [list 52 0]
  958. test panedwindow-18.9 {MoveSash, move right respects minsize, exludes pad} {
  959.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  960.     foreach w {.f1 .f2 .f3} c {red blue} {
  961. .p add [frame $w -height 20 -width 20 -bg $c] 
  962. -sticky nsew -minsize 10 -padx 5
  963.     }
  964.     .p sash place 0 100 0
  965.     
  966.     # Get the new sash coord; it should have moved as far as possible, 
  967.     # respecting minsizes.
  968.     set result [.p sash coord 0]
  969.     
  970.     # Cleanup
  971.     destroy .p .f1 .f2 .f3
  972.     set result
  973. } [list 50 0]
  974. test panedwindow-18.10 {MoveSash, move right, negative minsize becomes 0} {
  975.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  976.     foreach w {.f1 .f2 .f3} c {red blue} {
  977. .p add [frame $w -height 20 -width 20 -bg $c] 
  978. -sticky nsew -minsize -50
  979.     }
  980.     .p sash place 0 50 0
  981.     
  982.     # Get the new sash coord; it should have moved as far as possible, 
  983.     # respecting minsizes.
  984.     set result [list [.p sash coord 0] [.p sash coord 1]]
  985.     
  986.     # Cleanup
  987.     destroy .p .f1 .f2 .f3
  988.     set result
  989. } [list [list 50 0] [list 52 0]]
  990. test panedwindow-18.11 {MoveSash, move left} {
  991.     set result {}
  992.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  993.     foreach w {.f1 .f2} c {red blue} {
  994. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  995.     }
  996.     # Get the requested width of the paned window
  997.     lappend result [winfo reqwidth .p]
  998.     
  999.     .p sash place 0 10 0
  1000.     
  1001.     # Get the reqwidth again, to make sure it hasn't changed
  1002.     lappend result [winfo reqwidth .p]
  1003.     # Check that the sash moved
  1004.     lappend result [.p sash coord 0]
  1005.     
  1006.     # Cleanup
  1007.     destroy .p .f1 .f2
  1008.     set result
  1009. } [list 42 42 {10 0}]
  1010. test panedwindow-18.12 {MoveSash, move left, can't move outside of window} {
  1011.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1012.     foreach w {.f1 .f2} c {red blue} {
  1013. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  1014.     }
  1015.     .p sash place 0 -100 0
  1016.     
  1017.     # Get the new sash coord; it should be clipped by the reqwidth of
  1018.     # the panedwindow.
  1019.     set result [.p sash coord 0]
  1020.     
  1021.     # Cleanup
  1022.     destroy .p .f1 .f2
  1023.     set result
  1024. } [list 0 0]
  1025. test panedwindow-18.13 {MoveSash, move left respects minsize} {
  1026.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1027.     foreach w {.f1 .f2} c {red blue} {
  1028. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew -minsize 10
  1029.     }
  1030.     .p sash place 0 0 0
  1031.     
  1032.     # Get the new sash coord; it should have moved as far as possible while
  1033.     # respecting minsizes.
  1034.     set result [.p sash coord 0]
  1035.     
  1036.     # Cleanup
  1037.     destroy .p .f1 .f2
  1038.     set result
  1039. } [list 10 0]
  1040. test panedwindow-18.14 {MoveSash, move left respects minsize} {
  1041.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1042.     foreach w {.f1 .f2 .f3} c {red blue} {
  1043. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew -minsize 10
  1044.     }
  1045.     .p sash place 1 0 0
  1046.     
  1047.     # Get the new sash coord; it should have moved as far as possible.
  1048.     set result [.p sash coord 1]
  1049.     
  1050.     # Cleanup
  1051.     destroy .p .f1 .f2 .f3
  1052.     set result
  1053. } [list 22 0]
  1054. test panedwindow-18.15 {MoveSash, move left pushes other sashes} {
  1055.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1056.     foreach w {.f1 .f2 .f3} c {red blue} {
  1057. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  1058.     }
  1059.     .p sash place 1 0 0
  1060.     
  1061.     # Get the new sash coord; it should have moved as far as possible while
  1062.     # respecting minsizes.
  1063.     set result [.p sash coord 0]
  1064.     
  1065.     # Cleanup
  1066.     destroy .p .f1 .f2 .f3
  1067.     set result
  1068. } [list 0 0]
  1069. test panedwindow-18.16 {MoveSash, move left pushes other sashes, respects minsize} {
  1070.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1071.     foreach w {.f1 .f2 .f3} c {red blue} {
  1072. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew -minsize 10
  1073.     }
  1074.     .p sash place 1 0 0
  1075.     
  1076.     # Get the new sash coord; it should have moved as far as possible while
  1077.     # respecting minsizes.
  1078.     set result [.p sash coord 0]
  1079.     
  1080.     # Cleanup
  1081.     destroy .p .f1 .f2 .f3
  1082.     set result
  1083. } [list 10 0]
  1084. test panedwindow-18.17 {MoveSash, move left respects minsize, exludes pad} {
  1085.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1086.     foreach w {.f1 .f2 .f3} c {red blue} {
  1087. .p add [frame $w -height 20 -width 20 -bg $c] 
  1088. -sticky nsew -minsize 10 -padx 5
  1089.     }
  1090.     .p sash place 1 0 0
  1091.     
  1092.     # Get the new sash coord; it should have moved as far as possible, 
  1093.     # respecting minsizes.
  1094.     set result [.p sash coord 1]
  1095.     
  1096.     # Cleanup
  1097.     destroy .p .f1 .f2 .f3
  1098.     set result
  1099. } [list 42 0]
  1100. test panedwindow-18.18 {MoveSash, move left, negative minsize becomes 0} {
  1101.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1102.     foreach w {.f1 .f2 .f3} c {red blue green} {
  1103. .p add [frame $w -height 20 -width 20 -bg $c] 
  1104. -sticky nsew -minsize -50
  1105.     }
  1106.     .p sash place 1 10 0
  1107.     
  1108.     # Get the new sash coord; it should have moved as far as possible, 
  1109.     # respecting minsizes.
  1110.     set result [list [.p sash coord 0] [.p sash coord 1]]
  1111.     
  1112.     # Cleanup
  1113.     destroy .p .f1 .f2 .f3
  1114.     set result
  1115. } [list [list 8 0] [list 10 0]]
  1116. test panedwindow-19.1 {MoveSash, move down} {
  1117.     set result {}
  1118.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1119.             -orient vertical
  1120.     foreach w {.f1 .f2} c {red blue} {
  1121. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  1122.     }
  1123.     # Get the requested width of the paned window
  1124.     lappend result [winfo reqheight .p]
  1125.     
  1126.     .p sash place 0 0 30
  1127.     
  1128.     # Get the reqwidth again, to make sure it hasn't changed
  1129.     lappend result [winfo reqheight .p]
  1130.     # Check that the sash moved
  1131.     lappend result [.p sash coord 0]
  1132.     
  1133.     # Cleanup
  1134.     destroy .p .f1 .f2
  1135.     set result
  1136. } [list 42 42 {0 30}]
  1137. test panedwindow-19.2 {MoveSash, move down (unmapped) clipped by reqheight} {
  1138.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1139.             -orient vertical
  1140.     foreach w {.f1 .f2} c {red blue} {
  1141. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  1142.     }
  1143.     .p sash place 0 0 100
  1144.     
  1145.     # Get the new sash coord; it should be clipped by the reqheight of
  1146.     # the panedwindow.
  1147.     set result [.p sash coord 0]
  1148.     
  1149.     # Cleanup
  1150.     destroy .p .f1 .f2
  1151.     set result
  1152. } [list 0 40]
  1153. test panedwindow-19.3 {MoveSash, move down (mapped, height < reqheight) clipped by height} {
  1154.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1155.             -orient vertical
  1156.     foreach w {.f1 .f2} c {red blue} {
  1157. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  1158.     }
  1159.     
  1160.     # Put the panedwindow up on the display and give it a height < reqheight
  1161.     place .p -x 0 -y 0 -height 32
  1162.     update
  1163.     .p sash place 0 0 100
  1164.     
  1165.     # Get the new sash coord; it should be clipped by the visible height of
  1166.     # the panedwindow.
  1167.     set result [.p sash coord 0]
  1168.     
  1169.     # Cleanup
  1170.     destroy .p .f1 .f2
  1171.     set result
  1172. } [list 0 30]
  1173. test panedwindow-19.4 {MoveSash, move down (mapped, height > reqheight) clipped by height} {
  1174.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1175.             -orient vertical
  1176.     foreach w {.f1 .f2} c {red blue} {
  1177. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  1178.     }
  1179.     
  1180.     # Put the panedwindow up on the display and give it a width > reqwidth
  1181.     place .p -x 0 -y 0 -height 102
  1182.     update
  1183.     .p sash place 0 0 200
  1184.     
  1185.     # Get the new sash coord; it should be clipped by the visible width of
  1186.     # the panedwindow.
  1187.     set result [.p sash coord 0]
  1188.     
  1189.     # Cleanup
  1190.     destroy .p .f1 .f2
  1191.     set result
  1192. } [list 0 100]
  1193. test panedwindow-19.5 {MoveSash, move down respects minsize} {
  1194.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1195.             -orient vertical
  1196.     foreach w {.f1 .f2} c {red blue} {
  1197. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew -minsize 10
  1198.     }
  1199.     .p sash place 0 0 100
  1200.     
  1201.     # Get the new sash coord; it should have moved as far as possible while
  1202.     # respecting minsizes.
  1203.     set result [.p sash coord 0]
  1204.     
  1205.     # Cleanup
  1206.     destroy .p .f1 .f2
  1207.     set result
  1208. } [list 0 30]
  1209. test panedwindow-19.6 {MoveSash, move down respects minsize} {
  1210.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1211.             -orient vertical
  1212.     foreach w {.f1 .f2 .f3} c {red blue} {
  1213. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew -minsize 10
  1214.     }
  1215.     .p sash place 0 0 100
  1216.     
  1217.     # Get the new sash coord; it should have moved as far as possible while
  1218.     # respecting minsizes.
  1219.     set result [.p sash coord 0]
  1220.     
  1221.     # Cleanup
  1222.     destroy .p .f1 .f2 .f3
  1223.     set result
  1224. } [list 0 40]
  1225. test panedwindow-19.7 {MoveSash, move down pushes other sashes} {
  1226.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1227.             -orient vertical
  1228.     foreach w {.f1 .f2 .f3} c {red blue} {
  1229. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  1230.     }
  1231.     .p sash place 0 0 100
  1232.     
  1233.     # Get the new sash coord; it should have moved as far as possible while
  1234.     # respecting minsizes.
  1235.     set result [.p sash coord 1]
  1236.     
  1237.     # Cleanup
  1238.     destroy .p .f1 .f2 .f3
  1239.     set result
  1240. } [list 0 62]
  1241. test panedwindow-19.8 {MoveSash, move down pushes other sashes, respects minsize} {
  1242.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1243.             -orient vertical
  1244.     foreach w {.f1 .f2 .f3} c {red blue} {
  1245. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew -minsize 10
  1246.     }
  1247.     .p sash place 0 0 100
  1248.     
  1249.     # Get the new sash coord; it should have moved as far as possible while
  1250.     # respecting minsizes.
  1251.     set result [.p sash coord 1]
  1252.     
  1253.     # Cleanup
  1254.     destroy .p .f1 .f2 .f3
  1255.     set result
  1256. } [list 0 52]
  1257. test panedwindow-19.9 {MoveSash, move down respects minsize, exludes pad} {
  1258.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1259.             -orient vertical
  1260.     foreach w {.f1 .f2 .f3} c {red blue} {
  1261. .p add [frame $w -height 20 -width 20 -bg $c] 
  1262. -sticky nsew -minsize 10 -pady 5
  1263.     }
  1264.     .p sash place 0 0 100
  1265.     
  1266.     # Get the new sash coord; it should have moved as far as possible, 
  1267.     # respecting minsizes.
  1268.     set result [.p sash coord 0]
  1269.     
  1270.     # Cleanup
  1271.     destroy .p .f1 .f2 .f3
  1272.     set result
  1273. } [list 0 50]
  1274. test panedwindow-19.10 {MoveSash, move right, negative minsize becomes 0} {
  1275.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1276.             -orient vertical
  1277.     foreach w {.f1 .f2 .f3} c {red blue} {
  1278. .p add [frame $w -height 20 -width 20 -bg $c] 
  1279. -sticky nsew -minsize -50
  1280.     }
  1281.     .p sash place 0 0 50
  1282.     
  1283.     # Get the new sash coord; it should have moved as far as possible, 
  1284.     # respecting minsizes.
  1285.     set result [list [.p sash coord 0] [.p sash coord 1]]
  1286.     
  1287.     # Cleanup
  1288.     destroy .p .f1 .f2 .f3
  1289.     set result
  1290. } [list [list 0 50] [list 0 52]]
  1291. test panedwindow-19.11 {MoveSash, move up} {
  1292.     set result {}
  1293.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1294.             -orient vertical
  1295.     foreach w {.f1 .f2} c {red blue} {
  1296. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  1297.     }
  1298.     # Get the requested width of the paned window
  1299.     lappend result [winfo reqheight .p]
  1300.     
  1301.     .p sash place 0 0 10
  1302.     
  1303.     # Get the reqwidth again, to make sure it hasn't changed
  1304.     lappend result [winfo reqheight .p]
  1305.     # Check that the sash moved
  1306.     lappend result [.p sash coord 0]
  1307.     
  1308.     # Cleanup
  1309.     destroy .p .f1 .f2
  1310.     set result
  1311. } [list 42 42 {0 10}]
  1312. test panedwindow-19.12 {MoveSash, move up, can't move outside of window} {
  1313.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1314.             -orient vertical
  1315.     foreach w {.f1 .f2} c {red blue} {
  1316. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  1317.     }
  1318.     .p sash place 0 0 -100
  1319.     
  1320.     # Get the new sash coord; it should be clipped by the reqwidth of
  1321.     # the panedwindow.
  1322.     set result [.p sash coord 0]
  1323.     
  1324.     # Cleanup
  1325.     destroy .p .f1 .f2
  1326.     set result
  1327. } [list 0 0]
  1328. test panedwindow-19.13 {MoveSash, move up respects minsize} {
  1329.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1330.             -orient vertical
  1331.     foreach w {.f1 .f2} c {red blue} {
  1332. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew -minsize 10
  1333.     }
  1334.     .p sash place 0 0 0
  1335.     
  1336.     # Get the new sash coord; it should have moved as far as possible while
  1337.     # respecting minsizes.
  1338.     set result [.p sash coord 0]
  1339.     
  1340.     # Cleanup
  1341.     destroy .p .f1 .f2
  1342.     set result
  1343. } [list 0 10]
  1344. test panedwindow-19.14 {MoveSash, move up respects minsize} {
  1345.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1346.             -orient vertical
  1347.     foreach w {.f1 .f2 .f3} c {red blue} {
  1348. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew -minsize 10
  1349.     }
  1350.     .p sash place 1 0 0
  1351.     
  1352.     # Get the new sash coord; it should have moved as far as possible.
  1353.     set result [.p sash coord 1]
  1354.     
  1355.     # Cleanup
  1356.     destroy .p .f1 .f2 .f3
  1357.     set result
  1358. } [list 0 22]
  1359. test panedwindow-19.15 {MoveSash, move up pushes other sashes} {
  1360.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1361.             -orient vertical
  1362.     foreach w {.f1 .f2 .f3} c {red blue} {
  1363. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew
  1364.     }
  1365.     .p sash place 1 0 0
  1366.     
  1367.     # Get the new sash coord; it should have moved as far as possible while
  1368.     # respecting minsizes.
  1369.     set result [.p sash coord 0]
  1370.     
  1371.     # Cleanup
  1372.     destroy .p .f1 .f2 .f3
  1373.     set result
  1374. } [list 0 0]
  1375. test panedwindow-19.16 {MoveSash, move up pushes other sashes, respects minsize} {
  1376.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1377.             -orient vertical
  1378.     foreach w {.f1 .f2 .f3} c {red blue} {
  1379. .p add [frame $w -height 20 -width 20 -bg $c] -sticky nsew -minsize 10
  1380.     }
  1381.     .p sash place 1 0 0
  1382.     
  1383.     # Get the new sash coord; it should have moved as far as possible while
  1384.     # respecting minsizes.
  1385.     set result [.p sash coord 0]
  1386.     
  1387.     # Cleanup
  1388.     destroy .p .f1 .f2 .f3
  1389.     set result
  1390. } [list 0 10]
  1391. test panedwindow-19.17 {MoveSash, move up respects minsize, exludes pad} {
  1392.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1393.             -orient vertical
  1394.     foreach w {.f1 .f2 .f3} c {red blue} {
  1395. .p add [frame $w -height 20 -width 20 -bg $c] 
  1396. -sticky nsew -minsize 10 -pady 5
  1397.     }
  1398.     .p sash place 1 0 0
  1399.     
  1400.     # Get the new sash coord; it should have moved as far as possible, 
  1401.     # respecting minsizes.
  1402.     set result [.p sash coord 1]
  1403.     
  1404.     # Cleanup
  1405.     destroy .p .f1 .f2 .f3
  1406.     set result
  1407. } [list 0 42]
  1408. test panedwindow-19.18 {MoveSash, move up, negative minsize becomes 0} {
  1409.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1410.             -orient vertical
  1411.     foreach w {.f1 .f2 .f3} c {red blue green} {
  1412. .p add [frame $w -height 20 -width 20 -bg $c] 
  1413. -sticky nsew -minsize -50
  1414.     }
  1415.     .p sash place 1 0 10
  1416.     
  1417.     # Get the new sash coord; it should have moved as far as possible, 
  1418.     # respecting minsizes.
  1419.     set result [list [.p sash coord 0] [.p sash coord 1]]
  1420.     
  1421.     # Cleanup
  1422.     destroy .p .f1 .f2 .f3
  1423.     set result
  1424. } [list [list 0 8] [list 0 10]]
  1425. # The following tests check that the panedwindow is correctly computing its
  1426. # geometry based on the various configuration options that can affect the
  1427. # geometry.
  1428. test panedwindow-20.1 {ComputeGeometry, reqheight taken from widgets} {
  1429.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0
  1430.     foreach w {.f1 .f2 .f3} {
  1431. .p add [frame $w -width 20 -height 20 -bg blue]
  1432.     }
  1433.     set result [list [list [winfo reqwidth .p] [winfo reqheight .p]]]
  1434.     .f3 configure -height 40
  1435.     lappend result [list [winfo reqwidth .p] [winfo reqheight .p]]
  1436.     destroy .p .f1 .f2 .f3
  1437.     set result
  1438. } [list [list 60 20] [list 60 40]]
  1439. test panedwindow-20.2 {ComputeGeometry, reqheight taken from widgets} {
  1440.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0
  1441.     foreach w {.f1 .f2 .f3} {
  1442. .p add [frame $w -width 20 -height 20 -bg blue]
  1443.     }
  1444.     set result [list [list [winfo reqwidth .p] [winfo reqheight .p]]]
  1445.     .p paneconfigure .f3 -height 40
  1446.     lappend result [list [winfo reqwidth .p] [winfo reqheight .p]]
  1447.     destroy .p .f1 .f2 .f3
  1448.     set result
  1449. } [list [list 60 20] [list 60 40]]
  1450. test panedwindow-20.3 {ComputeGeometry, reqheight taken from widgets} {
  1451.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0
  1452.     foreach w {.f1 .f2 .f3} {
  1453. .p add [frame $w -width 20 -height 20 -bg blue] -pady 20
  1454.     }
  1455.     set result [list [list [winfo reqwidth .p] [winfo reqheight .p]]]
  1456.     .p paneconfigure .f3 -height 40
  1457.     lappend result [list [winfo reqwidth .p] [winfo reqheight .p]]
  1458.     destroy .p .f1 .f2 .f3
  1459.     set result
  1460. } [list [list 60 60] [list 60 80]]
  1461. test panedwindow-20.4 {ComputeGeometry, reqwidth taken from widgets} {
  1462.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0 
  1463.             -orient vertical
  1464.     foreach w {.f1 .f2 .f3} {
  1465. .p add [frame $w -width 20 -height 20 -bg blue]
  1466.     }
  1467.     set result [list [list [winfo reqwidth .p] [winfo reqheight .p]]]
  1468.     .f3 configure -width 40
  1469.     lappend result [list [winfo reqwidth .p] [winfo reqheight .p]]
  1470.     destroy .p .f1 .f2 .f3
  1471.     set result
  1472. } [list [list 20 60] [list 40 60]]
  1473. test panedwindow-20.5 {ComputeGeometry, reqwidth taken from widgets} {
  1474.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0 
  1475.             -orient vertical
  1476.     foreach w {.f1 .f2 .f3} {
  1477. .p add [frame $w -width 20 -height 20 -bg blue]
  1478.     }
  1479.     set result [list [list [winfo reqwidth .p] [winfo reqheight .p]]]
  1480.     .p paneconfigure .f3 -width 40
  1481.     lappend result [list [winfo reqwidth .p] [winfo reqheight .p]]
  1482.     destroy .p .f1 .f2 .f3
  1483.     set result
  1484. } [list [list 20 60] [list 40 60]]
  1485. test panedwindow-20.6 {ComputeGeometry, reqwidth taken from widgets} {
  1486.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 0 
  1487.             -orient vertical
  1488.     foreach w {.f1 .f2 .f3} {
  1489. .p add [frame $w -width 20 -height 20 -bg blue] -padx 20
  1490.     }
  1491.     set result [list [list [winfo reqwidth .p] [winfo reqheight .p]]]
  1492.     .p paneconfigure .f3 -width 40
  1493.     lappend result [list [winfo reqwidth .p] [winfo reqheight .p]]
  1494.     destroy .p .f1 .f2 .f3
  1495.     set result
  1496. } [list [list 60 60] [list 80 60]]
  1497. set i 6
  1498. foreach bd {0 2} {
  1499.     foreach sp {0 5} {
  1500. foreach sw {0 3} {
  1501.     foreach h {0 1} {
  1502. test panedwindow-20.[incr i]-$bd-$sp-$sw-$h 
  1503. {ComputeGeometry, one slave, reqsize set properly} {
  1504.     # With just one slave, sashpad and sashwidth should not
  1505.     # affect the panedwindow's geometry, since no sash should
  1506.     # ever be drawn.
  1507.     panedwindow .p -borderwidth $bd -sashpad $sp 
  1508.     -sashwidth $sw -handlesize 6 -showhandle $h
  1509.     .p add [frame .p.f -width 20 -height 20 -bg red] -padx $h 
  1510.                             -sticky ""
  1511.     set result [list [winfo reqwidth .p] [winfo reqheight .p]]
  1512.     destroy .p .p.f
  1513.     set result
  1514. } [list [expr {(2 * $bd) + 20 + (2 * $h)}] 
  1515. [expr {(2 * $bd) + 20}]]
  1516. test panedwindow-20.[incr i]-$bd-$sp-$sw-$h 
  1517. {ComputeGeometry, three panes, reqsize set properly} {
  1518.     panedwindow .p -borderwidth $bd -sashpad $sp 
  1519.     -sashwidth $sw -handlesize 6 -showhandle $h
  1520.     foreach w {.p.f1 .p.f2 .p.f3} {
  1521. .p add [frame $w -width 20 -height 20 -bg blue] 
  1522.                                 -sticky ""
  1523.     }
  1524.     set result [list [winfo reqwidth .p] [winfo reqheight .p]]
  1525.     destroy .p .p.f1 .p.f2 .p.f3
  1526.     set result
  1527. } [list [expr {(2 * $bd) + ($h?12:(2*$sw)) + (4*$sp) + 60}] 
  1528. [expr {(2 * $bd) + 20}]]
  1529. test panedwindow-20.[incr i]-$bd-$sp-$sw-$h 
  1530. {ComputeGeometry, sash coords} {
  1531.     panedwindow .p -borderwidth $bd -sashpad $sp 
  1532.     -sashwidth $sw -handlesize 6 -showhandle $h
  1533.     foreach w {.f1 .f2 .f3} {
  1534. .p add [frame $w -width 20 -height 20 -bg blue] 
  1535.                                 -sticky ""
  1536.     }
  1537.     set result [list [.p sash coord 0] [.p sash coord 1]]
  1538.     destroy .p .f1 .f2 .f3
  1539.     set result
  1540. } [list [list [expr {$bd+20+($h?(6-$sw)/2:0)+$sp}] $bd] 
  1541. [list [expr {$bd+40+($h?6+(6-$sw)/2:$sw)+(3*$sp)}] 
  1542.     $bd]]
  1543. test panedwindow-20.[incr i]-$bd-$sp-$sw-$h 
  1544. {ComputeGeometry/ArrangePanes, slave coords} {
  1545.     panedwindow .p -borderwidth $bd -sashpad $sp 
  1546.     -sashwidth $sw -handlesize 6 -showhandle $h
  1547.     foreach w {.p.f1 .p.f2 .p.f3} {
  1548. .p add [frame $w -width 20 -height 20 -bg blue] 
  1549. -sticky nsew -pady 3 -padx 11
  1550.     }
  1551.     pack .p
  1552.     update
  1553.     set result {}
  1554.     foreach w {.p.f1 .p.f2 .p.f3} {
  1555. lappend result [list [winfo x $w] [winfo y $w] 
  1556. [winfo width $w] [winfo height $w]]
  1557.     }
  1558.     destroy .p .p.f1 .p.f2 .p.f3
  1559.     set result
  1560. } [list [list [expr {$bd+11}] [expr {$bd+3}] 20 20] 
  1561. [list [expr {$bd+53+($h?6:$sw)+(2*$sp)}] 
  1562.     [expr {$bd+3}] 20 20] 
  1563. [list [expr {$bd+95+($h?12:2*$sw)+(4*$sp)}] 
  1564.     [expr {$bd+3}] 20 20]]
  1565. test panedwindow-20.[incr i]-$bd-$sp-$sw-$h 
  1566. {ComputeGeometry, one slave, vertical} {
  1567.     # With just one slave, sashpad and sashwidth should not
  1568.     # affect the panedwindow's geometry, since no sash should
  1569.     # ever be drawn.
  1570.     panedwindow .p -borderwidth $bd -sashpad $sp 
  1571.     -orient vertical -sashwidth $sw -handlesize 6 
  1572.     -showhandle $h
  1573.     .p add [frame .f -width 20 -height 20 -bg red] -pady $h 
  1574.                             -sticky ""
  1575.     set result [list [winfo reqwidth .p] [winfo reqheight .p]]
  1576.     destroy .p .f
  1577.     set result
  1578. } [list [expr {(2 * $bd) + 20}] 
  1579. [expr {(2 * $bd) + 20 + (2 * $h)}]]
  1580. test panedwindow-20.[incr i]-$bd-$sp-$sw-$h 
  1581. {ComputeGeometry, three panes, vertical} {
  1582.     panedwindow .p -borderwidth $bd -sashpad $sp 
  1583.     -sashwidth $sw -handlesize 6 -showhandle $h 
  1584.     -orient vertical
  1585.     foreach w {.f1 .f2 .f3} {
  1586. .p add [frame $w -width 20 -height 20 -bg blue] 
  1587.                                 -sticky ""
  1588.     }
  1589.     set result [list [winfo reqwidth .p] [winfo reqheight .p]]
  1590.     destroy .p .f1 .f2 .f3
  1591.     set result
  1592. } [list [expr {(2 * $bd) + 20}] 
  1593. [expr {(2 * $bd) + ($h?12:(2*$sw)) + (4*$sp) + 60}]]
  1594. test panedwindow-20.[incr i]-$bd-$sp-$sw-$h 
  1595. {ComputeGeometry, sash coords, vertical} {
  1596.     panedwindow .p -borderwidth $bd -sashpad $sp 
  1597.     -sashwidth $sw -handlesize 6 -showhandle $h 
  1598.     -orient vertical
  1599.     foreach w {.f1 .f2 .f3} {
  1600. .p add [frame $w -width 20 -height 20 -bg blue] 
  1601.                                 -sticky ""
  1602.     }
  1603.     set result [list [.p sash coord 0] [.p sash coord 1]]
  1604.     destroy .p .f1 .f2 .f3
  1605.     set result
  1606. } [list [list $bd [expr {$bd+20+($h?(6-$sw)/2:0)+$sp}]] 
  1607. [list $bd 
  1608.     [expr {$bd+40+($h?6+(6-$sw)/2:$sw)+(3*$sp)}]]]
  1609. test panedwindow-20.[incr i]-$bd-$sp-$sw-$h 
  1610. {ComputeGeometry/ArrangePanes, slave coords, vert} {
  1611.     panedwindow .p -borderwidth $bd -sashpad $sp 
  1612.     -sashwidth $sw -handlesize 6 -showhandle $h 
  1613.     -orient vertical
  1614.     foreach w {.p.f1 .p.f2 .p.f3} {
  1615. .p add [frame $w -width 20 -height 20 -bg blue] 
  1616. -sticky nsew -pady 11 -padx 3
  1617.     }
  1618.     pack .p
  1619.     update
  1620.     set result {}
  1621.     foreach w {.p.f1 .p.f2 .p.f3} {
  1622. lappend result [list [winfo x $w] [winfo y $w] 
  1623. [winfo width $w] [winfo height $w]]
  1624.     }
  1625.     destroy .p .p.f1 .p.f2 .p.f3
  1626.     set result
  1627. } [list [list [expr {$bd+3}] [expr {$bd+11}] 20 20] 
  1628. [list [expr {$bd+3}] 
  1629.     [expr {$bd+53+($h?6:$sw)+(2*$sp)}] 20 20] 
  1630. [list [expr {$bd+3}] 
  1631.     [expr {$bd+95+($h?12:2*$sw)+(4*$sp)}] 20 20]]
  1632.     }
  1633. }
  1634.     }
  1635. }
  1636. test panedwindow-21.1 {destroyed widgets are removed from panedwindow} {
  1637.     panedwindow .p
  1638.     .p add [frame .f -width 20 -height 20 -bg blue]
  1639.     destroy .f
  1640.     set result [.p panes]
  1641.     destroy .p
  1642.     set result
  1643. } {}
  1644. test panedwindow-21.2 {destroyed slave causes geometry recomputation} {
  1645.     panedwindow .p -borderwidth 0 -sashpad 0 -sashwidth 2
  1646.     .p add [frame .f -width 20 -height 20 -bg blue] 
  1647.     [frame .f2 -width 20 -height 20 -bg red]
  1648.     destroy .f
  1649.     set result [winfo reqwidth .p]
  1650.     destroy .p .f2
  1651.     set result
  1652. } 20
  1653.     
  1654. test panedwindow-22.1 {ArrangePanes, extra space is given to the last pane} {
  1655.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1656.     .p add [frame .f1 -width 20 -height 20 -bg blue] 
  1657.     [frame .f2 -width 20 -height 20 -bg red] -sticky nsew
  1658.     place .p -width 100 -x 0 -y 0
  1659.     update
  1660.     set result [winfo width .f2]
  1661.     destroy .p .f1 .f2
  1662.     set result
  1663. } 78
  1664. test panedwindow-22.2 {ArrangePanes, extra space is given to the last pane} {
  1665.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1666.             -orient vertical
  1667.     .p add [frame .f1 -width 20 -height 20 -bg blue] 
  1668.     [frame .f2 -width 20 -height 20 -bg red] -sticky nsew
  1669.     place .p -height 100 -x 0 -y 0
  1670.     update
  1671.     set result [winfo height .f2]
  1672.     destroy .p .f1 .f2
  1673.     set result
  1674. } 78
  1675. test panedwindow-22.3 {ArrangePanes, explicit height/width are preferred} {
  1676.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1677.     .p add [frame .f1 -width 20 -height 20 -bg blue] 
  1678.     [frame .f2 -width 20 -height 20 -bg red] -sticky ""
  1679.     .p paneconfigure .f1 -width 10 -height 15
  1680.     pack .p
  1681.     update
  1682.     set result [list [winfo width .f1] [winfo height .f1]]
  1683.     destroy .p .f1 .f2
  1684.     set result
  1685. } {10 15}
  1686. test panedwindow-22.4 {ArrangePanes, panes clipped by size of pane} {
  1687.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1688.     .p add [frame .f1 -width 20 -height 20 -bg blue] 
  1689.     [frame .f2 -width 20 -height 20 -bg red]
  1690.     .p sash place 0 10 0
  1691.     pack .p
  1692.     update
  1693.     set result [list [winfo width .f1] [winfo height .f1]]
  1694.     destroy .p .f1 .f2
  1695.     set result
  1696. } {10 20}
  1697. test panedwindow-22.5 {ArrangePanes, panes clipped by size of pane} {
  1698.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1699.             -orient vertical
  1700.     .p add [frame .f1 -width 20 -height 20 -bg blue] 
  1701.     [frame .f2 -width 20 -height 20 -bg red]
  1702.     .p sash place 0 0 10
  1703.     pack .p
  1704.     update
  1705.     set result [list [winfo width .f1] [winfo height .f1]]
  1706.     destroy .p .f1 .f2
  1707.     set result
  1708. } {20 10}
  1709. test panedwindow-22.6 {ArrangePanes, height of pane taken from total height} {
  1710.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1711.     .p add [frame .p.f1 -width 20 -height 20 -bg blue] 
  1712.     [frame .p.f2 -width 20 -height 40 -bg red] -sticky ""
  1713.     pack .p
  1714.     update
  1715.     set result [list [winfo y .p.f1]]
  1716.     destroy .p .p.f1 .p.f2
  1717.     set result
  1718. } 10
  1719. test panedwindow-22.8 {ArrangePanes, width of pane taken from total width} {
  1720.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1721.             -orient vertical
  1722.     .p add [frame .p.f1 -width 20 -height 20 -bg blue] 
  1723.     [frame .p.f2 -width 40 -height 40 -bg red] -sticky ""
  1724.     pack .p
  1725.     update
  1726.     set result [list [winfo x .p.f1]]
  1727.     destroy .p .p.f1 .p.f2
  1728.     set result
  1729. } 10
  1730. test panedwindow-22.9 {ArrangePanes, panes with width <= 0 are unmapped} {
  1731.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1732.     .p add [frame .f1 -width 20 -height 20 -bg blue] 
  1733.     [frame .f2 -width 20 -height 40 -bg red]
  1734.     pack .p
  1735.     update
  1736.     set result [winfo ismapped .f1]
  1737.     .p sash place 0 0 0
  1738.     update
  1739.     lappend result [winfo ismapped .f1]
  1740.     destroy .p .f1 .f2
  1741.     set result
  1742. } {1 0}
  1743. test panedwindow-22.10 {ArrangePanes, panes with width <= 0 are unmapped} {
  1744.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1745.     .p add [frame .p.f1 -width 20 -height 20 -bg blue] 
  1746.     [frame .p.f2 -width 20 -height 40 -bg red]
  1747.     pack .p
  1748.     update
  1749.     set result [winfo ismapped .p.f1]
  1750.     .p sash place 0 0 0
  1751.     update
  1752.     lappend result [winfo ismapped .p.f1]
  1753.     destroy .p .p.f1 .p.f2
  1754.     set result
  1755. } {1 0}
  1756. test panedwindow-22.11 {ArrangePanes, panes with width <= 0 are unmapped} {
  1757.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 -orient vertical
  1758.     .p add [frame .p.f1 -width 20 -height 20 -bg blue] 
  1759.     [frame .p.f2 -width 20 -height 40 -bg red]
  1760.     pack .p
  1761.     update
  1762.     set result [winfo ismapped .p.f1]
  1763.     .p sash place 0 0 0
  1764.     update
  1765.     lappend result [winfo ismapped .p.f1]
  1766.     destroy .p .p.f1 .p.f2
  1767.     set result
  1768. } {1 0}
  1769. test panedwindow-22.12 {ArrangePanes, last pane shrinks} {
  1770.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2
  1771.     .p add [frame .f1 -width 20 -height 20 -bg blue] 
  1772.     [frame .f2 -width 20 -height 20 -bg red] -sticky nsew
  1773.     place .p -width 40 -x 0 -y 0
  1774.     update
  1775.     set result [winfo width .f2]
  1776.     destroy .p .f1 .f2
  1777.     set result
  1778. } 18
  1779. test panedwindow-22.13 {ArrangePanes, last pane shrinks} {
  1780.     panedwindow .p -showhandle false -borderwidth 0 -sashpad 0 -sashwidth 2 
  1781.             -orient vertical
  1782.     .p add [frame .f1 -width 20 -height 20 -bg blue] 
  1783.     [frame .f2 -width 20 -height 20 -bg red] -sticky nsew
  1784.     place .p -height 40 -x 0 -y 0
  1785.     update
  1786.     set result [winfo height .f2]
  1787.     destroy .p .f1 .f2
  1788.     set result
  1789. } 18
  1790. test panedwindow-22.14 {ArrangePanes, panedwindow resizes} {
  1791.     -body {
  1792. panedwindow .p -width 200 -borderwidth 0
  1793. frame .f1 -height 50 -bg blue
  1794. set result [list]
  1795. lappend result [winfo reqwidth .p] [winfo reqheight .p]
  1796. .p add .f1
  1797. pack .p
  1798. lappend result [winfo reqwidth .p] [winfo reqheight .p]
  1799.     }
  1800.     -cleanup {destroy .p .f1}
  1801.     -result {200 1 200 50}
  1802. }
  1803. test panedwindow-22.15 {ArrangePanes, panedwindow resizes} {
  1804.     -body {
  1805. panedwindow .p -height 200 -borderwidth 0 -orient vertical
  1806. frame .f1 -width 50 -bg blue
  1807. set result [list]
  1808. lappend result [winfo reqwidth .p] [winfo reqheight .p]
  1809. .p add .f1
  1810. pack .p
  1811. lappend result [winfo reqwidth .p] [winfo reqheight .p]
  1812.     }
  1813.     -cleanup {destroy .p .f1}
  1814.     -result {1 200 50 200}
  1815. }
  1816. test panedwindow-22.16 {ArrangePanes, last pane grows} {
  1817.     -body {
  1818. panedwindow .p -showhandle false -height 50
  1819. .p add [frame .f1 -width 50 -bg red] [frame .f2 -width 50 -bg white] 
  1820. [frame .f3 -width 50 -bg blue] [frame .f4 -width 50 -bg green]
  1821. .p sash place 1 250 0
  1822. pack .p
  1823. update
  1824. set result [list]
  1825. lappend result [winfo width .f1] [winfo width .f2] [winfo width .f3] 
  1826. [winfo width .f4] [winfo width .p]
  1827. .p configure -width 300
  1828. update
  1829. lappend result [winfo width .f1] [winfo width .f2] [winfo width .f3] 
  1830. [winfo width .f4] [winfo width .p]
  1831.     }
  1832.     -cleanup {destroy .p .f1 .f2 .f3 .f4}
  1833.     -result {50 150 1 1 222 50 150 1 78 300}
  1834. }
  1835. test panedwindow-23.1 {PanedWindowReqProc, react to slave geometry changes} {
  1836.     # Basically just want to make sure that the PanedWindowReqProc is called
  1837.     panedwindow .p -borderwidth 0 -sashpad 0 -sashwidth 2
  1838.     .p add [frame .f1 -width 20 -height 20 -bg blue] 
  1839.     [frame .f2 -width 20 -height 40 -bg red]
  1840.     set result [winfo reqheight .p]
  1841.     .f1 configure -height 80
  1842.     lappend result [winfo reqheight .p]
  1843.     destroy .p .f1 .f2
  1844.     set result
  1845. } {40 80}
  1846. test panedwindow-23.2 {PanedWindowReqProc, react to slave geometry changes} {
  1847.     panedwindow .p -orient horizontal -sashpad 0 -sashwidth 2
  1848.     .p add [frame .f1 -width 10] [frame .f2 -width 10]
  1849.     set result [winfo reqwidth .p]
  1850.     .f1 configure -width 20
  1851.     lappend result [winfo reqwidth .p]
  1852.     destroy .p .f1 .f2
  1853.     expr {[lindex $result 1] - [lindex $result 0]}
  1854. } {10}
  1855. test panedwindow-24.1 {ConfigurePanes, can't add panedwindow to itself} {
  1856.     panedwindow .p
  1857.     set result [list [catch {.p add .p} msg] $msg]
  1858.     destroy .p
  1859.     set result
  1860. } [list 1 "can't add .p to itself"]
  1861. test panedwindow-24.2 {ConfigurePanes, bad window throws error} {
  1862.     panedwindow .p
  1863.     set result [list [catch {.p add .b} msg] $msg]
  1864.     destroy .p
  1865.     set result
  1866. } [list 1 "bad window path name ".b""]
  1867. test panedwindow-24.3 {ConfigurePanes, bad window aborts processing} {
  1868.     panedwindow .p
  1869.     button .b
  1870.     catch {.p add .b .a}
  1871.     set result [.p panes]
  1872.     destroy .p .b
  1873.     set result
  1874. } {}
  1875. test panedwindow-24.4 {ConfigurePanes, bad option aborts processing} {
  1876.     panedwindow .p
  1877.     button .b
  1878.     catch {.p add .b -sticky foobar}
  1879.     set result [.p panes]
  1880.     destroy .p .b
  1881.     set result
  1882. } {}
  1883. test panedwindow-24.5 {ConfigurePanes, after win isn't managed by panedwin} {
  1884.     panedwindow .p
  1885.     button .b
  1886.     button .c
  1887.     set result [list [catch {.p add .b -after .c} msg] $msg]
  1888.     destroy .p .b .c
  1889.     set result
  1890. } [list 1 "window ".c" is not managed by .p"]
  1891. test panedwindow-24.6 {ConfigurePanes, before win isn't managed by panedwin} {
  1892.     panedwindow .p
  1893.     button .b
  1894.     button .c
  1895.     set result [list [catch {.p add .b -before .c} msg] $msg]
  1896.     destroy .p .b .c
  1897.     set result
  1898. } [list 1 "window ".c" is not managed by .p"]
  1899. test panedwindow-24.7 {ConfigurePanes, -after {} is a no-op} {
  1900.     panedwindow .p
  1901.     .p add [button .b] [button .c]
  1902.     .p paneconfigure .b -after {}
  1903.     set result [.p panes]
  1904.     destroy .p .b .c
  1905.     set result
  1906. } {.b .c}
  1907. test panedwindow-24.8 {ConfigurePanes, -before {} is a no-op} {
  1908.     panedwindow .p
  1909.     .p add [button .b] [button .c]
  1910.     .p paneconfigure .b -before {}
  1911.     set result [.p panes]
  1912.     destroy .p .b .c
  1913.     set result
  1914. } {.b .c}
  1915. test panedwindow-24.9 {ConfigurePanes, new panes are added} {
  1916.     panedwindow .p
  1917.     .p add [button .b] [button .c]
  1918.     set result [.p panes]
  1919.     destroy .p .b .c
  1920.     set result
  1921. } {.b .c}
  1922. test panedwindow-24.10 {ConfigurePanes, options applied to all panes} {
  1923.     panedwindow .p
  1924.     .p add [button .b] [button .c] -sticky ne -height 5 -width 5 -minsize 10
  1925.     set result {}
  1926.     foreach w {.b .c} {
  1927. set val {}
  1928. foreach option {-sticky -height -width -minsize} {
  1929.     lappend val $option [.p panecget $w $option]
  1930. }
  1931. lappend result $w $val
  1932.     }
  1933.     destroy .p .b .c
  1934.     set result
  1935. } [list .b {-sticky ne -height 5 -width 5 -minsize 10} 
  1936. .c {-sticky ne -height 5 -width 5 -minsize 10}]
  1937. test panedwindow-24.11 {ConfigurePanes, existing panes are reconfigured} {
  1938.     panedwindow .p
  1939.     .p add [button .b] -sticky nw -height 10
  1940.     .p add .b [button .c] -sticky se -height 2
  1941.     set result [list [.p panes] 
  1942.     [.p panecget .b -sticky] [.p panecget .b -height] 
  1943.     [.p panecget .c -sticky] [.p panecget .c -height]]
  1944.     destroy .p .b .c
  1945.     set result
  1946. } [list {.b .c} es 2 es 2]
  1947. test panedwindow-24.12 {ConfigurePanes, widgets added to end by default} {
  1948.     panedwindow .p
  1949.     .p add [button .b]
  1950.     .p add [button .c]
  1951.     .p add [button .d]
  1952.     set result [.p panes]
  1953.     destroy .p .b .c .d
  1954.     set result
  1955. } {.b .c .d}
  1956. test panedwindow-24.13 {ConfigurePanes, -after, single addition} {
  1957.     panedwindow .p
  1958.     button .a
  1959.     button .b
  1960.     button .c
  1961.     .p add .a .b
  1962.     .p add .c -after .a
  1963.     set result [.p panes]
  1964.     destroy .p .a .b .c
  1965.     set result
  1966. } {.a .c .b}
  1967. test panedwindow-24.14 {ConfigurePanes, -after, multiple additions} {
  1968.     panedwindow .p
  1969.     button .a
  1970.     button .b
  1971.     button .c
  1972.     button .d
  1973.     .p add .a .b
  1974.     .p add .c .d -after .a
  1975.     set result [.p panes]
  1976.     destroy .p .a .b .c .d
  1977.     set result
  1978. } {.a .c .d .b}
  1979. test panedwindow-24.15 {ConfigurePanes, -after, relocates existing widget} {
  1980.     panedwindow .p
  1981.     button .a
  1982.     button .b
  1983.     button .c
  1984.     button .d
  1985.     .p add .a .b .c .d
  1986.     .p add .d -after .a
  1987.     set result [.p panes]
  1988.     destroy .p .a .b .c .d
  1989.     set result
  1990. } {.a .d .b .c}
  1991. test panedwindow-24.16 {ConfigurePanes, -after, relocates existing widgets} {
  1992.     panedwindow .p
  1993.     button .a
  1994.     button .b
  1995.     button .c
  1996.     button .d
  1997.     .p add .a .b .c .d
  1998.     .p add .b .d -after .a
  1999.     set result [.p panes]
  2000.     destroy .p .a .b .c .d
  2001.     set result
  2002. } {.a .b .d .c}
  2003. test panedwindow-24.17 {ConfigurePanes, -after, relocates existing widgets} {
  2004.     panedwindow .p
  2005.     button .a
  2006.     button .b
  2007.     button .c
  2008.     button .d
  2009.     .p add .a .b .c .d
  2010.     .p add .d .a -after .b
  2011.     set result [.p panes]
  2012.     destroy .p .a .b .c .d
  2013.     set result
  2014. } {.b .d .a .c}
  2015. test panedwindow-24.18 {ConfigurePanes, -after, relocates existing widgets} {
  2016.     panedwindow .p
  2017.     button .a
  2018.     button .b
  2019.     button .c
  2020.     button .d
  2021.     .p add .a .b .c .d
  2022.     .p add .d .a -after .a
  2023.     set result [.p panes]
  2024.     destroy .p .a .b .c .d
  2025.     set result
  2026. } {.d .a .b .c}
  2027. test panedwindow-24.19 {ConfigurePanes, -after, after last window} {
  2028.     panedwindow .p
  2029.     button .a
  2030.     button .b
  2031.     button .c
  2032.     button .d
  2033.     .p add .a .b .c
  2034.     .p add .d -after .c
  2035.     set result [.p panes]
  2036.     destroy .p .a .b .c .d
  2037.     set result
  2038. } {.a .b .c .d}
  2039. test panedwindow-24.20 {ConfigurePanes, -before, before first window} {
  2040.     panedwindow .p
  2041.     button .a
  2042.     button .b
  2043.     button .c
  2044.     button .d
  2045.     .p add .a .b .c
  2046.     .p add .d -before .a
  2047.     set result [.p panes]
  2048.     destroy .p .a .b .c .d
  2049.     set result
  2050. } {.d .a .b .c}
  2051. test panedwindow-24.21 {ConfigurePanes, -before, relocate existing windows} {
  2052.     panedwindow .p
  2053.     button .a
  2054.     button .b
  2055.     button .c
  2056.     button .d
  2057.     .p add .a .b .c
  2058.     .p add .d .b -before .a
  2059.     set result [.p panes]
  2060.     destroy .p .a .b .c .d
  2061.     set result
  2062. } {.d .b .a .c}
  2063. test panedwindow-24.22 {ConfigurePanes, slave specified multiple times} {
  2064.     # This test should not cause a core dump
  2065.     panedwindow .p
  2066.     button .a
  2067.     button .b
  2068.     button .c
  2069.     .p add .a .a .b .c
  2070.     set result [.p panes]
  2071.     destroy .p .a .b .c
  2072.     set result
  2073. } {.a .b .c}
  2074. test panedwindow-24.23 {ConfigurePanes, slave specified multiple times} {
  2075.     # This test should not cause a core dump
  2076.     panedwindow .p
  2077.     button .a
  2078.     button .b
  2079.     button .c
  2080.     .p add .a .a .b .c
  2081.     .p add .a .b .a -after .c
  2082.     set result [.p panes]
  2083.     destroy .p .a .b .c
  2084.     set result
  2085. } {.c .a .b}
  2086. test panedwindow-24.24 {ConfigurePanes, panedwindow cannot manage toplevels} {
  2087.     panedwindow .p
  2088.     toplevel .t
  2089.     set result [list [catch {.p add .t} msg] $msg]
  2090.     destroy .p .t
  2091.     set result
  2092. } [list 1 "can't add toplevel .t to .p"]
  2093. test panedwindow-24.25 {ConfigurePanes, restrict possible panes} {
  2094.     panedwindow .p
  2095.     frame .f
  2096.     button .f.b
  2097.     set result [list [catch {.p add .f.b} msg] $msg]
  2098.     destroy .p .f .f.b
  2099.     set result
  2100. } [list 1 "can't add .f.b to .p"]
  2101. test panedwindow-24.26 {ConfigurePanes, restrict possible panes} {
  2102.     frame .f
  2103.     panedwindow .f.p
  2104.     button .b
  2105.     set result [list [catch {.f.p add .b} msg] $msg]
  2106.     destroy .f.p .f .b
  2107.     set result
  2108. } [list 0 ""]
  2109. test panedwindow-24.27 {ConfigurePanes, restrict possible panes} {
  2110.     panedwindow .p
  2111.     button .p.b
  2112.     set result [list [catch {.p add .p.b} msg] $msg]
  2113.     destroy .p .p.b
  2114.     set result
  2115. } [list 0 ""]
  2116. test panedwindow-24.28 {ConfigurePanes, restrict possible panes} {
  2117.     frame .f
  2118.     frame .f.f
  2119.     frame .f.f.f
  2120.     panedwindow .f.f.f.p
  2121.     button .b
  2122.     set result [list [catch {.f.f.f.p add .b} msg] $msg]
  2123.     destroy .f .f.f .f.f.f .f.f.f.p .b
  2124.     set result
  2125. } [list 0 ""]
  2126. test panedwindow-25.1 {Unlink, remove a paned with -before/-after refs} {
  2127.     # Bug 928413
  2128.     set result {}
  2129.     panedwindow .pw
  2130.     label .pw.l1 -text Label1
  2131.     label .pw.l2 -text Label2
  2132.     label .pw.l3 -text Label3
  2133.     .pw add .pw.l1
  2134.     .pw add .pw.l3
  2135.     .pw add .pw.l2 -before .pw.l3
  2136.     lappend result [.pw panecget .pw.l2 -before]
  2137.     destroy .pw.l3
  2138.     lappend result [.pw panecget .pw.l2 -before]
  2139.     .pw paneconfigure .pw.l2 -before .pw.l1
  2140.     lappend result [.pw panecget .pw.l2 -before]
  2141.     destroy .pw
  2142.     set result
  2143. } {.pw.l3 {} .pw.l1}
  2144. test panedwindow-26.1 {DestroyPanedWindow} {
  2145.     # This test should not result in any memory leaks.
  2146.     panedwindow .p
  2147.     foreach w {.a .b .c .d .e .f .g .h .i .j .k .l .m .n .o .q .r .s .t} {
  2148. .p add [button $w]
  2149.     }
  2150.     foreach w {.a .b .c .d .e .f .g .h .i .j .k .l .m .n .o .p .q .r .s .t} {
  2151. destroy $w
  2152.     }
  2153.     set result {}
  2154. } {}
  2155. test panedwindow-27.1 {PanedWindowIdentifyCoords} {
  2156.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2
  2157.     .p add [frame .f -bg red -width 20 -height 20] 
  2158.     [frame .f2 -bg blue -width 20 -height 20]
  2159.     set result [.p identify 0 0]
  2160.     destroy .p .f .f2
  2161.     set result
  2162. } {}
  2163. test panedwindow-27.2 {PanedWindowIdentifyCoords, padding is included} {
  2164.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2
  2165.     .p add [frame .f -bg red -width 20 -height 20] 
  2166.     [frame .f2 -bg blue -width 20 -height 20]
  2167.     set result [.p identify 20 0]
  2168.     destroy .p .f .f2
  2169.     set result
  2170. } {0 sash}
  2171. test panedwindow-27.3 {PanedWindowIdentifyCoords} {
  2172.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2
  2173.     .p add [frame .f -bg red -width 20 -height 20] 
  2174.     [frame .f2 -bg blue -width 20 -height 20]
  2175.     set result [.p identify 22 0]
  2176.     destroy .p .f .f2
  2177.     set result
  2178. } {0 sash}
  2179. test panedwindow-27.4 {PanedWindowIdentifyCoords} {
  2180.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2
  2181.     .p add [frame .f -bg red -width 20 -height 20] 
  2182.     [frame .f2 -bg blue -width 20 -height 20]
  2183.     set result [.p identify 24 0]
  2184.     destroy .p .f .f2
  2185.     set result
  2186. } {0 sash}
  2187. test panedwindow-27.5 {PanedWindowIdentifyCoords} {
  2188.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2
  2189.     .p add [frame .f -bg red -width 20 -height 20] 
  2190.     [frame .f2 -bg blue -width 20 -height 20]
  2191.     set result [.p identify 26 0]
  2192.     destroy .p .f .f2
  2193.     set result
  2194. } {0 sash}
  2195. test panedwindow-27.6 {PanedWindowIdentifyCoords} {
  2196.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2
  2197.     .p add [frame .f -bg red -width 20 -height 20] 
  2198.     [frame .f2 -bg blue -width 20 -height 20]
  2199.     set result [.p identify 26 -1]
  2200.     destroy .p .f .f2
  2201.     set result
  2202. } {}
  2203. test panedwindow-27.7 {PanedWindowIdentifyCoords} {
  2204.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2
  2205.     .p add [frame .f -bg red -width 20 -height 20] 
  2206.     [frame .f2 -bg blue -width 20 -height 20]
  2207.     set result [.p identify 26 100]
  2208.     destroy .p .f .f2
  2209.     set result
  2210. } {}
  2211. test panedwindow-27.8 {PanedWindowIdentifyCoords} {
  2212.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -showhandle 1 -handlepad 5 
  2213.     -handlesize 6
  2214.     .p add [frame .f -bg red -width 20 -height 20] 
  2215.     [frame .f2 -bg blue -width 20 -height 20]
  2216.     set result [.p identify 22 4]
  2217.     destroy .p .f .f2
  2218.     set result
  2219. } {0 sash}
  2220. test panedwindow-27.9 {PanedWindowIdentifyCoords} {
  2221.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -showhandle 1 -handlepad 5 
  2222.     -handlesize 6
  2223.     .p add [frame .f -bg red -width 20 -height 20] 
  2224.     [frame .f2 -bg blue -width 20 -height 20]
  2225.     set result [.p identify 22 5]
  2226.     destroy .p .f .f2
  2227.     set result
  2228. } {0 handle}
  2229. test panedwindow-27.10 {PanedWindowIdentifyCoords} {
  2230.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -showhandle 1 -handlepad 5 
  2231.     -handlesize 8
  2232.     .p add [frame .f -bg red -width 20 -height 20] 
  2233.     [frame .f2 -bg blue -width 20 -height 20]
  2234.     set result [.p identify 20 5]
  2235.     destroy .p .f .f2
  2236.     set result
  2237. } {0 handle}
  2238. test panedwindow-27.11 {PanedWindowIdentifyCoords} {
  2239.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -showhandle 1 -handlepad 5 
  2240.     -handlesize 8
  2241.     .p add [frame .f -bg red -width 20 -height 20] 
  2242.     [frame .f2 -bg blue -width 20 -height 20]
  2243.     set result [.p identify 20 0]
  2244.     destroy .p .f .f2
  2245.     set result
  2246. } {0 sash}
  2247. test panedwindow-27.12 {PanedWindowIdentifyCoords} {
  2248.     panedwindow .p -showhandle false -bd 0 -sashwidth 2 -sashpad 2
  2249.     .p add [frame .f -bg red -width 20 -height 20] 
  2250.     [frame .f2 -bg blue -width 20 -height 20] 
  2251.     [frame .f3 -bg green -width 20 -height 20]
  2252.     set result [.p identify 48 0]
  2253.     destroy .p .f .f2 .f3
  2254.     set result
  2255. } {1 sash}
  2256. test panedwindow-27.13 {identify subcommand errors} {
  2257.     panedwindow .p -borderwidth 0 -sashpad 2 -sashwidth 4
  2258.     set result [list [catch {.p identify} msg] $msg]
  2259.     destroy .p
  2260.     set result
  2261. } [list 1 "wrong # args: should be ".p identify x y""]
  2262. test panedwindow-27.14 {identify subcommand errors} {
  2263.     panedwindow .p
  2264.     set result [list [catch {.p identify foo bar} msg] $msg]
  2265.     destroy .p
  2266.     set result
  2267. } [list 1 "expected integer but got "foo""]
  2268. test panedwindow-27.14a {identify subcommand errors} {
  2269.     panedwindow .p
  2270.     set result [list [catch {.p identify 0 bar} msg] $msg]
  2271.     destroy .p
  2272.     set result
  2273. } [list 1 "expected integer but got "bar""]
  2274. test panedwindow-27.15 {PanedWindowIdentifyCoords} {
  2275.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -orient vertical
  2276.     .p add [frame .f -bg red -width 20 -height 20] 
  2277.     [frame .f2 -bg blue -width 20 -height 20]
  2278.     set result [.p identify 0 0]
  2279.     destroy .p .f .f2
  2280.     set result
  2281. } {}
  2282. test panedwindow-27.16 {PanedWindowIdentifyCoords, padding is included} {
  2283.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -orient vertical
  2284.     .p add [frame .f -bg red -width 20 -height 20] 
  2285.     [frame .f2 -bg blue -width 20 -height 20]
  2286.     set result [.p identify 0 20]
  2287.     destroy .p .f .f2
  2288.     set result
  2289. } {0 sash}
  2290. test panedwindow-27.17 {PanedWindowIdentifyCoords} {
  2291.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -orient vertical
  2292.     .p add [frame .f -bg red -width 20 -height 20] 
  2293.     [frame .f2 -bg blue -width 20 -height 20]
  2294.     set result [.p identify 0 22]
  2295.     destroy .p .f .f2
  2296.     set result
  2297. } {0 sash}
  2298. test panedwindow-27.18 {PanedWindowIdentifyCoords} {
  2299.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -orient vertical
  2300.     .p add [frame .f -bg red -width 20 -height 20] 
  2301.     [frame .f2 -bg blue -width 20 -height 20]
  2302.     set result [.p identify 0 24]
  2303.     destroy .p .f .f2
  2304.     set result
  2305. } {0 sash}
  2306. test panedwindow-27.19 {PanedWindowIdentifyCoords} {
  2307.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -orient vertical
  2308.     .p add [frame .f -bg red -width 20 -height 20] 
  2309.     [frame .f2 -bg blue -width 20 -height 20]
  2310.     set result [.p identify 0 26]
  2311.     destroy .p .f .f2
  2312.     set result
  2313. } {0 sash}
  2314. test panedwindow-27.20 {PanedWindowIdentifyCoords} {
  2315.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -orient vertical
  2316.     .p add [frame .f -bg red -width 20 -height 20] 
  2317.     [frame .f2 -bg blue -width 20 -height 20]
  2318.     set result [.p identify -1 26]
  2319.     destroy .p .f .f2
  2320.     set result
  2321. } {}
  2322. test panedwindow-27.21 {PanedWindowIdentifyCoords} {
  2323.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -orient vertical
  2324.     .p add [frame .f -bg red -width 20 -height 20] 
  2325.     [frame .f2 -bg blue -width 20 -height 20]
  2326.     set result [.p identify 100 26]
  2327.     destroy .p .f .f2
  2328.     set result
  2329. } {}
  2330. test panedwindow-27.22 {PanedWindowIdentifyCoords} {
  2331.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -showhandle 1 -handlepad 5 
  2332.     -handlesize 6 -orient vertical
  2333.     .p add [frame .f -bg red -width 20 -height 20] 
  2334.     [frame .f2 -bg blue -width 20 -height 20]
  2335.     set result [.p identify 4 22]
  2336.     destroy .p .f .f2
  2337.     set result
  2338. } {0 sash}
  2339. test panedwindow-27.23 {PanedWindowIdentifyCoords} {
  2340.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -showhandle 1 -handlepad 5 
  2341.     -handlesize 6 -orient vertical
  2342.     .p add [frame .f -bg red -width 20 -height 20] 
  2343.     [frame .f2 -bg blue -width 20 -height 20]
  2344.     set result [.p identify 5 22]
  2345.     destroy .p .f .f2
  2346.     set result
  2347. } {0 handle}
  2348. test panedwindow-27.24 {PanedWindowIdentifyCoords} {
  2349.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -showhandle 1 -handlepad 5 
  2350.     -handlesize 8 -orient vertical
  2351.     .p add [frame .f -bg red -width 20 -height 20] 
  2352.     [frame .f2 -bg blue -width 20 -height 20]
  2353.     set result [.p identify 5 20]
  2354.     destroy .p .f .f2
  2355.     set result
  2356. } {0 handle}
  2357. test panedwindow-27.25 {PanedWindowIdentifyCoords} {
  2358.     panedwindow .p -bd 0 -sashwidth 2 -sashpad 2 -showhandle 1 -handlepad 5 
  2359.     -handlesize 8 -orient vertical
  2360.     .p add [frame .f -bg red -width 20 -height 20] 
  2361.     [frame .f2 -bg blue -width 20 -height 20]
  2362.     set result [.p identify 0 20]
  2363.     destroy .p .f .f2
  2364.     set result
  2365. } {0 sash}
  2366. test panedwindow-27.26 {PanedWindowIdentifyCoords} {
  2367.     panedwindow .p -showhandle false -bd 0 -sashwidth 2 -sashpad 2 -orient vertical
  2368.     .p add [frame .f -bg red -width 20 -height 20] 
  2369.     [frame .f2 -bg blue -width 20 -height 20] 
  2370.     [frame .f3 -bg green -width 20 -height 20]
  2371.     set result [.p identify 0 48]
  2372.     destroy .p .f .f2 .f3
  2373.     set result
  2374. } {1 sash}
  2375. test panedwindow-28.1 {destroy the window cleanly on error [Bug #616589]} {
  2376.     list [catch {panedwindow .p -bogusopt bogus} msg] $msg
  2377. } {1 {unknown option "-bogusopt"}}
  2378. test panedwindow-28.2 {destroy the window cleanly on rename [Bug #616589]} {
  2379.     destroy .p
  2380.     panedwindow .p
  2381.     rename .p {}
  2382.     winfo exists .p
  2383. } {0}
  2384. test panedwindow-29.1 {resizing width} {
  2385.     -body {
  2386.         panedwindow .p -bd 5
  2387.         frame .f1 -width 100 -height 50 -bg blue
  2388.         frame .f2 -width 100 -height 50 -bg red
  2389.         .p add .f1 -sticky news
  2390.         .p add .f2 -sticky news
  2391.         pack .p -side top -fill both -expand 1
  2392.         wm geometry . ""
  2393.         update
  2394.         # Note the width
  2395.         set a [winfo width .f2]
  2396.         # Increase the size by 10
  2397.         regexp {^(d+)x(d+)} [wm geometry .] -> w h
  2398.         wm geometry . [expr {$w + 10}]x$h
  2399.         update
  2400.         set b "$a [winfo width .f2]"
  2401.     }
  2402.     -cleanup {destroy .p .f1 .f2}
  2403.     -result {100 110}
  2404. }
  2405. test panedwindow-29.2 {resizing height} {
  2406.     -body {
  2407.         panedwindow .p -orient vertical -bd 5
  2408.         frame .f1 -width 50 -height 100 -bg blue
  2409.         frame .f2 -width 50 -height 100 -bg red
  2410.         .p add .f1 -sticky news
  2411.         .p add .f2 -sticky news
  2412.         pack .p -side top -fill both -expand 1
  2413.         wm geometry . ""
  2414.         update
  2415.         # Note the height
  2416.         set a [winfo height .f2]
  2417.         # Increase the size by 10
  2418.         regexp {^(d+)x(d+)} [wm geometry .] -> w h
  2419.         wm geometry . ${w}x[expr {$h + 10}]
  2420.         update
  2421.         set b "$a [winfo height .f2]"
  2422.     }
  2423.     -cleanup {destroy .p .f1 .f2}
  2424.     -result {100 110}
  2425. }
  2426. test panedwindow-30.1 {display on depths other than the default one} {
  2427.     -constraints {pseudocolor8 haveTruecolor24}
  2428.     -body {
  2429. toplevel .t -visual {truecolor 24}
  2430. pack [panedwindow .t.p]
  2431. .t.p add [frame .t.p.f1] [frame .t.p.f2]
  2432. update
  2433. # If we got here, we didn't crash and that's good
  2434.     }
  2435.     -cleanup {destroy .t}
  2436.     -result {}
  2437. }
  2438. test panedwindow-30.2 {display on depths other than the default one} {
  2439.     -constraints {pseudocolor8 haveTruecolor24}
  2440.     -body {
  2441. toplevel .t -visual {pseudocolor 8}
  2442. pack [frame .t.f -visual {truecolor 24}]
  2443. pack [panedwindow .t.f.p]
  2444. .t.f.p add [frame .t.f.p.f1 -width 5] [frame .t.f.p.f2 -width 5]
  2445. update
  2446. .t.f.p proxy place 1 1
  2447. update
  2448. .t.f.p proxy forget
  2449. update
  2450. # If we got here, we didn't crash and that's good
  2451.     }
  2452.     -cleanup {destroy .t}
  2453.     -result {}
  2454. }
  2455. # cleanup
  2456. ::tcltest::cleanupTests
  2457. return