blob: aca8941f8b7cfbd01b4cab6e5b7c75a8c3da7208 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.services;
import org.eclipse.core.expressions.Expression;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.ISourceProvider;
import org.eclipse.ui.ISources;
import org.eclipse.ui.services.IEvaluationReference;
import org.eclipse.ui.services.IEvaluationService;
/**
* @since 3.3
*
*/
public final class EvaluationService implements IEvaluationService {
private EvaluationAuthority evaluationAuthority;
public EvaluationService() {
evaluationAuthority = new EvaluationAuthority();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.services.IEvaluationService#addEvaluationListener(org.eclipse.core.expressions.Expression,
* org.eclipse.jface.util.IPropertyChangeListener, java.lang.String)
*/
public IEvaluationReference addEvaluationListener(Expression expression,
IPropertyChangeListener listener, String property) {
IEvaluationReference expressionReference = new EvaluationReference(
expression, listener, property);
evaluationAuthority.addEvaluationListener(expressionReference);
return expressionReference;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.services.IEvaluationService#addEvaluationReference(org.eclipse.ui.services.IEvaluationReference)
*/
public void addEvaluationReference(IEvaluationReference ref) {
Assert.isLegal(ref instanceof EvaluationReference, "Invalid type: " //$NON-NLS-1$
+ ref.getClass().getName());
evaluationAuthority.addEvaluationListener(ref);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.services.IEvaluationService#removeEvaluationListener(org.eclipse.ui.internal.services.IEvaluationReference)
*/
public void removeEvaluationListener(IEvaluationReference ref) {
evaluationAuthority.removeEvaluationListener(ref);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.services.IServiceWithSources#addSourceProvider(org.eclipse.ui.ISourceProvider)
*/
public void addSourceProvider(ISourceProvider provider) {
evaluationAuthority.addSourceProvider(provider);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.services.IServiceWithSources#removeSourceProvider(org.eclipse.ui.ISourceProvider)
*/
public void removeSourceProvider(ISourceProvider provider) {
evaluationAuthority.removeSourceProvider(provider);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.services.IDisposable#dispose()
*/
public void dispose() {
evaluationAuthority.dispose();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.services.IEvaluationService#getCurrentState()
*/
public IEvaluationContext getCurrentState() {
return evaluationAuthority.getCurrentState();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.services.IEvaluationService#addServiceListener(org.eclipse.jface.util.IPropertyChangeListener)
*/
public void addServiceListener(IPropertyChangeListener listener) {
evaluationAuthority.addServiceListener(listener);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.services.IEvaluationService#removeServiceListener(org.eclipse.jface.util.IPropertyChangeListener)
*/
public void removeServiceListener(IPropertyChangeListener listener) {
evaluationAuthority.removeServiceListener(listener);
}
/* (non-Javadoc)
* @see org.eclipse.ui.services.IEvaluationService#requestEvaluation(java.lang.String)
*/
public void requestEvaluation(String propertyName) {
evaluationAuthority.sourceChanged(new String[] { propertyName });
}
public void updateShellKludge() {
evaluationAuthority.updateShellKludge();
}
/**
* <p>
* Bug 95792. A mechanism by which the key binding architecture can force an
* update of the handlers (based on the active shell) before trying to
* execute a command. This mechanism is required for GTK+ only.
* </p>
* <p>
* DO NOT CALL THIS METHOD.
* </p>
*
* @param shell
* The shell that should be considered active; must not be
* <code>null</code>.
*/
public final void updateShellKludge(final Shell shell) {
final Shell currentActiveShell = evaluationAuthority.getActiveShell();
if (currentActiveShell != shell) {
evaluationAuthority.sourceChanged(ISources.ACTIVE_SHELL,
ISources.ACTIVE_SHELL_NAME, shell);
}
}
}