001: /*******************************************************************************
002: * Copyright (c) 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
011: * fixes in bug 198665, 200731
012: ******************************************************************************/package org.eclipse.jface.viewers;
013:
014: import java.util.List;
015:
016: import org.eclipse.jface.viewers.CellEditor.LayoutData;
017: import org.eclipse.swt.custom.TableEditor;
018: import org.eclipse.swt.widgets.Control;
019: import org.eclipse.swt.widgets.Item;
020: import org.eclipse.swt.widgets.Table;
021: import org.eclipse.swt.widgets.TableItem;
022:
023: /**
024: * This is an editor-implementation for {@link Table}
025: *
026: * @since 3.3
027: *
028: */
029: public final class TableViewerEditor extends ColumnViewerEditor {
030: /**
031: * This viewer's table editor.
032: */
033: private TableEditor tableEditor;
034:
035: private SWTFocusCellManager focusCellManager;
036:
037: /**
038: * @param viewer
039: * the viewer the editor is attached to
040: * @param focusCellManager
041: * the cell focus manager if one used or <code>null</code>
042: * @param editorActivationStrategy
043: * the strategy used to decide about the editor activation
044: * @param feature
045: * the feature mask
046: */
047: TableViewerEditor(
048: TableViewer viewer,
049: SWTFocusCellManager focusCellManager,
050: ColumnViewerEditorActivationStrategy editorActivationStrategy,
051: int feature) {
052: super (viewer, editorActivationStrategy, feature);
053: tableEditor = new TableEditor(viewer.getTable());
054: this .focusCellManager = focusCellManager;
055: }
056:
057: /**
058: * Create a customized editor with focusable cells
059: *
060: * @param viewer
061: * the viewer the editor is created for
062: * @param focusCellManager
063: * the cell focus manager if one needed else <code>null</code>
064: * @param editorActivationStrategy
065: * activation strategy to control if an editor activated
066: * @param feature
067: * bit mask controlling the editor
068: * <ul>
069: * <li>{@link ColumnViewerEditor#DEFAULT}</li>
070: * <li>{@link ColumnViewerEditor#TABBING_CYCLE_IN_ROW}</li>
071: * <li>{@link ColumnViewerEditor#TABBING_HORIZONTAL}</li>
072: * <li>{@link ColumnViewerEditor#TABBING_MOVE_TO_ROW_NEIGHBOR}</li>
073: * <li>{@link ColumnViewerEditor#TABBING_VERTICAL}</li>
074: * </ul>
075: * @see #create(TableViewer, ColumnViewerEditorActivationStrategy, int)
076: */
077: public static void create(
078: TableViewer viewer,
079: SWTFocusCellManager focusCellManager,
080: ColumnViewerEditorActivationStrategy editorActivationStrategy,
081: int feature) {
082: TableViewerEditor editor = new TableViewerEditor(viewer,
083: focusCellManager, editorActivationStrategy, feature);
084: viewer.setColumnViewerEditor(editor);
085: if (focusCellManager != null) {
086: focusCellManager.init();
087: }
088: }
089:
090: /**
091: * Create a customized editor whose activation process is customized
092: *
093: * @param viewer
094: * the viewer the editor is created for
095: * @param editorActivationStrategy
096: * activation strategy to control if an editor activated
097: * @param feature
098: * bit mask controlling the editor
099: * <ul>
100: * <li>{@link ColumnViewerEditor#DEFAULT}</li>
101: * <li>{@link ColumnViewerEditor#TABBING_CYCLE_IN_ROW}</li>
102: * <li>{@link ColumnViewerEditor#TABBING_HORIZONTAL}</li>
103: * <li>{@link ColumnViewerEditor#TABBING_MOVE_TO_ROW_NEIGHBOR}</li>
104: * <li>{@link ColumnViewerEditor#TABBING_VERTICAL}</li>
105: * </ul>
106: */
107: public static void create(
108: TableViewer viewer,
109: ColumnViewerEditorActivationStrategy editorActivationStrategy,
110: int feature) {
111: create(viewer, null, editorActivationStrategy, feature);
112: }
113:
114: protected void setEditor(Control w, Item item, int columnNumber) {
115: tableEditor.setEditor(w, (TableItem) item, columnNumber);
116: }
117:
118: protected void setLayoutData(LayoutData layoutData) {
119: tableEditor.grabHorizontal = layoutData.grabHorizontal;
120: tableEditor.horizontalAlignment = layoutData.horizontalAlignment;
121: tableEditor.minimumWidth = layoutData.minimumWidth;
122: }
123:
124: public ViewerCell getFocusCell() {
125: if (focusCellManager != null) {
126: return focusCellManager.getFocusCell();
127: }
128:
129: return super .getFocusCell();
130: }
131:
132: protected void updateFocusCell(ViewerCell focusCell,
133: ColumnViewerEditorActivationEvent event) {
134: // Update the focus cell when we activated the editor with these 2
135: // events
136: if (event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC
137: || event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL) {
138:
139: List l = getViewer().getSelectionFromWidget();
140:
141: if (focusCellManager != null) {
142: focusCellManager.setFocusCell(focusCell);
143: }
144:
145: if (!l.contains(focusCell.getElement())) {
146: getViewer()
147: .setSelection(
148: new StructuredSelection(focusCell
149: .getElement()), true);
150: }
151: }
152: }
153: }
|