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