Index: src/org/openide/explorer/view/TreeTableView.java =================================================================== RCS file: /cvs/openide/src/org/openide/explorer/view/TreeTableView.java,v retrieving revision 1.39 diff -u -r1.39 TreeTableView.java --- src/org/openide/explorer/view/TreeTableView.java 26 Feb 2003 14:00:57 -0000 1.39 +++ src/org/openide/explorer/view/TreeTableView.java 10 Mar 2003 21:12:55 -0000 @@ -934,7 +934,7 @@ rowComparator = new Comparator() { public int compare(Object o1, Object o2) { if (o1 == o2) - return -1; + return 0; Node n1 = ((VisualizerNode) o1).node; Node n2 = ((VisualizerNode) o2).node; @@ -1025,6 +1025,45 @@ } return ""; // NOI18N } + + // override mothod from DefaultTreeModel + public void nodesWereInserted (TreeNode node, int[] childIndices) { + super.nodesWereInserted (node, tranformIndices (node, childIndices)); + } + +// public void nodesWereRemoved(TreeNode node, int[] childIndices, Object[] removedChildren) { +// System.out.println("### nodesWereRemoved"); +// super.nodesWereRemoved (node, tranformIndices (node, childIndices), removedChildren); +// } + + public void nodesChanged(TreeNode node, int[] childIndices) { + if (childIndices == null || childIndices.length == 0) return ; + int[] newIndices = tranformIndices (node, childIndices); + java.util.Arrays.sort (newIndices); + int min = Math.min (childIndices[0], newIndices[0]); + int max = Math.max (childIndices[childIndices.length - 1], newIndices[newIndices.length - 1]); + for (int i = min; i <= max; i++) super.nodesChanged (node, new int[] {i}); + } + + // bugfix #30150, helper method tranforms the original child indices by actually sorting + private int[] tranformIndices (TreeNode parent, int[] original) { + if (parent == null || !(parent instanceof VisualizerNode)) { + // XXX + return original; + } + if (original == null || original.length == 0) { + return original; + } + int[] tranformed = (int[])original.clone (); + if (sortingActive ()) { + java.util.List list = ((VisualizerNode)parent).getChildren (); + for (int i = 0; i < original.length; i++) { + tranformed[i] = getIndexOfChild (parent, list.get (original[i])); + } + } + return tranformed; + } + } /* Cell renderer for sorting column header. Index: src/org/openide/explorer/view/VisualizerNode.java =================================================================== RCS file: /cvs/openide/src/org/openide/explorer/view/VisualizerNode.java,v retrieving revision 1.31 diff -u -r1.31 VisualizerNode.java --- src/org/openide/explorer/view/VisualizerNode.java 27 Feb 2003 23:40:42 -0000 1.31 +++ src/org/openide/explorer/view/VisualizerNode.java 10 Mar 2003 21:12:55 -0000 @@ -254,6 +254,19 @@ )); } + // bugfix #30150, helper method tranforms the child indices of removed nodes by actually sorting + private int[] tranformIndices (VisualizerChildren children, int[] original, Node[] removedNodes) { + if (original == null || original.length == 0) { + return original; + } + int[] tranformed = (int[])original.clone (); + java.util.List list = children.list; + for (int i = 0; i < original.length; i++) { + tranformed[i] = list.indexOf (getVisualizer ( children, removedNodes[i] )); + } + return tranformed; + } + /** Fired when a set of children is removed. * @param ev event describing the action */ @@ -261,7 +274,7 @@ VisualizerChildren ch = (VisualizerChildren)children.get (); if (ch == null) return; - QUEUE.runSafe (new VisualizerEvent.Removed (ch, ev.getDeltaIndices ())); + QUEUE.runSafe (new VisualizerEvent.Removed (ch, tranformIndices (ch, ev.getDeltaIndices (), ev.getDelta ()) ) ); } /** Fired when the order of children is changed.