/******************************************************************************* * Copyright (c) 2000, 2017 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 *******************************************************************************/ 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); } }