## org.eclipse.datatools.sqltools.common.ui.tableviewer
Class TableCursor

    java.lang.Object
      org.eclipse.swt.widgets.Widget
          org.eclipse.swt.widgets.Control
              org.eclipse.swt.widgets.Scrollable
                  org.eclipse.swt.widgets.Composite
                      org.eclipse.swt.widgets.Canvas
                          org.eclipse.datatools.sqltools.common.ui.tableviewer.TableCursor

All Implemented Interfaces:
  org.eclipse.swt.graphics.Drawable

Direct Known Subclasses:
  TableDataTableCursor

    public class TableCursor

extends org.eclipse.swt.widgets.Canvas

A TableCursor provides a way for the user to navigate around a Table using the keyboard. It also provides a mechanism for selecting an individual cell in a table.

Here is an example of using a TableCursor to navigate to a cell and then edit it. ``

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

         // create a a table with 3 columns and fill with data
         final Table table = new Table(shell, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
         table.setLayoutData(new GridData(GridData.FILL_BOTH));
         TableColumn column1 = new TableColumn(table, SWT.NONE);
         TableColumn column2 = new TableColumn(table, SWT.NONE);
         TableColumn column3 = new TableColumn(table, SWT.NONE);
         for (int i = 0; i < 100; i++)
         {
             TableItem item = new TableItem(table, SWT.NONE);
             item.setText(new String[]
             {
                 "cell " + i + " 0", "cell " + i + " 1", "cell " + i + " 2"
             });
         }
         column1.pack();
         column2.pack();
         column3.pack();

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

         cursor.addSelectionListener(new SelectionAdapter()
         {
             // when the TableEditor is over a cell, select the corresponding row in
             // the table
             public void widgetSelected(SelectionEvent e)
             {
                 table.setSelection(new TableItem[]
                 {
                     cursor.getRow()
                 });
             }

             // when the user hits "ENTER" in the TableCursor, pop up a text editor so that
             // they can change the text of the cell
             public void widgetDefaultSelected(SelectionEvent e)
             {
                 final Text text = new Text(cursor, SWT.NONE);
                 TableItem row = cursor.getRow();
                 int column = cursor.getColumn();
                 text.setText(row.getText(column));
                 text.addKeyListener(new KeyAdapter()
                 {
                     public void keyPressed(KeyEvent e)
                     {
                         // close the text editor and copy the data over
                         // when the user hits "ENTER"
                         if (e.character == SWT.CR)
                         {
                             TableItem row = cursor.getRow();
                             int column = cursor.getColumn();
                             row.setText(column, text.getText());
                             text.dispose();
                         }
                         // close the text editor when the user hits "ESC"
                         if (e.character == SWT.ESC)
                         {
                             text.dispose();
                         }
                     }
                 });
                 editor.setEditor(text);
                 text.setFocus();
             }
         });
         // Hide the TableCursor when the user hits the "MOD1" or "MOD2" key.
         // This alows the user to select multiple items in the table.
         cursor.addKeyListener(new KeyAdapter()
         {
             public void keyPressed(KeyEvent 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 TableCursor when the user releases the "MOD2" or "MOD1" key.
         // This signals the end of the multiple selection task.
         table.addKeyListener(new KeyAdapter()
         {
             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;

                 TableItem[] selection = table.getSelection();
                 TableItem row = (selection.length == 0) ? table.getItem(table.getTopIndex()) : selection[0];
                 table.showItem(row);
                 cursor.setSelection(row, 0);
                 cursor.setVisible(true);
                 cursor.setFocus();
             }
         });

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

Styles:
  BORDER
Events:
  Selection, DefaultSelection

Since:
  2.0

Field Summary

Fields inherited from class org.eclipse.swt.widgets.Composite
`embeddedHandle`

Fields inherited from class org.eclipse.swt.widgets.Widget
`handle`

Constructor Summary
`TableCursor(org.eclipse.swt.widgets.Table parent, int style)` Constructs a new instance of this class given its parent table and a style value describing its behavior and appearance.

Method Summary
`void` `addSelectionListener(org.eclipse.swt.events.SelectionListener listener)` Adds the listener to the collection of listeners who will be notified when the receiver's selection changes, by sending it one of the messages defined in the `SelectionListener` interface.
`int` `getColumn()` Returns the column over which the TableCursor is positioned.
`org.eclipse.swt.widgets.TableItem` `getRow()` Returns the row over which the TableCursor is positioned.
`void` `removeSelectionListener(org.eclipse.swt.events.SelectionListener listener)` Removes the listener from the collection of listeners who will be notified when the receiver's selection changes.
`void` `setBackground(org.eclipse.swt.graphics.Color color)`
`void` `setForeground(org.eclipse.swt.graphics.Color color)`
`void` `setSelection(int row, int column)` Positions the TableCursor over the cell at the given row and column in the parent table.
`void` `setSelection(org.eclipse.swt.widgets.TableItem row, int column)` Positions the TableCursor over the cell at the given row and column in the parent table.
`void` `setVisible(boolean visible)`

Methods inherited from class org.eclipse.swt.widgets.Canvas
`drawBackground, getCaret, getIME, scroll, setCaret, setFont, setIME`

Methods inherited from class org.eclipse.swt.widgets.Composite
`changed, computeSize, getBackgroundMode, getChildren, getClientArea, getLayout, getLayoutDeferred, getTabList, isLayoutDeferred, layout, layout, layout, layout, setBackgroundMode, setFocus, setLayout, setLayoutDeferred, setTabList`

Methods inherited from class org.eclipse.swt.widgets.Scrollable
`computeTrim, getBorderWidth, getHorizontalBar, getVerticalBar`

Methods inherited from class org.eclipse.swt.widgets.Control

`addControlListener, addDragDetectListener, addFocusListener, addHelpListener, addKeyListener, addMenuDetectListener, addMouseListener, addMouseMoveListener, addMouseTrackListener, addMouseWheelListener, addPaintListener, addTraverseListener, computeSize, dragDetect, dragDetect, forceFocus, getAccessible, getBackground, getBackgroundImage, getBounds, getCursor, getDragDetect, getEnabled, getFont, getForeground, getLayoutData, getLocation, getMenu, getMonitor, getParent, getRegion, getShell, getSize, getToolTipText, getVisible, internal_dispose_GC, internal_new_GC, isEnabled, isFocusControl, isReparentable, isVisible, moveAbove, moveBelow, pack, pack, print, redraw, redraw, removeControlListener, removeDragDetectListener, removeFocusListener, removeHelpListener, removeKeyListener, removeMenuDetectListener, removeMouseListener, removeMouseMoveListener, removeMouseTrackListener, removeMouseWheelListener, removePaintListener, removeTraverseListener, setBackgroundImage, setBounds, setBounds, setCapture, setCursor, setDragDetect, setEnabled, setLayoutData, setLocation, setLocation, setMenu, setParent, setRedraw, setRegion, setSize, setSize, setToolTipText, toControl, toControl, toDisplay, toDisplay, traverse, update`

Methods inherited from class org.eclipse.swt.widgets.Widget
`addDisposeListener, addListener, dispose, getData, getData, getDisplay, getListeners, getStyle, isDisposed, isListening, notifyListeners, removeDisposeListener, removeListener, setData, setData, toString`

Methods inherited from class java.lang.Object
`equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Constructor Detail

### TableCursor

    public TableCursor(org.eclipse.swt.widgets.Table parent,
                       int style)

  Constructs a new instance of this class given its parent table and a style value describing its behavior and appearance.

  The style value is either one of the style constants defined in class `SWT` which is applicable to instances of this class, or must be built by bitwise OR'ing together (that is, using the `int` "|" operator) two or more of those `SWT` style constants. The class description lists the style constants that are applicable to the class. Style bits are also inherited from superclasses.

  Parameters:
    `parent` - a Table control which will be the parent of the new instance (cannot be null)
    `style` - the style of control to construct
  Throws:
    `java.lang.IllegalArgumentException` -
    - ERROR_NULL_ARGUMENT - if the parent is null
    `org.eclipse.swt.SWTException` -
    - ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent
    - ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass
  See Also:
    `SWT.BORDER`, `Widget.checkSubclass()`, `Widget.getStyle()`

Method Detail

### addSelectionListener

    public void addSelectionListener(org.eclipse.swt.events.SelectionListener listener)

  Adds the listener to the collection of listeners who will be notified when the receiver's selection changes, by sending it one of the messages defined in the `SelectionListener` interface.

  When `widgetSelected` is called, the item field of the event object is valid. If the reciever has `SWT.CHECK` style set and the check selection changes, the event object detail field contains the value `SWT.CHECK`. `widgetDefaultSelected` is typically called when an item is double-clicked.

  Parameters:
    `listener` - the listener which should be notified
  Throws:
    `java.lang.IllegalArgumentException` -
    - ERROR_NULL_ARGUMENT - if the listener is null
    `org.eclipse.swt.SWTException` -
    - ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    - ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  See Also:
    `SelectionListener`, `SelectionEvent`, `removeSelectionListener(SelectionListener)`

### setVisible

    public void setVisible(boolean visible)

  Overrides:
    `setVisible` in class `org.eclipse.swt.widgets.Control`

### removeSelectionListener

    public void removeSelectionListener(org.eclipse.swt.events.SelectionListener listener)

  Removes the listener from the collection of listeners who will be notified when the receiver's selection changes.

  Parameters:
    `listener` - the listener which should no longer be notified
  Throws:
    `java.lang.IllegalArgumentException` -
    - ERROR_NULL_ARGUMENT - if the listener is null
    `org.eclipse.swt.SWTException` -
    - ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    - ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  Since:
    3.0
  See Also:
    `SelectionListener`, `addSelectionListener(SelectionListener)`

### getColumn

    public int getColumn()

  Returns the column over which the TableCursor is positioned.

  Returns:
    the column for the current position
  Throws:
    `org.eclipse.swt.SWTException` -
    - ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    - ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver

### getRow

    public org.eclipse.swt.widgets.TableItem getRow()

  Returns the row over which the TableCursor is positioned.

  Returns:
    the item for the current position
  Throws:
    `org.eclipse.swt.SWTException` -
    - ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    - ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver

### setBackground

    public void setBackground(org.eclipse.swt.graphics.Color color)

  Overrides:
    `setBackground` in class `org.eclipse.swt.widgets.Control`

### setForeground

    public void setForeground(org.eclipse.swt.graphics.Color color)

  Overrides:
    `setForeground` in class `org.eclipse.swt.widgets.Control`

### setSelection

    public void setSelection(int row,
                             int column)

  Positions the TableCursor over the cell at the given row and column in the parent table.

  Parameters:
    `row` - the index of the row for the cell to select
    `column` - the index of column for the cell to select
  Throws:
    `org.eclipse.swt.SWTException` -
    - ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    - ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver

### setSelection

    public void setSelection(org.eclipse.swt.widgets.TableItem row,
                             int column)

  Positions the TableCursor over the cell at the given row and column in the parent table.

  Parameters:
    `row` - the TableItem of the row for the cell to select
    `column` - the index of column for the cell to select
  Throws:
    `org.eclipse.swt.SWTException` -
    - ERROR_WIDGET_DISPOSED - if the receiver has been disposed
    - ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver