/******************************************************************************* * Copyright (c) 2009 STMicroelectronics. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marzia Maugeri <marzia.maugeri@st.com> - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.dataviewers.abstractviewers; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Item; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; /** * This wrapper extends AbstractSTViewer {@link AbstractSTViewer} It is designed to be instantiated with a TreeViewer * JFace control * */ public abstract class AbstractSTTreeViewer extends AbstractSTViewer { public AbstractSTTreeViewer(Composite parent) { super(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION); } public AbstractSTTreeViewer(Composite parent, int style) { super(parent, style, true); } /** * It creates the wrapped TreeViewer * * @param parent * - the parent Composite * @param style * - the table style * @return a TreeViewer * @since 5.0 */ @Override protected TreeViewer createViewer(Composite parent, int style) { Tree t = createTree(parent, style); return new TreeViewer(t); } /** * Create the main tree control * * @param parent * @param style * @return Tree */ private Tree createTree(Composite parent, int style) { Tree tree = new Tree(parent, style); tree.setLinesVisible(true); tree.setHeaderVisible(true); return tree; } /** * Create the columns in the tree. * */ @Override protected void createColumns() { Tree tree = getViewer().getTree(); TableLayout layout = new TableLayout(); tree.setLayout(layout); tree.setHeaderVisible(true); tree.setLinesVisible(true); for (int i = 0; i < getAllFields().length; i++) { ISTDataViewersField field = getAllFields()[i]; TreeColumn tc = new TreeColumn(tree, field.getAlignment(), i); tc.setText(field.getColumnHeaderText()); tc.setToolTipText(field.getColumnHeaderTooltip()); tc.setImage(field.getColumnHeaderImage()); tc.setWidth(field.getPreferredWidth()); tc.setResizable(true); tc.setMoveable(true); tc.addSelectionListener(createHeaderListener()); tc.setData(field); // defining the column label provider. // this has to be done after setting the column's data. TreeViewerColumn viewerColumn = new TreeViewerColumn(getViewer(), tc); viewerColumn.setLabelProvider(createColumnLabelProvider(tc)); } tree.addMouseMoveListener(e -> { Tree tree1 = (Tree) e.widget; TreeItem item = tree1.getItem(new Point(e.x, e.y)); if (item == null) { return; } tree1.setCursor(e.display.getSystemCursor(SWT.CURSOR_ARROW)); }); } /** * @see org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer#getColumns() * @since 5.0 */ @Override public TreeColumn[] getColumns() { return getViewer().getTree().getColumns(); } @Override public void updateDirectionIndicator(Item column) { getViewer().getTree().setSortColumn((TreeColumn) column); if (getTableSorter().getTopPriorityDirection() == STDataViewersComparator.ASCENDING) { getViewer().getTree().setSortDirection(SWT.UP); } else { getViewer().getTree().setSortDirection(SWT.DOWN); } } @Override public int[] getColumnOrder() { return getViewer().getTree().getColumnOrder(); } @Override protected void setColumnOrder(int[] order) { getViewer().getTree().setColumnOrder(order); } @Override public int getColumnIndex(Item column) { return getViewer().getTree().indexOf((TreeColumn) column); } @Override public int getColumnWidth(Item column) { return ((TreeColumn) column).getWidth(); } @Override public void setColumnResizable(Item column, boolean resizable) { ((TreeColumn) column).setResizable(resizable); } @Override public void setColumnWidth(Item column, int width) { ((TreeColumn) column).setWidth(width); } @Override public TreeViewer getViewer() { return (TreeViewer) super.getViewer(); } }