blob: f8d099b5d1f5c4c79f555148b3b0b0e4c8d9e7db [file] [log] [blame]
// RAP [rh] KeyBindingService disabed, since the implemented interface is not supported
///*******************************************************************************
// * Copyright (c) 2000, 2009 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;
//
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.Collections;
//import java.util.HashMap;
//import java.util.HashSet;
//import java.util.Iterator;
//import java.util.List;
//import java.util.Map;
//import java.util.Set;
//
//import org.eclipse.jface.action.IAction;
//import org.eclipse.ui.IKeyBindingService;
//import org.eclipse.ui.INestableKeyBindingService;
//import org.eclipse.ui.IWorkbenchPartSite;
//import org.eclipse.ui.IWorkbenchSite;
//import org.eclipse.ui.PlatformUI;
//import org.eclipse.ui.commands.ActionHandler;
//import org.eclipse.ui.commands.HandlerSubmission;
//import org.eclipse.ui.commands.IHandler;
//import org.eclipse.ui.commands.Priority;
//import org.eclipse.ui.contexts.EnabledSubmission;
//import org.eclipse.ui.internal.actions.CommandAction;
//import org.eclipse.ui.internal.handlers.CommandLegacyActionWrapper;
//
///**
// * This service provides a nestable implementation of a key binding service.
// * This class is provided for backwards compatibility only, and might be removed
// * in the future. All of the functionality is the class can be duplicated by
// * using the commands and contexts API.
// *
// * @since 2.0
// */
//public final class KeyBindingService implements INestableKeyBindingService {
//
// /**
// * The currently active nested service, if any. If there are no nested
// * services or none of them are active, then this value is <code>null</code>.
// */
// private IKeyBindingService activeService = null;
//
// /**
// * Whether this key binding service has been disposed. A disposed key
// * binding service should not be used again.
// */
// private boolean disposed;
//
// /**
// * The set of context identifiers enabled in this key binding service (not
// * counting any nested services). This set may be empty, but it is never
// * <code>null</code>.
// */
// private Set enabledContextIds = Collections.EMPTY_SET;
//
// /**
// * The list of context submissions indicating the enabled state of the
// * context. This does not include those from nested services. This list may
// * be empty, but it is never <code>null</code>.
// */
// private List enabledSubmissions = new ArrayList();
//
// /**
// * The map of handler submissions, sorted by command identifiers. This does
// * not include those from nested services. This map may be empty, but it is
// * never <code>null</code>.
// */
// private Map handlerSubmissionsByCommandId = new HashMap();
//
// /**
// * The context submissions from the currently active nested service. This
// * value is <code>null</code> if there is no currently active nested
// * service.
// */
// private List nestedEnabledSubmissions = null;
//
// /**
// * The handler submissions from the currently active nested service. This
// * value is <code>null</code> if there is no currently active handler
// * service.
// */
// private List nestedHandlerSubmissions = null;
//
// /**
// * The map of workbench part sites to nested key binding services. This map
// * may be empty, but is never <code>null</code>.
// */
// private final Map nestedServices = new HashMap();
//
// /**
// * The parent for this key binding service; <code>null</code> if there is
// * no parent. If there is a parent, then this means that it should not do a
// * "live" update of its contexts or handlers, but should make a call to the
// * parent instead.
// */
// private final KeyBindingService parent;
//
// /**
// * The site within the workbench at which this service is provided. This
// * value should not be <code>null</code>.
// */
// private IWorkbenchPartSite workbenchPartSite;
//
// /**
// * Constructs a new instance of <code>KeyBindingService</code> on a given
// * workbench site. This instance is not nested.
// *
// * @param workbenchPartSite
// * The site for which this service will be responsible; should
// * not be <code>null</code>.
// */
// public KeyBindingService(IWorkbenchPartSite workbenchPartSite) {
// this(workbenchPartSite, null);
// }
//
// /**
// * Constructs a new instance of <code>KeyBindingService</code> on a given
// * workbench site.
// *
// * @param workbenchPartSite
// * The site for which this service will be responsible; should
// * not be <code>null</code>.
// * @param parent
// * The parent key binding service, if any; <code>null</code> if
// * none.
// */
// KeyBindingService(IWorkbenchPartSite workbenchPartSite,
// KeyBindingService parent) {
// this.workbenchPartSite = workbenchPartSite;
// this.parent = parent;
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.ui.INestableKeyBindingService#activateKeyBindingService(org.eclipse.ui.IWorkbenchSite)
// */
// public boolean activateKeyBindingService(IWorkbenchSite nestedSite) {
// if (disposed) {
// return false;
// }
//
// // Check if we should do a deactivation.
// if (nestedSite == null) {
// // We should do a deactivation, if there is one active.
// if (activeService == null) {
// // There is no active service. Do no work.
// return false;
// }
// // Deactivate the currently active nested service.
// deactivateNestedService();
// return true;
// }
//
// // Attempt to activate a service.
// final IKeyBindingService service = (IKeyBindingService) nestedServices
// .get(nestedSite);
//
// if (service == activeService) {
// // The service is already active, or already null
// return false;
// }
//
// deactivateNestedService();
// if (service!=null) {
// activateNestedService(service);
// }
// return true;
// }
//
// /**
// * Activates the given service without worrying about the currently active
// * service. This goes through the work of adding all of the nested context
// * ids as enabled submissions.
// *
// * @param service
// * The service to become active; if <code>null</code>, then
// * the reference to the active service is set to
// * <code>null</code> but nothing else happens.
// */
// private final void activateNestedService(final IKeyBindingService service) {
// if (disposed) {
// return;
// }
//
// /*
// * If I have a parent, and I'm the active service, then deactivate so
// * that I can make changes.
// */
// boolean active = false;
// boolean haveParent = (parent != null);
// if (haveParent) {
// active = (parent.activeService == this);
// if (active) {
// parent.deactivateNestedService();
// }
// }
//
// // Update the active service.
// activeService = service;
//
// // Check to see that the service isn't null.
// if (service == null) {
// return;
// }
//
// if (haveParent) {
// if (active) {
// parent.activateNestedService(this);
// }
//
// } else if (activeService instanceof KeyBindingService) {
// // I have no parent, so I can make the changes myself.
// final KeyBindingService nestedService = (KeyBindingService) activeService;
//
// // Update the contexts.
// nestedEnabledSubmissions = nestedService.getEnabledSubmissions();
// normalizeSites(nestedEnabledSubmissions);
// PlatformUI.getWorkbench().getContextSupport().addEnabledSubmissions(
// nestedEnabledSubmissions);
//
// // Update the handlers.
// nestedHandlerSubmissions = nestedService.getHandlerSubmissions();
// normalizeSites(nestedHandlerSubmissions);
// PlatformUI.getWorkbench().getCommandSupport().addHandlerSubmissions(
// nestedHandlerSubmissions);
// }
// }
//
// /**
// * Deactives the currently active service. This nulls out the reference, and
// * removes all the enabled submissions for the nested service.
// */
// private final void deactivateNestedService() {
// if (disposed) {
// return;
// }
//
// // Don't do anything if there is no active service.
// if (activeService == null) {
// return;
// }
//
// // Check to see if there is a parent.
// boolean active = false;
// if (parent != null) {
// // Check if I'm the active service.
// if (parent.activeService == this) {
// active = true;
// // Deactivate myself so I can make changes.
// parent.deactivateNestedService();
// }
//
// } else if (activeService instanceof KeyBindingService) {
// // Remove all the nested context ids.
// PlatformUI.getWorkbench().getContextSupport()
// .removeEnabledSubmissions(nestedEnabledSubmissions);
//
// /*
// * Remove all of the nested handler submissions. The handlers here
// * weren't created by this instance (but by the nest instance), and
// * hence can't be disposed here.
// */
// PlatformUI.getWorkbench().getCommandSupport()
// .removeHandlerSubmissions(nestedHandlerSubmissions);
//
// }
//
// // Clear our reference to the active service.
// activeService = null;
//
// // If necessary, let my parent know that changes have occurred.
// if (active) {
// parent.activateNestedService(this);
// }
// }
//
// /**
// * Disposes this key binding service. This clears out all of the submissions
// * held by this service, and its nested services.
// */
// public void dispose() {
// if (!disposed) {
// deactivateNestedService();
// disposed = true;
//
// PlatformUI.getWorkbench()
// .getContextSupport()
// .removeEnabledSubmissions(new ArrayList(enabledSubmissions));
// enabledSubmissions.clear();
//
// /*
// * Each removed handler submission, must dispose its corresponding
// * handler -- as these handlers only exist inside of this class.
// */
// final List submissions = new ArrayList(
// handlerSubmissionsByCommandId.values());
// final Iterator submissionItr = submissions.iterator();
// while (submissionItr.hasNext()) {
// ((HandlerSubmission) submissionItr.next()).getHandler()
// .dispose();
// }
// PlatformUI.getWorkbench().getCommandSupport()
// .removeHandlerSubmissions(submissions);
// handlerSubmissionsByCommandId.clear();
//
// for (Iterator iterator = nestedServices.values().iterator(); iterator
// .hasNext();) {
// KeyBindingService keyBindingService = (KeyBindingService) iterator
// .next();
// keyBindingService.dispose();
// }
//
// nestedEnabledSubmissions = null;
// nestedHandlerSubmissions = null;
// nestedServices.clear();
// }
// }
//
// /**
// * Gets a copy of all the enabled submissions in the nesting chain.
// *
// * @return All of the nested enabled submissions -- including the ones from
// * this service. This list may be empty, but is never
// * <code>null</code>.
// */
// private final List getEnabledSubmissions() {
// if (disposed) {
// return null;
// }
//
// final List submissions = new ArrayList(enabledSubmissions);
// if (activeService instanceof KeyBindingService) {
// final KeyBindingService nestedService = (KeyBindingService) activeService;
// submissions.addAll(nestedService.getEnabledSubmissions());
// }
// return submissions;
// }
//
// /**
// * Gets a copy of all the handler submissions in the nesting chain.
// *
// * @return All of the nested handler submissions -- including the ones from
// * this service. This list may be empty, but is never
// * <code>null</code>.
// */
// private final List getHandlerSubmissions() {
// if (disposed) {
// return null;
// }
//
// final List submissions = new ArrayList(handlerSubmissionsByCommandId
// .values());
// if (activeService instanceof KeyBindingService) {
// final KeyBindingService nestedService = (KeyBindingService) activeService;
// submissions.addAll(nestedService.getHandlerSubmissions());
// }
// return submissions;
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.ui.INestableKeyBindingService#getKeyBindingService(org.eclipse.ui.IWorkbenchSite)
// */
// public IKeyBindingService getKeyBindingService(IWorkbenchSite nestedSite) {
// if (disposed) {
// return null;
// }
//
// if (nestedSite == null) {
// return null;
// }
//
// IKeyBindingService service = (IKeyBindingService) nestedServices
// .get(nestedSite);
// if (service == null) {
// // TODO the INestedKeyBindingService API should be based on
// // IWorkbenchPartSite..
// if (nestedSite instanceof IWorkbenchPartSite) {
// service = new KeyBindingService(
// (IWorkbenchPartSite) nestedSite, this);
// } else {
// service = new KeyBindingService(null, this);
// }
//
// nestedServices.put(nestedSite, service);
// }
//
// return service;
// }
//
// public String[] getScopes() {
// if (disposed) {
// return null;
// }
//
// // Get the nested scopes, if any.
// final String[] nestedScopes;
// if (activeService == null) {
// nestedScopes = null;
// } else {
// nestedScopes = activeService.getScopes();
// }
//
// // Build the list of active scopes
// final Set activeScopes = new HashSet();
// activeScopes.addAll(enabledContextIds);
// if (nestedScopes != null) {
// for (int i = 0; i < nestedScopes.length; i++) {
// activeScopes.add(nestedScopes[i]);
// }
// }
//
// return (String[]) activeScopes.toArray(new String[activeScopes.size()]);
// }
//
// /**
// * Replaces the active workbench site with this service's active workbench
// * site. This ensures that the context manager will recognize the context as
// * active. Note: this method modifies the list in place; it is
// * <em>destructive</em>.
// *
// * @param submissionsToModify
// * The submissions list to modify; must not be <code>null</code>,
// * but may be empty.
// */
// private final void normalizeSites(final List submissionsToModify) {
// if (disposed) {
// return;
// }
//
// final int size = submissionsToModify.size();
// for (int i = 0; i < size; i++) {
// final Object submission = submissionsToModify.get(i);
// final Object replacementSubmission;
//
// if (submission instanceof EnabledSubmission) {
// final EnabledSubmission enabledSubmission = (EnabledSubmission) submission;
// if (!workbenchPartSite.equals(enabledSubmission
// .getActiveWorkbenchPartSite())) {
// replacementSubmission = new EnabledSubmission(null,
// enabledSubmission.getActiveShell(),
// workbenchPartSite, enabledSubmission.getContextId());
// } else {
// replacementSubmission = enabledSubmission;
// }
//
// } else if (submission instanceof HandlerSubmission) {
// final HandlerSubmission handlerSubmission = (HandlerSubmission) submission;
// if (!workbenchPartSite.equals(handlerSubmission
// .getActiveWorkbenchPartSite())) {
// replacementSubmission = new HandlerSubmission(null,
// handlerSubmission.getActiveShell(),
// workbenchPartSite,
// handlerSubmission.getCommandId(), handlerSubmission
// .getHandler(), handlerSubmission
// .getPriority());
// } else {
// replacementSubmission = handlerSubmission;
// }
//
// } else {
// replacementSubmission = submission;
// }
//
// submissionsToModify.set(i, replacementSubmission);
// }
//
// }
//
// public void registerAction(IAction action) {
// if (disposed) {
// return;
// }
//
// if (action instanceof CommandLegacyActionWrapper) {
// // this is a registration of a fake action for an already
// // registered handler
// WorkbenchPlugin
// .log("Cannot register a CommandLegacyActionWrapper back into the system"); //$NON-NLS-1$
// return;
// }
//
// if (action instanceof CommandAction) {
// // we unfortunately had to allow these out into the wild, but they
// // still must not feed back into the system
// return;
// }
//
// unregisterAction(action);
// String commandId = action.getActionDefinitionId();
// if (commandId != null) {
// /*
// * If I have a parent and I'm active, de-activate myself while
// * making changes.
// */
// boolean active = false;
// if ((parent != null) && (parent.activeService == this)) {
// active = true;
// parent.deactivateNestedService();
// }
//
// // Create the new submission
// IHandler handler = new ActionHandler(action);
// HandlerSubmission handlerSubmission = new HandlerSubmission(null,
// workbenchPartSite.getShell(), workbenchPartSite, commandId,
// handler, Priority.MEDIUM);
// handlerSubmissionsByCommandId.put(commandId, handlerSubmission);
//
// // Either submit the new handler myself, or simply re-activate.
// if (parent != null) {
// if (active) {
// parent.activateNestedService(this);
// }
// } else {
// PlatformUI.getWorkbench().getCommandSupport()
// .addHandlerSubmission(handlerSubmission);
// }
// }
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.ui.INestableKeyBindingService#removeKeyBindingService(org.eclipse.ui.IWorkbenchSite)
// */
// public boolean removeKeyBindingService(IWorkbenchSite nestedSite) {
// if (disposed) {
// return false;
// }
//
// final IKeyBindingService service = (IKeyBindingService) nestedServices
// .remove(nestedSite);
// if (service == null) {
// return false;
// }
//
// if (service.equals(activeService)) {
// deactivateNestedService();
// }
//
// return true;
// }
//
// public void setScopes(String[] scopes) {
// if (disposed) {
// return;
// }
//
// // Either deactivate myself, or remove the previous submissions myself.
// boolean active = false;
// if ((parent != null) && (parent.activeService == this)) {
// active = true;
// parent.deactivateNestedService();
// } else {
// PlatformUI.getWorkbench().getContextSupport()
// .removeEnabledSubmissions(enabledSubmissions);
// }
// enabledSubmissions.clear();
//
// // Determine the new list of submissions.
// enabledContextIds = new HashSet(Arrays.asList(scopes));
// for (Iterator iterator = enabledContextIds.iterator(); iterator
// .hasNext();) {
// String contextId = (String) iterator.next();
// enabledSubmissions.add(new EnabledSubmission(null, null,
// workbenchPartSite, contextId));
// }
//
// // Submit the new contexts myself, or simply re-active myself.
// if (parent != null) {
// if (active) {
// parent.activateNestedService(this);
// }
// } else {
// PlatformUI.getWorkbench().getContextSupport().addEnabledSubmissions(
// enabledSubmissions);
// }
// }
//
// public void unregisterAction(IAction action) {
// if (disposed) {
// return;
// }
//
// if (action instanceof CommandLegacyActionWrapper) {
// // this is a registration of a fake action for an already
// // registered handler
// WorkbenchPlugin
// .log("Cannot unregister a CommandLegacyActionWrapper out of the system"); //$NON-NLS-1$
// return;
// }
//
// String commandId = action.getActionDefinitionId();
//
// if (commandId != null) {
// // Deactivate this service while making changes.
// boolean active = false;
// if ((parent != null) && (parent.activeService == this)) {
// active = true;
// parent.deactivateNestedService();
// }
//
// // Remove the current submission, if any.
// HandlerSubmission handlerSubmission = (HandlerSubmission) handlerSubmissionsByCommandId
// .remove(commandId);
//
// /*
// * Either activate this service again, or remove the submission
// * myself.
// */
// if (parent != null) {
// if (active) {
// parent.activateNestedService(this);
// }
// } else {
// if (handlerSubmission != null) {
// PlatformUI.getWorkbench().getCommandSupport()
// .removeHandlerSubmission(handlerSubmission);
// handlerSubmission.getHandler().dispose();
// }
// }
// }
// }
//}