/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
package org.pentaho.di.ui.core.widget;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
public class TreeUtil {
public static final void setOptimalWidthOnColumns( Tree tree ) {
int nrCols = tree.getColumnCount();
int[] max = new int[nrCols];
Image image = new Image( tree.getDisplay(), 10, 10 );
GC gc = new GC( image );
for ( int i = 0; i < max.length; i++ ) {
TreeColumn treeColumn = tree.getColumn( i );
Point point = gc.textExtent( treeColumn.getText() );
max[i] = point.x;
}
getMaxWidths( tree.getItems(), max, gc );
gc.dispose();
image.dispose();
for ( int i = 0; i < max.length; i++ ) {
TreeColumn treeColumn = tree.getColumn( i );
treeColumn.setWidth( max[i] + 30 );
}
}
private static final void getMaxWidths( TreeItem[] items, int[] max, GC gc ) {
for ( int i = 0; i < items.length; i++ ) {
for ( int c = 0; c < max.length; c++ ) {
String string = items[i].getText( c );
Point point = gc.textExtent( string );
if ( point.x > max[c] ) {
max[c] = point.x;
}
}
getMaxWidths( items[i].getItems(), max, gc );
}
}
public static final TreeItem findTreeItem( Tree tree, String[] path ) {
TreeItem[] items = tree.getItems();
for ( int i = 0; i < items.length; i++ ) {
TreeItem treeItem = findTreeItem( items[i], path, 0 );
if ( treeItem != null ) {
return treeItem;
}
}
return null;
}
private static final TreeItem findTreeItem( TreeItem treeItem, String[] path, int level ) {
if ( treeItem.getText().equals( path[level] ) ) {
if ( level == path.length - 1 ) {
return treeItem;
}
TreeItem[] items = treeItem.getItems();
for ( int i = 0; i < items.length; i++ ) {
TreeItem found = findTreeItem( items[i], path, level + 1 );
if ( found != null ) {
return found;
}
}
}
return null;
}
}