diff -r 000000000000 -r ae805ac0140d python-2.5.2/win32/tcl/tk8.4/panedwindow.tcl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python-2.5.2/win32/tcl/tk8.4/panedwindow.tcl Fri Apr 03 17:19:34 2009 +0100 @@ -0,0 +1,188 @@ +# panedwindow.tcl -- +# +# This file defines the default bindings for Tk panedwindow widgets and +# provides procedures that help in implementing those bindings. +# +# RCS: @(#) $Id: panedwindow.tcl,v 1.6.2.3 2005/02/12 00:48:05 hobbs Exp $ +# + +bind Panedwindow { ::tk::panedwindow::MarkSash %W %x %y 1 } +bind Panedwindow { ::tk::panedwindow::MarkSash %W %x %y 0 } + +bind Panedwindow { ::tk::panedwindow::DragSash %W %x %y 1 } +bind Panedwindow { ::tk::panedwindow::DragSash %W %x %y 0 } + +bind Panedwindow {::tk::panedwindow::ReleaseSash %W 1} +bind Panedwindow {::tk::panedwindow::ReleaseSash %W 0} + +bind Panedwindow { ::tk::panedwindow::Motion %W %x %y } + +bind Panedwindow { ::tk::panedwindow::Leave %W } + +# Initialize namespace +namespace eval ::tk::panedwindow {} + +# ::tk::panedwindow::MarkSash -- +# +# Handle marking the correct sash for possible dragging +# +# Arguments: +# w the widget +# x widget local x coord +# y widget local y coord +# proxy whether this should be a proxy sash +# Results: +# None +# +proc ::tk::panedwindow::MarkSash {w x y proxy} { + if {[$w cget -opaqueresize]} { set proxy 0 } + set what [$w identify $x $y] + if { [llength $what] == 2 } { + foreach {index which} $what break + if { !$::tk_strictMotif || [string equal $which "handle"] } { + if {!$proxy} { $w sash mark $index $x $y } + set ::tk::Priv(sash) $index + foreach {sx sy} [$w sash coord $index] break + set ::tk::Priv(dx) [expr {$sx-$x}] + set ::tk::Priv(dy) [expr {$sy-$y}] + # Do this to init the proxy location + DragSash $w $x $y $proxy + } + } +} + +# ::tk::panedwindow::DragSash -- +# +# Handle dragging of the correct sash +# +# Arguments: +# w the widget +# x widget local x coord +# y widget local y coord +# proxy whether this should be a proxy sash +# Results: +# Moves sash +# +proc ::tk::panedwindow::DragSash {w x y proxy} { + if {[$w cget -opaqueresize]} { set proxy 0 } + if { [info exists ::tk::Priv(sash)] } { + if {$proxy} { + $w proxy place \ + [expr {$x+$::tk::Priv(dx)}] [expr {$y+$::tk::Priv(dy)}] + } else { + $w sash place $::tk::Priv(sash) \ + [expr {$x+$::tk::Priv(dx)}] [expr {$y+$::tk::Priv(dy)}] + } + } +} + +# ::tk::panedwindow::ReleaseSash -- +# +# Handle releasing of the sash +# +# Arguments: +# w the widget +# proxy whether this should be a proxy sash +# Results: +# Returns ... +# +proc ::tk::panedwindow::ReleaseSash {w proxy} { + if {[$w cget -opaqueresize]} { set proxy 0 } + if { [info exists ::tk::Priv(sash)] } { + if {$proxy} { + foreach {x y} [$w proxy coord] break + $w sash place $::tk::Priv(sash) $x $y + $w proxy forget + } + unset ::tk::Priv(sash) ::tk::Priv(dx) ::tk::Priv(dy) + } +} + +# ::tk::panedwindow::Motion -- +# +# Handle motion on the widget. This is used to change the cursor +# when the user moves over the sash area. +# +# Arguments: +# w the widget +# x widget local x coord +# y widget local y coord +# Results: +# May change the cursor. Sets up a timer to verify that we are still +# over the widget. +# +proc ::tk::panedwindow::Motion {w x y} { + variable ::tk::Priv + set id [$w identify $x $y] + if {([llength $id] == 2) && \ + (!$::tk_strictMotif || [string equal [lindex $id 1] "handle"])} { + if { ![info exists Priv($w,panecursor)] } { + set Priv($w,panecursor) [$w cget -cursor] + if { [string equal [$w cget -sashcursor] ""] } { + if { [string equal [$w cget -orient] "horizontal"] } { + $w configure -cursor sb_h_double_arrow + } else { + $w configure -cursor sb_v_double_arrow + } + } else { + $w configure -cursor [$w cget -sashcursor] + } + if {[info exists Priv($w,pwAfterId)]} { + after cancel $Priv($w,pwAfterId) + } + set Priv($w,pwAfterId) [after 150 \ + [list ::tk::panedwindow::Cursor $w]] + } + return + } + if { [info exists Priv($w,panecursor)] } { + $w configure -cursor $Priv($w,panecursor) + unset Priv($w,panecursor) + } +} + +# ::tk::panedwindow::Cursor -- +# +# Handles returning the normal cursor when we are no longer over the +# sash area. This needs to be done this way, because the panedwindow +# won't see Leave events when the mouse moves from the sash to a +# paned child, although the child does receive an Enter event. +# +# Arguments: +# w the widget +# Results: +# May restore the default cursor, or schedule a timer to do it. +# +proc ::tk::panedwindow::Cursor {w} { + variable ::tk::Priv + # Make sure to check window existence in case it is destroyed. + if {[info exists Priv($w,panecursor)] && [winfo exists $w]} { + if {[winfo containing [winfo pointerx $w] [winfo pointery $w]] eq $w} { + set Priv($w,pwAfterId) [after 150 \ + [list ::tk::panedwindow::Cursor $w]] + } else { + $w configure -cursor $Priv($w,panecursor) + unset Priv($w,panecursor) + if {[info exists Priv($w,pwAfterId)]} { + after cancel $Priv($w,pwAfterId) + unset Priv($w,pwAfterId) + } + } + } +} + +# ::tk::panedwindow::Leave -- +# +# Return to default cursor when leaving the pw widget. +# +# Arguments: +# w the widget +# Results: +# Restores the default cursor +# +proc ::tk::panedwindow::Leave {w} { + if {[info exists ::tk::Priv($w,panecursor)]} { + $w configure -cursor $::tk::Priv($w,panecursor) + unset ::tk::Priv($w,panecursor) + } +}