python-2.5.2/win32/tcl/tix8.4/DragDrop.tcl
changeset 0 ae805ac0140d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python-2.5.2/win32/tcl/tix8.4/DragDrop.tcl	Fri Apr 03 17:19:34 2009 +0100
@@ -0,0 +1,166 @@
+# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+#	$Id: DragDrop.tcl,v 1.4 2001/12/09 05:04:02 idiscovery Exp $
+#
+# DragDrop.tcl ---
+#
+#	Implements drag+drop for Tix widgets.
+#
+# Copyright (c) 1993-1999 Ioi Kim Lam.
+# Copyright (c) 2000-2001 Tix Project Group.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+
+tixClass tixDragDropContext {
+    -superclass {}
+    -classname  TixDragDropContext
+    -method {
+	cget configure drag drop set startdrag
+    }
+    -flag {
+	-command -source
+    }
+    -configspec {
+	{-command ""}
+	{-source ""}
+    }
+}
+
+proc tixDragDropContext:Constructor {w} {
+    upvar #0 $w data
+}
+
+#----------------------------------------------------------------------
+# Private methods
+#
+#----------------------------------------------------------------------
+proc tixDragDropContext:CallCommand {w target command X Y} {
+    upvar #0 $w data
+     
+    set x [expr $X-[winfo rootx $target]]
+    set y [expr $Y-[winfo rooty $target]]
+    
+    regsub %x $command $x command
+    regsub %y $command $y command
+    regsub %X $command $X command
+    regsub %Y $command $Y command
+    regsub %W $command $target command
+    regsub %S $command [list $data(-command)] command
+
+    eval $command
+}
+
+proc tixDragDropContext:Send {w target event X Y} {
+    upvar #0 $w data
+    global tixDrop
+
+    foreach tag [tixDropBindTags $target] {
+	if {[info exists tixDrop($tag,$event)]} {
+	    tixDragDropContext:CallCommand $w $target \
+		$tixDrop($tag,$event) $X $Y
+	}
+    }
+}
+
+#----------------------------------------------------------------------
+# set --
+#
+#	Set the "small data" of the type supported by the source widget
+#----------------------------------------------------------------------
+
+proc tixDragDropContext:set {w type data} {
+
+}
+
+#----------------------------------------------------------------------
+# startdrag --
+#
+#	Start the dragging action
+#----------------------------------------------------------------------
+proc tixDragDropContext:startdrag {w x y} {
+    upvar #0 $w data
+
+    set data(oldTarget) ""
+
+    $data(-source) config -cursor "[tix getbitmap drop] black"
+    tixDragDropContext:drag $w $x $y
+}
+
+#----------------------------------------------------------------------
+# drag --
+#
+#	Continue the dragging action
+#----------------------------------------------------------------------
+proc tixDragDropContext:drag {w X Y} {
+    upvar #0 $w data
+    global tixDrop
+
+    set target [winfo containing -displayof $w $X $Y]
+ 
+    if {$target != $data(oldTarget)} {
+	if {$data(oldTarget) != ""} {
+	    tixDragDropContext:Send $w $data(oldTarget) <Out> $X $Y 
+	}
+	if {$target != ""} {
+	    tixDragDropContext:Send $w $target <In> $X $Y
+	}
+	set data(oldTarget) $target
+    }
+    if {$target != ""} {
+	tixDragDropContext:Send $w $target <Over> $X $Y
+    }
+}
+
+proc tixDragDropContext:drop {w X Y} {
+    upvar #0 $w data
+    global tixDrop
+
+    set target [winfo containing -displayof $w $X $Y]
+    if {$target != ""} {
+	tixDragDropContext:Send $w $target <Drop> $X $Y
+    }
+
+    if {$data(-source) != ""} {
+	$data(-source) config -cursor ""
+    }
+    set data(-source) ""
+}
+
+#----------------------------------------------------------------------
+# Public Procedures -- This is NOT a member of the tixDragDropContext
+#		       class!
+#
+# parameters :
+#	$w:	who wants to start dragging? (currently ignored)
+#----------------------------------------------------------------------
+proc tixGetDragDropContext {w} {
+    global tixDD
+    if {[info exists tixDD]} {
+	return tixDD
+    }
+
+    return [tixDragDropContext tixDD]
+}
+
+proc tixDropBind {w event command} {
+    global tixDrop
+
+    set tixDrop($w) 1
+    set tixDrop($w,$event) $command
+}
+
+proc tixDropBindTags {w args} {
+    global tixDropTags
+
+    if {$args == ""} {
+	if {[info exists tixDropTags($w)]} {
+	    return $tixDropTags($w)
+	} else {
+	    return [list [winfo class $w] $w]
+	}
+    } else {
+	set tixDropTags($w) $args
+    }
+}