Skip to content

Content of file TableViewerComposite.java

/*******************************************************************************
 * Copyright (c) 2011-2015 EclipseSource Muenchen GmbH and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 * Alexandra Buzila - initial API and implementation
 * Johannes Faltermeier - initial API and implementation
 ******************************************************************************/
package org.eclipse.emfforms.spi.swt.table;

import java.util.List;

import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.databinding.EMFDataBindingContext;
import org.eclipse.jface.layout.AbstractColumnLayout;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ViewerColumn;
import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Widget;

/**
 * A {@link Composite} containing a {@link TableViewer}.
 *
 * @author Alexandra Buzila
 * @author Johannes Faltermeier
 *
 */
public class TableViewerComposite extends AbstractTableViewerComposite<TableViewer> {

	private TableViewer tableViewer;
	private TableViewerComparator comparator;

	/**
	 * Default constructor.
	 *
	 * @param parent the parent {@link Composite}
	 * @param style the style bits
	 * @param inputObject the input object
	 * @param customization the {@link TableViewerSWTCustomization}
	 * @param title the title
	 * @param tooltip the tooltip
	 */
	TableViewerComposite(Composite parent, int style, Object inputObject,
		TableViewerSWTCustomization customization,
		IObservableValue title, IObservableValue tooltip) {
		super(parent, style, inputObject, customization, title, tooltip);
} /** * @return the {@link TableViewer} */ @Override public TableViewer getTableViewer() { return tableViewer; } /** * {@inheritDoc} * * @see org.eclipse.emfforms.spi.swt.table.AbstractTableViewerComposite#createTableViewer(org.eclipse.emfforms.spi.swt.table.TableViewerSWTCustomization, * org.eclipse.swt.widgets.Composite) */ @Override protected TableViewer createTableViewer(TableViewerSWTCustomization<TableViewer> customization, Composite viewerComposite) { tableViewer = customization.createTableViewer(viewerComposite); return tableViewer; } @Override protected AbstractColumnLayout createLayout(Composite viewerComposite) { final TableColumnLayout layout = new TableColumnLayout(); viewerComposite.setLayout(layout); return layout; } @Override public Widget[] getColumns() { return tableViewer.getTable().getColumns(); } @Override public void addColumnListener(ControlListener columnlistener) { for (int i = 0; i < tableViewer.getTable().getColumns().length; i++) { final TableColumn tableColumn = tableViewer.getTable().getColumns()[i]; tableColumn.addControlListener(columnlistener); } } @Override public TableControl getTableControl() { return new TableControl() { @Override public boolean isDisposed() { return getTableViewer().getTable().isDisposed(); } @Override public int getItemHeight() { return getTableViewer().getTable().getItemHeight(); } @Override public boolean getHeaderVisible() { return getTableViewer().getTable().getHeaderVisible(); } @Override public int getHeaderHeight() { return getTableViewer().getTable().getHeaderHeight(); } @Override public int getItemCount() { return getTableViewer().getTable().getItemCount(); } }; } @Override protected ViewerColumn createColumn(ColumnConfiguration config, EMFDataBindingContext emfDataBindingContext, TableViewer tableViewer) { return new DefaultTableViewerColumnBuilder(config) .withDatabinding(emfDataBindingContext) .build(tableViewer); } @Override public void setComparator(final TableViewerComparator comparator, List<Integer> sortableColumns) { this.comparator = comparator; for (int i = 0; i < getTableViewer().getTable().getColumns().length; i++) { if (!sortableColumns.contains(i)) { continue; } final int j = i; final TableColumn tableColumn = getTableViewer().getTable().getColumns()[i]; final SelectionAdapter selectionAdapter = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { setCompareColumn(j); } }; tableColumn.addSelectionListener(selectionAdapter); } } @Override public void dispose() { tableViewer.getControl().dispose(); tableViewer = null; super.dispose(); } @Override public void setCompareColumn(int column) { final TableColumn tableColumn = getTableViewer().getTable().getColumns()[column]; comparator.setColumn(column); tableViewer.getTable().setSortDirection(comparator.getDirection()); tableViewer.getTable().setSortColumn(tableColumn); tableViewer.refresh(); } }