/******************************************************************************* * Copyright (c) 2004, 2008 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 * Kiryl Kazakevich, Intel - bug 88359 *******************************************************************************/ package org.eclipse.ui.internal; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.util.Geometry; import org.eclipse.swt.SWT; import org.eclipse.swt.accessibility.AccessibleAdapter; import org.eclipse.swt.accessibility.AccessibleEvent; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Cursor; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.ui.IMemento; import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPreferenceConstants; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.internal.dnd.AbstractDropTarget; import org.eclipse.ui.internal.dnd.DragUtil; import org.eclipse.ui.internal.dnd.IDragOverListener; import org.eclipse.ui.internal.dnd.IDropTarget; import org.eclipse.ui.internal.layout.CellData; import org.eclipse.ui.internal.layout.CellLayout; import org.eclipse.ui.internal.layout.IWindowTrim; import org.eclipse.ui.internal.layout.LayoutUtil; import org.eclipse.ui.internal.layout.Row; import org.eclipse.ui.internal.util.PrefUtil; import org.eclipse.ui.presentations.PresentationUtil; import org.osgi.framework.Bundle; /** * Represents the fast view bar. * * <p>The set of fastviews are obtained from the WorkbenchWindow that * is passed into the constructor. The set of fastviews may be refreshed to * match the state of the perspective by calling the update(...) method.</p> * * @see org.eclipse.ui.internal.FastViewPane */ public class FastViewBar implements IWindowTrim { public static String FASTVIEWBAR_ID = "org.eclise.ui.internal.FastViewBar"; //$NON-NLS-1$ private ToolBarManager fastViewBar; private MenuManager fastViewBarMenuManager; private MenuManager showViewMenuMgr; private FastViewBarContextMenuContribution contextContributionItem; private WorkbenchWindow window; private IViewReference selection; // "New Fast View" 'Button' fields private MenuManager newFastViewMenuMgr; private Composite fvbComposite; private ToolBar menuTB; private ToolItem menuItem; private CellData toolBarData; private static final int HIDDEN_WIDTH = 5; private int oldLength = 0; private ViewDropTarget dropTarget; private Listener dragListener = new Listener() { public void handleEvent(Event event) { Point position = DragUtil.getEventLoc(event); IViewReference ref = getViewAt(position); if (ref == null) { startDraggingFastViewBar(position, false); } else { startDraggingFastView(ref, position, false); } } }; // Map of string view IDs onto Booleans (true iff horizontally aligned) private Map viewOrientation = new HashMap(); private Listener addMenuListener = new Listener() { public void handleEvent(Event event) { Point loc = new Point(event.x, event.y); if (event.type == SWT.MenuDetect) { showAddFastViewPopup(loc); } } }; private Listener menuListener = new Listener() { public void handleEvent(Event event) { Point loc = new Point(event.x, event.y); if (event.type == SWT.MenuDetect) { showFastViewBarPopup(loc); } } }; private int fCurrentSide = SWT.DEFAULT; private boolean hasNewFastViewDisabled = false; class ViewDropTarget extends AbstractDropTarget { List panes; ToolItem position; /** * @param panesToDrop the list of ViewPanes to drop at the given position */ public ViewDropTarget(List panesToDrop, ToolItem position) { setTarget(panesToDrop, position); } public void setTarget(List panesToDrop, ToolItem position) { panes = panesToDrop; this.position = position; } /* (non-Javadoc) * @see org.eclipse.ui.internal.dnd.IDropTarget#drop() */ public void drop() { IViewReference view = getViewFor(position); Iterator iter = panes.iterator(); while (iter.hasNext()) { ViewPane pane = (ViewPane) iter.next(); IViewReference ref = pane.getViewReference(); getPerspective().getFastViewManager().addViewReference(FASTVIEWBAR_ID, getIndex(view), ref, true); // getPage().addFastView(pane.getViewReference()); // getPage().getActivePerspective().moveFastView( // pane.getViewReference(), view); } update(true); } /* (non-Javadoc) * @see org.eclipse.ui.internal.dnd.IDropTarget#getCursor() */ public Cursor getCursor() { return DragCursors.getCursor(DragCursors.FASTVIEW); } public Rectangle getSnapRectangle() { if (position == null) { // As long as the toolbar is not empty, highlight the place // where this view will appear (we // may have compressed it to save space when empty, so the actual // icon location may not be over the toolbar when it is empty) if (getToolBar().getItemCount() > 0) { return getLocationOfNextIcon(); } // If the toolbar is empty, highlight the entire toolbar return DragUtil.getDisplayBounds(getControl()); } return Geometry.toDisplay(getToolBar(), position.getBounds()); } } /** * Constructs a new fast view bar for the given workbench window. * * @param theWindow */ public FastViewBar(WorkbenchWindow theWindow) { window = theWindow; hasNewFastViewDisabled = PrefUtil.getAPIPreferenceStore().getBoolean( IWorkbenchPreferenceConstants.DISABLE_NEW_FAST_VIEW); // Construct the context menu for the fast view bar area fastViewBarMenuManager = new MenuManager(); contextContributionItem = new FastViewBarContextMenuContribution(this); fastViewBarMenuManager.add(contextContributionItem); if (!hasNewFastViewDisabled) { // Add "New Fast View" submenu showViewMenuMgr = new MenuManager(WorkbenchMessages.FastViewBar_show_view, "showView"); //$NON-NLS-1$ IContributionItem showViewMenu = new ShowViewMenu(window, ShowViewMenu.class.getName(), true); showViewMenuMgr.add(showViewMenu); fastViewBarMenuManager.add(showViewMenuMgr); // Construct the context menu for the "New Fast View" 'button' newFastViewMenuMgr = new MenuManager(WorkbenchMessages.FastViewBar_show_view, "showView"); //$NON-NLS-1$ showViewMenu = new ShowViewMenu(window, ShowViewMenu.class.getName(), true); newFastViewMenuMgr.add(showViewMenu); } } /** * Returns the platform's idea of where the fast view bar should be docked in a fresh * workspace. This value is meaningless after a workspace has been setup, since the * fast view bar state is then persisted in the workbench. This preference is just * used for applications that want the initial docking location to be somewhere other * than bottom. * @return the initial side to dock on */ public static int getInitialSide() { String loc = PrefUtil.getAPIPreferenceStore().getString( IWorkbenchPreferenceConstants.INITIAL_FAST_VIEW_BAR_LOCATION); if (IWorkbenchPreferenceConstants.BOTTOM.equals(loc)) { return SWT.BOTTOM; } if (IWorkbenchPreferenceConstants.LEFT.equals(loc)) { return SWT.LEFT; } if (IWorkbenchPreferenceConstants.RIGHT.equals(loc)) { return SWT.RIGHT; } Bundle bundle = Platform.getBundle(PlatformUI.PLUGIN_ID); if (bundle != null) { IStatus status = new Status( IStatus.WARNING, PlatformUI.PLUGIN_ID, IStatus.WARNING, "Invalid value for " //$NON-NLS-1$ + PlatformUI.PLUGIN_ID + "/" //$NON-NLS-1$ + IWorkbenchPreferenceConstants.INITIAL_FAST_VIEW_BAR_LOCATION + " preference. Value \"" + loc //$NON-NLS-1$ + "\" should be one of \"" //$NON-NLS-1$ + IWorkbenchPreferenceConstants.LEFT + "\", \"" //$NON-NLS-1$ + IWorkbenchPreferenceConstants.BOTTOM + "\", or \"" //$NON-NLS-1$ + IWorkbenchPreferenceConstants.RIGHT + "\".", null); //$NON-NLS-1$ Platform.getLog(bundle).log(status); } // use bottom as the default-default return SWT.BOTTOM; } public void setOrientation(IViewReference refToSet, int newState) { if (newState == getOrientation(refToSet)) { return; } viewOrientation.put(refToSet.getId(), new Integer(newState)); Perspective persp = getPerspective(); if (persp != null) { IViewReference ref = persp.getActiveFastView(); if (ref != null) { persp.setActiveFastView(null); } persp.setActiveFastView(refToSet); } } /** * Returns the active workbench page or null if none */ private WorkbenchPage getPage() { if (window == null) { return null; } return window.getActiveWorkbenchPage(); } /** * Returns the current perspective or null if none */ private Perspective getPerspective() { WorkbenchPage page = getPage(); if (page == null) { return null; } return page.getActivePerspective(); } /** * Creates the underlying SWT fvbComposite for the fast view bar. Will add exactly * one new fvbComposite to the given composite. Makes no assumptions about the layout * being used in the parent composite. * * @param parent enclosing SWT composite */ public void createControl(Composite parent) { fvbComposite = new Composite(parent, SWT.NONE) { public Point computeSize(int wHint, int hHint, boolean changed) { Point size = super.computeSize(wHint, hHint, changed); if (Geometry.isHorizontal(getSide())) { if (size.y < TrimUtil.TRIM_DEFAULT_HEIGHT) { size.y = TrimUtil.TRIM_DEFAULT_HEIGHT; } } else { if (size.x < TrimUtil.TRIM_DEFAULT_HEIGHT) { size.x = TrimUtil.TRIM_DEFAULT_HEIGHT; } } return size; }}; String tip = WorkbenchMessages.FastViewBar_0; fvbComposite.setToolTipText(tip); fvbComposite.addListener(SWT.MenuDetect, menuListener); PresentationUtil.addDragListener(fvbComposite, dragListener); createChildControls(); } /** * Create the contents of the fast view bar. The top-level fvbComposite (created by createControl) is a * composite that is created once over the lifetime of the fast view bar. This method creates the * rest of the widgetry inside that composite. The controls created by this method will be * destroyed and recreated if the fast view bar is docked to a different side of the window. */ protected void createChildControls() { int newSide = getSide(); int orientation = Geometry.isHorizontal(newSide) ? SWT.HORIZONTAL : SWT.VERTICAL; // Create a ControlLayout apropriate for the new orientation CellLayout controlLayout; if (Geometry.isHorizontal(newSide)) { controlLayout = new CellLayout(0) .setMargins(0, 0) .setDefaultRow(Row.growing()) .setDefaultColumn(Row.fixed()) .setColumn(1, Row.growing()); } else { controlLayout = new CellLayout(1) .setMargins(0, 3) .setDefaultColumn(Row.growing()) .setDefaultRow(Row.fixed()) .setRow(1, Row.growing()); } // Set up the composite for the new orientation fvbComposite.setLayout(controlLayout); if (!hasNewFastViewDisabled) { // Create a toolbar to show an 'Add FastView' menu 'button' menuTB = new ToolBar(fvbComposite, SWT.FLAT | orientation); // Construct an item to act as a 'menu button' (a la the PerspectiveSwitcher) menuItem = new ToolItem(menuTB, SWT.PUSH, 0); Image tbImage = WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_ETOOL_NEW_FASTVIEW); menuItem.setImage(tbImage); final String menuTip = WorkbenchMessages.FastViewBar_0; menuItem.setToolTipText(menuTip); //new ToolItem(menuTB, SWT.SEPARATOR, 1); menuTB.getAccessible().addAccessibleListener(new AccessibleAdapter() { public void getName(AccessibleEvent e) { e.result = menuTip; } }); // Now that the ToolBar is populated calculate its size... Point size = menuTB.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); menuTB.setBounds(0, 0, size.x, size.y); // Bring up the 'Add Fast View' menu on a left -or- right button click // Right click (context menu) menuItem.addListener(SWT.MenuDetect, addMenuListener); menuTB.addListener(SWT.MenuDetect, addMenuListener); // Left Click... menuItem.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { Rectangle bb = DragUtil.getDisplayBounds(menuTB); showAddFastViewPopup(new Point(bb.x,bb.y+bb.height)); } public void widgetDefaultSelected(SelectionEvent e) { } }); // try to get the layout correct... toolBarData = new CellData(); toolBarData.align(SWT.FILL, SWT.FILL); menuTB.setLayoutData(toolBarData); } // Construct the ToolBar containing the 'Fast' views fastViewBar = new ToolBarManager(SWT.FLAT | SWT.WRAP | orientation); fastViewBar.add(new ShowFastViewContribution(window)); fastViewBar.createControl(fvbComposite); getToolBar().addListener(SWT.MenuDetect, menuListener); IDragOverListener fastViewDragTarget = new IDragOverListener() { public IDropTarget drag(Control currentControl, Object draggedObject, Point position, Rectangle dragRectangle) { ToolItem targetItem = getToolItem(position); if (draggedObject instanceof ViewPane) { ViewPane pane = (ViewPane) draggedObject; // Can't drag views between windows if (pane.getWorkbenchWindow() != window) { return null; } List newList = new ArrayList(1); newList.add(draggedObject); return createDropTarget(newList, targetItem); } if (draggedObject instanceof ViewStack) { ViewStack folder = (ViewStack) draggedObject; if (folder.getWorkbenchWindow() != window) { return null; } List viewList = new ArrayList(folder.getItemCount()); LayoutPart[] children = folder.getChildren(); for (int idx = 0; idx < children.length; idx++) { if (!(children[idx] instanceof PartPlaceholder)) { viewList.add(children[idx]); } } return createDropTarget(viewList, targetItem); } return null; } }; toolBarData = new CellData(); toolBarData.align(SWT.FILL, SWT.FILL); getToolBar().setLayoutData(toolBarData); PresentationUtil.addDragListener(getToolBar(), dragListener); DragUtil.addDragTarget(getControl(), fastViewDragTarget); update(true); } /** * Creates and returns a drop target with the given properties. To save object allocation, * the same instance is saved and reused wherever possible. * * @param targetItem * @param viewList * @since 3.1 */ private IDropTarget createDropTarget(List viewList, ToolItem targetItem) { if (dropTarget == null) { dropTarget = new ViewDropTarget(viewList, targetItem); } else { dropTarget.setTarget(viewList, targetItem); } return dropTarget; } /** * Begins dragging a particular fast view * * @param ref * @param position */ protected void startDraggingFastView(IViewReference ref, Point position, boolean usingKeyboard) { ViewPane pane = (ViewPane) ((WorkbenchPartReference) ref).getPane(); ToolItem item = itemFor(pane.getViewReference()); Rectangle dragRect = Geometry.toDisplay(getToolBar(), item.getBounds()); startDrag(((WorkbenchPartReference) ref).getPane(), dragRect, position, usingKeyboard); } private void startDrag(Object toDrag, Rectangle dragRect, Point position, boolean usingKeyboard) { Perspective persp = getPerspective(); WorkbenchPage page = getPage(); IViewReference oldFastView = null; if (persp != null) { oldFastView = persp.getActiveFastView(); if (page != null) { page.hideFastView(); } } if (page.isZoomed()) { page.zoomOut(); } boolean success = DragUtil.performDrag(toDrag, dragRect, position, !usingKeyboard); // If the drag was cancelled, reopen the old fast view if (!success && oldFastView != null && page != null) { page.toggleFastView(oldFastView); } } /** * Begins dragging the fast view bar * * @param position initial mouse position * @param usingKeyboard true iff the bar is being dragged using the keyboard */ protected void startDraggingFastViewBar(Point position, boolean usingKeyboard) { Rectangle dragRect = DragUtil.getDisplayBounds(fvbComposite); startDrag(this, dragRect, position, usingKeyboard); } /** * Returns the toolbar for the fastview bar. */ private ToolBar getToolBar() { return fastViewBar.getControl(); } private IViewReference getViewFor(ToolItem item) { if (item == null) { return null; } return (IViewReference) item .getData(ShowFastViewContribution.FAST_VIEW); } /** * Returns the view at the given position, or null if none * * @param position to test, in display coordinates * @return the view at the given position or null if none */ private IViewReference getViewAt(Point position) { return getViewFor(getToolItem(position)); } /** * Returns the toolbar item at the given position, in display coordinates * @param position */ private ToolItem getToolItem(Point position) { ToolBar toolbar = getToolBar(); Point local = toolbar.toControl(position); return toolbar.getItem(local); } /** * Shows the popup menu for an item in the fast view bar. */ private void showFastViewBarPopup(Point pt) { // Get the tool item under the mouse. ToolBar toolBar = getToolBar(); Menu menu = fastViewBarMenuManager.createContextMenu(toolBar); IViewReference selectedView = getViewAt(pt); contextContributionItem.setTarget(selectedView); menu.setLocation(pt.x, pt.y); menu.setVisible(true); } /** * Shows the popup menu for an item in the fast view bar. */ private void showAddFastViewPopup(Point pt) { Menu menu = newFastViewMenuMgr.createContextMenu(menuTB); menu.setLocation(pt.x, pt.y); menu.setVisible(true); } public int getOrientation(IViewReference ref) { return isHorizontal(ref) ? SWT.HORIZONTAL : SWT.VERTICAL; } /** * Returns the underlying SWT fvbComposite for the fast view bar, or null if * createControl has not yet been invoked. The caller must not make any * assumptions about the type of Control that is returned. * * @return the underlying SWT fvbComposite for the fast view bar */ public Control getControl() { return fvbComposite; } public void dispose() { fastViewBarMenuManager.dispose(); disposeChildControls(); } protected void disposeChildControls() { fastViewBar.dispose(); fastViewBar = null; if (menuItem != null) { menuItem.dispose(); menuTB.dispose(); } oldLength = 0; } /** * Refreshes the contents to match the fast views in the window's * current perspective. * * @param force */ public void update(boolean force) { fastViewBar.update(force); ToolItem[] items = fastViewBar.getControl().getItems(); updateLayoutData(); for (int idx = 0; idx < items.length; idx++) { IViewReference view = getViewFor(items[idx]); viewOrientation.put(view.getId(), new Integer( isHorizontal(view) ? SWT.HORIZONTAL : SWT.VERTICAL)); } // Resize the FVB to its new size fvbComposite.setSize(fvbComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); } private void updateLayoutData() { ToolItem[] items = fastViewBar.getControl().getItems(); boolean isHorizontal = Geometry.isHorizontal(getSide()); boolean shouldExpand = items.length > 0; Point hint = new Point(32, shouldExpand ? SWT.DEFAULT : HIDDEN_WIDTH); if (!isHorizontal) { Geometry.flipXY(hint); } if (shouldExpand) { toolBarData.setHint(CellData.MINIMUM, hint); } else { toolBarData.setHint(CellData.OVERRIDE, hint); } if (items.length != oldLength) { LayoutUtil.resize(fvbComposite); oldLength = items.length; } } /** * Returns the currently selected fastview * * @return the currently selected fastview or null if none */ public IViewReference getSelection() { return selection; } /** * Sets the currently selected fastview. * * @param selected the currently selected fastview, or null if none */ public void setSelection(IViewReference selected) { ToolItem[] items = fastViewBar.getControl().getItems(); for (int i = 0; i < items.length; i++) { ToolItem item = items[i]; item.setSelection(getView(item) == selected); } selection = selected; } /** * Returns the view associated with the given toolbar item * * @param item */ private IViewReference getView(ToolItem item) { return (IViewReference) item .getData(ShowFastViewContribution.FAST_VIEW); } private int getIndex(IViewReference toFind) { ToolItem[] items = fastViewBar.getControl().getItems(); for (int i = 0; i < items.length; i++) { if (items[i].getData(ShowFastViewContribution.FAST_VIEW) == toFind) { return i; } } return items.length; } private ToolItem getItem(int idx) { ToolItem[] items = fastViewBar.getControl().getItems(); if (idx >= items.length) { return null; } return items[idx]; } /** * Returns the toolbar item associated with the given view * * @param toFind */ private ToolItem itemFor(IViewReference toFind) { return getItem(getIndex(toFind)); } /* (non-Javadoc) * @see org.eclipse.ui.internal.IWindowTrim#getValidSides() */ public int getValidSides() { return SWT.TOP | SWT.LEFT | SWT.RIGHT | SWT.BOTTOM; } /* (non-Javadoc) * @see org.eclipse.ui.internal.IWindowTrim#docked(int) */ public void dock(int side) { fCurrentSide = side; disposeChildControls(); createChildControls(); } /** * Get the current side. * @return SWT.BOTTOM or SWT.RIGHT or SWT.LEFT */ public int getSide() { if (fCurrentSide==SWT.DEFAULT) { fCurrentSide = getInitialSide(); } return fCurrentSide; } private boolean isHorizontal(IViewReference ref) { Integer orientation = (Integer) viewOrientation.get(ref.getId()); boolean horizontalBar = Geometry.isHorizontal(getSide()); boolean horizontal = horizontalBar; if (orientation != null) { horizontal = orientation.intValue() == SWT.HORIZONTAL; } else { horizontal = false; } return horizontal; } /** * @param ref */ public int getViewSide(IViewReference ref) { boolean horizontal = isHorizontal(ref); if (horizontal) { return (getSide() == SWT.BOTTOM) ? SWT.BOTTOM : SWT.TOP; } return (getSide() == SWT.RIGHT) ? SWT.RIGHT : SWT.LEFT; } public void saveState(IMemento memento) { memento.putInteger(IWorkbenchConstants.TAG_FAST_VIEW_SIDE, getSide()); Iterator iter = viewOrientation.keySet().iterator(); while (iter.hasNext()) { String next = (String) iter.next(); IMemento orientation = memento .createChild(IWorkbenchConstants.TAG_FAST_VIEW_ORIENTATION); orientation.putString(IWorkbenchConstants.TAG_VIEW, next); orientation.putInteger(IWorkbenchConstants.TAG_POSITION, ((Integer) viewOrientation.get(next)).intValue()); } } /** * Returns the approximate location where the next fastview icon * will be drawn (display coordinates) */ public Rectangle getLocationOfNextIcon() { ToolBar control = getToolBar(); Rectangle result = control.getBounds(); Point size = control.computeSize(SWT.DEFAULT, SWT.DEFAULT, false); result.height = size.y; result.width = size.x; boolean horizontal = Geometry.isHorizontal(getSide()); if (control.getItemCount() == 0) { Geometry.setDimension(result, horizontal, 0); } int hoverSide = horizontal ? SWT.RIGHT : SWT.BOTTOM; result = Geometry.getExtrudedEdge(result, -Geometry.getDimension( result, !horizontal), hoverSide); return Geometry.toDisplay(control.getParent(), result); } public void restoreState(IMemento memento) { Integer bigInt; bigInt = memento.getInteger(IWorkbenchConstants.TAG_FAST_VIEW_SIDE); if (bigInt != null) { dock(bigInt.intValue()); } IMemento[] orientations = memento .getChildren(IWorkbenchConstants.TAG_FAST_VIEW_ORIENTATION); for (int i = 0; i < orientations.length; i++) { IMemento next = orientations[i]; viewOrientation.put(next.getString(IWorkbenchConstants.TAG_VIEW), next.getInteger(IWorkbenchConstants.TAG_POSITION)); } } public WorkbenchWindow getWindow() { return window; } public void restoreView(IViewReference selectedView) { if (selectedView != null) { WorkbenchPage page = window.getActiveWorkbenchPage(); if (page != null) { int idx = getIndex(selectedView); ToolItem item = getItem(idx); Rectangle bounds = item.getBounds(); Rectangle startBounds = Geometry.toDisplay(item .getParent(), bounds); Perspective persp = getPerspective(); if (persp != null) { persp.getFastViewManager().removeViewReference(selectedView, true, true); } IWorkbenchPart toActivate = selectedView .getPart(true); if (toActivate != null) { page.activate(toActivate); } ViewPane pane = (ViewPane) ((WorkbenchPartReference) selectedView) .getPane(); RectangleAnimation animation = new RectangleAnimation( window.getShell(), startBounds, pane .getParentBounds()); animation.schedule(); } } } /** * @return The list of all view references in the stack */ public List getViewRefs() { List refs = new ArrayList(fastViewBar.getControl().getItemCount()); ToolItem[] items = fastViewBar.getControl().getItems(); for (int i = 0; i < items.length; i++) { Object data = items[i].getData(ShowFastViewContribution.FAST_VIEW); if (data != null) refs.add(data); } return refs; } /* (non-Javadoc) * @see org.eclipse.ui.internal.IWindowTrim#isCloseable() */ public boolean isCloseable() { return false; } /* (non-Javadoc) * @see org.eclipse.ui.internal.IWindowTrim#handleClose() */ public void handleClose() { // nothing to do... } /* (non-Javadoc) * @see org.eclipse.ui.internal.IWindowTrim#getId() */ public String getId() { return "org.eclise.ui.internal.FastViewBar"; //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.ui.internal.IWindowTrim#getDisplayName() */ public String getDisplayName() { return WorkbenchMessages.TrimCommon_FastView_TrimName; } /** * Returns the context menu contribution item. This is for * internal UI testing only. * * @return the context menu contribution item * @since 3.1.1 */ public FastViewBarContextMenuContribution testContextMenu() { return contextContributionItem; } /* (non-Javadoc) * @see org.eclipse.ui.IWindowTrim#getWidthHint() */ public int getWidthHint() { return SWT.DEFAULT; } /* (non-Javadoc) * @see org.eclipse.ui.IWindowTrim#getHeightHint() */ public int getHeightHint() { return SWT.DEFAULT; } /* (non-Javadoc) * @see org.eclipse.ui.IWindowTrim#isResizeable() */ public boolean isResizeable() { return false; } }