org.eclipse.ui.internal.ViewerActionBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of workbench Show documentation
Show all versions of workbench Show documentation
This plug-in contains the bulk of the Workbench implementation, and depends on JFace, SWT, and Core Runtime. It cannot be used independently from org.eclipse.ui. Workbench client plug-ins should not depend directly on this plug-in.
The newest version!
/*******************************************************************************
* Copyright (c) 2000, 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.ui.internal;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
/**
* This class reads the registry for extensions that plug into
* 'popupMenus' extension point and deals only with the 'viewerContribution'
* elements.
*/
public class ViewerActionBuilder extends PluginActionBuilder {
private ISelectionProvider provider;
private IWorkbenchPart part;
/**
* Basic contstructor
*/
public ViewerActionBuilder() {
}
/* (non-Javadoc)
* Method declared on PluginActionBuilder.
*/
protected ActionDescriptor createActionDescriptor(
IConfigurationElement element) {
if (part instanceof IViewPart) {
return new ActionDescriptor(element, ActionDescriptor.T_VIEW, part);
}
return new ActionDescriptor(element, ActionDescriptor.T_EDITOR, part);
}
/* (non-Javadoc)
* Method declared on PluginActionBuilder.
*/
protected BasicContribution createContribution() {
return new ViewerContribution(provider);
}
/**
* Dispose of the action builder
*/
public void dispose() {
if (cache != null) {
for (int i = 0; i < cache.size(); i++) {
((BasicContribution) cache.get(i)).dispose();
}
cache = null;
}
}
/* (non-Javadoc)
* Method declared on PluginActionBuilder.
*/
protected boolean readElement(IConfigurationElement element) {
String tag = element.getName();
// Found visibility sub-element
if (currentContribution != null && tag.equals(IWorkbenchRegistryConstants.TAG_VISIBILITY)) {
((ViewerContribution) currentContribution)
.setVisibilityTest(element);
return true;
}
return super.readElement(element);
}
/**
* Reads the contributions for a viewer menu.
* This method is typically used in conjunction with contribute
to read
* and then insert actions for a particular viewer menu.
*
* @param id the menu id
* @param prov the selection provider for the control containing the menu
* @param part the part containing the menu.
* @return true
if 1 or more items were read.
*/
public boolean readViewerContributions(String id, ISelectionProvider prov,
IWorkbenchPart part) {
Assert.isTrue(part instanceof IViewPart || part instanceof IEditorPart);
provider = prov;
this.part = part;
readContributions(id, IWorkbenchRegistryConstants.TAG_VIEWER_CONTRIBUTION,
IWorkbenchRegistryConstants.PL_POPUP_MENU);
return (cache != null);
}
/**
* Helper class to collect the menus and actions defined within a
* contribution element.
*/
private static class ViewerContribution extends BasicContribution implements ISelectionChangedListener {
private ISelectionProvider selProvider;
private ActionExpression visibilityTest;
/**
* Create a new ViewerContribution.
*
* @param selProvider the selection provider
*/
public ViewerContribution(ISelectionProvider selProvider) {
super();
this.selProvider = selProvider;
if (selProvider != null) {
selProvider.addSelectionChangedListener(this);
}
}
/**
* Set the visibility test.
*
* @param element the element
*/
public void setVisibilityTest(IConfigurationElement element) {
visibilityTest = new ActionExpression(element);
}
/* (non-Javadoc)
* Method declared on BasicContribution.
*/
public void contribute(IMenuManager menu, boolean menuAppendIfMissing,
IToolBarManager toolbar, boolean toolAppendIfMissing) {
boolean visible = true;
if (visibilityTest != null) {
ISelection selection = selProvider.getSelection();
if (selection instanceof IStructuredSelection) {
visible = visibilityTest
.isEnabledFor((IStructuredSelection) selection);
} else {
visible = visibilityTest.isEnabledFor(selection);
}
}
if (visible) {
super.contribute(menu, menuAppendIfMissing, toolbar,
toolAppendIfMissing);
}
}
/* (non-Javadoc)
* @see org.eclipse.ui.internal.PluginActionBuilder.BasicContribution#dispose()
*/
public void dispose() {
if (selProvider != null) {
selProvider.removeSelectionChangedListener(this);
}
disposeActions();
super.dispose();
}
/**
* Rather than hooking up each action as a selection listener,
* the contribution itself is added, and propagates
* the selection changed notification to all actions.
* This simplifies cleanup, in addition to potentially reducing the number of listeners.
*
* @see ISelectionChangedListener
* @since 3.1
*/
public void selectionChanged(SelectionChangedEvent event) {
if (actions != null) {
if (actions != null) {
for (int i = 0; i < actions.size(); i++) {
PluginAction proxy = ((ActionDescriptor) actions.get(i))
.getAction();
proxy.selectionChanged(event);
}
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy