/* * Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved. * * This program and the accompanying materials are made available * under the terms of the Eclipse Public License, Version 1.0, * which accompanies this distribution and is available at * * http://www.eclipse.org/legal/epl-v10.html * */ package net.rim.ejde.internal.sourceprovider; import java.util.HashMap; import java.util.Map; import net.rim.ejde.internal.ui.launchers.LaunchUtils; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchesListener2; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.AbstractSourceProvider; import org.eclipse.ui.ISources; import org.eclipse.ui.services.IServiceLocator; /** * * @author bkurz * */ public class CleanSimulatorSourceProvider extends AbstractSourceProvider { private static final String COMMANDSTATE = "net.rim.ejde.internal.cleanSimulator.enableState"; private static final String ENABLED = "enabled"; private static final String DISABLED = "disabled"; private boolean _currentState; @Override public void initialize( final IServiceLocator locator ) { _currentState = LaunchUtils.getRunningBBLaunch() == null; DebugPlugin.getDefault().getLaunchManager().addLaunchListener( new ILaunchesListener2() { @Override public void launchesRemoved( ILaunch[] launches ) { setEnableState( LaunchUtils.getRunningBBLaunch() == null ); } @Override public void launchesAdded( ILaunch[] launches ) { setEnableState( LaunchUtils.getRunningBBLaunch() == null ); } @Override public void launchesChanged( ILaunch[] launches ) { // Do nothing } @Override public void launchesTerminated( ILaunch[] launches ) { setEnableState( LaunchUtils.getRunningBBLaunch() == null ); } } ); } @Override public void dispose() { } @Override public Map< String, String > getCurrentState() { Map< String, String > map = new HashMap< String, String >(); map.put( COMMANDSTATE, _currentState ? ENABLED : DISABLED ); return map; } @Override public String[] getProvidedSourceNames() { return new String[] { COMMANDSTATE }; } private void setEnableState( boolean value ) { _currentState = value; // Run asnchronously to avoid SWT exception when projects have been closed. Display.getDefault().asyncExec( new Runnable() { @Override public void run() { fireSourceChanged( ISources.WORKBENCH, COMMANDSTATE, _currentState ? ENABLED : DISABLED ); } } ); } }