org.eclipse.ui.internal.ActionSetActionBars 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 java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IContributionManager;
import org.eclipse.jface.action.ICoolBarManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.SubMenuManager;
import org.eclipse.jface.action.SubToolBarManager;
import org.eclipse.jface.internal.provisional.action.IToolBarContributionItem;
import org.eclipse.ui.IActionBars2;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.SubActionBars2;
import org.eclipse.ui.internal.provisional.application.IActionBarConfigurer2;
import org.eclipse.ui.services.IServiceLocator;
/**
* This class represents the action bars for an action set.
*/
public class ActionSetActionBars extends SubActionBars2 {
private IActionBarConfigurer2 actionBarConfigurer = null;
private String actionSetId;
private ArrayList adjunctContributions = new ArrayList();
private IToolBarManager coolItemToolBarMgr = null;
private IToolBarContributionItem toolBarContributionItem = null;
/**
* Constructs a new action bars object
*/
public ActionSetActionBars(IActionBars2 parent, IServiceLocator serviceLocator, IActionBarConfigurer2 actionBarConfigurer, String actionSetId) {
super(parent, serviceLocator);
this.actionSetId = actionSetId;
this.actionBarConfigurer = actionBarConfigurer;
}
/**
* Adds to the list all the actions that are part of this action set but
* belong to different cool bar items.
*
* @param item
* the item defined in this actionset but in a different tool Bar
* contribution item
*/
/* package */void addAdjunctContribution(IContributionItem item) {
adjunctContributions.add(item);
}
/*
* (non-Javadoc) Inherited from SubActionBars.
*/
protected SubMenuManager createSubMenuManager(IMenuManager parent) {
return new ActionSetMenuManager(parent, actionSetId);
}
/*
* (non-Javadoc) Inherited from SubActionBars.
*/
protected SubToolBarManager createSubToolBarManager(IToolBarManager parent) {
// return null, action sets are managed by CoolItemToolBarManagers
return null;
}
/**
* Dispose the contributions.
*/
public void dispose() {
super.dispose();
if (coolItemToolBarMgr == null) {
return;
}
IContributionItem[] items = coolItemToolBarMgr.getItems();
// remove the action set's items from its action bar, don't use
// removeAll since other items from other actions sets may be in
// the action bar's cool item
for (int i = 0; i < items.length; i++) {
IContributionItem item = items[i];
if (item instanceof PluginActionCoolBarContributionItem) {
PluginActionCoolBarContributionItem actionSetItem = (PluginActionCoolBarContributionItem) item;
if (actionSetItem.getActionSetId().equals(actionSetId)) {
coolItemToolBarMgr.remove(item);
item.dispose();
}
} else {
// leave separators and group markers intact, doing
// so allows ordering to be maintained when action sets
// are removed then added back
}
}
// remove items from this action set that are in other action bars
for (int i = 0; i < adjunctContributions.size(); i++) {
ContributionItem item = (ContributionItem) adjunctContributions
.get(i);
IContributionManager parent = item.getParent();
if (parent != null) {
parent.remove(item);
item.dispose();
}
}
toolBarContributionItem = null;
coolItemToolBarMgr = null;
adjunctContributions = new ArrayList();
}
/**
* Returns the contribution item that the given contribution item should be
* inserted after.
*
* @param startId
* the location to start looking alphabetically.
* @param itemId
* the target item id.
* @param mgr
* the contribution manager.
* @return the contribution item that the given items should be returned
* after.
*
* @since 3.0
*/
private IContributionItem findAlphabeticalOrder(String startId,
String itemId, IContributionManager mgr) {
IContributionItem[] items = mgr.getItems();
int insertIndex = 0;
// look for starting point
while (insertIndex < items.length) {
IContributionItem item = items[insertIndex];
if (item.getId() != null && item.getId().equals(startId)) {
break;
}
++insertIndex;
}
// Find the index that this item should be inserted in
for (int i = insertIndex + 1; i < items.length; i++) {
IContributionItem item = items[i];
String testId = item.getId();
if (item.isGroupMarker()) {
break;
}
if (itemId != null && testId != null) {
if (itemId.compareTo(testId) < 1) {
break;
}
}
insertIndex = i;
}
// Should be inserted at the end
if (insertIndex >= items.length) {
return null;
}
return items[insertIndex];
}
/* package */String getActionSetId() {
return actionSetId;
}
/**
* Returns a tool bar manager for this Item.
*
* @return the tool bar manager
*/
public IToolBarManager getToolBarManager() {
ICoolBarManager coolBarManager = getCastedParent().getCoolBarManager();
if (coolBarManager == null) {
return null;
}
return actionBarConfigurer.createToolBarManager();
}
/**
* Returns the correct tool bar for the given action id. If this action is
* an adjunct type the it returns the toolbar manager from the cool bar
* manager.
*
* @param id
* the id of the action
* @return the tool bar manager
*/
public IToolBarManager getToolBarManager(String actionId) {
// Check if a tool bar manager for an adjunct type is being requested
String toolBarId = actionSetId;
boolean isAdjunctType = false;
if (!actionId.equals(actionSetId)) {
// Adjunct type
toolBarId = actionId;
isAdjunctType = true;
}
// Rereive the cool bar manager
ICoolBarManager coolBarManager = getCastedParent().getCoolBarManager();
if (coolBarManager == null) {
return null;
}
// Check to see that there isn't already a tool bar created
// and the tool bar being requested is not for an adjunct action
if ((coolItemToolBarMgr != null) && (!isAdjunctType)) {
return coolItemToolBarMgr;
}
// Search for toolBarId in the cool Bar manager
IContributionItem cbItem = coolBarManager.find(toolBarId);
// If there hasn't been a tool bar contribution item created for this
// tool bar
// id then create one. Otherwise retrieve the tool bar contribution
// item
if (cbItem instanceof IToolBarContributionItem) {
IToolBarContributionItem tbcbItem = (IToolBarContributionItem) cbItem;
coolItemToolBarMgr = tbcbItem.getToolBarManager();
// If this not an adjuct type then we can cashe the tool bar
// contribution type
if (!isAdjunctType) {
toolBarContributionItem = tbcbItem;
}
} else {
coolItemToolBarMgr = actionBarConfigurer.createToolBarManager();
// If this is not an adjunct type then create a tool bar
// contribution item
// we don't create one for an adjunct type because another action
// set action bars contains one
IContributionItem toolBarContributionItem = actionBarConfigurer
.createToolBarContributionItem(coolItemToolBarMgr,
toolBarId);
toolBarContributionItem.setParent(coolItemToolBarMgr);
toolBarContributionItem.setVisible(getActive());
coolItemToolBarMgr.markDirty();
// Now add the tool bar contribution Item to the cool bar manager
IContributionItem refItem = findAlphabeticalOrder(
IWorkbenchActionConstants.MB_ADDITIONS, toolBarId,
coolBarManager);
if (refItem != null) {
coolBarManager.insertAfter(refItem.getId(),
toolBarContributionItem);
} else {
coolBarManager.add(toolBarContributionItem);
}
}
return coolItemToolBarMgr;
}
// for dynamic UI
/* package */void removeAdjunctContribution(ContributionItem item) {
adjunctContributions.remove(item);
}
/**
* Activate / Deactivate the contributions.
*/
protected void setActive(boolean set) {
super.setActive(set);
ICoolBarManager coolBarManager = getCastedParent().getCoolBarManager();
if (coolBarManager == null) {
return;
}
// 1. Need to set visibility for all non-adjunct actions
if (coolItemToolBarMgr != null) {
IContributionItem[] items = coolItemToolBarMgr.getItems();
for (int i = 0; i < items.length; i++) {
IContributionItem item = items[i];
if (item instanceof PluginActionCoolBarContributionItem) {
PluginActionCoolBarContributionItem actionSetItem = (PluginActionCoolBarContributionItem) item;
// Only if the action set id for this contribution item is
// the same
// as this object
if (actionSetItem.getActionSetId().equals(actionSetId)) {
item.setVisible(set);
coolItemToolBarMgr.markDirty();
if (!coolBarManager.isDirty()) {
coolBarManager.markDirty();
}
}
}
}
// Update the manager
coolItemToolBarMgr.update(false);
if (toolBarContributionItem != null) {
toolBarContributionItem.update(ICoolBarManager.SIZE);
}
}
// 2. Need to set visibility for all adjunct actions
if (adjunctContributions.size() > 0) {
for (Iterator i = adjunctContributions.iterator(); i.hasNext();) {
IContributionItem item = (IContributionItem) i.next();
if (item instanceof ContributionItem) {
item.setVisible(set);
IContributionManager manager = ((ContributionItem) item)
.getParent();
manager.markDirty();
manager.update(false);
if (!coolBarManager.isDirty()) {
coolBarManager.markDirty();
}
item.update(ICoolBarManager.SIZE);
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy