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