/******************************************************************************* * Copyright (c) 2005, G. Weirich and Elexis * 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: * G. Weirich - initial implementation * *******************************************************************************/ package ch.elexis.core.ui.util; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.events.ExpansionAdapter; import org.eclipse.ui.forms.events.ExpansionEvent; import org.eclipse.ui.forms.events.IHyperlinkListener; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Hyperlink; import org.eclipse.ui.forms.widgets.ScrolledForm; /** * Helferklasse zur Erzeugung von SWT-Widgets selbständig oder innerhalb einer org.eclipse.ui.forms * Form. Die in der Form erstellten Elemente erhalten automatisch das Eclipse-look&feel und fügen * sich dadurch gut in Eclipse ein. * * @author Gerry */ public class WidgetFactory { private Composite parent = null; private ScrolledForm form = null; private FormToolkit tk = null; /** * Label erzeugen * * @param parent * �bergeoirdnetes Composite * @param Text * Anzuzeigender Text * @return ein Standardlabel mit dem angegebenen Text */ public static Label createLabel(Composite parent, String Text){ Label ret = new Label(parent, SWT.NONE); ret.setText(Text); return ret; } /** Der einzige �ffenliche Konstruktor */ public WidgetFactory(Composite parent){ this.parent = parent; } /** Button mit SWT.PUSH erzeugen. Parent wie im Kostruktor der Factory angegeben */ public Button createPushButton(String Text){ Button ret = new Button(parent, SWT.PUSH); ret.setText(Text); return ret; } public Button createCheckbox(String Text){ Button ret = new Button(parent, SWT.CHECK); if (Text != null) { ret.setText(Text); } return ret; } /** Simples Label erzeugen */ public Label createLabel(String Text){ Label ret = new Label(parent, SWT.NONE); ret.setText(Text); return ret; } /** Simples Eingabefeld mit Vorgabetext pre erzeugen */ public Text createText(String pre){ Text inp = new Text(parent, SWT.BORDER); inp.setText(pre); return inp; } /** Parent der WidgetFactory neu setzen */ public void setParent(Composite parent){ this.parent = parent; } /** Forms-Form-Objekt erzeugen */ public void createForm(boolean withBorders){ if (tk == null) { tk = new FormToolkit(parent.getDisplay()); } if (withBorders == true) { tk.setBorderStyle(SWT.BORDER); } form = tk.createScrolledForm(parent); } /** Form-Objekt zurückliefern */ public ScrolledForm getForm(){ return form; } /** Body der Form zurückgeben */ public Composite getBody(){ return form.getBody(); } /** Toolkit, das die Form erzeugt hat liefern */ public FormToolkit getToolkit(){ return tk; } /** Toolkit neu setzen */ public void setToolkit(FormToolkit tk){ this.tk = tk; } /** * ExpandableComposite (Aufklapp-Feld) in der Form erzeugen * * @param client * das Element, das aufgeklappt werden soll * @param Text * Der Text, der auf dem Composite stehen soll */ public ExpandableComposite createExpandableComposite(Control client, String Text){ ExpandableComposite ret = tk.createExpandableComposite(form.getBody(), ExpandableComposite.TWISTIE); ret.setText(Text); client.setParent(ret); ret.setClient(client); ret.addExpansionListener(new ExpansionAdapter() { public void expansionStateChanged(ExpansionEvent e){ form.reflow(true); } }); return ret; } public static ExpandableComposite createExpandableComposite(final FormToolkit t, final ScrolledForm f, String text){ ExpandableComposite ret = t.createExpandableComposite(f.getBody(), ExpandableComposite.TWISTIE); ret.setText(text); ret.addExpansionListener(new ExpansionAdapter() { public void expansionStateChanged(ExpansionEvent e){ f.reflow(true); } }); return ret; } /** Label in der Form erzeugen */ public Label createFormLabel(String text){ return tk.createLabel(form.getBody(), text, SWT.WRAP); } /** Texteingabefeld in der Form erzeugen */ public Text createFormText(String predef, Object align){ Text ret = tk.createText(form.getBody(), predef); if (align != null) { ret.setLayoutData(align); } return ret; } /** Mehrzeiliges Textfeld in der Form erzeugen */ public Text createFormTextField(String predef){ Text ret = tk.createText(form.getBody(), predef, SWT.MULTI | SWT.WRAP); return ret; } /** Button in der Form erzeugen */ public Button createFormButton(String Text){ Button ret = tk.createButton(form.getBody(), Text, SWT.PUSH); return ret; } /** * Hyperlink in der Form erzeugen * * @param text * Angezeigter und anklickbarer Text * @param lis * HyperlinkListener oder (einfacher) HyperlinkAdapter, der die Klicks verarbeiten * kann */ public Hyperlink createHyperlink(String text, IHyperlinkListener lis){ Hyperlink ret = tk.createHyperlink(form.getBody(), text, SWT.WRAP); ret.addHyperlinkListener(lis); return ret; } /** * Trennlinie in der Form erzeugen. Achtung:Breite und Höhe muss noch mit entsprechenden * LayoutData festgelegt werden. */ public Composite createFormSeparator(){ Composite ret = tk.createCompositeSeparator(form.getBody()); return ret; } /** Composite in der Form erzeugen */ public Composite createFormComposite(int style){ Composite ret = tk.createComposite(form.getBody(), style); return ret; } /* * obsolete public static GridData getFillGridData() { GridData ret=new * GridData(GridData.FILL_HORIZONTAL * |GridData.FILL_VERTICAL|GridData.GRAB_HORIZONTAL|GridData.GRAB_VERTICAL); return ret; } * public static GridData getHorzFillGridData(){ return new * GridData(GridData.FILL_HORIZONTAL|GridData.GRAB_HORIZONTAL); } */ }