/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.python.pydev.analysis;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.contexts.IContextActivation;
import org.eclipse.ui.contexts.IContextService;
import org.python.pydev.core.ListenerList;
import org.python.pydev.core.callbacks.ICallbackListener;
/**
* Activates the PyDev context.
*
* @author fabioz
*/
@SuppressWarnings("rawtypes")
public class PyContextActivator implements ICallbackListener {
private static PyContextActivator singleton;
public synchronized static PyContextActivator getSingleton() {
if (singleton == null) {
singleton = new PyContextActivator();
}
return singleton;
}
private IContextActivation activateContext;
private final ListenerList<IPyContextObserver> observers;
private PyContextActivator() {
observers = new ListenerList<IPyContextObserver>(IPyContextObserver.class);
}
/*default*/@SuppressWarnings("unchecked")
void registerPyContextObserver(IPyContextObserver observer) {
observer.getOnStateChange().registerListener(this);
this.observers.add(observer);
}
private void handleStateChange() {
boolean isActive = false;
for (IPyContextObserver obs : this.observers.getListeners()) {
if (obs.isPyContextActive()) {
isActive = true;
break;
}
}
IContextService contextService = (IContextService) PlatformUI.getWorkbench().getService(IContextService.class);
//May be null on shutdown on Eclipse 4.
if (contextService != null) {
if (isActive) {
if (activateContext == null) {
activateContext = contextService.activateContext("com.python.pydev.contexts.window");
}
} else {
if (activateContext != null) {
contextService.deactivateContext(activateContext);
}
activateContext = null;
}
}
}
public Object call(Object obj) {
//Context changed!
handleStateChange();
return null;
}
}