blob: c110182b5a9c78a196b29e43d2efbf71ea0bcb9b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2017 IBM Corporation and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.dltk.ui.browsing;
import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.dltk.core.IScriptFolder;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IOpenListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.events.HelpListener;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Widget;
/**
* Wrapper who transfers listeners and filters and to which clients can refer.
*
* @deprecated needs to be replaced by a manager who handles transfer of
* listeners and filters
*/
@Deprecated
class PackageViewerWrapper extends StructuredViewer {
private StructuredViewer fViewer;
private ListenerList fListenerList;
private ListenerList<ISelectionChangedListener> fSelectionChangedListenerList;
private ListenerList<ISelectionChangedListener> fPostSelectionChangedListenerList;
public PackageViewerWrapper() {
fListenerList = new ListenerList(ListenerList.IDENTITY);
fPostSelectionChangedListenerList = new ListenerList<>(
ListenerList.IDENTITY);
fSelectionChangedListenerList = new ListenerList<>(
ListenerList.IDENTITY);
}
public void setViewer(StructuredViewer viewer) {
Assert.isNotNull(viewer);
StructuredViewer oldViewer = fViewer;
fViewer = viewer;
if (fViewer.getContentProvider() != null)
super.setContentProvider(fViewer.getContentProvider());
transferFilters(oldViewer);
transferListeners();
}
StructuredViewer getViewer() {
return fViewer;
}
private void transferFilters(StructuredViewer oldViewer) {
// set filters
if (oldViewer != null) {
ViewerFilter[] filters = oldViewer.getFilters();
for (int i = 0; i < filters.length; i++) {
ViewerFilter filter = filters[i];
fViewer.addFilter(filter);
}
}
}
private void transferListeners() {
for (ISelectionChangedListener listener : fPostSelectionChangedListenerList) {
fViewer.addPostSelectionChangedListener(listener);
}
for (ISelectionChangedListener listener : fSelectionChangedListenerList) {
fViewer.addSelectionChangedListener(listener);
}
// Add all other listeners
Object[] listeners = fListenerList.getListeners();
for (int i = 0; i < listeners.length; i++) {
Object object = listeners[i];
if (object instanceof IOpenListener) {
IOpenListener listener = (IOpenListener) object;
addOpenListener(listener);
} else if (object instanceof HelpListener) {
HelpListener listener = (HelpListener) object;
addHelpListener(listener);
} else if (object instanceof IDoubleClickListener) {
IDoubleClickListener listener = (IDoubleClickListener) object;
addDoubleClickListener(listener);
}
}
}
@Override
public void setSelection(ISelection selection, boolean reveal) {
if (selection instanceof IStructuredSelection) {
IStructuredSelection sel = (IStructuredSelection) selection;
// try and give the two a common super class
IContentProvider provider = getContentProvider();
if (provider instanceof LogicalPackagesProvider) {
LogicalPackagesProvider fprovider = (LogicalPackagesProvider) provider;
Object object = sel.getFirstElement();
if (object instanceof IScriptFolder) {
IScriptFolder pkgFragment = (IScriptFolder) object;
LogicalPackage logicalPkg = fprovider
.findLogicalPackage(pkgFragment);
if (logicalPkg != null)
object = logicalPkg;
else
object = pkgFragment;
}
if (object != null)
fViewer.setSelection(new StructuredSelection(object),
reveal);
else
fViewer.setSelection(StructuredSelection.EMPTY, reveal);
}
} else
fViewer.setSelection(selection, reveal);
}
@Override
public void addPostSelectionChangedListener(
ISelectionChangedListener listener) {
fPostSelectionChangedListenerList.add(listener);
fViewer.addPostSelectionChangedListener(listener);
}
@Override
public void addSelectionChangedListener(
ISelectionChangedListener listener) {
fSelectionChangedListenerList.add(listener);
fViewer.addSelectionChangedListener(listener);
}
@Override
public void addDoubleClickListener(IDoubleClickListener listener) {
fViewer.addDoubleClickListener(listener);
fListenerList.add(listener);
}
@Override
public void addOpenListener(IOpenListener listener) {
fViewer.addOpenListener(listener);
fListenerList.add(listener);
}
@Override
public void addHelpListener(HelpListener listener) {
fViewer.addHelpListener(listener);
fListenerList.add(listener);
}
@Override
public void removeSelectionChangedListener(
ISelectionChangedListener listener) {
fViewer.removeSelectionChangedListener(listener);
fSelectionChangedListenerList.remove(listener);
}
@Override
public void removePostSelectionChangedListener(
ISelectionChangedListener listener) {
fViewer.removePostSelectionChangedListener(listener);
fPostSelectionChangedListenerList.remove(listener);
}
@Override
public void removeHelpListener(HelpListener listener) {
fListenerList.remove(listener);
fViewer.removeHelpListener(listener);
}
@Override
public void removeDoubleClickListener(IDoubleClickListener listener) {
fViewer.removeDoubleClickListener(listener);
fListenerList.remove(listener);
}
@Override
public void removeOpenListener(IOpenListener listener) {
fViewer.removeOpenListener(listener);
fListenerList.remove(listener);
}
// --------- simply delegate to wrapped viewer ---------
@Override
public Control getControl() {
return fViewer.getControl();
}
@Override
public void addFilter(ViewerFilter filter) {
fViewer.addFilter(filter);
}
@Override
public void setFilters(ViewerFilter... filters) {
fViewer.setFilters(filters);
}
@Override
public void refresh() {
fViewer.refresh();
}
@Override
public void removeFilter(ViewerFilter filter) {
fViewer.removeFilter(filter);
}
@Override
public ISelection getSelection() {
return fViewer.getSelection();
}
@Override
public void refresh(boolean updateLabels) {
fViewer.refresh(updateLabels);
}
@Override
public void refresh(Object element, boolean updateLabels) {
fViewer.refresh(element, updateLabels);
}
@Override
public void refresh(Object element) {
fViewer.refresh(element);
}
@Override
public void resetFilters() {
fViewer.resetFilters();
}
@Override
public void reveal(Object element) {
fViewer.reveal(element);
}
@Override
public void setContentProvider(IContentProvider contentProvider) {
fViewer.setContentProvider(contentProvider);
}
@Override
public void setSorter(ViewerSorter sorter) {
fViewer.setSorter(sorter);
}
@Override
public void setComparator(ViewerComparator comparator) {
fViewer.setComparator(comparator);
}
@Override
public void setUseHashlookup(boolean enable) {
fViewer.setUseHashlookup(enable);
}
@Override
public Widget testFindItem(Object element) {
return fViewer.testFindItem(element);
}
@Override
public void update(Object element, String[] properties) {
fViewer.update(element, properties);
}
@Override
public void update(Object[] elements, String[] properties) {
fViewer.update(elements, properties);
}
@Override
public IContentProvider getContentProvider() {
return fViewer.getContentProvider();
}
@Override
public Object getInput() {
return fViewer.getInput();
}
@Override
public IBaseLabelProvider getLabelProvider() {
return fViewer.getLabelProvider();
}
@Override
public void setLabelProvider(IBaseLabelProvider labelProvider) {
fViewer.setLabelProvider(labelProvider);
}
@Override
public Object getData(String key) {
return fViewer.getData(key);
}
@Override
public Item scrollDown(int x, int y) {
return fViewer.scrollDown(x, y);
}
@Override
public Item scrollUp(int x, int y) {
return fViewer.scrollUp(x, y);
}
@Override
public void setData(String key, Object value) {
fViewer.setData(key, value);
}
@Override
public void setSelection(ISelection selection) {
fViewer.setSelection(selection);
}
@Override
public boolean equals(Object obj) {
return fViewer.equals(obj);
}
@Override
public int hashCode() {
return fViewer.hashCode();
}
@Override
public String toString() {
return fViewer.toString();
}
public void setViewerInput(Object input) {
fViewer.setInput(input);
}
// need to provide implementation for abstract methods
@Override
protected Widget doFindInputItem(Object element) {
return ((IPackagesViewViewer) fViewer).doFindInputItem(element);
}
@Override
protected Widget doFindItem(Object element) {
return ((IPackagesViewViewer) fViewer).doFindItem(element);
}
@Override
protected void doUpdateItem(Widget item, Object element, boolean fullMap) {
((IPackagesViewViewer) fViewer).doUpdateItem(item, element, fullMap);
}
@Override
protected List getSelectionFromWidget() {
return ((IPackagesViewViewer) fViewer).getSelectionFromWidget();
}
@Override
protected void internalRefresh(Object element) {
((IPackagesViewViewer) fViewer).internalRefresh(element);
}
@Override
protected void setSelectionToWidget(List l, boolean reveal) {
((IPackagesViewViewer) fViewer).setSelectionToWidget(l, reveal);
}
}