001: /*******************************************************************************
002: * Copyright (c) 2000, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.ui.help;
011:
012: import java.util.ArrayList;
013:
014: import org.eclipse.core.runtime.Assert;
015: import org.eclipse.help.IContext;
016: import org.eclipse.swt.events.HelpEvent;
017: import org.eclipse.swt.widgets.Control;
018: import org.eclipse.ui.IViewPart;
019:
020: /**
021: * For determining the help context for controls in a view.
022: * <p>
023: * This class may be instantiated; it is not intended to be subclassed.
024: * </p>
025: * @deprecated nested contexts are no longer supported by the help support system
026: */
027: public class ViewContextComputer implements IContextComputer {
028: private IViewPart view;
029:
030: private ArrayList contextList;
031:
032: private Object context;
033:
034: /**
035: * Creates a new context computer for the given view and help context.
036: *
037: * @param viewPart the view
038: * @param helpContext a single help context id (type <code>String</code>) or
039: * help context object (type <code>IContext</code>)
040: */
041: public ViewContextComputer(IViewPart viewPart, Object helpContext) {
042: Assert.isTrue(helpContext instanceof String
043: || helpContext instanceof IContext);
044: view = viewPart;
045: context = helpContext;
046: }
047:
048: /**
049: * Add the contexts to the context list.
050: *
051: * @param object the contexts (<code>Object[]</code> or <code>IContextComputer</code>)
052: * @param event the help event
053: */
054: private void addContexts(Object object, HelpEvent event) {
055: Assert.isTrue(object instanceof Object[]
056: || object instanceof IContextComputer
057: || object instanceof String);
058:
059: if (object instanceof String) {
060: contextList.add(object);
061: return;
062: }
063:
064: Object[] contexts;
065: if (object instanceof IContextComputer) {
066: // get local contexts
067: contexts = ((IContextComputer) object)
068: .getLocalContexts(event);
069: } else {
070: contexts = (Object[]) object;
071: }
072:
073: // copy the contexts into our list
074: for (int i = 0; i < contexts.length; i++) {
075: contextList.add(contexts[i]);
076: }
077: }
078:
079: /**
080: * Add the contexts for the given control to the context list.
081: *
082: * @param control the control from which to obtain the contexts
083: * @param event the help event
084: */
085: private void addContextsForControl(Control control, HelpEvent event) {
086: // See if there is are help contexts on the control
087: Object object = WorkbenchHelp.getHelp(control);
088:
089: if (object == null || object == this ) {
090: // We need to check for this in order to avoid recursion
091: return;
092: }
093:
094: addContexts(object, event);
095: }
096:
097: /* (non-Javadoc)
098: * Method declared on IContextComputer.
099: */
100: public Object[] computeContexts(HelpEvent event) {
101: contextList = new ArrayList();
102:
103: // Add the local context
104: contextList.add(context);
105:
106: // Add the contexts for the window shell
107: addContextsForControl(view.getSite().getShell(), event);
108:
109: // Return the contexts
110: return contextList.toArray();
111: }
112:
113: /* (non-Javadoc)
114: * Method declared on IContextComputer.
115: */
116: public Object[] getLocalContexts(HelpEvent event) {
117: return new Object[] { context };
118: }
119: }
|