| /* |
| *(c) Copyright QNX Software Systems Ltd. 2002. |
| * All Rights Reserved. |
| * |
| */ |
| package org.eclipse.cdt.debug.internal.ui.actions; |
| |
| import org.eclipse.cdt.debug.ui.CDebugUIPlugin; |
| import org.eclipse.debug.core.model.IDebugTarget; |
| import org.eclipse.debug.ui.IDebugUIConstants; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.ISelectionProvider; |
| import org.eclipse.ui.IEditorActionDelegate; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.INullSelectionListener; |
| import org.eclipse.ui.IPartListener; |
| import org.eclipse.ui.ISelectionListener; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.IWorkbenchPart; |
| import org.eclipse.ui.IWorkbenchWindow; |
| import org.eclipse.ui.IWorkbenchWindowActionDelegate; |
| import org.eclipse.ui.actions.ActionDelegate; |
| |
| /** |
| * |
| * Enter type comment. |
| * |
| * @since Sep 19, 2002 |
| */ |
| public abstract class AbstractEditorActionDelegate extends ActionDelegate |
| implements IWorkbenchWindowActionDelegate, |
| IEditorActionDelegate, |
| IPartListener, |
| ISelectionListener, |
| INullSelectionListener |
| { |
| private IAction fAction; |
| private IWorkbenchWindow fWorkbenchWindow; |
| private IWorkbenchPart fTargetPart; |
| private IDebugTarget fDebugTarget = null; |
| |
| /** |
| * Constructor for AbstractEditorActionDelegate. |
| */ |
| public AbstractEditorActionDelegate() |
| { |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose() |
| */ |
| public void dispose() |
| { |
| IWorkbenchWindow win = getWorkbenchWindow(); |
| if ( win != null ) |
| { |
| win.getPartService().removePartListener( this ); |
| win.getSelectionService().removeSelectionListener( IDebugUIConstants.ID_DEBUG_VIEW, this ); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(IWorkbenchWindow) |
| */ |
| public void init( IWorkbenchWindow window ) |
| { |
| setWorkbenchWindow( window ); |
| IWorkbenchPage page = window.getActivePage(); |
| if ( page != null ) |
| { |
| setTargetPart( page.getActivePart() ); |
| } |
| window.getPartService().addPartListener( this ); |
| window.getSelectionService().addSelectionListener( IDebugUIConstants.ID_DEBUG_VIEW, this ); |
| initializeDebugTarget(); |
| update(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IEditorActionDelegate#setActiveEditor(IAction, IEditorPart) |
| */ |
| public void setActiveEditor( IAction action, IEditorPart targetEditor ) |
| { |
| setAction( action ); |
| if ( getWorkbenchWindow() == null ) |
| { |
| IWorkbenchWindow window = CDebugUIPlugin.getActiveWorkbenchWindow(); |
| setWorkbenchWindow( window ); |
| if ( window != null ) |
| { |
| window.getSelectionService().addSelectionListener( IDebugUIConstants.ID_DEBUG_VIEW, this ); |
| } |
| } |
| setTargetPart( targetEditor ); |
| initializeDebugTarget(); |
| update(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPartListener#partActivated(IWorkbenchPart) |
| */ |
| public void partActivated( IWorkbenchPart part ) |
| { |
| setTargetPart( part ); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPartListener#partBroughtToTop(IWorkbenchPart) |
| */ |
| public void partBroughtToTop( IWorkbenchPart part ) |
| { |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPartListener#partClosed(IWorkbenchPart) |
| */ |
| public void partClosed( IWorkbenchPart part ) |
| { |
| if ( part == getTargetPart() ) |
| { |
| setTargetPart( null ); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPartListener#partDeactivated(IWorkbenchPart) |
| */ |
| public void partDeactivated(IWorkbenchPart part) |
| { |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IPartListener#partOpened(IWorkbenchPart) |
| */ |
| public void partOpened( IWorkbenchPart part ) |
| { |
| } |
| |
| public abstract void selectionChanged( IWorkbenchPart part, ISelection selection ); |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IActionDelegate#run(IAction) |
| */ |
| public abstract void run( IAction action ); |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection) |
| */ |
| public void selectionChanged(IAction action, ISelection selection) |
| { |
| setAction( action ); |
| update(); |
| } |
| |
| protected IWorkbenchPart getTargetPart() |
| { |
| return fTargetPart; |
| } |
| |
| protected void setTargetPart( IWorkbenchPart part ) |
| { |
| fTargetPart = part; |
| } |
| |
| protected ISelection getTargetSelection() |
| { |
| IWorkbenchPart part = getTargetPart(); |
| if ( part != null ) |
| { |
| ISelectionProvider provider = part.getSite().getSelectionProvider(); |
| if ( provider != null ) |
| { |
| return provider.getSelection(); |
| } |
| } |
| return null; |
| } |
| |
| protected void setDebugTarget( IDebugTarget target ) |
| { |
| fDebugTarget = target; |
| } |
| |
| protected IDebugTarget getDebugTarget() |
| { |
| return fDebugTarget; |
| } |
| |
| protected IAction getAction() |
| { |
| return fAction; |
| } |
| |
| protected void setAction( IAction action ) |
| { |
| fAction = action; |
| } |
| |
| protected IWorkbenchWindow getWorkbenchWindow() |
| { |
| return fWorkbenchWindow; |
| } |
| |
| protected void setWorkbenchWindow( IWorkbenchWindow workbenchWindow ) |
| { |
| fWorkbenchWindow = workbenchWindow; |
| } |
| |
| protected void update() |
| { |
| IAction action = getAction(); |
| if ( action != null ) |
| { |
| action.setEnabled( getDebugTarget() != null && getTargetPart() != null ); |
| } |
| } |
| |
| protected abstract void initializeDebugTarget(); |
| } |