package org.objectstyle.wolips.baseforuiplugins.utils; import java.util.LinkedList; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.viewers.CellNavigationStrategy; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.TreeItem; public class WOTreeCellNavigationStrategy extends CellNavigationStrategy { public void collapse(ColumnViewer viewer, ViewerCell cellToCollapse, Event event) { if (cellToCollapse != null) { ((TreeItem) cellToCollapse.getItem()).setExpanded(false); } } public void expand(ColumnViewer viewer, ViewerCell cellToExpand, Event event) { if (cellToExpand != null) { TreeViewer v = (TreeViewer) viewer; TreeItem item = (TreeItem)cellToExpand.getItem(); LinkedList<Object> segments = new LinkedList<Object>(); while (item != null) { Object segment = item.getData(); Assert.isNotNull(segment); segments.addFirst(segment); item = item.getParentItem(); } TreePath selectedPath = new TreePath(segments.toArray()); v.setExpandedState(selectedPath, true); } } public boolean isCollapseEvent(ColumnViewer viewer, ViewerCell cellToCollapse, Event event) { if (cellToCollapse == null) { return false; } return cellToCollapse != null && ((TreeItem) cellToCollapse.getItem()).getExpanded() && event.keyCode == SWT.ARROW_LEFT && isFirstColumnCell(cellToCollapse); } public boolean isExpandEvent(ColumnViewer viewer, ViewerCell cellToExpand, Event event) { if (cellToExpand == null) { return false; } return cellToExpand != null && ((TreeItem) cellToExpand.getItem()).getItemCount() > 0 && !((TreeItem) cellToExpand.getItem()).getExpanded() && event.keyCode == SWT.ARROW_RIGHT && isFirstColumnCell(cellToExpand); } @SuppressWarnings("unused") private boolean isFirstColumnCell(ViewerCell cell) { return true; } }