org.eclipse.jface.viewers.ViewerColumn Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.eclipse.jface Show documentation
Show all versions of org.eclipse.jface Show documentation
This is org.eclipse.jface jar used by Scout SDK
The newest version!
/*******************************************************************************
* Copyright (c) 2006, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Tom Schindl - initial API and implementation
* fix for bug 163317, 201905
* Ralf Ebert - bug 294738
* Lars Vogel - Bug 475689
*******************************************************************************/
package org.eclipse.jface.viewers;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.util.Policy;
import org.eclipse.swt.widgets.Widget;
/**
* Instances of this class represent a column of a {@link ColumnViewer}. Label
* providers and editing support can be configured for each column separately.
* Concrete subclasses of {@link ColumnViewer} should implement a matching
* concrete subclass of {@link ViewerColumn}.
*
* @since 3.3
*
*/
public abstract class ViewerColumn {
private CellLabelProvider labelProvider;
static String COLUMN_VIEWER_KEY = Policy.JFACE + ".columnViewer";//$NON-NLS-1$
private EditingSupport editingSupport;
private ILabelProviderListener listener;
private boolean listenerRegistered = false;
private ColumnViewer viewer;
/**
* Create a new instance of the receiver at columnIndex.
*
* @param viewer
* the viewer the column is part of
* @param columnOwner
* the widget owning the viewer in case the widget has no columns
* this could be the widget itself
*/
protected ViewerColumn(final ColumnViewer viewer, Widget columnOwner) {
this.viewer = viewer;
columnOwner.setData(ViewerColumn.COLUMN_VIEWER_KEY, this);
this.listener = viewer::handleLabelProviderChanged;
columnOwner.addDisposeListener(e -> handleDispose(viewer));
}
/**
* Return the label provider for the receiver.
*
* @return ViewerLabelProvider
*/
/* package */CellLabelProvider getLabelProvider() {
return labelProvider;
}
/**
* Set the label provider for the column. Subclasses may extend but must
* call the super implementation.
*
* @param labelProvider
* the new {@link CellLabelProvider}
*/
public void setLabelProvider(CellLabelProvider labelProvider) {
setLabelProvider(labelProvider, true);
}
/**
* @param labelProvider
* @param registerListener
*/
/* package */void setLabelProvider(CellLabelProvider labelProvider,
boolean registerListener) {
if (listenerRegistered && this.labelProvider != null) {
this.labelProvider.removeListener(listener);
listenerRegistered = false;
if (registerListener) {
this.labelProvider.dispose(viewer, this);
}
}
this.labelProvider = labelProvider;
if (registerListener) {
this.labelProvider.initialize(viewer, this);
this.labelProvider.addListener(listener);
listenerRegistered = true;
}
}
/**
* Return the editing support for the receiver.
*
* @return {@link EditingSupport}
*/
/* package */EditingSupport getEditingSupport() {
return editingSupport;
}
/**
* Set the editing support. Subclasses may extend but must call the super
* implementation.
*
* Users setting up an editable {@link TreeViewer} or {@link TableViewer} with more than 1 column have
* to pass the SWT.FULL_SELECTION style bit when creating the viewer
*
* @param editingSupport
* The {@link EditingSupport} to set.
*/
public void setEditingSupport(EditingSupport editingSupport) {
this.editingSupport = editingSupport;
}
/**
* Refresh the cell for the given columnIndex. NOTE:the
* {@link ViewerCell} provided to this method is no longer valid after this
* method returns. Do not cache the cell for future use.
*
* @param cell
* {@link ViewerCell}
*/
/* package */void refresh(ViewerCell cell) {
CellLabelProvider labelProvider = getLabelProvider();
if (labelProvider == null) {
Assert.isTrue(false, "Column " + cell.getColumnIndex() + //$NON-NLS-1$
" has no label provider."); //$NON-NLS-1$
}
labelProvider.update(cell);
}
/**
* Disposes of the label provider (if set), unregisters the listener and
* nulls the references to the label provider and editing support. This
* method is called when the underlying widget is disposed. Subclasses may
* extend but must call the super implementation.
*/
protected void handleDispose() {
boolean disposeLabelProvider = listenerRegistered;
CellLabelProvider cellLabelProvider = labelProvider;
setLabelProvider(null, false);
if (disposeLabelProvider) {
cellLabelProvider.dispose(viewer, this);
}
editingSupport = null;
listener = null;
viewer = null;
}
private void handleDispose(ColumnViewer viewer) {
handleDispose();
viewer.clearLegacyEditingSetup();
}
/**
* Returns the viewer of this viewer column.
*
* @return Returns the viewer.
*
* @since 3.4
*/
public ColumnViewer getViewer() {
return viewer;
}
}