Java tutorial
/** * Copyright Universite Joseph Fourier (www.ujf-grenoble.fr) * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package fr.liglab.adele.cilia.workbench.monitoring.changesview; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; /** * The table viewer, used in the changes view. * This class is a singleton. Only one viewer can be created. * @author Etienne Gandrille */ public class ChangesTableViewer { /** The viewer itself. */ private static TableViewer viewer = null; /** The table sorter. */ private static ChangesTableSorterComparator tableSorter = new ChangesTableSorterComparator(); private ChangesTableViewer() { // Constructor is not available. } /** * Gets the singleton viewer. * * @param parent the parent * @return the viewer */ public static TableViewer getViewer(Composite parent) { if (viewer == null) createViewer(parent); return viewer; } /** * Creates the viewer. * * @param parent the parent */ private static void createViewer(Composite parent) { viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); viewer.setContentProvider(new ArrayContentProvider()); viewer.setComparator(tableSorter); createColumnsAndLabelProvider(viewer); final Table table = viewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); } /** * Creates the columns and label provider. * * @param viewer the viewer */ private static void createColumnsAndLabelProvider(final TableViewer viewer) { for (ChangesTableColumnHeader columnHeader : ChangesTableColumnHeader.values()) createTableViewerColumn(viewer, columnHeader); } /** * Creates the table viewer column. * * @param viewer the viewer * @param columnHeader the column header * @return the table viewer column */ private static TableViewerColumn createTableViewerColumn(TableViewer viewer, ChangesTableColumnHeader columnHeader) { final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE); viewerColumn.setLabelProvider(columnHeader.getCellLabelProvider()); final TableColumn column = viewerColumn.getColumn(); column.setText(columnHeader.getColumnName()); column.setWidth(100); column.setResizable(true); column.setMoveable(true); column.addSelectionListener(getSelectionAdapter(column, columnHeader)); return viewerColumn; } /** * Gets the selection adapter. * * @param column the column * @param columnHeader the column header * @return the selection adapter */ private static SelectionAdapter getSelectionAdapter(final TableColumn column, final ChangesTableColumnHeader columnHeader) { SelectionAdapter selectionAdapter = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { tableSorter.setColumn(columnHeader); viewer.refresh(); } }; return selectionAdapter; } }