blob: 75b4daa5e48ee2fcd46ede63258126acb885a20a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2007 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.tests.menus;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.commands.IElementUpdater;
import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.contexts.IContextActivation;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.menus.UIElement;
/**
* @since 3.3
*
*/
public class ToggleContextHandler extends AbstractHandler implements
IElementUpdater {
private static final String TOGGLE_ID = "toggleContext.contextId";
Map contextActivations = new HashMap();
/*
* (non-Javadoc)
*
* @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
*/
public Object execute(ExecutionEvent event) throws ExecutionException {
String contextId = event.getParameter(TOGGLE_ID);
IWorkbenchWindow window = HandlerUtil
.getActiveWorkbenchWindowChecked(event);
IContextService contextService = (IContextService) window
.getService(IContextService.class);
IContextActivation a = (IContextActivation) contextActivations
.get(contextId);
// toggle the context active or not
if (a == null) {
contextActivations.put(contextId, contextService
.activateContext(contextId));
} else {
contextService.deactivateContext(a);
contextActivations.remove(contextId);
}
// now we should update any menu items/tool items that refer
// to toggleContext(contextId) ... this request means
// only update the UI that points to this specific context
// id ... not the other, non-interesting ones.
ICommandService commandService = (ICommandService) window
.getService(ICommandService.class);
Map filter = new HashMap();
filter.put(TOGGLE_ID, contextId);
commandService.refreshElements(event.getCommand().getId(), filter);
return null;
}
/* (non-Javadoc)
* @see org.eclipse.ui.commands.IElementUpdater#updateElement(org.eclipse.ui.menus.UIElement, java.util.Map)
*/
public void updateElement(UIElement element, Map parameters) {
// the checked state depends on if we have an activation for that
// context ID or not
String contextId = (String) parameters.get(TOGGLE_ID);
element.setChecked(contextActivations.get(contextId) != null);
}
}