public static void disposeItem(TreeItem item) { TreeItem parentItem = item.getParentItem(); if (parentItem == null && item.getParent().getItemCount() == 1) { CTabItem tabItem = (CTabItem) item.getParent().getData("tabItem"); tabItem.dispose(); return; } item.dispose(); if (parentItem != null && parentItem.getItemCount() == 0) { disposeItem(parentItem); } }
public static int getColumnAtPos(TreeItem item, int x, int y) { int columnCount = item.getParent().getColumnCount(); for (int i = 0; i < columnCount; i++) { Rectangle rect = item.getBounds(i); if (rect.contains(x, y)) { return i; } } return -1; }
/** Get the TreeItem that should be selected after removing the current selection. */ public static TreeItem getNewlySelectedItem(Tree tree) { TreeItem[] selection = tree.getSelection(); if ((selection == null) || (selection.length == 0)) { return null; } TreeSet<TreeItem> selectionSet = new TreeSet<TreeItem>( new Comparator<TreeItem>() { @Override public final int compare(TreeItem o1, TreeItem o2) { return CommonUtils.compare(o1.getBounds().y, o2.getBounds().y); } }); List<TreeItem> selectionList = Arrays.asList(selection); selectionSet.addAll(selectionList); TreeItem previousItem = null; TreeItem parentItem = null; while (!selectionSet.isEmpty()) { TreeItem focusItem = selectionSet.iterator().next(); parentItem = focusItem.getParentItem(); TreeItem[] items = (parentItem != null ? parentItem.getItems() : focusItem.getParent().getItems()); boolean found = false; for (int i = 0; i < items.length; i++) { TreeItem item = items[i]; if (focusItem == item) { found = true; if ((i > 0) && (previousItem == null)) { previousItem = items[i - 1]; } } if (found) { if (!selectionSet.remove(item)) { return item; } } } } if (previousItem != null && !selectionList.contains(previousItem)) { return previousItem; } if (parentItem != null && !selectionList.contains(parentItem)) { return parentItem; } return null; }
/** * This returns the location of the mouse in the vertical direction, relative to the item widget, * from 0 (top) to 1 (bottom). NOTE : Copied from DragAndDropCommand. * * @param event the {@link DropTargetEvent} * @return the float representing the vertical direction */ protected float getLocation(DropTargetEvent event) { float result = 0.0F; if (event.item instanceof TreeItem) { TreeItem treeItem = (TreeItem) event.item; Control control = treeItem.getParent(); Point point = control.toControl(new Point(event.x, event.y)); Rectangle bounds = treeItem.getBounds(); result = (float) (point.y - bounds.y) / (float) bounds.height; } else if (event.item instanceof TableItem) { TableItem tableItem = (TableItem) event.item; Control control = tableItem.getParent(); Point point = control.toControl(new Point(event.x, event.y)); Rectangle bounds = tableItem.getBounds(0); result = (float) (point.y - bounds.y) / (float) bounds.height; } return result; }
protected void installEditors(TreeItem treeItem, final Object parentPackage) { Object currentDataItem = treeItem.getData(); if (currentDataItem instanceof ProfileApplication) { ProfileApplication profileApplication = (ProfileApplication) currentDataItem; Tree tree = treeItem.getParent(); final Button checkbox = new Button(tree, SWT.CHECK); checkbox.setSelection(true); IProfileApplicationDelegate delegate = getDelegate(profileApplication); final Package applyingPackage = delegate.getApplyingPackage(profileApplication); final Profile appliedProfile = delegate.getAppliedProfile(profileApplication); getProfilesToReapply(applyingPackage).add(appliedProfile); checkbox.addSelectionListener( new SelectionListener() { public void widgetSelected(SelectionEvent e) { if (checkbox.getSelection()) { getProfilesToReapply(applyingPackage).add(appliedProfile); } else { getProfilesToReapply(applyingPackage).remove(appliedProfile); } } public void widgetDefaultSelected(SelectionEvent e) { // Nothing } }); TreeEditor editor = new TreeEditor(tree); editor.horizontalAlignment = SWT.CENTER; editor.grabHorizontal = true; editor.setEditor(checkbox, treeItem, 4); } for (TreeItem subitem : treeItem.getItems()) { installEditors(subitem, currentDataItem); } }
/** return the item of real context parameter. */ private static IContextParameter searchNearItemParam( final TreeItem[] items, final TreeItem searchItem) { if (items == null || searchItem == null) { return null; } for (int i = items.length - 1; i >= 0; i--) { TreeItem item = items[i]; IContextParameter param = searchNearItemParam(item.getItems(), searchItem); if (param != null) { return param; } // if (item == searchItem) { if (i > 0) { // before item return searchEndItemParam(items[i - 1]); } else { // first in current if (i + 1 < items.length) { // next item return searchEndItemParam(items[i + 1]); } else { // only one left TreeItem parentItem = item.getParentItem(); if (parentItem != null) { final Tree parentTree = item.getParent(); final int index = parentTree.indexOf(parentItem); if (index > -1) { // in tree root if (index > 0) { return searchEndItemParam(parentTree.getItem(index - 1)); } else { // is first return null; } } else { // not found return null; } } } } } } return null; }