diff options
Diffstat (limited to 'org.eclipse.debug.ui/ui/org')
7 files changed, 108 insertions, 33 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelViewer.java new file mode 100644 index 000000000..e85d818fa --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelViewer.java @@ -0,0 +1,22 @@ +/******************************************************************************* + * Copyright (c) 2011 Wind River Systems 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: + * Wind River Systems - initial API and implementation + *******************************************************************************/ +package org.eclipse.debug.internal.ui.viewers.model; + +/** + * This interface was moved to the {@link org.eclipse.debug.internal.ui.viewers.model.provisional} + * package. This stub was left for backward compatibility for packages that + * referenced this internal interface. + * + * @deprecated This internal interface was replaced by {@link org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer}. + */ +public interface ITreeModelViewer extends org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer { + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java index 303c76f48..cc246f1f8 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java @@ -77,7 +77,7 @@ import org.eclipse.ui.IMemento; * @since 3.3 */ public class InternalTreeModelViewer extends TreeViewer - implements IInternalTreeModelViewer + implements IInternalTreeModelViewer, org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer { private IPresentationContext fContext; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java index c9182f9d7..c4f7ab8a9 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java @@ -22,11 +22,14 @@ import java.util.Map; import java.util.Map.Entry; import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.ISafeRunnable; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.ListenerList; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.SafeRunner; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.debug.core.IRequest; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.viewers.model.provisional.ICheckboxModelProxy; @@ -35,6 +38,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentPr import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedListener; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy2; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory2; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; @@ -281,9 +285,37 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon } } - if (proxy != null) { + if (proxy instanceof IModelProxy2) { proxy.addModelChangedListener(this); - proxy.initialize(getViewer()); + ((IModelProxy2)proxy).initialize(getViewer()); + } else if (proxy != null) { + final IModelProxy finalProxy = proxy; + Job job = new Job("Model Proxy installed notification job") {//$NON-NLS-1$ + protected IStatus run(IProgressMonitor monitor) { + if (!monitor.isCanceled()) { + IPresentationContext context = null; + Viewer viewer = null; + synchronized (TreeModelContentProvider.this) { + if (!isDisposed()) { + context = getPresentationContext(); + viewer = (Viewer) getViewer(); + } + } + if (viewer != null && context != null && !finalProxy.isDisposed()) { + finalProxy.init(context); + finalProxy.addModelChangedListener(TreeModelContentProvider.this); + finalProxy.installed(viewer); + } + } + return Status.OK_STATUS; + } + + public boolean shouldRun() { + return !isDisposed(); + } + }; + job.setSystem(true); + job.schedule(); } } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy.java index bb6ba2258..250f70ceb 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy.java @@ -38,44 +38,21 @@ import org.eclipse.jface.viewers.Viewer; * @see IModelProxyFactory * @see IModelChangedListener * @see ICheckboxModelProxy + * @see IModelProxy2 * @since 3.2 */ public interface IModelProxy { - - /** - * Initialize model proxy with given tree model viewer. This method is - * called on the viewer's Display thread and is guaranteed to be called - * before the dispose() method is called on the same proxy. The default - * implementation of this method calls {@link #init(IPresentationContext)} - * and {@link #installed(Viewer)} asynchornously and not in the Display - * thread. - * <br>Client may override this method directly, in order to initialize the - * model proxy in the viewer's display thread. Alternatively clients may - * override the {@link #installed(Viewer)} method to initialize the proxy - * in an asynchronous job thread. - * </p> - * <p> - * This method is called by the asynchronous viewer framework and should - * not be called by clients. - * </p> - * @param viewer Viewer that is installing this model proxy. - * - * @since 3.8 - */ - public void initialize(ITreeModelViewer viewer); /** * Notification this model proxy has been created and is about to be installed * in the following context. This is the first method called after a model proxy - * is created. This method is called by the {@link AbstractModelProxy} base - * class using a job and NOT in viewers display thread. It allows the client to - * initialize the proxy without blocking the UI. The default implementaiton is - * a no-op. + * is created and it's called in a job thread and not on a display thread. * <p> * This method is called by the asynchronous viewer framework and should not * be called by clients. * </p> * @param context presentation context in which the proxy will be installed + * @see IModelProxy2#initialize(ITreeModelViewer) */ public void init(IPresentationContext context); @@ -91,6 +68,7 @@ public interface IModelProxy { * be called by clients. * </p> * @param viewer viewer + * @see IModelProxy2#initialize(ITreeModelViewer) * @since 3.3 */ public void installed(Viewer viewer); diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy2.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy2.java new file mode 100644 index 000000000..5db3dbe73 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy2.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2011 Wind River Systems 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: + * Wind River Systems - initial API and implementation + *******************************************************************************/ +package org.eclipse.debug.internal.ui.viewers.model.provisional; + +import org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy; +import org.eclipse.jface.viewers.Viewer; + +/** + * Extension to the model proxy interface which allows the proxy to be initialized + * on the viewer's Display thread + * <p> + * Clients may implement this interface. Implementations of this interface + * must subclass {@link AbstractModelProxy}. + * </p> + * @since 3.8 + */ +public interface IModelProxy2 extends IModelProxy { + + /** + * Initialize model proxy with given tree model viewer. This method is + * called on the viewer's Display thread and is guaranteed to be called + * before the dispose() method is called on the same proxy. The default + * implementation of this method calls {@link #init(IPresentationContext)} + * and {@link #installed(Viewer)} asynchornously and not in the Display + * thread. + * <p> + * This method is called by the asynchronous viewer framework and should + * not be called by clients. + * </p> + * @param viewer Viewer that is installing this model proxy. + * + */ + public void initialize(ITreeModelViewer viewer); + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ITreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ITreeModelViewer.java index d59de1d64..217d64bc1 100755 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ITreeModelViewer.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ITreeModelViewer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Wind River Systems and others. + * Copyright (c) 2009, 2011 Wind River Systems 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 @@ -24,7 +24,7 @@ import org.eclipse.swt.widgets.Display; * JFace-based {@link TreeModelViewer} and the UI-less * {@link VirtualTreeModelViewer}. * - * @since 3.5 + * @since 3.8 */ public interface ITreeModelViewer extends ISelectionProvider { diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractModelProxy.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractModelProxy.java index 3f202bc76..9d944ad27 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractModelProxy.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractModelProxy.java @@ -21,7 +21,7 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedListener; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; -import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy2; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer; import org.eclipse.jface.viewers.Viewer; @@ -33,7 +33,7 @@ import org.eclipse.jface.viewers.Viewer; * </p> * @since 3.2 */ -public abstract class AbstractModelProxy implements IModelProxy { +public abstract class AbstractModelProxy implements IModelProxy2 { private IPresentationContext fContext; private boolean fInstalled = false; |