/******************************************************************************* * Copyright (c) 2007 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.jface.action.ContributionItem; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.ui.IViewReference; import org.eclipse.ui.internal.layout.TrimToolBarBase; /** * @since 3.3 * */ public class ViewStackTrimToolBar extends TrimToolBarBase { private boolean restoreOnUnzoom = false; // The orientation of the fast view pane when showing a view private int paneOrientation; // The id of the part that was showing when we minimized private String selectedTabId; public ViewStackTrimToolBar(String id, int curSide, int paneOrientation, WorkbenchWindow wbw) { super(id, curSide, wbw); this.paneOrientation = paneOrientation; dock(curSide); } /** * Put the stack back into the presentation */ protected void restoreToPresentation() { Perspective persp = wbw.getActiveWorkbenchPage().getActivePerspective(); //FastViewManager fvMgr = persp.getFastViewManager(); LayoutPart part = persp.getPresentation().findPart(getId(), null); if (part instanceof ContainerPlaceholder) { ViewStack stack = (ViewStack) ((ContainerPlaceholder)part).getRealContainer(); stack.setMinimized(false); } //fvMgr.restoreToPresentation(getId()); } public void initToolBarManager(final ToolBarManager mgr) { // Set up the ToolBar with a restore button IContributionItem restoreContrib = new ContributionItem() { public void fill(ToolBar parent, int index) { ToolItem restoreItem = new ToolItem(mgr.getControl(), SWT.PUSH, index); Image tbImage = WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_ETOOL_RESTORE_TRIMPART); restoreItem.setImage(tbImage); String menuTip = WorkbenchMessages.StandardSystemToolbar_Restore; restoreItem.setToolTipText(menuTip); restoreItem.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { restoreToPresentation(); } public void widgetSelected(SelectionEvent e) { restoreToPresentation(); } }); } }; mgr.add(restoreContrib); ShowFastViewContribution sfvc = new ShowFastViewContribution(wbw, getId()); mgr.add(sfvc); // Add context menu items mgr.setContextMenuManager(new MenuManager()); MenuManager menuMgr = mgr.getContextMenuManager(); final IContributionItem closeContrib = new ContributionItem() { public void fill(Menu parent, int index) { MenuItem closeItem = new MenuItem(parent, SWT.NONE, index++); closeItem.setText(WorkbenchMessages.WorkbenchWindow_close); closeItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IViewReference selectedView = null; if (contextToolItem != null) { selectedView = (IViewReference) contextToolItem.getData(ShowFastViewContribution.FAST_VIEW); } if (selectedView != null) { WorkbenchPage page = wbw.getActiveWorkbenchPage(); if (page != null) { page.hideView(selectedView); } } } }); } }; // We have to manage the visiblity this way...? menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { IViewReference selectedView = null; if (contextToolItem != null) { selectedView = (IViewReference) contextToolItem.getData(ShowFastViewContribution.FAST_VIEW); } // Only show the 'close' item if we've clicked on a view Perspective persp = wbw.getActiveWorkbenchPage().getActivePerspective(); closeContrib.setVisible(selectedView != null && persp.isCloseable(selectedView)); manager.update(true); } }); menuMgr.add(closeContrib); } /* (non-Javadoc) * @see org.eclipse.ui.internal.layout.TrimToolBarBase#hookControl(org.eclipse.swt.widgets.ToolBar) */ public void hookControl(ToolBarManager mgr) { // Hook a drop Listener to the control // NOTE: the drop target is self-managing...it // both hooks the new target and removes it on dispose new FastViewDnDHandler(id, mgr, wbw); } /** * Sets whether or not the stack gets restored on an unzoom * operation. * * @param restoreOnUnzoom */ public void setRestoreOnUnzoom(boolean restoreOnUnzoom) { this.restoreOnUnzoom = restoreOnUnzoom; } public boolean restoreOnUnzoom() { return restoreOnUnzoom; } /** * @param ref * @param selected */ public void setIconSelection(IViewReference ref, boolean selected) { ToolItem item = ShowFastViewContribution.getItem(tbMgr.getControl(), ref); if (item != null) { item.setSelection(selected); if (selected) { selectedTabId = ref.getId(); // Create a 'compound' id if this is a multi-instance part if (ref.getSecondaryId() != null) selectedTabId = selectedTabId + ':' + ref.getSecondaryId(); } } } /** * @return Returns the paneOrientation. */ public int getPaneOrientation() { return paneOrientation; } /** * Cache the tba that was on top when we were minimized * @param selectedTab The id of the PartPane for the tab */ public void setSelectedTabId(String id) { selectedTabId = id; } /** * @return The id of the layout part representing the 'top' tab */ public String getSelectedTabId() { return selectedTabId; } /** * @param newOrientation The new orientation for the fact view display * @param wbw The currently active WorkbenchWindow */ public void setOrientation(int newOrientation, WorkbenchWindow wbw) { if (newOrientation == paneOrientation) return; paneOrientation = newOrientation; // If there's a fast view showing, toggle it to pick up the change if (wbw.getActivePage() instanceof WorkbenchPage) { WorkbenchPage wbp = (WorkbenchPage) wbw.getActivePage(); Perspective persp = wbp.getActivePerspective(); if (persp != null) { IViewReference curRef = persp.getActiveFastView(); if (curRef != null) { persp.setActiveFastView(null); persp.setActiveFastView(curRef); } } } } }