diff options
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/BreakpointsExpandAllAction.java')
-rw-r--r-- | org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/BreakpointsExpandAllAction.java | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/BreakpointsExpandAllAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/BreakpointsExpandAllAction.java index 85620b3b6..4940ae95b 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/BreakpointsExpandAllAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/BreakpointsExpandAllAction.java @@ -11,26 +11,50 @@ *******************************************************************************/ package org.eclipse.debug.internal.ui.actions.breakpoints; +import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer; +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.ITreeModelViewer; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener; import org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.TreePath; +import org.eclipse.swt.widgets.Event; +import org.eclipse.ui.IActionDelegate2; import org.eclipse.ui.IViewActionDelegate; import org.eclipse.ui.IViewPart; /** * Action which fully expands the tree in the breakpoints view. */ -public class BreakpointsExpandAllAction implements IViewActionDelegate { +public class BreakpointsExpandAllAction implements IViewActionDelegate, IActionDelegate2, IViewerUpdateListener, IModelChangedListener { + private IAction fAction; private BreakpointsView fView; + public void init(IAction action) { + fAction = action; + } + /* (non-Javadoc) * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart) */ public void init(IViewPart view) { fView = (BreakpointsView) view; + IInternalTreeModelViewer viewer = (IInternalTreeModelViewer)fView.getViewer(); + if (viewer != null) { + viewer.addViewerUpdateListener(this); + viewer.addModelChangedListener(this); + } } + public void runWithEvent(IAction action, Event event) { + run(action); + } + /* (non-Javadoc) * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction) */ @@ -44,4 +68,40 @@ public class BreakpointsExpandAllAction implements IViewActionDelegate { public void selectionChanged(IAction action, ISelection selection) { } + + public void dispose() { + ITreeModelViewer viewer = (ITreeModelViewer)fView.getViewer(); + if (viewer != null) { + viewer.removeViewerUpdateListener(this); + viewer.removeModelChangedListener(this); + } + } + + public void viewerUpdatesBegin() { + } + + public void viewerUpdatesComplete() { + } + + public void updateStarted(IViewerUpdate update) { + } + + public void updateComplete(IViewerUpdate update) { + if (!update.isCanceled()) { + if (TreePath.EMPTY.equals(update.getElementPath())) { + update(); + } + } + } + + private void update() { + IInternalTreeModelViewer viewer = (IInternalTreeModelViewer)fView.getViewer(); + if (viewer != null && fAction != null) { + fAction.setEnabled(viewer.getInput() != null && viewer.getChildCount(TreePath.EMPTY) > 0); + } + } + + public void modelChanged(IModelDelta delta, IModelProxy proxy) { + update(); + } } |