/** revert selection according to parameter. */
  public static void revertTreeSelection(TreeViewer viewer, IContextParameter param) {
    if (viewer == null) {
      return;
    }
    final Tree tree = viewer.getTree();
    final TreeItem[] items = tree.getItems();

    TreeItem item = retrieveTreeItem(items, param);
    if (item == null) {
      if (items.length > 0) { // select first
        tree.setSelection(items[0]);
      }
    } else {
      tree.setSelection(item);
    }
  }
예제 #2
0
 private void expandSelect() {
   if (fPathToSelect == null) return;
   if (fPathToSelect.isEmpty()) {
     fPathToSelect = null;
     fFileToSelect = null;
     return;
   }
   do {
     String name = fPathToSelect.getFirst();
     if (name.length() == 0) {
       fPathToSelect.removeFirst();
       continue;
     }
     FileInfo info = findFileInfo(fLastSelectedFileInfo, name);
     if (info == null) break;
     TreeItem item = findItem(info);
     if (item == null) break;
     fPathToSelect.removeFirst();
     if (fPathToSelect.isEmpty()) {
       fileTree.setSelection(item);
       fileTree.showItem(item);
     } else {
       item.setExpanded(true);
       fileTree.showItem(item);
     }
     fLastSelectedFileInfo = info;
   } while (!fPathToSelect.isEmpty());
 }
예제 #3
0
 protected void updateSelectionIfNothingSelected(Tree tree) {
   TreeItem[] sel = tree.getSelection();
   if (sel == null || sel.length == 0) {
     TreeItem[] items = tree.getItems();
     if (items != null && items.length > 0) {
       tree.setSelection(items[0]);
     }
   }
 }
 public void setTreeSelection(ISelection s) {
   if (s != null && s instanceof StructuredSelection && outline instanceof Tree) {
     StructuredSelection sel = (StructuredSelection) s;
     List<?> sobj = sel.toList();
     List<TreeItem> toSelect = new ArrayList<TreeItem>();
     Tree tree = (Tree) outline;
     tree.getItemCount();
     checkItems(tree.getItems(), toSelect, sobj);
     if (!toSelect.isEmpty()) tree.setSelection(toSelect.toArray(new TreeItem[toSelect.size()]));
   } else setSelection(s);
 }
예제 #5
0
 private static void readSelection(final Tree tree) {
   String value = WidgetLCAUtil.readPropertyValue(tree, "selection");
   if (value != null) {
     String[] values = value.split(",");
     TreeItem[] selectedItems = new TreeItem[values.length];
     boolean validItemFound = false;
     for (int i = 0; i < values.length; i++) {
       selectedItems[i] = (TreeItem) WidgetUtil.find(tree, values[i]);
       if (selectedItems[i] != null) {
         validItemFound = true;
       }
     }
     if (!validItemFound) {
       selectedItems = new TreeItem[0];
     }
     tree.setSelection(selectedItems);
   }
 }
예제 #6
0
  public void setSelectedSources(Worker[] plugins, String... sources) {
    TreeItem[] items = tree.getSelection();
    if (items.length < 1) return;
    TreeItem selectedItem = items[0];

    items = selectedItem.getItems();
    if (items == null || items.length < 1) return;

    for (int i = 0; i < items.length; i++) {
      for (String source : sources) {
        if (!items[i].getText().equals(source)) continue;
        tree.setSelection(new TreeItem[] {selectedItem, items[i]});
        creator.setSource(plugins, getSelectedCategory(), source, false);
        int topIndex = i;
        int visibleCount = tree.getSize().y / 48;
        if (topIndex - visibleCount < 0) return;
        topIndex -= visibleCount;
        tree.setTopItem(items[topIndex]);
        break;
      }
    }
  }
예제 #7
0
  public void setSelectedCategory(String category) {
    if (category == null) return;
    if (lastSelectedItem != null && !lastSelectedItem.isDisposed()) {
      lastSelectedItem.setBackground(new Color(getDisplay(), 255, 255, 255));
      lastSelectedItem.setExpanded(false);
      lastSelectedItem.removeAll();
      lastSelectedItem = null;
    }

    TreeItem[] items = tree.getItems();
    if (items == null || items.length < 1) return;

    TreeItem selectedItem = null;
    for (TreeItem item : items) {
      if (item.getText().equals(category)) {
        selectedItem = item;
        break;
      }
    }
    if (selectedItem == null) return;
    tree.setSelection(selectedItem);
  }
예제 #8
0
  public static void main(String[] args) {
    final Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("Custom gradient selection for Tree");
    shell.setLayout(new FillLayout());
    final Tree tree = new Tree(shell, SWT.MULTI | SWT.FULL_SELECTION);
    tree.setHeaderVisible(false);
    tree.setLinesVisible(false);
    int columnCount = 4;
    for (int i = 0; i < columnCount; i++) {
      TreeColumn column = new TreeColumn(tree, SWT.NONE);
      column.setText("Column " + i);
    }
    int itemCount = 3;
    for (int i = 0; i < itemCount; i++) {
      TreeItem item1 = new TreeItem(tree, SWT.NONE);
      item1.setText("item " + i);
      for (int c = 1; c < columnCount; c++) {
        item1.setText(c, "item [" + i + "-" + c + "]");
      }
      for (int j = 0; j < itemCount; j++) {
        TreeItem item2 = new TreeItem(item1, SWT.NONE);
        item2.setText("item [" + i + " " + j + "]");
        for (int c = 1; c < columnCount; c++) {
          item2.setText(c, "item [" + i + " " + j + "-" + c + "]");
        }
        for (int k = 0; k < itemCount; k++) {
          TreeItem item3 = new TreeItem(item2, SWT.NONE);
          item3.setText("item [" + i + " " + j + " " + k + "]");
          for (int c = 1; c < columnCount; c++) {
            item3.setText(c, "item [" + i + " " + j + " " + k + "-" + c + "]");
          }
        }
      }
    }

    /*
     * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
     * Therefore, it is critical for performance that these methods be
     * as efficient as possible.
     */
    tree.addListener(
        SWT.EraseItem,
        new Listener() {
          public void handleEvent(Event event) {
            event.detail &= ~SWT.HOT;
            if ((event.detail & SWT.SELECTED) != 0) {
              GC gc = event.gc;
              Rectangle area = tree.getClientArea();
              /*
               * If you wish to paint the selection beyond the end of
               * last column, you must change the clipping region.
               */
              int columnCount = tree.getColumnCount();
              if (event.index == columnCount - 1 || columnCount == 0) {
                int width = area.x + area.width - event.x;
                if (width > 0) {
                  Region region = new Region();
                  gc.getClipping(region);
                  region.add(event.x, event.y, width, event.height);
                  gc.setClipping(region);
                  region.dispose();
                }
              }
              gc.setAdvanced(true);
              if (gc.getAdvanced()) gc.setAlpha(127);
              Rectangle rect = event.getBounds();
              Color foreground = gc.getForeground();
              Color background = gc.getBackground();
              gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
              gc.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
              gc.fillGradientRectangle(0, rect.y, 500, rect.height, false);
              // restore colors for subsequent drawing
              gc.setForeground(foreground);
              gc.setBackground(background);
              event.detail &= ~SWT.SELECTED;
            }
          }
        });
    for (int i = 0; i < columnCount; i++) {
      tree.getColumn(i).pack();
    }
    tree.setSelection(tree.getItem(0));
    shell.setSize(500, 200);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) display.sleep();
    }
    display.dispose();
  }