blob: dc98bdb8661f1d870428f0e2e0e866263b55a14f [file] [log] [blame]
/*
* Created on Feb 27, 2004
*
*/
package groovy.swt.factory;
import groovy.swt.InvalidParentException;
import groovy.swt.SwtUtils;
import java.util.Map;
import org.codehaus.groovy.GroovyException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.FormColors;
import org.eclipse.ui.forms.HyperlinkSettings;
import org.eclipse.ui.forms.widgets.Form;
import org.eclipse.ui.forms.widgets.FormText;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.ScrolledPageBook;
import org.eclipse.ui.forms.widgets.Section;
/**
* @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a>
* @version $Revision$
*/
public class FormFactory extends AbstractSwtFactory implements SwtFactory {
/** static is evil, too many toolkits is evil */
protected static FormToolkit toolkit;
/**
* @return Returns the toolkit.
*/
public static FormToolkit getToolkit() {
if (toolkit == null) {
FormColors formColors = new FormColors(Display.getCurrent() == null ? new Display()
: Display.getCurrent());
toolkit = new FormToolkit(formColors);
}
return toolkit;
}
/** type of */
private String type;
/**
* @param string
*/
public FormFactory(String type) {
this.type = type;
}
/*
* @see groovy.swt.factory.AbstractSwtFactory#newInstance(java.util.Map,
* java.lang.Object)
*/
public Object newInstance(Map properties, Object parent) throws GroovyException {
// boolean shouldLayout = properties.containsKey("parent");
Composite parentComposite = (Composite) SwtUtils.getParentWidget(parent, properties);
String styleProperty = (String) properties.remove("style");
String text = (String) properties.remove("text");
int style = SWT.NULL;
if (styleProperty != null) {
if (type.equals("formSection")) {
style = SwtUtils.parseStyle(Section.class, styleProperty);
} else {
style = SwtUtils.parseStyle(SWT.class, styleProperty);
}
}
if (parentComposite != null) {
Object formWidget = getFormWidget(parentComposite, properties, style, text);
setBeanProperties(formWidget, properties);
// if (shouldLayout && parentComposite != null && parentComposite instanceof Composite) {
// ((Composite) parentComposite).layout();
//}
return formWidget;
} else {
throw new InvalidParentException("composite instance");
}
}
/**
* @param parentComposite
* @param style
* @param text
* @return
*/
private Object getFormWidget(final Composite parentComposite, Map properties, int style,
String text) throws GroovyException {
if ("form".equals(type)) {
Form form = getToolkit().createForm(parentComposite);
form.setText(text);
return form;
}
if ("scrolledForm".equals(type)) {
ScrolledForm scrolledForm = getToolkit().createScrolledForm(parentComposite);
scrolledForm.setText(text);
return scrolledForm;
}
if ("formButton".equals(type)) {
return getToolkit().createButton(parentComposite, text, style);
}
if ("formColors".equals(type)) {
return getToolkit().getColors();
}
if ("formComposite".equals(type)) {
return getToolkit().createComposite(parentComposite, style);
}
if ("formCompositeSeparator".equals(type)) {
return getToolkit().createCompositeSeparator(parentComposite);
}
if ("formExpandableComposite".equals(type)) {
return getToolkit().createExpandableComposite(parentComposite, style);
}
if ("formText".equals(type)) {
Text text2 = getToolkit().createText(parentComposite, text, style);
getToolkit().paintBordersFor(parentComposite);
return text2;
}
if ("formHyperlink".equals(type)) {
return getToolkit().createHyperlink(parentComposite, text, style);
}
if ("formImageHyperlink".equals(type)) {
return getToolkit().createImageHyperlink(parentComposite, style);
}
if ("formLabel".equals(type)) {
return getToolkit().createLabel(parentComposite, text, style);
}
if ("formPageBook".equals(type)) {
return getToolkit().createPageBook(parentComposite, style);
}
if ("formPageBookPage".equals(type)) {
if (parentComposite instanceof ScrolledPageBook) {
ScrolledPageBook pageBook = (ScrolledPageBook) parentComposite;
String key = (String) properties.remove("key");
if (key != null) {
Composite page = pageBook.createPage(key);
pageBook.registerPage(key, page);
return page;
} else {
throw new GroovyException("attribute \"key\" is " + key);
}
} else {
throw new InvalidParentException("formPageBook");
}
}
if ("formSection".equals(type)) {
Section section = getToolkit().createSection(parentComposite, style);
if (text != null) {
section.setText(text);
}
section.setSeparatorControl(getToolkit().createCompositeSeparator(section));
String description = (String) properties.remove("description");
if (description != null) {
section.setDescription(description);
}
Composite client = getToolkit().createComposite(section);
client.setLayout(new GridLayout());
section.setClient(client);
return section;
}
if ("formSeparator".equals(type)) {
return getToolkit().createSeparator(parentComposite, style);
}
if ("formTable".equals(type)) {
return getToolkit().createTable(parentComposite, style);
}
if ("formToolkit".equals(type)) {
return getToolkit();
}
if ("formFormattedText".equals(type)) {
boolean parseTags = false;
boolean expandURLs = false;
if (properties.get("parseTags") != null) {
parseTags = ((Boolean) properties.remove("parseTags")).booleanValue();
}
if (properties.get("expandURLs") != null) {
expandURLs = ((Boolean) properties.remove("expandURLs")).booleanValue();
}
FormText formText = getToolkit().createFormText(parentComposite, true);
HyperlinkSettings hyperlinkSettings = new HyperlinkSettings(Display.getCurrent());
hyperlinkSettings.setBackground(getToolkit().getColors().getBackground());
hyperlinkSettings.setActiveBackground(getToolkit().getColors().getBackground());
hyperlinkSettings.setForeground(getToolkit().getColors().getForeground());
hyperlinkSettings.setActiveForeground(getToolkit().getColors().getBackground());
formText.setHyperlinkSettings(hyperlinkSettings);
formText.setText(text, parseTags, expandURLs);
return formText;
}
if ("formTree".equals(type)) {
return getToolkit().createTree(parentComposite, style);
}
return null;
}
}