blob: 0ca41718f812a37ed543d7ec76023d9b5eed990c [file] [log] [blame]
/*
*(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.ui.IDebugView;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IViewActionDelegate;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
/**
*
* A generic Toggle view action delegate, meant to be subclassed to provide
* a specific filter.
*
* @since Oct 4, 2002
*/
public abstract class ToggleDelegateAction implements IViewActionDelegate,
IPropertyChangeListener,
IPartListener
{
/**
* The viewer that this action works for
*/
private StructuredViewer fViewer;
private IViewPart fView;
protected String fId = ""; //$NON-NLS-1$
private IAction fAction;
private boolean fNeedsInitialization = true;
protected void dispose()
{
if ( fView != null )
{
fView.getViewSite().getPage().removePartListener( this );
}
CDebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener( this );
}
/**
* @see IViewActionDelegate#init(IViewPart)
*/
public void init( IViewPart view )
{
setView( view );
initActionId();
IDebugView adapter = (IDebugView)view.getAdapter( IDebugView.class );
if ( adapter != null && adapter.getViewer() instanceof StructuredViewer )
{
setViewer( (StructuredViewer)adapter.getViewer() );
}
view.getViewSite().getPage().addPartListener( this );
CDebugUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener( this );
}
protected abstract void initActionId();
/**
* @see IActionDelegate#run(IAction)
*/
public void run( IAction action )
{
//do nothing.."run" will occur from the property change
//this allows for setting the checked state of the IAction
//to drive the execution of this delegate.
//see propertyChange(PropertyChangeEvent)
}
protected abstract void valueChanged( boolean on );
protected String getActionId()
{
return fId;
}
protected StructuredViewer getViewer()
{
return fViewer;
}
protected void setViewer( StructuredViewer viewer )
{
fViewer = viewer;
}
/**
* @see IActionDelegate#selectionChanged(IAction, ISelection)
*/
public void selectionChanged( IAction action, ISelection selection )
{
if ( fNeedsInitialization )
{
setAction( action );
action.setId( getActionId() );
fNeedsInitialization = false;
}
}
protected IAction getAction()
{
return fAction;
}
protected void setAction( IAction action )
{
fAction = action;
action.addPropertyChangeListener( this );
}
/**
* @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)
*/
public void propertyChange( PropertyChangeEvent event )
{
if ( event.getProperty().equals( getActionId() ) )
{
getAction().setChecked( CDebugUIPlugin.getDefault().getPreferenceStore().getBoolean( getActionId() ) );
}
else if ( event.getProperty().equals( IAction.CHECKED ) )
{
CDebugUIPlugin.getDefault().getPreferenceStore().setValue( getActionId(), getAction().isChecked() );
valueChanged( getAction().isChecked() );
}
}
/**
* @see IPartListener#partActivated(IWorkbenchPart)
*/
public void partActivated( IWorkbenchPart part )
{
}
/**
* @see IPartListener#partBroughtToTop(IWorkbenchPart)
*/
public void partBroughtToTop( IWorkbenchPart part )
{
}
/**
* @see IPartListener#partClosed(IWorkbenchPart)
*/
public void partClosed( IWorkbenchPart part )
{
if ( part.equals( getView() ) )
{
dispose();
}
}
/**
* @see IPartListener#partDeactivated(IWorkbenchPart)
*/
public void partDeactivated( IWorkbenchPart part )
{
}
/**
* @see IPartListener#partOpened(IWorkbenchPart)
*/
public void partOpened( IWorkbenchPart part )
{
}
protected IViewPart getView()
{
return fView;
}
protected void setView( IViewPart view )
{
fView = view;
}
}