46
46
import org .eclipse .swt .graphics .Point ;
47
47
import org .eclipse .swt .widgets .Control ;
48
48
import org .eclipse .swt .widgets .Item ;
49
+ import org .eclipse .swt .widgets .Tree ;
49
50
import org .eclipse .swt .widgets .TreeItem ;
50
51
import org .eclipse .swt .widgets .Widget ;
51
52
@@ -362,8 +363,9 @@ private void createAddedElements(Widget widget, Object[] elements) {
362
363
363
364
// Optimize for the empty case
364
365
if (items .length == 0 ) {
365
- for (Object element : elements ) {
366
- createTreeItem (widget , element , -1 );
366
+ // For performance insert every item at index 0 (in reverse order):
367
+ for (int i = elements .length - 1 ; i >= 0 ; i --) {
368
+ createTreeItem (widget , elements [i ], 0 );
367
369
}
368
370
return ;
369
371
}
@@ -846,8 +848,9 @@ void createChildren(final Widget widget, boolean materialize) {
846
848
} else {
847
849
children = getSortedChildren (parentElement );
848
850
}
849
- for (Object element : children ) {
850
- createTreeItem (widget , element , -1 );
851
+ // For performance insert every item at index 0 (in reverse order):
852
+ for (int i = children .length - 1 ; i >= 0 ; i --) {
853
+ createTreeItem (widget , children [i ], 0 );
851
854
}
852
855
}
853
856
} finally {
@@ -856,16 +859,16 @@ void createChildren(final Widget widget, boolean materialize) {
856
859
}
857
860
858
861
/**
859
- * Creates a single item for the given parent and synchronizes it with the
860
- * given element.
862
+ * Creates a single item for the given parent and synchronizes it with the given
863
+ * element. The fastest way to insert many items is documented in
864
+ * {@link TreeItem#TreeItem(Tree,int,int)}
861
865
*
862
- * @param parent
863
- * the parent widget
864
- * @param element
865
- * the element
866
- * @param index
867
- * if non-negative, indicates the position to insert the item
868
- * into its parent
866
+ * @param parent the parent widget
867
+ * @param element the element
868
+ * @param index if non-negative, indicates the position to insert the item
869
+ * into its parent
870
+ * @see org.eclipse.swt.widgets.TreeItem#TreeItem(org.eclipse.swt.widgets.Tree,
871
+ * int, int)
869
872
*/
870
873
protected void createTreeItem (Widget parent , Object element , int index ) {
871
874
Item item = newItem (parent , SWT .NULL , index );
@@ -1831,6 +1834,7 @@ protected void internalExpandToLevel(Widget widget, int level) {
1831
1834
return ;
1832
1835
}
1833
1836
createChildren (widget , false );
1837
+ // XXX for performance widget should be expanded after expanding children:
1834
1838
if (widget instanceof Item ) {
1835
1839
setExpanded ((Item ) widget , true );
1836
1840
}
@@ -1844,6 +1848,7 @@ protected void internalExpandToLevel(Widget widget, int level) {
1844
1848
}
1845
1849
}
1846
1850
}
1851
+ // XXX expanding here fails on linux
1847
1852
}
1848
1853
}
1849
1854
0 commit comments