blob: fbf57a0ad44ef2e4a865a6b012299a6221074ef1 [file] [log] [blame]
/*******************************************************************************
* 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);
}
}