Tk Library Source Code

Attachment Details
Login
Overview

Artifact ID: 2a5d0efbcc213994be466b5dcb3a4f1004871855
Ticket: 578460ffffffffffffffffffffffffffffffffff
Date: 2002-07-08 04:18:32
User: btheado
Artifact Attached: 70cadbab1ed9b795a7924a9736cabce2556bebe9
Filename:movefix.txt
Description:Fix for the move bug
Content:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
   100
   101
   102
   103
   104
   105
   106
   107
   108
   109
   110
   111
   112
? movefix.txt
Index: tree.tcl
===================================================================
RCS file: /cvsroot/tcllib/tcllib/modules/struct/tree.tcl,v
retrieving revision 1.16
diff -u -r1.16 tree.tcl
--- tree.tcl	9 May 2002 05:46:04 -0000	1.16
+++ tree.tcl	7 Jul 2002 21:15:55 -0000
@@ -620,6 +620,7 @@
 	set index [expr {[lsearch -exact $children($parentNode) $val] + 1}]
     }
 
+    # Validate each node to move
     foreach node $args {
 	if { [string equal $node "root"] } {
 	    error "cannot move root node"
@@ -638,27 +639,20 @@
 	    }
 	    set ancestor $parent($ancestor)
 	}
-	
-	# Remove this node from its parent's children list
+	}
+    
+    # Remove each node from its current parent
+    foreach node $args {
 	set oldParent $parent($node)
 	set ind [lsearch -exact $children($oldParent) $node]
 	set children($oldParent) [lreplace $children($oldParent) $ind $ind]
 
 	# Update the nodes parent value
 	set parent($node) $parentNode
-
-	# If the node is moving within its parent, and its old location
-	# was before the new location, decrement the new location, so that
-	# it gets put in the right spot
-	if { [string equal $oldParent $parentNode] && $ind < $index } {
-	    incr index -1
-	}
-
-	# Add this node to its parent's children list
-	set children($parentNode) [linsert $children($parentNode) $index $node]
-	
-	incr index
     }
+
+	# Add all the nodes to the new parent's children list
+	set children($parentNode) [eval linsert [list $children($parentNode)] $index $args]
 
     return
 }
Index: tree.test
===================================================================
RCS file: /cvsroot/tcllib/tcllib/modules/struct/tree.test,v
retrieving revision 1.15
diff -u -r1.15 tree.test
--- tree.test	9 May 2002 05:46:04 -0000	1.15
+++ tree.test	7 Jul 2002 21:15:57 -0000
@@ -328,7 +328,7 @@
     set result [mytree children root]
     mytree destroy
     set result
-} [list node0 node1 node2]
+} [list node2 node0 node1]
 test tree-7.9 {move moves node within parent properly} {
     tree mytree
     mytree insert root end node0 node1 node2 node3
@@ -336,7 +336,7 @@
     set result [mytree children root]
     mytree destroy
     set result
-} [list node0 node1 node2 node3]
+} [list node0 node2 node1 node3]
 test tree-7.10 {move moves node within parent properly} {
     tree mytree
     mytree insert root end node0 node1 node2 node3
@@ -345,7 +345,8 @@
     set result [mytree children root]
     mytree destroy
     set result
-} [list node1 node0 node4 node5 node6 node2 node3]
+} [list node1 node2 node0 node4 node5 node6 node3]
+
 test tree-7.11 {move moves node in parent properly when oldInd < newInd} {
     tree mytree
     mytree insert root end node0 node1 node2 node3
@@ -353,7 +354,25 @@
     set result [mytree children root]
     mytree destroy
     set result
+} [list node1 node2 node0 node3]
+
+test tree-7.12 {move node up one} {
+    tree mytree
+    mytree insert root end node0 node1 node2 node3
+    mytree move root [mytree index [mytree next node0]] node0
+    set result [mytree children root]
+    mytree destroy
+    set result
 } [list node1 node0 node2 node3]
+
+test tree-7.13 {move node down one} {
+    tree mytree
+    mytree insert root end node0 node1 node2 node3
+    mytree move root [mytree index [mytree previous node2]] node2
+    set result [mytree children root]
+    mytree destroy
+    set result
+} [list node0 node2 node1 node3]
 
 test tree-8.1 {parent gives error on fake node} {
     tree mytree