/******************************************************************************* * Copyright (c) 2004, 2009 QNX Software 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: * QNX Software Systems - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.debug.internal.ui.actions; import java.util.Iterator; import org.eclipse.cdt.debug.core.model.IEnableDisableTarget; import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.debug.core.DebugException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IViewActionDelegate; import org.eclipse.ui.IViewPart; /** * The delegate of the "Enable" action contribution to the "IVariable" objects. */ public class EnableVariablesActionDelegate implements IViewActionDelegate { private IViewPart fView; private IAction fAction; public EnableVariablesActionDelegate() { } protected IViewPart getView() { return fView; } protected void setView( IViewPart view ) { fView = view; } protected IAction getAction() { return fAction; } protected void setAction( IAction action ) { fAction = action; } /** * This action enables variables. */ protected boolean isEnableAction() { return true; } /* * (non-Javadoc) * * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart) */ public void init( IViewPart view ) { setView( view ); } /* * (non-Javadoc) * * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction) */ public void run( IAction action ) { IStructuredSelection selection = getSelection(); final int size = selection.size(); if ( size == 0 ) return; final Iterator it = selection.iterator(); final MultiStatus ms = new MultiStatus( CDebugUIPlugin.getUniqueIdentifier(), DebugException.REQUEST_FAILED, ActionMessages.getString( "EnableVariablesActionDelegate.0" ), null ); //$NON-NLS-1$ BusyIndicator.showWhile( Display.getCurrent(), new Runnable() { public void run() { while( it.hasNext() ) { IEnableDisableTarget target = getEnableDisableTarget( it.next() ); if ( target != null && target.canEnableDisable() ) { try { if ( size > 1 ) { target.setEnabled( isEnableAction() ); } else target.setEnabled( !target.isEnabled() ); } catch( DebugException e ) { ms.merge( e.getStatus() ); } } } update(); } } ); if ( !ms.isOK() ) { CDebugUIPlugin.errorDialog( ActionMessages.getString( "EnableVariablesActionDelegate.1" ), ms ); //$NON-NLS-1$ } } /* * (non-Javadoc) * * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection) */ public void selectionChanged( IAction action, ISelection selection ) { setAction( action ); if ( !(selection instanceof IStructuredSelection) ) return; IStructuredSelection sel = (IStructuredSelection)selection; Object o = sel.getFirstElement(); if ( getEnableDisableTarget( o ) == null ) return; Iterator it = sel.iterator(); boolean allEnabled = true; boolean allDisabled = true; while( it.hasNext() ) { IEnableDisableTarget target = getEnableDisableTarget( it.next() ); if ( target != null && target.canEnableDisable() ) { if ( target.isEnabled() ) allDisabled = false; else allEnabled = false; } } if ( isEnableAction() ) action.setEnabled( !allEnabled ); else action.setEnabled( !allDisabled ); } private IStructuredSelection getSelection() { return (IStructuredSelection)getView().getViewSite().getSelectionProvider().getSelection(); } protected void update() { getView().getViewSite().getSelectionProvider().setSelection( getView().getViewSite().getSelectionProvider().getSelection() ); } protected IEnableDisableTarget getEnableDisableTarget( Object obj ) { IEnableDisableTarget target = null; if ( obj instanceof IAdaptable ) { target = (IEnableDisableTarget)((IAdaptable)obj).getAdapter( IEnableDisableTarget.class ); } return target; } }