/**
  * Sets which elements are grayed in this viewer's tree. The given list contains the elements that
  * are to be grayed; all other elements are to be ungrayed.
  *
  * <p>This method is typically used when restoring the interesting state of a viewer captured by
  * an earlier call to <code>getGrayedElements</code>.
  *
  * @param elements the array of grayed elements
  * @see #getGrayedElements
  */
 public void setGrayedElements(Object[] elements) {
   assertElementsNotNull(elements);
   CustomHashtable grayedElements = newHashtable(elements.length * 2 + 1);
   for (int i = 0; i < elements.length; ++i) {
     Object element = elements[i];
     // Ensure item exists for element
     internalExpand(element, false);
     grayedElements.put(element, element);
   }
   Control tree = getControl();
   tree.setRedraw(false);
   internalSetGrayed(grayedElements, tree);
   tree.setRedraw(true);
 }
 /**
  * Applies the checked and grayed states of the given widget and its descendents.
  *
  * @param checked a set of elements (element type: <code>Object</code>)
  * @param grayed a set of elements (element type: <code>Object</code>)
  * @param widget the widget
  */
 private void applyState(CustomHashtable checked, CustomHashtable grayed, Widget widget) {
   Item[] items = getChildren(widget);
   for (int i = 0; i < items.length; i++) {
     Item item = items[i];
     if (item instanceof TreeItem) {
       Object data = item.getData();
       if (data != null) {
         TreeItem ti = (TreeItem) item;
         ti.setChecked(checked.containsKey(data));
         ti.setGrayed(grayed.containsKey(data));
       }
     }
     applyState(checked, grayed, item);
   }
 }
 /**
  * Gathers the checked and grayed states of the given widget and its descendents.
  *
  * @param checked a writable set of elements (element type: <code>Object</code>)
  * @param grayed a writable set of elements (element type: <code>Object</code>)
  * @param widget the widget
  */
 private void gatherState(CustomHashtable checked, CustomHashtable grayed, Widget widget) {
   Item[] items = getChildren(widget);
   for (int i = 0; i < items.length; i++) {
     Item item = items[i];
     if (item instanceof TreeItem) {
       Object data = item.getData();
       if (data != null) {
         TreeItem ti = (TreeItem) item;
         if (ti.getChecked()) {
           checked.put(data, data);
         }
         if (ti.getGrayed()) {
           grayed.put(data, data);
         }
       }
     }
     gatherState(checked, grayed, item);
   }
 }
  @Override
  public void remove(Object[] elements) {
    assertElementsNotNull(elements);
    if (checkBusy()) return;
    if (elements.length == 0) {
      return;
    }

    // deselect any items that are being removed, see bug 97786
    boolean deselectedItems = false;
    Object elementToBeRemoved = null;
    CustomHashtable elementsToBeRemoved = null;
    if (elements.length == 1) {
      elementToBeRemoved = elements[0];
    } else {
      elementsToBeRemoved = new CustomHashtable(getComparer());
      for (Object element : elements) {
        elementsToBeRemoved.put(element, element);
      }
    }
    int[] selectionIndices = doGetSelectionIndices();
    for (int index : selectionIndices) {
      Item item = doGetItem(index);
      Object data = item.getData();
      if (data != null) {
        if ((elementsToBeRemoved != null && elementsToBeRemoved.containsKey(data))
            || equals(elementToBeRemoved, data)) {
          table.deselect(index);
          deselectedItems = true;
        }
      }
    }
    super.remove(elements);

    if (deselectedItems) {
      ISelection sel = getSelection();
      updateSelection(sel);
      firePostSelectionChanged(new SelectionChangedEvent(this, sel));
    }
  }
Exemplo n.º 5
0
 private InitializeData(TreePath[] paths, IElementComparer comparer) {
   this.paths = new TreePath[paths.length];
   System.arraycopy(paths, 0, this.paths, 0, paths.length);
   element2TreePaths = new CustomHashtable(comparer);
   int size = paths.length;
   selection = new ArrayList(size);
   for (int i = 0; i < size; i++) {
     Object lastSegment = paths[i].getLastSegment();
     Object mapped = element2TreePaths.get(lastSegment);
     if (mapped == null) {
       selection.add(lastSegment);
       element2TreePaths.put(lastSegment, paths[i]);
     } else if (mapped instanceof List) {
       ((List) mapped).add(paths[i]);
     } else {
       List newMapped = new ArrayList(2);
       newMapped.add(mapped);
       newMapped.add(paths[i]);
       element2TreePaths.put(lastSegment, newMapped);
     }
   }
 }
 /**
  * Sets the grayed state of all items to correspond to the given set of grayed elements.
  *
  * @param grayedElements the set (element type: <code>Object</code>) of elements which are grayed
  * @param widget the widget
  */
 private void internalSetGrayed(CustomHashtable grayedElements, Widget widget) {
   Item[] items = getChildren(widget);
   for (int i = 0; i < items.length; i++) {
     TreeItem item = (TreeItem) items[i];
     Object data = item.getData();
     if (data != null) {
       boolean grayed = grayedElements.containsKey(data);
       if (grayed != item.getGrayed()) {
         item.setGrayed(grayed);
       }
     }
     internalSetGrayed(grayedElements, item);
   }
 }
Exemplo n.º 7
0
 public TreePath[] getPathsFor(Object element) {
   Object value = element2TreePaths == null ? null : element2TreePaths.get(element);
   if (value == null) {
     return EMPTY_TREE_PATHS;
   } else if (value instanceof TreePath) {
     return new TreePath[] {(TreePath) value};
   } else if (value instanceof List) {
     List l = (List) value;
     return (TreePath[]) l.toArray(new TreePath[l.size()]);
   } else {
     // should not happen:
     Assert.isTrue(false, "Unhandled case"); // $NON-NLS-1$
     return null;
   }
 }
Exemplo n.º 8
0
 /**
  * Returns the element comparer passed in when the tree selection has been created or <code>null
  * </code> if no comparer has been provided.
  *
  * @return the element comparer or <code>null</code>
  * @since 3.2
  */
 public IElementComparer getElementComparer() {
   if (element2TreePaths == null) return null;
   return element2TreePaths.getComparer();
 }