1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-26 18:35:32 +02:00

[172492] patch from Uwe to make tree viewer safe

This commit is contained in:
David McKnight 2007-02-01 17:30:41 +00:00
parent 461e061e8f
commit fa408d21d5
3 changed files with 153 additions and 4 deletions

View file

@ -51,7 +51,6 @@ import org.eclipse.jface.viewers.ITreeViewerListener;
import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeExpansionEvent; import org.eclipse.jface.viewers.TreeExpansionEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.window.SameShellProvider; import org.eclipse.jface.window.SameShellProvider;
import org.eclipse.rse.core.SystemAdapterHelpers; import org.eclipse.rse.core.SystemAdapterHelpers;
@ -149,7 +148,7 @@ import org.eclipse.ui.views.framelist.GoIntoAction;
/* /*
* At one time implemented the following as well: MenuListener, IDoubleClickListener, ArmListener, IWireEventTarget * At one time implemented the following as well: MenuListener, IDoubleClickListener, ArmListener, IWireEventTarget
*/ */
public class SystemView extends TreeViewer implements ISystemTree, ISystemResourceChangeListener, ISystemRemoteChangeListener, IMenuListener, public class SystemView extends SystemViewSafeTreeViewer implements ISystemTree, ISystemResourceChangeListener, ISystemRemoteChangeListener, IMenuListener,
ISelectionChangedListener, ISelectionProvider, ITreeViewerListener, ISystemResourceChangeEvents, ISystemDeleteTarget, ISystemRenameTarget, ISystemSelectAllTarget ISelectionChangedListener, ISelectionProvider, ITreeViewerListener, ISystemResourceChangeEvents, ISystemDeleteTarget, ISystemRenameTarget, ISystemSelectAllTarget
{ {

View file

@ -51,7 +51,6 @@ import org.eclipse.jface.viewers.ITreeViewerListener;
import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeExpansionEvent; import org.eclipse.jface.viewers.TreeExpansionEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.window.SameShellProvider; import org.eclipse.jface.window.SameShellProvider;
import org.eclipse.rse.core.SystemAdapterHelpers; import org.eclipse.rse.core.SystemAdapterHelpers;
@ -149,7 +148,7 @@ import org.eclipse.ui.views.framelist.GoIntoAction;
/* /*
* At one time implemented the following as well: MenuListener, IDoubleClickListener, ArmListener, IWireEventTarget * At one time implemented the following as well: MenuListener, IDoubleClickListener, ArmListener, IWireEventTarget
*/ */
public class SystemView extends TreeViewer implements ISystemTree, ISystemResourceChangeListener, ISystemRemoteChangeListener, IMenuListener, public class SystemView extends SystemViewSafeTreeViewer implements ISystemTree, ISystemResourceChangeListener, ISystemRemoteChangeListener, IMenuListener,
ISelectionChangedListener, ISelectionProvider, ITreeViewerListener, ISystemResourceChangeEvents, ISystemDeleteTarget, ISystemRenameTarget, ISystemSelectAllTarget ISelectionChangedListener, ISelectionProvider, ITreeViewerListener, ISystemResourceChangeEvents, ISystemDeleteTarget, ISystemRenameTarget, ISystemSelectAllTarget
{ {

View file

@ -0,0 +1,151 @@
/********************************************************************************
* Copyright (c) 2007 Wind River Systems, Inc. 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:
* Uwe Stieber (Wind River) - initial API and implementation.
********************************************************************************/
package org.eclipse.rse.ui.view;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.Widget;
/**
* Delayed label provider can trigger tree item updates called in the
* viewer after the tree item itself got disposed. This happens especially
* if items appear and disappear very fast within the tree which then will
* lead to nasty SWT Widget already disposed exceptions.
*/
public class SystemViewSafeTreeViewer extends TreeViewer {
/**
* Constructor.
*
* @param parent The parant control.
*/
public SystemViewSafeTreeViewer(Composite parent) {
super(parent);
}
/**
* Constructor.
*
* @param tree The tree control.
*/
public SystemViewSafeTreeViewer(Tree tree) {
super(tree);
}
/**
* Constructor.
*
* @param parent The parent control.
* @param style The SWT style bits passed to the tree creation.
*/
public SystemViewSafeTreeViewer(Composite parent, int style) {
super(parent, style);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.TreeViewer#doUpdateItem(org.eclipse.swt.widgets.Item, java.lang.Object)
*/
protected void doUpdateItem(Item item, Object element) {
if (item != null && item.isDisposed()) return;
super.doUpdateItem(item, element);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.AbstractTreeViewer#doUpdateItem(org.eclipse.swt.widgets.Widget, java.lang.Object, boolean)
*/
protected void doUpdateItem(Widget widget, Object element, boolean fullMap) {
if (widget != null && widget.isDisposed()) return;
super.doUpdateItem(widget, element, fullMap);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.TreeViewer#getItemCount(org.eclipse.swt.widgets.Control)
*/
protected int getItemCount(Control widget) {
if (widget != null && widget.isDisposed()) return 0;
return super.getItemCount(widget);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.TreeViewer#getItemCount(org.eclipse.swt.widgets.Item)
*/
protected int getItemCount(Item item) {
if (item != null && item.isDisposed()) return 0;
return super.getItemCount(item);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.TreeViewer#showItem(org.eclipse.swt.widgets.Item)
*/
protected void showItem(Item item) {
if (item != null && item.isDisposed()) return;
super.showItem(item);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.TreeViewer#updatePlus(org.eclipse.swt.widgets.Item, java.lang.Object)
*/
protected void updatePlus(Item item, Object element) {
if (item != null && item.isDisposed()) return;
super.updatePlus(item, element);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.TreeViewer#createChildren(org.eclipse.swt.widgets.Widget)
*/
protected void createChildren(Widget widget) {
if (widget != null && widget.isDisposed()) return;
super.createChildren(widget);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.TreeViewer#getChild(org.eclipse.swt.widgets.Widget, int)
*/
protected Item getChild(Widget widget, int index) {
if (widget != null && widget.isDisposed()) return null;
return super.getChild(widget, index);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.TreeViewer#getChildren(org.eclipse.swt.widgets.Widget)
*/
protected Item[] getChildren(Widget widget) {
if (widget != null && widget.isDisposed()) return new Item[0];
return super.getChildren(widget);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.TreeViewer#getExpanded(org.eclipse.swt.widgets.Item)
*/
protected boolean getExpanded(Item item) {
if (item != null && item.isDisposed()) return false;
return super.getExpanded(item);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.TreeViewer#getItems(org.eclipse.swt.widgets.Item)
*/
protected Item[] getItems(Item item) {
if (item != null && item.isDisposed()) return new Item[0];
return super.getItems(item);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.TreeViewer#getParentItem(org.eclipse.swt.widgets.Item)
*/
protected Item getParentItem(Item item) {
if (item != null && item.isDisposed()) return null;
return super.getParentItem(item);
}
}