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.actions;
011:
012: import org.eclipse.jface.action.IMenuManager;
013: import org.eclipse.ui.IActionBars;
014:
015: /**
016: * An <code>ActionGroup</code> represents a group of actions
017: * which are added to a context menu, or the action bars of a part, together.
018: * The group is given a context which can be used to determine which actions
019: * are added, and what their enabled state should be.
020: * <p>
021: * This class is intended only as a convenience for managing groups of actions.
022: * Clients are not required to use this class in order to add actions to context
023: * menus or action bars.
024: * </p>
025: * <p>
026: * Clients should subclass this class and extend or override the appropriate fill methods.
027: * </p>
028: *
029: * @since 2.0
030: */
031: public abstract class ActionGroup {
032:
033: /**
034: * The action context, used to determine which actions are added,
035: * and what their enabled state should be.
036: */
037: private ActionContext context;
038:
039: /**
040: * Returns the context used to determine which actions are added,
041: * and what their enabled state should be.
042: */
043: public ActionContext getContext() {
044: return context;
045: }
046:
047: /**
048: * Sets the context used to determine which actions are added,
049: * and what their enabled state should be.
050: *
051: * @param context the context to use
052: */
053: public void setContext(ActionContext context) {
054: this .context = context;
055: }
056:
057: /**
058: * Adds the applicable actions to a context menu,
059: * based on the state of the <code>ActionContext</code>.
060: * <p>
061: * The default implementation does nothing.
062: * Subclasses may override or extend this method.
063: * </p>
064: *
065: * @param menu the context menu manager
066: */
067: public void fillContextMenu(IMenuManager menu) {
068: // do nothing
069: }
070:
071: /**
072: * Adds the applicable actions to a part's action bars,
073: * including setting any global action handlers.
074: * <p>
075: * The default implementation does nothing.
076: * Subclasses may override or extend this method.
077: * </p>
078: *
079: * @param actionBars the part's action bars
080: */
081: public void fillActionBars(IActionBars actionBars) {
082: // do nothing
083: }
084:
085: /**
086: * Updates the state of the actions added to the action bars,
087: * including any global action handlers,
088: * based on the state of the <code>ActionContext</code>.
089: * <p>
090: * The default implementation does nothing.
091: * Subclasses may override or extend this method.
092: * </p>
093: */
094: public void updateActionBars() {
095: // do nothing
096: }
097:
098: /**
099: * This method is called by the user of an action group to signal that the group is
100: * no longer needed. Subclasses typically implement this method to deregister
101: * any listeners or to free other resources.
102: * <p>
103: * The default implementation calls <code>setContext(null)</code>.
104: * Subclasses may extend this method.
105: * </p>
106: */
107: public void dispose() {
108: setContext(null);
109: }
110: }
|