All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.ui.internal.ViewStackTrimToolBar Maven / Gradle / Ivy

Go to download

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) 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);
				}
			}
			
		}
		
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy