Example usage for org.eclipse.swt.widgets Tree showItem

List of usage examples for org.eclipse.swt.widgets Tree showItem

Introduction

In this page you can find the example usage for org.eclipse.swt.widgets Tree showItem.

Prototype

public void showItem(TreeItem item) 

Source Link

Document

Shows the item.

Usage

From source file:org.eclipse.swt.snippets.Snippet360.java

public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("Snippet 360");
    shell.setLayout(new GridLayout());

    // create a a tree with 3 columns and fill with data
    final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
    tree.setLayoutData(new GridData(GridData.FILL_BOTH));
    tree.setHeaderVisible(true);// ww w . ja v  a  2 s.c  om
    TreeColumn column1 = new TreeColumn(tree, SWT.NONE);
    TreeColumn column2 = new TreeColumn(tree, SWT.NONE);
    TreeColumn column3 = new TreeColumn(tree, SWT.NONE);
    for (int i = 0; i < 9; i++) {
        TreeItem item = new TreeItem(tree, SWT.NONE);
        item.setText(new String[] { "root " + i + " 0", "root " + i + " 1", "root " + i + " 2" });
        for (int j = 0; j < 9; j++) {
            TreeItem item2 = new TreeItem(item, SWT.NONE);
            item2.setText(new String[] { "child " + j + " 0", "child " + j + " 1", "child " + j + " 2" });
            TreeItem current = item2;
            for (int k = 0; k < 5; k++) {
                TreeItem item3 = new TreeItem(current, SWT.NONE);
                item3.setText(new String[] { "descendent " + k + " 0", "descendent " + k + " 1",
                        "descendent " + k + " 2" });
                current = item3;
            }
        }
    }
    column1.setWidth(200);
    column2.setWidth(100);
    column3.setWidth(100);

    // create a TreeCursor to navigate around the tree
    final TreeCursor cursor = new TreeCursor(tree, SWT.NONE);
    // create an editor to edit the cell when the user hits "ENTER"
    // while over a cell in the tree
    final ControlEditor editor = new ControlEditor(cursor);
    editor.grabHorizontal = true;
    editor.grabVertical = true;

    cursor.addSelectionListener(new SelectionAdapter() {
        // when the TreeEditor is over a cell, select the corresponding row
        // in the tree
        @Override
        public void widgetSelected(SelectionEvent e) {
            tree.setSelection(new TreeItem[] { cursor.getRow() });
        }

        // when the user hits "ENTER" in the TreeCursor, pop up a text
        // editor so that they can change the text of the cell
        @Override
        public void widgetDefaultSelected(SelectionEvent e) {
            final Text text = new Text(cursor, SWT.NONE);
            TreeItem row = cursor.getRow();
            int column = cursor.getColumn();
            text.setText(row.getText(column));
            text.addKeyListener(keyPressedAdapter(event -> {
                // close the text editor and copy the data over
                // when the user hits "ENTER"
                if (event.character == SWT.CR) {
                    TreeItem localRow = cursor.getRow();
                    int localColumn = cursor.getColumn();
                    localRow.setText(localColumn, text.getText());
                    text.dispose();
                }
                // close the text editor when the user hits "ESC"
                if (event.character == SWT.ESC) {
                    text.dispose();
                }
            }));
            editor.setEditor(text);
            text.setFocus();
        }
    });
    // Hide the TreeCursor when the user hits the "MOD1" or "MOD2" key.
    // This allows the user to select multiple items in the tree.
    cursor.addKeyListener(keyPressedAdapter(e -> {
        if (e.keyCode == SWT.MOD1 || e.keyCode == SWT.MOD2 || (e.stateMask & SWT.MOD1) != 0
                || (e.stateMask & SWT.MOD2) != 0) {
            cursor.setVisible(false);
        }
    }));
    // Show the TreeCursor when the user releases the "MOD2" or "MOD1" key.
    // This signals the end of the multiple selection task.
    tree.addKeyListener(new KeyListener() {
        @Override
        public void keyReleased(KeyEvent e) {
            if (e.keyCode == SWT.MOD1 && (e.stateMask & SWT.MOD2) != 0)
                return;
            if (e.keyCode == SWT.MOD2 && (e.stateMask & SWT.MOD1) != 0)
                return;
            if (e.keyCode != SWT.MOD1 && (e.stateMask & SWT.MOD1) != 0)
                return;
            if (e.keyCode != SWT.MOD2 && (e.stateMask & SWT.MOD2) != 0)
                return;

            TreeItem[] selection = tree.getSelection();
            TreeItem row = (selection.length == 0) ? tree.getItem(tree.indexOf(tree.getTopItem()))
                    : selection[0];
            tree.showItem(row);
            cursor.setSelection(row, cursor.getColumn());
            cursor.setVisible(true);
            cursor.setFocus();
        }

        @Override
        public void keyPressed(KeyEvent e) {
            switch (e.keyCode) {
            case SWT.ARROW_LEFT:
            case SWT.ARROW_RIGHT: {
                if ((e.stateMask & SWT.MOD1) != 0) {
                    TreeItem[] selection = tree.getSelection();
                    if (selection.length > 0) {
                        selection[0].setExpanded(e.keyCode == SWT.ARROW_RIGHT);
                    }
                    break;
                }
            }
            }
        }
    });

    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

From source file:org.eclipse.swt.snippets.Snippet221.java

static void Scroll(Tree tree, int x, int y) {
    TreeItem item = tree.getItem(new Point(x, y));
    if (item == null)
        return;//from   w w  w .  ja  v a  2s .  c o m
    Rectangle area = tree.getClientArea();
    int headerHeight = tree.getHeaderHeight();
    int itemHeight = tree.getItemHeight();
    TreeItem nextItem = null;
    if (y < area.y + headerHeight + 2 * itemHeight) {
        nextItem = PreviousItem(tree, item);
    }
    if (y > area.y + area.height - 2 * itemHeight) {
        nextItem = NextItem(tree, item);
    }
    if (nextItem != null)
        tree.showItem(nextItem);
}