1
/*******************************************************************************
2
* Copyright (c) 2009 STMicroelectronics.
3
* All rights reserved. This program and the accompanying materials
4
* are made available under the terms of the Eclipse Public License v1.0
5
* which accompanies this distribution, and is available at
6
* http://www.eclipse.org/legal/epl-v10.html
9
* Marzia Maugeri <marzia.maugeri@st.com> - initial API and implementation
10
*******************************************************************************/
11
package org.eclipse.linuxtools.dataviewers.abstractviewers;
13
import org.eclipse.jface.viewers.TableLayout;
14
import org.eclipse.jface.viewers.TableViewer;
15
import org.eclipse.jface.viewers.TableViewerColumn;
16
import org.eclipse.swt.SWT;
17
import org.eclipse.swt.events.MouseAdapter;
18
import org.eclipse.swt.events.MouseEvent;
19
import org.eclipse.swt.events.MouseMoveListener;
20
import org.eclipse.swt.graphics.Cursor;
21
import org.eclipse.swt.graphics.Point;
22
import org.eclipse.swt.graphics.Rectangle;
23
import org.eclipse.swt.widgets.Composite;
24
import org.eclipse.swt.widgets.Item;
25
import org.eclipse.swt.widgets.Table;
26
import org.eclipse.swt.widgets.TableColumn;
27
import org.eclipse.swt.widgets.TableItem;
30
* This wrapper extends AbstractSTViewer {@link AbstractSTViewer} It is designed to be instantiated with a TableViewer
34
public abstract class AbstractSTTableViewer extends AbstractSTViewer {
36
public AbstractSTTableViewer(Composite parent) {
37
super(parent, SWT.BORDER |SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI| SWT.FULL_SELECTION);
41
public AbstractSTTableViewer(Composite parent,boolean init) {
42
super(parent,SWT.BORDER |SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI| SWT.FULL_SELECTION,init);
45
public AbstractSTTableViewer(Composite parent, int style) {
46
super(parent,style,true);
49
public AbstractSTTableViewer(Composite parent, int style,boolean init) {
50
super(parent,style,init);
54
* It creates the wrapped TableViewer
55
* @param parent - the parent Composite
56
* @param style - the table style
57
* @return a TableViewer
61
protected TableViewer createViewer(Composite parent, int style) {
62
Table t = createTable(parent, style);
63
return new TableViewer(t);
67
* Create the main table control
72
protected Table createTable(Composite parent, int style) {
73
Table table = new Table(parent, style);
74
table.setLinesVisible(true);
75
table.setHeaderVisible(true);
82
* Create the columns in the table.
85
protected void createColumns() {
86
Table table = getViewer().getTable();
87
TableLayout layout = new TableLayout();
88
table.setLayout(layout);
89
table.setHeaderVisible(true);
90
table.setLinesVisible(true);
92
for (int i = 0; i < getAllFields().length; i++) {
93
ISTDataViewersField field = getAllFields()[i];
94
TableColumn tc = new TableColumn(table, field.getAlignment(), i);
95
tc.setText(field.getColumnHeaderText());
96
tc.setToolTipText(field.getColumnHeaderTooltip());
97
tc.setImage(field.getColumnHeaderImage());
98
tc.setWidth(field.getPreferredWidth());
99
tc.setResizable(true);
100
tc.setMoveable(true);
102
tc.addSelectionListener(createHeaderListener());
105
// defining the column label provider.
106
// this has to be done after setting the column's data.
107
TableViewerColumn viewerColumn =
108
new TableViewerColumn(getViewer(), tc);
109
viewerColumn.setLabelProvider(createColumnLabelProvider(tc));
113
table.addMouseListener(new MouseAdapter(){
115
public void mouseDoubleClick(MouseEvent e) {
116
Table table = (Table)e.widget;
117
TableItem item = table.getItem(new Point(e.x,e.y));
119
for(int i=0;i<table.getColumnCount();i++){
120
ISTDataViewersField field = getAllFields()[i];
121
if (field.isHyperLink(item.getData())){
122
Rectangle bounds = item.getBounds(i);
123
if (bounds.contains(e.x,e.y)){
124
handleHyperlink(field,item.getData());
133
table.addMouseMoveListener(new MouseMoveListener(){
136
public void mouseMove(MouseEvent e) {
137
Table table = (Table)e.widget;
138
TableItem item = table.getItem(new Point(e.x,e.y));
139
if (item == null) return;
141
for(int i=0;i<table.getColumnCount();i++){
142
ISTDataViewersField field = getAllFields()[i];
143
Cursor cursor = null ;
144
if (field.isHyperLink(item.getData())){
145
Rectangle bounds = item.getBounds(i);
146
if (bounds.contains(e.x,e.y)){
147
cursor = e.display.getSystemCursor(SWT.CURSOR_HAND);
148
table.setCursor(cursor);
152
cursor = e.display.getSystemCursor(SWT.CURSOR_ARROW);
153
table.setCursor(cursor);
163
* @see org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer#getColumns()
167
public TableColumn[] getColumns() {
168
return getViewer().getTable().getColumns();
173
* @see org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer#updateDirectionIndicator(org.eclipse.swt.widgets.Item)
176
public void updateDirectionIndicator(Item column) {
177
getViewer().getTable().setSortColumn((TableColumn)column);
178
if (getTableSorter().getTopPriorityDirection() == STDataViewersComparator.ASCENDING)
179
getViewer().getTable().setSortDirection(SWT.UP);
181
getViewer().getTable().setSortDirection(SWT.DOWN);
186
* @see org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer#getColumnOrder()
189
public int[] getColumnOrder() {
190
return getViewer().getTable().getColumnOrder();
195
* @see org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer#setColumnOrder(int[])
198
protected void setColumnOrder(int[] order) {
199
getViewer().getTable().setColumnOrder(order);
204
* @see org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer#getColumnIndex(org.eclipse.swt.widgets.Item)
207
public int getColumnIndex(Item column) {
208
return getViewer().getTable().indexOf((TableColumn)column);
213
* @see org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer#getColumnWidth(org.eclipse.swt.widgets.Item)
216
public int getColumnWidth(Item column) {
217
return ((TableColumn)column).getWidth();
222
* @see org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer#setColumnResizable(org.eclipse.swt.widgets.Item, boolean)
225
public void setColumnResizable(Item column, boolean resizable) {
226
((TableColumn)column).setResizable(resizable);
231
* @see org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer#setColumnWidth(org.eclipse.swt.widgets.Item, int)
234
public void setColumnWidth(Item column, int width) {
235
((TableColumn)column).setWidth(width);
240
* @see org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer#getViewer()
243
public TableViewer getViewer() {
244
return (TableViewer)super.getViewer();
248
public abstract void handleHyperlink(ISTDataViewersField field,Object data);