Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 280404 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/swt/internal/widgets/tablekit/TableLCA_Test.java (+36 lines)
Lines 772-777 Link Here
772
    assertEquals( 0, table.getTopIndex() );
772
    assertEquals( 0, table.getTopIndex() );
773
  }
773
  }
774
774
775
  public void testGetCellToolTipText() {
776
    Display display = new Display();
777
    Shell shell = new Shell( display );
778
    Table table = new Table( shell, SWT.NONE );
779
    for( int i = 0; i < 5; i++ ) {
780
      new TableItem( table, SWT.NONE );
781
    }
782
    Object adapter = table.getAdapter( ITableAdapter.class );
783
    final ITableAdapter tableAdapter = ( ITableAdapter )adapter;
784
    tableAdapter.setCellToolTipProvider( new ICellToolTipProvider() {
785
      public void getToolTipText( final int itemIndex,
786
                                  final int columnIndex )
787
      {
788
        String text = "[" + itemIndex + "," + columnIndex + "]";
789
        tableAdapter.setToolTipText( text );
790
      }
791
    } );
792
    String displayId = DisplayUtil.getId( display );
793
    String tableId = WidgetUtil.getId( table );
794
    RWTFixture.fakeNewRequest();
795
    RWTFixture.executeLifeCycleFromServerThread();
796
    String markup = Fixture.getAllMarkup();
797
    String expected = "w.setCellToolTipText(";
798
    assertTrue( markup.indexOf( expected ) == -1 );
799
    RWTFixture.fakeNewRequest();
800
    Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
801
    Fixture.fakeRequestParam( TableLCA.EVENT_CELL_TOOLTIP_TEXT_REQUESTED,
802
                              tableId );
803
    Fixture.fakeRequestParam( TableLCA.EVENT_CELL_TOOLTIP_TEXT_REQUESTED_CELL,
804
                              "1,2" );
805
    RWTFixture.executeLifeCycleFromServerThread();
806
    markup = Fixture.getAllMarkup();
807
    expected = "w.setCellToolTipText( \"[1,2]\" );";
808
    assertTrue( markup.indexOf( expected ) != -1 );
809
  }
810
775
  protected void setUp() throws Exception {
811
  protected void setUp() throws Exception {
776
    RWTFixture.setUp();
812
    RWTFixture.setUp();
777
  }
813
  }
(-)js/org/eclipse/swt/widgets/Table.js (-14 / +61 lines)
Lines 135-140 Link Here
135
    var widgetManager = org.eclipse.swt.WidgetManager.getInstance();
135
    var widgetManager = org.eclipse.swt.WidgetManager.getInstance();
136
    widgetManager.add( this._clientArea, id + "_clientArea", false );
136
    widgetManager.add( this._clientArea, id + "_clientArea", false );
137
    this.add( this._clientArea );
137
    this.add( this._clientArea );
138
    // Cell tooltip
139
    this._cellToolTip = null;
140
    if( qx.lang.String.contains( style, "enableCellToolTip" ) ) {
141
      this._cellToolTip = new org.eclipse.swt.widgets.TableCellToolTip();
142
      this._cellToolTip.setTableId( id );
143
      this._clientArea.addEventListener( "mousemove", this._onClientAreaMouseMove, this );
144
      this._clientArea.setToolTip( this._cellToolTip );
145
    }
138
  },
146
  },
139
147
140
  destruct : function() {
148
  destruct : function() {
Lines 183-192 Link Here
183
    if( this._clientArea ) {
191
    if( this._clientArea ) {
184
      this._clientArea.removeEventListener( "mousewheel", this._onClientAreaMouseWheel, this );
192
      this._clientArea.removeEventListener( "mousewheel", this._onClientAreaMouseWheel, this );
185
      this._clientArea.removeEventListener( "appear", this._onClientAppear, this );
193
      this._clientArea.removeEventListener( "appear", this._onClientAppear, this );
194
      if( this._cellToolTip ) {
195
        this._clientArea.removeEventListener( "mousemove", this._onClientAreaMouseMove, this );
196
      }
186
      org.eclipse.swt.WidgetManager.getInstance().remove( this._clientArea );
197
      org.eclipse.swt.WidgetManager.getInstance().remove( this._clientArea );
187
      this._clientArea.dispose();
198
      this._clientArea.dispose();
188
      this._clientArea = null;
199
      this._clientArea = null;
189
    }
200
    }
201
    if( this._cellToolTip ) {
202
      this._cellToolTip.dispose();
203
      this._cellToolTip = null;
204
    }
190
    if( this._columnArea ) {
205
    if( this._columnArea ) {
191
      this._columnArea.dispose();
206
      this._columnArea.dispose();
192
      this._columnArea = null;
207
      this._columnArea = null;
Lines 528-534 Link Here
528
    _onRowClick : function( evt ) {
543
    _onRowClick : function( evt ) {
529
      this._rowClicked( evt, evt.getTarget() );
544
      this._rowClicked( evt, evt.getTarget() );
530
    },
545
    },
531
    
546
532
    _rowClicked : function( evt, row ) {
547
    _rowClicked : function( evt, row ) {
533
      var itemIndex = this._topIndex + this._rows.indexOf( row );
548
      var itemIndex = this._topIndex + this._rows.indexOf( row );
534
      if(    itemIndex >= 0
549
      if(    itemIndex >= 0
Lines 704-710 Link Here
704
            // regardless which modifier-key(s) are held down
719
            // regardless which modifier-key(s) are held down
705
            var itemDefaultSelected = -1;
720
            var itemDefaultSelected = -1;
706
            var topSelectedItem = -1;
721
            var topSelectedItem = -1;
707
            for( var i = 0; i < this._selected.length; i++ ) {              
722
            for( var i = 0; i < this._selected.length; i++ ) {
708
              if( this._focusIndex === this._selected[ i ] ) {
723
              if( this._focusIndex === this._selected[ i ] ) {
709
                itemDefaultSelected = this._selected[ i ];
724
                itemDefaultSelected = this._selected[ i ];
710
              }
725
              }
Lines 716-722 Link Here
716
            }
731
            }
717
            if( itemDefaultSelected === -1 ) {
732
            if( itemDefaultSelected === -1 ) {
718
              itemDefaultSelected = topSelectedItem;
733
              itemDefaultSelected = topSelectedItem;
719
            }            
734
            }
720
            this.createDispatchDataEvent( "itemdefaultselected",
735
            this.createDispatchDataEvent( "itemdefaultselected",
721
                                          itemDefaultSelected );
736
                                          itemDefaultSelected );
722
            break;
737
            break;
Lines 898-904 Link Here
898
        this._deselectItem( this._selected[ 0 ], true );
913
        this._deselectItem( this._selected[ 0 ], true );
899
      }
914
      }
900
    },
915
    },
901
    
916
902
    _adjustSelectedIndices : function( itemIndex ) {
917
    _adjustSelectedIndices : function( itemIndex ) {
903
      if( this._isItemSelected( itemIndex ) ) {
918
      if( this._isItemSelected( itemIndex ) ) {
904
        for( var i = 0; i < this._selected.length; i++ ) {
919
        for( var i = 0; i < this._selected.length; i++ ) {
Lines 1281-1287 Link Here
1281
        }
1296
        }
1282
      }
1297
      }
1283
    },
1298
    },
1284
    
1299
1285
    _resolveItem : function( itemIndex ) {
1300
    _resolveItem : function( itemIndex ) {
1286
      if( !org_eclipse_rap_rwt_EventUtil_suspend ) {
1301
      if( !org_eclipse_rap_rwt_EventUtil_suspend ) {
1287
        if( this._unresolvedItems === null ) {
1302
        if( this._unresolvedItems === null ) {
Lines 1366-1379 Link Here
1366
        line.setStyleProperty( "visibility", "hidden" );
1381
        line.setStyleProperty( "visibility", "hidden" );
1367
      }
1382
      }
1368
    },
1383
    },
1369
    
1384
1370
    _onGridLinesMouseDown : function( evt ) {
1385
    _onGridLinesMouseDown : function( evt ) {
1371
      var row = this._getRowAtPoint( evt.getPageX(), evt.getPageY() );      
1386
      var row = this._getRowAtPoint( evt.getPageX(), evt.getPageY() );
1372
      if( row != null ) {
1387
      if( row != null ) {
1373
        this._rowClicked( evt, row );
1388
        this._rowClicked( evt, row );
1374
      }
1389
      }
1375
    },
1390
    },
1376
    
1391
1377
    _getRowAtPoint : function( pageX, pageY ) {
1392
    _getRowAtPoint : function( pageX, pageY ) {
1378
      var result = null;
1393
      var result = null;
1379
      for( var i = 0; result === null && i < this._rows.length; i++ ) {
1394
      for( var i = 0; result === null && i < this._rows.length; i++ ) {
Lines 1381-1389 Link Here
1381
        var element = row.getElement();
1396
        var element = row.getElement();
1382
        var pageLeft = qx.html.Location.getPageBoxLeft( element );
1397
        var pageLeft = qx.html.Location.getPageBoxLeft( element );
1383
        var pageTop = qx.html.Location.getPageBoxTop( element );
1398
        var pageTop = qx.html.Location.getPageBoxTop( element );
1384
        if(    pageX >= pageLeft 
1399
        if(    pageX >= pageLeft
1385
            && pageX < pageLeft + row.getWidth()          
1400
            && pageX < pageLeft + row.getWidth()
1386
            && pageY >= pageTop 
1401
            && pageY >= pageTop
1387
            && pageY < pageTop + row.getHeight() )
1402
            && pageY < pageTop + row.getHeight() )
1388
        {
1403
        {
1389
          result = row;
1404
          result = row;
Lines 1391-1397 Link Here
1391
      }
1406
      }
1392
      return result;
1407
      return result;
1393
    },
1408
    },
1394
    
1409
1395
    //////////////////////////////////////////////////////////
1410
    //////////////////////////////////////////////////////////
1396
    // Focus tracking - may change appearance of selected row
1411
    // Focus tracking - may change appearance of selected row
1397
1412
Lines 1402-1408 Link Here
1402
    _onFocusOut : function( evt ) {
1417
    _onFocusOut : function( evt ) {
1403
      this._updateFocusState()
1418
      this._updateFocusState()
1404
    },
1419
    },
1405
    
1420
1406
    ////////////////////////////////////////////////////////////
1421
    ////////////////////////////////////////////////////////////
1407
    // Event handling methods - added and removed by server-side
1422
    // Event handling methods - added and removed by server-side
1408
1423
Lines 1452-1458 Link Here
1452
          this._leftOffsetChanged = false;
1467
          this._leftOffsetChanged = false;
1453
        }
1468
        }
1454
      }
1469
      }
1470
    },
1471
1472
    ////////////////////////
1473
    // Cell tooltip handling
1474
1475
    _onClientAreaMouseMove : function( evt ) {
1476
      if( this._cellToolTip != null ) {
1477
        var pageX = evt.getPageX();
1478
        var pageY = evt.getPageY();
1479
        var row = this._getRowAtPoint( pageX, pageY );
1480
        var rowIndex = this._rows.indexOf( row );
1481
        var itemIndex = this._getItemIndexFromRowIndex( rowIndex );
1482
        var columnIndex = -1;
1483
        var columns = this.getColumns();
1484
        for( var i = 0; columnIndex == -1 && i < columns.length; i++ ) {
1485
          var element = columns[ i ].getElement();
1486
          var pageLeft = qx.html.Location.getPageBoxLeft( element );
1487
          if(    pageX >= pageLeft
1488
              && pageX < pageLeft + columns[ i ].getWidth() )
1489
          {
1490
            columnIndex = i;
1491
          }
1492
        }
1493
        this._cellToolTip.setCell( itemIndex, columnIndex );
1494
      }
1495
    },
1496
1497
    /** Only called by server-side */
1498
    setCellToolTipText : function( text ) {
1499
      if( this._cellToolTip != null ) {
1500
        this._cellToolTip.setText( text );
1501
      }
1455
    }
1502
    }
1456
    
1503
1457
  }
1504
  }
1458
});
1505
});
(-)src/org/eclipse/swt/internal/widgets/tablekit/TableLCA.java (+43 lines)
Lines 21-31 Link Here
21
import org.eclipse.swt.events.SelectionEvent;
21
import org.eclipse.swt.events.SelectionEvent;
22
import org.eclipse.swt.graphics.Rectangle;
22
import org.eclipse.swt.graphics.Rectangle;
23
import org.eclipse.swt.internal.widgets.ITableAdapter;
23
import org.eclipse.swt.internal.widgets.ITableAdapter;
24
import org.eclipse.swt.internal.widgets.ICellToolTipProvider;
24
import org.eclipse.swt.widgets.*;
25
import org.eclipse.swt.widgets.*;
25
26
26
27
27
public final class TableLCA extends AbstractWidgetLCA {
28
public final class TableLCA extends AbstractWidgetLCA {
28
29
30
  // Request cell tooltip text event
31
  static final String EVENT_CELL_TOOLTIP_TEXT_REQUESTED
32
    = "org.eclipse.swt.events.cellToolTipTextRequested";
33
  // Parameter names that specify further event details
34
  static final String EVENT_CELL_TOOLTIP_TEXT_REQUESTED_CELL
35
    = "org.eclipse.swt.events.cellToolTipTextRequested.cell";
36
29
  // Property names to preserve values
37
  // Property names to preserve values
30
  static final String PROP_HEADER_HEIGHT = "headerHeight";
38
  static final String PROP_HEADER_HEIGHT = "headerHeight";
31
  static final String PROP_HEADER_VISIBLE = "headerVisible";
39
  static final String PROP_HEADER_VISIBLE = "headerVisible";
Lines 93-98 Link Here
93
    readSetData( table );
101
    readSetData( table );
94
    readWidgetSelected( table );
102
    readWidgetSelected( table );
95
    readWidgetDefaultSelected( table );
103
    readWidgetDefaultSelected( table );
104
    readCellToolTipTextRequested( table );
96
    ControlLCAUtil.processMouseEvents( table );
105
    ControlLCAUtil.processMouseEvents( table );
97
    ControlLCAUtil.processKeyEvents( table );
106
    ControlLCAUtil.processKeyEvents( table );
98
  }
107
  }
Lines 107-112 Link Here
107
    if( ( table.getStyle() & SWT.MULTI ) != 0 ) {
116
    if( ( table.getStyle() & SWT.MULTI ) != 0 ) {
108
      style += "|multi";
117
      style += "|multi";
109
    }
118
    }
119
    if( Boolean.TRUE.equals( table.getData( Table.ENABLE_CELL_TOOLTIP ) ) ) {
120
      style += "|enableCellToolTip";
121
    }
110
    Object[] args = new Object[] { WidgetUtil.getId( table ), style };
122
    Object[] args = new Object[] { WidgetUtil.getId( table ), style };
111
    writer.newWidget( "org.eclipse.swt.widgets.Table", args );
123
    writer.newWidget( "org.eclipse.swt.widgets.Table", args );
112
    ControlLCAUtil.writeStyleFlags( table );
124
    ControlLCAUtil.writeStyleFlags( table );
Lines 128-133 Link Here
128
    writeDefaultColumnWidth( table );
140
    writeDefaultColumnWidth( table );
129
    writeHideSelection( table );
141
    writeHideSelection( table );
130
    writeScrollBarsVisible( table );
142
    writeScrollBarsVisible( table );
143
    writeCellToolTipText( table );
131
    WidgetLCAUtil.writeCustomVariant( table );
144
    WidgetLCAUtil.writeCustomVariant( table );
132
  }
145
  }
133
146
Lines 273-278 Link Here
273
    return result;
286
    return result;
274
  }
287
  }
275
288
289
  private static void readCellToolTipTextRequested( final Table table ) {
290
    Object adapter = table.getAdapter( ITableAdapter.class );
291
    ITableAdapter tableAdapter = ( ITableAdapter )adapter;
292
    tableAdapter.setToolTipText( null );
293
    String event = EVENT_CELL_TOOLTIP_TEXT_REQUESTED;
294
    if( WidgetLCAUtil.wasEventSent( table, event ) ) {
295
      HttpServletRequest request = ContextProvider.getRequest();
296
      String cell
297
        = request.getParameter( EVENT_CELL_TOOLTIP_TEXT_REQUESTED_CELL );
298
      String[] indices = cell.split( "," );
299
      int itemIndex = Integer.parseInt( indices[ 0 ] );
300
      int columnIndex = Integer.parseInt( indices[ 1 ] );
301
      ICellToolTipProvider provider = tableAdapter.getCellToolTipProvider();
302
      if( provider != null ) {
303
        provider.getToolTipText( itemIndex, columnIndex );
304
      }
305
    }
306
  }
307
276
  ///////////////////////////////////////////
308
  ///////////////////////////////////////////
277
  // Helping methods to write JavaScript code
309
  // Helping methods to write JavaScript code
278
310
Lines 384-389 Link Here
384
    }
416
    }
385
  }
417
  }
386
418
419
  private void writeCellToolTipText( final Table table ) throws IOException {
420
    Object adapter = table.getAdapter( ITableAdapter.class );
421
    ITableAdapter tableAdapter = ( ITableAdapter )adapter;
422
    String text = tableAdapter.getToolTipText();
423
    if( text != null ) {
424
      JSWriter writer = JSWriter.getWriterFor( table );
425
      text = text.replaceAll( "\n", "<br>" );
426
      writer.call( "setCellToolTipText", new String[]{ text } );
427
    }
428
  }
429
387
  //////////////////
430
  //////////////////
388
  // Helping methods
431
  // Helping methods
389
432
(-)src/org/eclipse/swt/internal/widgets/displaykit/QooxdooResourcesUtil.java (+3 lines)
Lines 106-111 Link Here
106
    = "org/eclipse/swt/widgets/TableItem.js";
106
    = "org/eclipse/swt/widgets/TableItem.js";
107
  private static final String TABLE_ROW_JS
107
  private static final String TABLE_ROW_JS
108
    = "org/eclipse/swt/widgets/TableRow.js";
108
    = "org/eclipse/swt/widgets/TableRow.js";
109
  private static final String TABLE_CELL_TOOLTIP_JS
110
    = "org/eclipse/swt/widgets/TableCellToolTip.js";
109
  private static final String EXTERNALBROWSER_JS
111
  private static final String EXTERNALBROWSER_JS
110
    = "org/eclipse/rwt/widgets/ExternalBrowser.js";
112
    = "org/eclipse/rwt/widgets/ExternalBrowser.js";
111
  private static final String PROGRESS_BAR_JS
113
  private static final String PROGRESS_BAR_JS
Lines 205-210 Link Here
205
      register( TABLE_COLUMN_JS, compress );
207
      register( TABLE_COLUMN_JS, compress );
206
      register( TABLE_ITEM_JS, compress );
208
      register( TABLE_ITEM_JS, compress );
207
      register( TABLE_ROW_JS, compress );
209
      register( TABLE_ROW_JS, compress );
210
      register( TABLE_CELL_TOOLTIP_JS, compress );
208
      register( LINK_UTIL_JS, compress );
211
      register( LINK_UTIL_JS, compress );
209
      register( EXTERNALBROWSER_JS, compress );
212
      register( EXTERNALBROWSER_JS, compress );
210
      register( BROWSER_JS, compress );
213
      register( BROWSER_JS, compress );
(-)js/org/eclipse/swt/widgets/TableCellToolTip.js (+70 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2009 EclipseSource and others. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html
6
 *
7
 * Contributors:
8
 *   EclipseSource - initial API and implementation
9
 ******************************************************************************/
10
11
qx.Class.define( "org.eclipse.swt.widgets.TableCellToolTip", {
12
  extend : qx.ui.popup.ToolTip,
13
14
  construct : function() {
15
    this.base( arguments );
16
    this._tableId = -1;
17
    this._itemIndex = -1;
18
    this._columnIndex = -1;
19
  },
20
21
  members : {
22
23
    _onshowtimer : function( evt ) {
24
      this._stopShowTimer();
25
      this._requestCellToolTipText();
26
    },
27
28
    setText : function( text ) {
29
      if( text && text != "" ) {
30
        this.getAtom().setLabel( text );
31
        this.setLeft(   qx.event.type.MouseEvent.getPageX()
32
                      + this.getMousePointerOffsetX());
33
        this.setTop(   qx.event.type.MouseEvent.getPageY()
34
                     + this.getMousePointerOffsetY());
35
        this.show();
36
      }
37
    },
38
39
    setTableId : function( tableId ) {
40
      this._tableId = tableId;
41
    },
42
43
    setCell : function( itemIndex, columnIndex ) {
44
      if( this._itemIndex != itemIndex || this._columnIndex != columnIndex ) {
45
        this._itemIndex = itemIndex;
46
        this._columnIndex = columnIndex;
47
        this.hide();
48
        if(   !this._showTimer.getEnabled()
49
            && itemIndex != -1
50
            && columnIndex != -1 )
51
        {
52
          this._showTimer.start();
53
        }
54
      }
55
    },
56
57
    _requestCellToolTipText : function() {
58
      if( this._itemIndex != -1 && this._columnIndex != -1 ) {
59
        var req = org.eclipse.swt.Request.getInstance();
60
        req.addEvent( "org.eclipse.swt.events.cellToolTipTextRequested",
61
                      this._tableId );
62
        var cell = this._itemIndex + "," + this._columnIndex;
63
        req.addParameter( "org.eclipse.swt.events.cellToolTipTextRequested.cell",
64
                          cell );
65
        req.send();
66
      }
67
    }
68
69
  }
70
});
(-)META-INF/MANIFEST.MF (-1 / +1 lines)
Lines 80-86 Link Here
80
 org.eclipse.swt.internal.events;x-friends:="org.eclipse.rap.ui.workbench,org.eclipse.rap.rwt.test",
80
 org.eclipse.swt.internal.events;x-friends:="org.eclipse.rap.ui.workbench,org.eclipse.rap.rwt.test",
81
 org.eclipse.swt.internal.graphics;x-friends:="org.eclipse.rap.ui.workbench,org.eclipse.rap.rwt.test,org.eclipse.rap.jface",
81
 org.eclipse.swt.internal.graphics;x-friends:="org.eclipse.rap.ui.workbench,org.eclipse.rap.rwt.test,org.eclipse.rap.jface",
82
 org.eclipse.swt.internal.image;x-internal:=true,
82
 org.eclipse.swt.internal.image;x-internal:=true,
83
 org.eclipse.swt.internal.widgets;x-friends:="org.eclipse.rap.rwt.test",
83
 org.eclipse.swt.internal.widgets;x-friends:="org.eclipse.rap.rwt.test,org.eclipse.rap.jface",
84
 org.eclipse.swt.internal.widgets.buttonkit;x-friends:="org.eclipse.rap.rwt.test",
84
 org.eclipse.swt.internal.widgets.buttonkit;x-friends:="org.eclipse.rap.rwt.test",
85
 org.eclipse.swt.internal.widgets.combokit;x-friends:="org.eclipse.rap.rwt.test",
85
 org.eclipse.swt.internal.widgets.combokit;x-friends:="org.eclipse.rap.rwt.test",
86
 org.eclipse.swt.internal.widgets.compositekit;x-friends:="org.eclipse.rap.rwt.test",
86
 org.eclipse.swt.internal.widgets.compositekit;x-friends:="org.eclipse.rap.rwt.test",
(-)src/org/eclipse/swt/widgets/Table.java (+28 lines)
Lines 108-113 Link Here
108
108
109
  private final class TableAdapter implements ITableAdapter {
109
  private final class TableAdapter implements ITableAdapter {
110
110
111
    private String toolTipText;
112
    private ICellToolTipProvider provider;
113
111
    public int getCheckWidth() {
114
    public int getCheckWidth() {
112
      return Table.this.getCheckWidth();
115
      return Table.this.getCheckWidth();
113
    }
116
    }
Lines 198-203 Link Here
198
    public TableItem getMeasureItem() {
201
    public TableItem getMeasureItem() {
199
      return Table.this.getMeasureItem();
202
      return Table.this.getMeasureItem();
200
    }
203
    }
204
205
    public ICellToolTipProvider getCellToolTipProvider() {
206
      return provider;
207
    }
208
209
    public void setCellToolTipProvider( final ICellToolTipProvider provider ) {
210
      this.provider = provider;
211
    }
212
213
    public String getToolTipText() {
214
      return toolTipText;
215
    }
216
217
    public void setToolTipText( final String toolTipText ) {
218
      this.toolTipText = toolTipText;
219
    }
201
  }
220
  }
202
221
203
  private final class ResizeListener extends ControlAdapter {
222
  private final class ResizeListener extends ControlAdapter {
Lines 218-223 Link Here
218
  public static final String HIDE_SELECTION
237
  public static final String HIDE_SELECTION
219
    = Table.class.getName() + "#hideSelection";
238
    = Table.class.getName() + "#hideSelection";
220
239
240
  /**
241
   * <strong>IMPORTANT:</strong> This field is <em>not</em> part of the SWT
242
   * public API. It is marked public only so that it can be shared
243
   * within the packages provided by SWT. It should never be accessed from
244
   * application code.
245
   */
246
  public static final String ENABLE_CELL_TOOLTIP
247
    = Table.class.getName() + "#enableCellToolTip";
248
221
  private static final int GRID_WIDTH = 1;
249
  private static final int GRID_WIDTH = 1;
222
  private static final int CHECK_HEIGHT = 13;
250
  private static final int CHECK_HEIGHT = 13;
223
251
(-)src/org/eclipse/swt/internal/widgets/ITableAdapter.java (-2 / +8 lines)
Lines 20-31 Link Here
20
20
21
  int getFocusIndex();
21
  int getFocusIndex();
22
  void setFocusIndex( int focusIndex );
22
  void setFocusIndex( int focusIndex );
23
  
23
24
  void setLeftOffset( int parseInt );
24
  void setLeftOffset( int parseInt );
25
25
26
  void checkData();
26
  void checkData();
27
  void checkData( int index );
27
  void checkData( int index );
28
  
28
29
  int getColumnLeft( TableColumn column );
29
  int getColumnLeft( TableColumn column );
30
  int getDefaultColumnWidth();
30
  int getDefaultColumnWidth();
31
31
Lines 38-41 Link Here
38
  boolean hasVScrollBar();
38
  boolean hasVScrollBar();
39
39
40
  TableItem getMeasureItem();
40
  TableItem getMeasureItem();
41
42
  ICellToolTipProvider getCellToolTipProvider();
43
  void setCellToolTipProvider( ICellToolTipProvider provider );
44
45
  String getToolTipText();
46
  void setToolTipText( String toolTipText );
41
}
47
}
(-)src/org/eclipse/swt/internal/widgets/ICellToolTipProvider.java (+17 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2009 EclipseSource and others. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html
6
 *
7
 * Contributors:
8
 *   EclipseSource - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.swt.internal.widgets;
11
12
13
public interface ICellToolTipProvider {
14
15
  void getToolTipText( int itemIndex, int columnIndex );
16
17
}
(-)src/org/eclipse/jface/viewers/TableViewerColumn.java (-5 / +12 lines)
Lines 18-24 Link Here
18
/**
18
/**
19
 * ViewerColumn implementation for TableViewer to enable column-specific label
19
 * ViewerColumn implementation for TableViewer to enable column-specific label
20
 * providers and editing support.
20
 * providers and editing support.
21
 * 
21
 *
22
 * @since 1.0
22
 * @since 1.0
23
 */
23
 */
24
public final class TableViewerColumn extends ViewerColumn {
24
public final class TableViewerColumn extends ViewerColumn {
Lines 28-34 Link Here
28
	 * Creates a new viewer column for the given {@link TableViewer} on a new
28
	 * Creates a new viewer column for the given {@link TableViewer} on a new
29
	 * {@link TableColumn} with the given style bits. The column is added at the
29
	 * {@link TableColumn} with the given style bits. The column is added at the
30
	 * end of the list of columns.
30
	 * end of the list of columns.
31
	 * 
31
	 *
32
	 * @param viewer
32
	 * @param viewer
33
	 *            the table viewer to which this column belongs
33
	 *            the table viewer to which this column belongs
34
	 * @param style
34
	 * @param style
Lines 44-50 Link Here
44
	 * Creates a new viewer column for the given {@link TableViewer} on a new
44
	 * Creates a new viewer column for the given {@link TableViewer} on a new
45
	 * {@link TableColumn} with the given style bits. The column is inserted at
45
	 * {@link TableColumn} with the given style bits. The column is inserted at
46
	 * the given index into the list of columns.
46
	 * the given index into the list of columns.
47
	 * 
47
	 *
48
	 * @param viewer
48
	 * @param viewer
49
	 *            the table viewer to which this column belongs
49
	 *            the table viewer to which this column belongs
50
	 * @param style
50
	 * @param style
Lines 61-67 Link Here
61
	/**
61
	/**
62
	 * Creates a new viewer column for the given {@link TableViewer} on the given
62
	 * Creates a new viewer column for the given {@link TableViewer} on the given
63
	 * {@link TableColumn}.
63
	 * {@link TableColumn}.
64
	 * 
64
	 *
65
	 * @param viewer
65
	 * @param viewer
66
	 *            the table viewer to which this column belongs
66
	 *            the table viewer to which this column belongs
67
	 * @param column
67
	 * @param column
Lines 71-77 Link Here
71
		super(viewer, column);
71
		super(viewer, column);
72
		this.column = column;
72
		this.column = column;
73
	}
73
	}
74
	
74
75
	private static TableColumn createColumn(Table table, int style, int index) {
75
	private static TableColumn createColumn(Table table, int style, int index) {
76
		if (index >= 0) {
76
		if (index >= 0) {
77
			return new TableColumn(table, style, index);
77
			return new TableColumn(table, style, index);
Lines 86-89 Link Here
86
	public TableColumn getColumn() {
86
	public TableColumn getColumn() {
87
		return column;
87
		return column;
88
	}
88
	}
89
90
// RAP: [if] Table cell tooltips support
91
	public void setLabelProvider( final CellLabelProvider labelProvider ) {
92
      super.setLabelProvider( labelProvider );
93
      CellToolTipProvider.attach( ( TableViewer )getViewer(), labelProvider );
94
    }
95
// RAPEND: [if]
89
}
96
}
(-)src/org/eclipse/jface/viewers/TableViewer.java (-2 / +9 lines)
Lines 186-192 Link Here
186
186
187
		if( selection.length == 1 ) {
187
		if( selection.length == 1 ) {
188
			int columnCount = table.getColumnCount();
188
			int columnCount = table.getColumnCount();
189
			
189
190
			for( int i = 0; i < columnCount; i++ ) {
190
			for( int i = 0; i < columnCount; i++ ) {
191
				if( selection[0].getBounds(i).contains(p) ) {
191
				if( selection[0].getBounds(i).contains(p) ) {
192
					return selection[0];
192
					return selection[0];
Lines 328-334 Link Here
328
		if (checkBusy())
328
		if (checkBusy())
329
			return;
329
			return;
330
330
331
		// RAP [bm]: 
331
		// RAP [bm]:
332
//		if( isCellEditorActive() ) {
332
//		if( isCellEditorActive() ) {
333
//			cancelEditing();
333
//			cancelEditing();
334
//		}
334
//		}
Lines 367-370 Link Here
367
	public void refresh(boolean updateLabels, boolean reveal) {
367
	public void refresh(boolean updateLabels, boolean reveal) {
368
		refresh(getRoot(), updateLabels, reveal);
368
		refresh(getRoot(), updateLabels, reveal);
369
	}
369
	}
370
371
// RAP: [if] Table cell tooltips support
372
	public void setLabelProvider( final IBaseLabelProvider labelProvider ) {
373
	  super.setLabelProvider( labelProvider );
374
	  CellToolTipProvider.attach( this, labelProvider );
375
	}
376
// RAPEND: [if]
370
}
377
}
(-)src/org/eclipse/jface/viewers/CellToolTipProvider.java (+49 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2009 EclipseSource and others. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html
6
 *
7
 * Contributors:
8
 *   EclipseSource - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jface.viewers;
11
12
import org.eclipse.swt.internal.widgets.ITableAdapter;
13
import org.eclipse.swt.internal.widgets.ICellToolTipProvider;
14
import org.eclipse.swt.widgets.Table;
15
16
final class CellToolTipProvider implements ICellToolTipProvider {
17
  private TableViewer viewer;
18
19
  CellToolTipProvider( final TableViewer viewer ) {
20
    this.viewer = viewer;
21
  }
22
23
  static void attach( final TableViewer viewer,
24
                      final IBaseLabelProvider labelProvider )
25
  {
26
    TableViewer tableViewer = viewer;
27
    Table table = tableViewer.getTable();
28
    Object adapter = table.getAdapter( ITableAdapter.class );
29
    ITableAdapter tableAdapter = ( ITableAdapter )adapter;
30
    if( labelProvider instanceof CellLabelProvider ) {
31
      CellToolTipProvider provider = new CellToolTipProvider( tableViewer );
32
      tableAdapter.setCellToolTipProvider( provider );
33
    } else {
34
      tableAdapter.setCellToolTipProvider( null );
35
    }
36
  }
37
38
  public void getToolTipText( final int itemIndex, final int columnIndex ) {
39
    Table table = viewer.getTable();
40
    Object element =  table.getItem( itemIndex ).getData();
41
    ViewerColumn column = viewer.getViewerColumn( columnIndex );
42
    CellLabelProvider labelProvider = column.getLabelProvider();
43
    String text = labelProvider.getToolTipText( element );
44
    Object adapter = table.getAdapter( ITableAdapter.class );
45
    ITableAdapter tableAdapter = ( ITableAdapter )adapter;
46
    tableAdapter.setToolTipText( text );
47
  }
48
49
}

Return to bug 280404