/** * Add the elements into the viewer as children of the specified parent * element. * * @param parent * the parent of the element being inserted * @param elements * the elements to insert */ public void add(Object parent, Object[] elements) { viewer.add(parent, elements); }
/** * Remove the elements from the viewer wherever they appear as children of * the specified parent element. * * @param parent * the parent of the elements being removed * @param elements * the elements to remove */ public void remove(Object parent, Object[] elements) { viewer.remove(parent, elements); } }
@Override public IStatus runInUIThread(IProgressMonitor updateMonitor) { // Cancel the job if the tree viewer got closed if (treeViewer.getControl().isDisposed() || updateMonitor.isCanceled()) { return Status.CANCEL_STATUS; } treeViewer.add(parent, children); return Status.OK_STATUS; } };
@Override protected Widget doFindInputItem(Object element) { // compare with root Object root = getRoot(); if (root == null) { return null; } if (equals(root, element)) { return getControl(); } return null; }
/** * Collapses all nodes of the viewer's tree, starting with the root. This * method is equivalent to <code>collapseToLevel(ALL_LEVELS)</code>. */ public void collapseAll() { Object root = getRoot(); if (root != null) { collapseToLevel(root, ALL_LEVELS); } }
/** * Expands the root of the viewer's tree to the given level. * * @param level * non-negative level, or <code>ALL_LEVELS</code> to expand all * levels of the tree */ public void expandToLevel(int level) { expandToLevel(getRoot(), level); }
public synchronized void elementsChanged(Object[] updatedElements) { if (getSearchResult() == null) return; AbstractTreeViewer viewer= (AbstractTreeViewer) getPage().getViewer(); Set toRemove= new HashSet(); Set toUpdate= new HashSet(); Map toAdd= new HashMap(); for (int i= 0; i < updatedElements.length; i++) { if (getPage().getDisplayedMatchCount(updatedElements[i]) > 0) insert(toAdd, toUpdate, updatedElements[i]); else remove(toRemove, toUpdate, updatedElements[i]); } viewer.remove(toRemove.toArray()); for (Iterator iter= toAdd.keySet().iterator(); iter.hasNext();) { Object parent= iter.next(); HashSet children= (HashSet) toAdd.get(parent); viewer.add(parent, children.toArray()); } for (Iterator elementsToUpdate= toUpdate.iterator(); elementsToUpdate.hasNext();) { viewer.refresh(elementsToUpdate.next()); } }
Object input = getInput(); for (Object element : elementsOrPaths) { if (equals(element, input)) { setInput(null); return; Widget[] childItems = internalFindItems(element); if (childItems.length > 0) { for (Widget childItem : childItems) { if (childItem instanceof Item) { disassociate((Item) childItem); childItem.dispose(); Object parent = getParentElement(element); if (parent != null && !equals(parent, getRoot()) && !(parent instanceof TreePath && ((TreePath) parent) .getSegmentCount() == 0)) { Widget[] parentItems = internalFindItems(parent); for (Widget parentItem : parentItems) { if (parentItem instanceof Item) { updatePlus((Item) parentItem, parent);
@Override protected void handleDoubleSelect(SelectionEvent event) { // handle case where an earlier selection listener disposed the control. Control control = getControl(); if (control != null && !control.isDisposed()) { // If the double-clicked element can be obtained from the event, use // it // otherwise get it from the control. Some controls like List do // not have the notion of item. // For details, see bug 90161 [Navigator] DefaultSelecting folders // shouldn't always expand first one ISelection selection; if (event.item != null && event.item.getData() != null) { // changes to fix bug 108102 follow TreePath treePath = getTreePathFromItem((Item) event.item); selection = new TreeSelection(treePath); // end of changes } else { selection = getSelection(); updateSelection(selection); } fireDoubleClick(new DoubleClickEvent(this, selection)); } }
/** * Binds the viewer to the specified input, using the specified children * property to generate child nodes, and the specified label properties to * generate labels. * * @param viewer * the tree viewer to set up * @param input * the input to set on the viewer * @param childrenProperty * the property to use as the children of an element * @param labelProperties * the respective properties to use for labels in each of the * viewer's columns */ public static void bind(AbstractTreeViewer viewer, Object input, IListProperty childrenProperty, IValueProperty... labelProperties) { Realm realm = DisplayRealm.getRealm(viewer.getControl().getDisplay()); ObservableListTreeContentProvider contentProvider = new ObservableListTreeContentProvider( childrenProperty.listFactory(realm), null); if (viewer.getInput() != null) viewer.setInput(null); viewer.setContentProvider(contentProvider); viewer.setLabelProvider(new ObservableMapLabelProvider(Properties .observeEach(contentProvider.getKnownElements(), labelProperties))); if (input != null) viewer.setInput(input); }
treeViewer.getControl().setRedraw(false); treeViewer.add(resource, addedObjects); treeViewer.remove(removedObjects); treeViewer.getControl().setRedraw(true);
public void run() { Control ctrl= fViewer.getControl(); if (ctrl != null && !ctrl.isDisposed()) { Object[] newElements= getNewElements(elements); if (fViewer instanceof AbstractTreeViewer) { if (fViewer.testFindItem(parent) == null) { Object root= ((AbstractTreeViewer)fViewer).getInput(); if (root != null) ((AbstractTreeViewer)fViewer).add(root, newElements); } else ((AbstractTreeViewer)fViewer).add(parent, newElements); } else if (fViewer instanceof ListViewer) ((ListViewer)fViewer).add(newElements); else if (fViewer instanceof TableViewer) ((TableViewer)fViewer).add(newElements); if (fViewer.testFindItem(elements[0]) != null) fBrowsingPart.adjustInputAndSetSelection(elements[0]); } } });
protected void insert(Object child, boolean refreshViewer) { Object parent= getParent(child); while (parent != null) { if (insertChild(parent, child)) { if (refreshViewer) fTreeViewer.add(parent, child); } else { if (refreshViewer) fTreeViewer.refresh(parent); return; } child= parent; parent= getParent(child); } if (insertChild(fResult, child)) { if (refreshViewer) fTreeViewer.add(fResult, child); } }
protected List getSelectionFromWidget() { Widget[] items = getSelection(getControl()); ArrayList list = new ArrayList(items.length); for (int i = 0; i < items.length; i++) { Widget item = items[i]; Object e = item.getData(); if (e != null) { list.add(e); } } return list; }
protected Object[] getRawChildren(Object parentElementOrTreePath) { boolean oldBusy = isBusy(); setBusy(true); try { Object parent; if (equals(parent, getRoot())) { return super.getRawChildren(parent); IContentProvider cp = getContentProvider(); if (cp instanceof ITreePathContentProvider) { ITreePathContentProvider tpcp = (ITreePathContentProvider) cp; if (path == null) { Widget w = findItem(parent); if (w instanceof Item) { Item item = (Item) w; path = getTreePathFromItem(item); setBusy(oldBusy);
/** * This implementation of getSelection() returns an instance of * ITreeSelection. * * @since 1.0 */ public ISelection getSelection() { Control control = getControl(); if (control == null || control.isDisposed()) { return TreeSelection.EMPTY; } Widget[] items = getSelection(getControl()); ArrayList list = new ArrayList(items.length); for (int i = 0; i < items.length; i++) { Widget item = items[i]; if (item.getData() != null) { list.add(getTreePathFromItem((Item) item)); } } return new TreeSelection((TreePath[]) list.toArray(new TreePath[list .size()]), getComparer()); }
protected void expandAllFromSelection() { AbstractTreeViewer tree = viewer; if (tree == null) return; ISelection selection = tree.getSelection(); if(! selection.isEmpty()) { Iterator elements = ((IStructuredSelection)selection).iterator(); try { tree.getControl().setRedraw(false); while (elements.hasNext()) { Object next = elements.next(); tree.expandToLevel(next, AbstractTreeViewer.ALL_LEVELS); } } finally { tree.getControl().setRedraw(true); } } } /* (non-Javadoc)
@Override protected void labelProviderChanged() { // we have to walk the (visible) tree and update every item Control tree = getControl(); tree.setRedraw(false); // don't pick up structure changes, but do force label updates internalRefresh(tree, getRoot(), false, true); tree.setRedraw(true); }
/** * Updates the viewer in response to the current frame changing. * * @param frame the new value for the current frame */ protected void frameChanged(TreeFrame frame) { viewer.getControl().setRedraw(false); viewer.setInput(frame.getInput()); viewer.setExpandedElements(frame.getExpandedElements()); viewer.setSelection(frame.getSelection(), true); viewer.getControl().setRedraw(true); }
/** * Returns the parent frame, or <code>null</code> if there is no parent frame. * * @param flags a bit-wise OR of the frame source flag constants * @return the parent frame, or <code>null</code> */ protected Frame getParentFrame(int flags) { Object input = viewer.getInput(); ITreeContentProvider provider = (ITreeContentProvider) viewer .getContentProvider(); Object parent = provider.getParent(input); if (parent == null) { return null; } TreeFrame frame = createFrame(parent); if ((flags & IFrameSource.FULL_CONTEXT) != 0) { frame.setSelection(viewer.getSelection()); // include current input in expanded set Object[] expanded = viewer.getExpandedElements(); Object[] newExpanded = new Object[expanded.length + 1]; System.arraycopy(expanded, 0, newExpanded, 0, expanded.length); newExpanded[newExpanded.length - 1] = input; frame.setExpandedElements(newExpanded); } return frame; }