blob: f44a87c6b61c3af278b64c65fc7742174d68ee17 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 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.forms.widgets;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.forms.IMessage;
/**
* ScrolledForm is a control that is capable of scrolling an instance of the
* Form class. It should be created in a parent that will allow it to use all
* the available area (for example, a shell, a view or an editor).
* <p>
* Children of the form should typically be created using FormToolkit to match
* the appearance and behaviour. When creating children, use a form body as a
* parent by calling 'getBody()' on the form instance. Example:
*
* <pre>
* FormToolkit toolkit = new FormToolkit(parent.getDisplay());
* ScrolledForm form = toolkit.createScrolledForm(parent);
* form.setText(&quot;Sample form&quot;);
* form.getBody().setLayout(new GridLayout());
* toolkit.createButton(form.getBody(), &quot;Checkbox&quot;, SWT.CHECK);
* </pre>
*
* <p>
* No layout manager has been set on the body. Clients are required to set the
* desired layout manager explicitly.
* <p>
* Although the class is not final, it is not expected to be be extended.
*
* @since 3.0
*/
public class ScrolledForm extends SharedScrolledComposite {
private Form content;
public ScrolledForm(Composite parent) {
this(parent, SWT.V_SCROLL | SWT.H_SCROLL);
}
/**
* Creates the form control as a child of the provided parent.
*
* @param parent
* the parent widget
*/
public ScrolledForm(Composite parent, int style) {
super(parent, style);
super.setMenu(parent.getMenu());
content = new Form(this, SWT.NULL);
super.setContent(content);
content.setMenu(getMenu());
}
/**
* Passes the menu to the body.
*
* @param menu
*/
public void setMenu(Menu menu) {
super.setMenu(menu);
if (content != null)
content.setMenu(menu);
}
/**
* Returns the title text that will be rendered at the top of the form.
*
* @return the title text
*/
public String getText() {
return content.getText();
}
/**
* Returns the title image that will be rendered to the left of the title.
*
* @return the title image
*/
public Image getImage() {
return content.getImage();
}
/**
* Sets the foreground color of the form. This color will also be used for
* the body.
*/
public void setForeground(Color fg) {
super.setForeground(fg);
content.setForeground(fg);
}
/**
* Sets the background color of the form. This color will also be used for
* the body.
*/
public void setBackground(Color bg) {
super.setBackground(bg);
content.setBackground(bg);
}
/**
* The form sets the content widget. This method should not be called by
* classes that instantiate this widget.
*/
public final void setContent(Control c) {
}
/**
* Sets the text to be rendered at the top of the form above the body as a
* title.
* <p>
* <strong>Note:</strong> Mnemonics are indicated by an '&amp;' that causes
* the next character to be the mnemonic. Mnemonics are not applicable in
* the case of the form title but need to be taken into acount due to the
* usage of the underlying widget that renders mnemonics in the title area.
* The mnemonic indicator character '&amp;' can be escaped by doubling it in
* the string, causing a single '&amp;' to be displayed.
* </p>
*
* @param text
* the title text
*/
public void setText(String text) {
content.setText(text);
reflow(true);
}
/**
* Sets the image to be rendered to the left of the title.
*
* @param image
* the title image or <code>null</code> for no image.
*/
public void setImage(Image image) {
content.setImage(image);
reflow(true);
}
/**
* Returns the optional background image of this form. The image is rendered
* starting at the position 0,0 and is painted behind the title.
*
* @return Returns the background image.
*/
public Image getBackgroundImage() {
return content.getBackgroundImage();
}
/**
* Sets the optional background image to be rendered behind the title
* starting at the position 0,0.
*
* @param backgroundImage
* The backgroundImage to set.
*/
public void setBackgroundImage(Image backgroundImage) {
content.setBackgroundImage(backgroundImage);
}
/**
* Returns the tool bar manager that is used to manage tool items in the
* form's title area.
*
* @return form tool bar manager
*/
public IToolBarManager getToolBarManager() {
return content.getToolBarManager();
}
/**
* Updates the local tool bar manager if used. Does nothing if local tool
* bar manager has not been created yet.
*/
public void updateToolBar() {
content.updateToolBar();
}
/**
* Returns the container that occupies the body of the form (the form area
* below the title). Use this container as a parent for the controls that
* should be in the form. No layout manager has been set on the form body.
*
* @return Returns the body of the form.
*/
public Composite getBody() {
return content.getBody();
}
/**
* Returns the instance of the form owned by the scrolled form.
*
* @return the form instance
*/
public Form getForm() {
return content;
}
/**
* Sets the form's busy state. Busy form will display 'busy' animation in
* the area of the title image.
*
* @param busy
* the form's busy state
* @see Form#setBusy(boolean)
* @since 3.3
*/
public void setBusy(boolean busy) {
content.setBusy(busy);
reflow(true);
}
/**
* Sets the optional head client.
*
* @param headClient
* the optional child of the head
* @see Form#setHeadClient(Control)
* @since 3.3
*/
public void setHeadClient(Control headClient) {
content.setHeadClient(headClient);
reflow(true);
}
/**
* Sets the form message.
*
* @param newMessage
* the message text or <code>null</code> to reset.
* @param newType
* as defined in
* {@link org.eclipse.jface.dialogs.IMessageProvider}.
* @param messages
* an optional array of children that itemize individual
* messages or <code>null</code> for a simple message.
* @since 3.3
* @see Form#setMessage(String, int)
*/
public void setMessage(String newMessage, int newType, IMessage[] messages) {
content.setMessage(newMessage, newType, messages);
reflow(true);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.IMessageContainer#setMessage(java.lang.String,
* int)
*/
public void setMessage(String newMessage, int newType) {
this.setMessage(newMessage, newType, null);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.IMessageProvider#getMessage()
*/
public String getMessage() {
return content.getMessage();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.IMessageProvider#getMessageType()
*/
public int getMessageType() {
return content.getMessageType();
}
}