| /****************************************************************************** |
| * Copyright (c) 2002, 2006 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.gmf.runtime.diagram.ui.parts; |
| |
| import org.eclipse.gef.ui.actions.ActionBarContributor; |
| import org.eclipse.gmf.runtime.common.core.util.Trace; |
| import org.eclipse.gmf.runtime.common.ui.services.action.contributionitem.ContributionItemService; |
| import org.eclipse.gmf.runtime.common.ui.util.IWorkbenchPartDescriptor; |
| import org.eclipse.gmf.runtime.common.ui.util.WorkbenchPartDescriptor; |
| import org.eclipse.gmf.runtime.diagram.ui.internal.DiagramUIDebugOptions; |
| import org.eclipse.gmf.runtime.diagram.ui.internal.DiagramUIPlugin; |
| import org.eclipse.ui.IActionBars; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.activities.ActivityManagerEvent; |
| import org.eclipse.ui.activities.IActivityManagerListener; |
| |
| /** |
| * @author melaasar, cmahoney |
| * |
| * An abstract implementation of a diagram editor action bar contributor |
| * It contributes generic items that applies to all diagrams |
| */ |
| public abstract class DiagramActionBarContributor |
| extends ActionBarContributor { |
| |
| /** |
| * Listens for activity/capability events. |
| * |
| * @author cmahoney |
| */ |
| class ActivityManagerListener |
| implements IActivityManagerListener { |
| |
| public void activityManagerChanged( |
| ActivityManagerEvent activityManagerEvent) { |
| if (activityManagerEvent.haveEnabledActivityIdsChanged()) { |
| updateActionBars(); |
| } |
| } |
| } |
| |
| /** |
| * The activity listener. |
| */ |
| private ActivityManagerListener activityManagerListener; |
| |
| private IWorkbenchPartDescriptor descriptor; |
| |
| /** |
| * @see org.eclipse.ui.part.EditorActionBarContributor#init(org.eclipse.ui.IActionBars) |
| */ |
| public void init(final IActionBars bars) { |
| super.init(bars); |
| |
| descriptor = |
| new WorkbenchPartDescriptor( |
| getEditorId(), |
| getEditorClass(), |
| getPage()); |
| |
| try { |
| // getEditingDomain().runExclusive(new Runnable() { |
| // |
| // public void run() { |
| ContributionItemService.getInstance() |
| .contributeToActionBars(bars, descriptor); |
| // } |
| // }); |
| }catch (Exception e) { |
| Trace.catching(DiagramUIPlugin.getInstance(), |
| DiagramUIDebugOptions.EXCEPTIONS_CATCHING, getClass(), |
| "init()", //$NON-NLS-1$ |
| e); |
| } |
| |
| bars.updateActionBars(); |
| |
| activityManagerListener = new ActivityManagerListener(); |
| PlatformUI.getWorkbench().getActivitySupport().getActivityManager() |
| .addActivityManagerListener(activityManagerListener); |
| } |
| |
| /** |
| * @see org.eclipse.ui.IEditorActionBarContributor#dispose() |
| */ |
| public void dispose() { |
| ContributionItemService.getInstance().disposeContributions(descriptor); |
| descriptor = null; |
| |
| if (activityManagerListener != null) { |
| PlatformUI.getWorkbench().getActivitySupport().getActivityManager() |
| .removeActivityManagerListener(activityManagerListener); |
| } |
| activityManagerListener = null; |
| |
| super.dispose(); |
| } |
| |
| /** |
| * @see org.eclipse.gef.ui.actions.ActionBarContributor#buildActions() |
| */ |
| protected void buildActions() { |
| // empty impl |
| } |
| |
| /** |
| * @see org.eclipse.gef.ui.actions.ActionBarContributor#declareGlobalActionKeys() |
| */ |
| protected void declareGlobalActionKeys() { |
| // empty impl |
| } |
| |
| /** |
| * Returns the id of the editor configured with this contributor |
| * |
| * @return The editor's id configured with this contribution |
| */ |
| protected abstract String getEditorId(); |
| |
| /** |
| * Returns the class of the editor configured with this contributor |
| * |
| * @return The editor's class configured with this contribution |
| */ |
| protected abstract Class getEditorClass(); |
| |
| // protected abstract TransactionalEditingDomain getEditingDomain(); |
| |
| /** |
| * Updates the actionbars to show/hide contribution items as applicable. |
| */ |
| private void updateActionBars() { |
| |
| // get the new contributions |
| ContributionItemService.getInstance().updateActionBars(getActionBars(), |
| descriptor); |
| |
| // refresh the UI |
| getActionBars().updateActionBars(); |
| } |
| |
| } |