blob: 44c7ea108b62f47a3b3b26706c565dfac7ce0e33 [file] [log] [blame]
package org.eclipse.ui.internal;
/*
* Copyright (c) 2002 IBM Corp. All rights reserved.
* This file is made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*/
import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.jface.action.*;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.ui.part.CoolItemGroupMarker;
import org.eclipse.ui.IWorkbenchActionConstants;
/**
* CoolItemMultiToolBarManager class
*/
public class CoolItemMultiToolBarManager extends CoolItemToolBarManager {
ArrayList coolBarItems = new ArrayList();
boolean active = false;
String id;
boolean coolItemsCreated = false;
public void add(IAction action) {
if (!coolItemsCreated) {
super.add(action);
return;
}
CoolBarContributionItem cbItem = ((CoolBarContributionItem) coolBarItems.get(coolBarItems.size() - 1));
cbItem.getToolBarManager().add(action);
if (cbItem.hasDisplayableItems()) setVisible(true);
}
public void add(IContributionItem item) {
if (!coolItemsCreated) {
super.add(item);
return;
}
CoolBarContributionItem cbItem = ((CoolBarContributionItem) coolBarItems.get(coolBarItems.size() - 1));
cbItem.getToolBarManager().add(item);
if (cbItem.hasDisplayableItems()) setVisible(true);
}
public void appendToGroup(String groupName, IAction action) {
if (!coolItemsCreated) {
super.appendToGroup(groupName, action);
return;
}
CoolBarContributionItem cbItem = findGroup(groupName);
if (cbItem != null) {
cbItem.getToolBarManager().add(action);
if (cbItem.hasDisplayableItems()) setVisible(true);
} else {
cbItem = findGroupFor(groupName);
if (cbItem != null) {
cbItem.getToolBarManager().appendToGroup(groupName, action);
if (cbItem.hasDisplayableItems()) setVisible(true);
}
}
}
public void appendToGroup(String groupName, IContributionItem item) {
if (!coolItemsCreated) {
super.appendToGroup(groupName, item);
return;
}
CoolBarContributionItem cbItem = findGroup(groupName);
if (cbItem != null) {
cbItem.getToolBarManager().add(item);
if (cbItem.hasDisplayableItems()) setVisible(true);
} else {
cbItem = findGroupFor(groupName);
if (cbItem != null) {
cbItem.getToolBarManager().appendToGroup(groupName, item);
if (cbItem.hasDisplayableItems()) setVisible(true);
}
}
}
/**
* NOT VALID for multiple CoolItem case
*/
public ToolBar createControl(Composite parent) {
if (!coolItemsCreated) {
return super.createControl(parent);
}
return null;
}
/**
* Disposes of this tool bar manager and frees all allocated SWT resources.
* Note that this method does not clean up references between this tool bar
* manager and its associated contribution items.
* Use <code>removeAll</code> for that purpose.
*/
public void dispose() {
if (!coolItemsCreated) {
super.dispose();
return;
}
for (Iterator e = coolBarItems.iterator(); e.hasNext();) {
CoolBarContributionItem cbItem = (CoolBarContributionItem) e.next();
cbItem.getToolBarManager().dispose();
}
super.dispose();
}
public IContributionItem find(String id) {
if (!coolItemsCreated) {
return super.find(id);
}
for (Iterator e = coolBarItems.iterator(); e.hasNext();) {
CoolBarContributionItem cbItem = (CoolBarContributionItem) e.next();
IContributionItem item = cbItem.getToolBarManager().find(id);
if (item != null) return item;
}
return null;
}
protected CoolBarContributionItem findGroup(String id) {
for (Iterator e = coolBarItems.iterator(); e.hasNext();) {
CoolBarContributionItem cbItem = (CoolBarContributionItem) e.next();
if (cbItem.getId().equals(id))
return cbItem;
}
return null;
}
protected CoolBarContributionItem findGroupFor(String id) {
for (Iterator e = coolBarItems.iterator(); e.hasNext();) {
CoolBarContributionItem cbItem = (CoolBarContributionItem) e.next();
IContributionItem item = cbItem.getToolBarManager().find(id);
if (item != null)
return cbItem;
}
return null;
}
/**
* NOT VALID for multiple CoolItem case
*/
public ToolBar getControl() {
if (!coolItemsCreated) {
return super.getControl();
}
return null;
}
public void prependToGroup(String groupName, IAction action) {
if (!coolItemsCreated) {
super.prependToGroup(groupName, action);
return;
}
CoolBarContributionItem cbItem = findGroup(groupName);
if (cbItem != null) {
cbItem.getToolBarManager().prependToGroup(groupName, action);
if (cbItem.hasDisplayableItems()) setVisible(true);
} else {
cbItem = findGroupFor(groupName);
if (cbItem != null) {
cbItem.getToolBarManager().prependToGroup(groupName, action);
if (cbItem.hasDisplayableItems()) setVisible(true);
}
}
}
public void prependToGroup(String groupName, IContributionItem item) {
if (!coolItemsCreated) {
super.prependToGroup(groupName, item);
return;
}
CoolBarContributionItem cbItem = findGroup(groupName);
if (cbItem != null) {
cbItem.getToolBarManager().prependToGroup(groupName, item);
if (cbItem.hasDisplayableItems()) setVisible(true);
} else {
cbItem = findGroupFor(groupName);
if (cbItem != null) {
cbItem.getToolBarManager().prependToGroup(groupName, item);
if (cbItem.hasDisplayableItems()) setVisible(true);
}
}
}
public void update(boolean force) {
if (!coolItemsCreated) {
super.update(force);
return;
}
for (Iterator e = coolBarItems.iterator(); e.hasNext();) {
CoolBarContributionItem cbItem = (CoolBarContributionItem) e.next();
cbItem.getToolBarManager().update(force);
}
getParentManager().update(force);
}
public CoolItemMultiToolBarManager(CoolBarManager parentManager, String id, boolean active) {
super(parentManager.getStyle());
this.parentManager = parentManager;
this.active = active;
this.id = id;
}
public void createCoolBarContributionItems() {
if (!isCoolItemGrouped()) {
// Don't create groups.
this.add(new GroupMarker(IWorkbenchActionConstants.GROUP_EDITOR));
CoolBarContributionItem coolBarItem = new CoolBarContributionItem(parentManager, this, id);
parentManager.add(coolBarItem);
this.setVisible(active);
return;
}
ArrayList groupedItems = getGroups();
if (groupedItems.size() > 0) {
coolItemsCreated = true;
}
for (Iterator groupIter = groupedItems.iterator(); groupIter.hasNext();) {
ArrayList items = (ArrayList) groupIter.next();
if (!items.isEmpty()) {
String groupId = ((IContributionItem) items.get(0)).getId();
CoolItemToolBarManager tBarMgr = createGroup(groupId);
for (Iterator itemIter = items.iterator(); itemIter.hasNext();) {
tBarMgr.add((IContributionItem) itemIter.next());
}
}
}
}
protected CoolItemToolBarManager createGroup(String groupId) {
CoolItemToolBarManager tBarMgr = new CoolItemToolBarManager(parentManager.getStyle());
tBarMgr.setOverrides(getOverrides());
CoolBarContributionItem coolBarItem = new CoolBarContributionItem(parentManager, tBarMgr, groupId);
parentManager.add(coolBarItem);
coolBarItems.add(coolBarItem);
coolBarItem.setVisible(active);
return tBarMgr;
}
/**
* NOT VALID for multiple CoolItem case
*/
protected CoolBarContributionItem getCoolBarItem() {
if (!coolItemsCreated) {
return super.getCoolBarItem();
}
return null;
}
public IContributionItem[] getItems() {
if (!coolItemsCreated) {
return super.getItems();
}
ArrayList allItems = new ArrayList();
for (Iterator e = coolBarItems.iterator(); e.hasNext();) {
CoolBarContributionItem cbItem = (CoolBarContributionItem) e.next();
IContributionItem[] items = cbItem.getToolBarManager().getItems();
for (int i=0; i<items.length; i++) {
allItems.add(items[i]);
}
}
IContributionItem[] items = new IContributionItem[allItems.size()];
allItems.toArray(items);
return items;
}
protected boolean hasDynamicItems() {
if (!coolItemsCreated) {
return super.hasDynamicItems();
}
return false;
}
protected ArrayList getGroups() {
ArrayList groups = new ArrayList();
IContributionItem[] items = getItems();
if (items.length == 0)
return groups;
ArrayList group = new ArrayList();
IContributionItem firstItem = items[0];
int start = 0;
if (isCoolItemMarker(firstItem)) {
group.add(firstItem);
start = 1;
} else {
group.add(new CoolItemGroupMarker(id));
}
for (int i = start; i < items.length; i++) {
IContributionItem item = items[i];
if (isCoolItemMarker(item)) {
groups.add(group);
group = new ArrayList();
group.add(item);
} else {
group.add(item);
}
}
groups.add(group);
return groups;
}
public void insertAfter(String ID, IAction action) {
if (!coolItemsCreated) {
super.insertAfter(ID, action);
return;
}
CoolBarContributionItem cbItem = findGroupFor(ID);
if (cbItem != null) {
cbItem.getToolBarManager().insertAfter(ID, action);
if (cbItem.hasDisplayableItems()) setVisible(true);
}
}
public void insertAfter(String ID, IContributionItem item) {
if (!coolItemsCreated) {
super.insertAfter(ID, item);
return;
}
CoolBarContributionItem cbItem = findGroupFor(ID);
if (cbItem != null) {
cbItem.getToolBarManager().insertAfter(ID, item);
if (cbItem.hasDisplayableItems()) setVisible(true);
}
}
public void insertBefore(String ID, IAction action) {
if (!coolItemsCreated) {
super.insertBefore(ID, action);
return;
}
CoolBarContributionItem cbItem = findGroupFor(ID);
if (cbItem != null) {
cbItem.getToolBarManager().insertBefore(ID, action);
if (cbItem.hasDisplayableItems()) setVisible(true);
}
}
public void insertBefore(String ID, IContributionItem item) {
if (!coolItemsCreated) {
super.insertBefore(ID, item);
return;
}
CoolBarContributionItem cbItem = findGroupFor(ID);
if (cbItem != null) {
cbItem.getToolBarManager().insertBefore(ID, item);
if (cbItem.hasDisplayableItems()) setVisible(true);
}
}
public boolean isDirty() {
if (!coolItemsCreated) {
return super.isDirty();
}
for (Iterator e = coolBarItems.iterator(); e.hasNext();) {
CoolBarContributionItem cbItem = (CoolBarContributionItem) e.next();
if (cbItem.getToolBarManager().isDirty())
return true;
}
return super.isDirty();
}
protected boolean isCoolItemMarker(IContributionItem item) {
return item instanceof CoolItemGroupMarker;
}
protected boolean isCoolItemGrouped() {
IContributionItem[] items = getItems();
for (int i=0; i<items.length; i++) {
IContributionItem item = items[i];
if (isCoolItemMarker(item)) return true;
}
return false;
}
public IContributionItem remove(IContributionItem item) {
if (!coolItemsCreated) {
return super.remove(item);
}
CoolBarContributionItem cbItem = findGroupFor(item.getId());
if (cbItem != null) {
IContributionItem removed = cbItem.getToolBarManager().remove(item);
if (!cbItem.hasDisplayableItems()) cbItem.setVisible(false);
return removed;
}
return null;
}
public IContributionItem remove(String ID) {
if (!coolItemsCreated) {
return super.remove(ID);
}
CoolBarContributionItem cbItem = findGroupFor(ID);
if (cbItem != null) {
IContributionItem removed = cbItem.getToolBarManager().remove(ID);
if (!cbItem.hasDisplayableItems()) cbItem.setVisible(false);
return removed;
}
return null;
}
public void removeAll() {
if (!coolItemsCreated) {
super.removeAll();
return;
}
for (Iterator e = coolBarItems.iterator(); e.hasNext();) {
CoolBarContributionItem cbItem = (CoolBarContributionItem) e.next();
cbItem.getToolBarManager().removeAll();
}
coolBarItems.clear();
setDirty(true);
}
/**
* NOT VALID for multiple CoolItem case
*/
protected void setCoolBarItem(CoolBarContributionItem coolBarItem) {
if (!coolItemsCreated) {
super.setCoolBarItem(coolBarItem);
}
}
protected void setVisible(boolean set) {
super.setVisible(set);
if (!coolItemsCreated) {
return;
}
for (Iterator e = coolBarItems.iterator(); e.hasNext();) {
CoolBarContributionItem cbItem = (CoolBarContributionItem) e.next();
cbItem.setVisible(set);
}
}
protected void setVisible(boolean set, boolean forceVisibility) {
super.setVisible(set, forceVisibility);
if (!coolItemsCreated) {
return;
}
for (Iterator e = coolBarItems.iterator(); e.hasNext();) {
CoolBarContributionItem cbItem = (CoolBarContributionItem) e.next();
cbItem.setVisible(set, forceVisibility);
}
}
}