Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrant Gayed2005-01-20 17:00:09 +0000
committerGrant Gayed2005-01-20 17:00:09 +0000
commit5ce9e32287c36f4649c3c726d93f7ff6e2af5bd1 (patch)
tree10ab79ba613a0ded42c00399a1ea86aa6cea68db
parentd73f8f0bcf60169fe33b6dbd2d883c2f48f8638f (diff)
downloadeclipse.platform.swt-5ce9e32287c36f4649c3c726d93f7ff6e2af5bd1.tar.gz
eclipse.platform.swt-5ce9e32287c36f4649c3c726d93f7ff6e2af5bd1.tar.xz
eclipse.platform.swt-5ce9e32287c36f4649c3c726d93f7ff6e2af5bd1.zip
*** empty log message ***
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/Tree.java36
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TreeItem.java24
2 files changed, 37 insertions, 23 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/Tree.java
index 41b052bc38..e405ce6343 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/Tree.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/Tree.java
@@ -329,8 +329,17 @@ void destroyItem (TreeItem item) {
availableItems [i].availableIndex = i;
}
item.availableIndex = -1;
- updateVerticalBar ();
updateHorizontalBar (0, -rightX);
+ int oldTopIndex = topIndex;
+ updateVerticalBar ();
+ /*
+ * If destroyed item is above viewport then adjust topIndex and the vertical
+ * scrollbar so that the current viewport items will not change.
+ */
+ if (availableIndex < topIndex) {
+ topIndex = oldTopIndex - 1;
+ getVerticalBar ().setSelection (topIndex);
+ }
}
/* selectedItems array */
if (item.isSelected ()) {
@@ -1732,24 +1741,16 @@ void makeAvailable (TreeItem item) {
}
}
- TreeItem[] itemsToInsert = item.computeAvailableDescendents ();
- TreeItem[] newAvailableItems = new TreeItem [availableItems.length + itemsToInsert.length];
+ TreeItem[] newAvailableItems = new TreeItem [availableItems.length + 1];
System.arraycopy (availableItems, 0, newAvailableItems, 0, index);
- System.arraycopy (itemsToInsert, 0, newAvailableItems, index, itemsToInsert.length);
- System.arraycopy (availableItems, index, newAvailableItems, index + itemsToInsert.length, availableItems.length - index);
+ newAvailableItems [index] = item;
+ System.arraycopy (availableItems, index, newAvailableItems, index + 1, availableItems.length - index);
availableItems = newAvailableItems;
/* update availableIndex as needed */
for (int i = index; i < availableItems.length; i++) {
availableItems [i].availableIndex = i;
}
- updateVerticalBar ();
- int rightX = 0;
- for (int i = 0; i < itemsToInsert.length; i++) {
- Rectangle bounds = itemsToInsert [i].getBounds ();
- rightX = Math.max (rightX, bounds.x + bounds.width);
- }
- updateHorizontalBar (rightX, rightX);
}
/*
@@ -1775,14 +1776,6 @@ void makeDescendentsAvailable (TreeItem item, TreeItem[] descendents) {
for (int i = itemAvailableIndex; i < availableItems.length; i++) {
availableItems [i].availableIndex = i;
}
-
- updateVerticalBar ();
- int rightX = 0;
- for (int i = 1; i < descendents.length; i++) {
- Rectangle bounds = descendents [i].getBounds ();
- rightX = Math.max (rightX, bounds.x + bounds.width);
- }
- updateHorizontalBar (rightX, rightX);
}
/*
@@ -1823,9 +1816,6 @@ void makeDescendentsUnavailable (TreeItem item, TreeItem[] descendents) {
if (anchorItem != null && anchorItem != item && anchorItem.hasAncestor (item)) {
anchorItem = null;
}
-
- updateVerticalBar ();
- updateHorizontalBar ();
}
/*
* The current focus item is about to become unavailable, so reassign focus.
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TreeItem.java b/bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TreeItem.java
index d4dbde9be2..22a505626a 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TreeItem.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TreeItem.java
@@ -1007,6 +1007,15 @@ public void setExpanded (boolean value) {
TreeItem[] availableDescendents = computeAvailableDescendents ();
int descendentsCount = availableDescendents.length;
parent.makeDescendentsAvailable (this, availableDescendents);
+
+ /* update scrollbars */
+ int rightX = 0;
+ for (int i = 1; i < availableDescendents.length; i++) {
+ Rectangle bounds = availableDescendents [i].getBounds ();
+ rightX = Math.max (rightX, bounds.x + bounds.width);
+ }
+ parent.updateHorizontalBar (rightX, rightX);
+ parent.updateVerticalBar ();
/*
* If new item is above viewport then adjust topIndex and the vertical scrollbar
* so that the current viewport items will not change.
@@ -1050,6 +1059,10 @@ public void setExpanded (boolean value) {
gc.copyArea (image, 0, startY);
}
parent.makeDescendentsUnavailable (this, descendents);
+ parent.updateHorizontalBar ();
+ int oldTopIndex = parent.topIndex;
+ parent.updateVerticalBar ();
+
/* move focus (and selection if SWT.SINGLE) to item if a descendent had focus */
TreeItem focusItem = parent.focusItem;
if (focusItem != null && focusItem != this && focusItem.hasAncestor (this)) {
@@ -1064,6 +1077,17 @@ public void setExpanded (boolean value) {
if (isDisposed ()) return;
parent.showItem (this);
parent.redrawItem (availableIndex, true);
+ } else {
+ /*
+ * If all collapsed items are above the viewport then adjust topIndex and
+ * the vertical scrollbar so that the current viewport items will not change.
+ */
+ int bottomIndex = availableIndex + descendents.length - 1;
+ if (bottomIndex < parent.topIndex) {
+ parent.topIndex = oldTopIndex - descendents.length + 1;
+ parent.getVerticalBar ().setSelection (parent.topIndex);
+ return;
+ }
}
itemY = parent.getItemY (this);
if (image != null) {

Back to the top