/******************************************************************************* * Copyright (c) 2004, 2005 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.presentations.defaultpresentation; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Color; 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.ui.internal.presentations.util.AbstractTabFolder; import org.eclipse.ui.internal.presentations.util.AbstractTabItem; import org.eclipse.ui.internal.presentations.util.EnhancedFillLayout; import org.eclipse.ui.internal.presentations.util.PartInfo; /** * Implements the AbstractTabFolder interface, however this object only displays * the content of the currently selected part. There are no tabs, no title, no toolbar, * etc. There is no means to select a different part, unless it is done programmatically. * * @since 3.1 */ public class EmptyTabFolder extends AbstractTabFolder { private Composite control; private Control childControl; private Color borderColor; public EmptyTabFolder(Composite parent, boolean showborder) { control = new Composite(parent, SWT.NONE); EnhancedFillLayout layout = new EnhancedFillLayout(); control.setLayout(layout); borderColor = parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW); if (showborder) { layout.xmargin = 1; layout.ymargin = 1; control.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { e.gc.setForeground(borderColor); Rectangle rect = control.getClientArea(); rect.width--; rect.height--; e.gc.drawRectangle(rect); } }); } } /* (non-Javadoc) * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#computeSize(int, int) */ public Point computeSize(int widthHint, int heightHint) { if (childControl != null) { // Fix for bug 85899 [Perspectives] [RCP]Standalone view does not divide space in // proper ratio with reference when added to IPageLayout with showTitle parameter false // If the childControl is a content proxy (a Composite with no children -- see PresentablePartFolder constructor), // then computeSize returns 64x64, which is inappropriate. // Note that this happens even if the Composite has a Layout that returns 0@0. // Instead, use the sizes of the margins. This is equivalent to calling control.computeSize(...) // if the childControl returned 0@0 for its preferred size. if (childControl instanceof Composite) { Composite composite = (Composite) childControl; if (composite.getChildren().length == 0) { EnhancedFillLayout layout = (EnhancedFillLayout) control.getLayout(); int w = widthHint == SWT.DEFAULT ? layout.xmargin * 2 : widthHint; int h = heightHint == SWT.DEFAULT ? layout.ymargin * 2 : heightHint; return new Point(w, h); } } return childControl.computeSize(widthHint, heightHint); } return new Point(0,0); } /* (non-Javadoc) * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#add(int, int) */ public AbstractTabItem add(int index, int flags) { return new EmptyTabItem(); } /* (non-Javadoc) * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getContentParent() */ public Composite getContentParent() { return control; } /* (non-Javadoc) * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#setContent(org.eclipse.swt.widgets.Control) */ public void setContent(Control newContent) { childControl = newContent; } /* (non-Javadoc) * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getItems() */ public AbstractTabItem[] getItems() { return new AbstractTabItem[0]; } /* (non-Javadoc) * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getSelection() */ public AbstractTabItem getSelection() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#setSelection(org.eclipse.ui.internal.presentations.util.AbstractTabItem) */ public void setSelection(AbstractTabItem toSelect) { } public void setToolbar(Control toolbar) { if (toolbar != null) { toolbar.setVisible(false); } } public void layout(boolean flushCache) { super.layout(flushCache); control.layout(flushCache); } /* (non-Javadoc) * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#setSelectedInfo(org.eclipse.ui.internal.presentations.util.PartInfo) */ public void setSelectedInfo(PartInfo info) { } /* (non-Javadoc) * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#enablePaneMenu(boolean) */ public void enablePaneMenu(boolean enabled) { } /* (non-Javadoc) * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getToolbarParent() */ public Composite getToolbarParent() { return control; } /* (non-Javadoc) * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getControl() */ public Control getControl() { return control; } /* (non-Javadoc) * @see org.eclipse.ui.internal.presentations.util.AbstractTabFolder#getTabArea() */ public Rectangle getTabArea() { return new Rectangle(0,0,0,0); } }