package org.argeo.cms.ui.eclipse.forms; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; //import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; // RAP [rh] Paint events missing //import org.eclipse.swt.events.PaintEvent; //import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; //RAP [rh] GC missing //import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; //import org.eclipse.swt.graphics.RGB; //import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; //import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; //import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.Widget; //import org.eclipse.ui.forms.FormColors; //import org.eclipse.ui.forms.HyperlinkGroup; //import org.eclipse.ui.forms.IFormColors; //import org.eclipse.ui.internal.forms.widgets.FormFonts; //import org.eclipse.ui.internal.forms.widgets.FormUtil; /** * The toolkit is responsible for creating SWT controls adapted to work in * Eclipse forms. In addition to changing their presentation properties (fonts, * colors etc.), various listeners are attached to make them behave correctly in * the form context. *

* In addition to being the control factory, the toolkit is also responsible for * painting flat borders for select controls, managing hyperlink groups and * control colors. *

* The toolkit creates some of the most common controls used to populate Eclipse * forms. Controls that must be created using their constructors, * adapt() method is available to change its properties in the * same way as with the supported toolkit controls. *

* Typically, one toolkit object is created per workbench part (for example, an * editor or a form wizard). The toolkit is disposed when the part is disposed. * To conserve resources, it is possible to create one color object for the * entire plug-in and share it between several toolkits. The plug-in is * responsible for disposing the colors (disposing the toolkit that uses shared * color object will not dispose the colors). *

* FormToolkit is normally instantiated, but can also be subclassed if some of * the methods needs to be modified. In those cases, super must * be called to preserve normal behaviour. * * @since 1.0 */ public class FormToolkit { public static final String KEY_DRAW_BORDER = "FormWidgetFactory.drawBorder"; //$NON-NLS-1$ public static final String TREE_BORDER = "treeBorder"; //$NON-NLS-1$ public static final String TEXT_BORDER = "textBorder"; //$NON-NLS-1$ private int borderStyle = SWT.NULL; private FormColors colors; private int orientation = Window.getDefaultOrientation(); // private KeyListener deleteListener; // RAP [rh] Paint events missing // private BorderPainter borderPainter; private BoldFontHolder boldFontHolder; // private HyperlinkGroup hyperlinkGroup; private boolean isDisposed = false; /* default */ VisibilityHandler visibilityHandler; /* default */ KeyboardHandler keyboardHandler; // RAP [rh] Paint events missing // private class BorderPainter implements PaintListener { // public void paintControl(PaintEvent event) { // Composite composite = (Composite) event.widget; // Control[] children = composite.getChildren(); // for (int i = 0; i < children.length; i++) { // Control c = children[i]; // boolean inactiveBorder = false; // boolean textBorder = false; // if (!c.isVisible()) // continue; // /* // * if (c.getEnabled() == false && !(c instanceof CCombo)) // * continue; // */ // if (c instanceof Hyperlink) // continue; // Object flag = c.getData(KEY_DRAW_BORDER); // if (flag != null) { // if (flag.equals(Boolean.FALSE)) // continue; // if (flag.equals(TREE_BORDER)) // inactiveBorder = true; // else if (flag.equals(TEXT_BORDER)) // textBorder = true; // } // if (getBorderStyle() == SWT.BORDER) { // if (!inactiveBorder && !textBorder) { // continue; // } // if (c instanceof Text || c instanceof Table // || c instanceof Tree) // continue; // } // if (!inactiveBorder // && (c instanceof Text || c instanceof CCombo || textBorder)) { // Rectangle b = c.getBounds(); // GC gc = event.gc; // gc.setForeground(c.getBackground()); // gc.drawRectangle(b.x - 1, b.y - 1, b.width + 1, // b.height + 1); // // gc.setForeground(getBorderStyle() == SWT.BORDER ? colors // // .getBorderColor() : colors.getForeground()); // gc.setForeground(colors.getBorderColor()); // if (c instanceof CCombo) // gc.drawRectangle(b.x - 1, b.y - 1, b.width + 1, // b.height + 1); // else // gc.drawRectangle(b.x - 1, b.y - 2, b.width + 1, // b.height + 3); // } else if (inactiveBorder || c instanceof Table // || c instanceof Tree) { // Rectangle b = c.getBounds(); // GC gc = event.gc; // gc.setForeground(colors.getBorderColor()); // gc.drawRectangle(b.x - 1, b.y - 1, b.width + 1, // b.height + 1); // } // } // } // } private static class VisibilityHandler extends FocusAdapter { public void focusGained(FocusEvent e) { Widget w = e.widget; if (w instanceof Control) { FormUtil.ensureVisible((Control) w); } } } private static class KeyboardHandler extends KeyAdapter { public void keyPressed(KeyEvent e) { Widget w = e.widget; if (w instanceof Control) { if (e.doit) FormUtil.processKey(e.keyCode, (Control) w); } } } private class BoldFontHolder { private Font normalFont; private Font boldFont; public BoldFontHolder() { } public Font getBoldFont(Font font) { createBoldFont(font); return boldFont; } private void createBoldFont(Font font) { if (normalFont == null || !normalFont.equals(font)) { normalFont = font; dispose(); } if (boldFont == null) { boldFont = FormFonts.getInstance().getBoldFont(colors.getDisplay(), normalFont); } } public void dispose() { if (boldFont != null) { FormFonts.getInstance().markFinished(boldFont); boldFont = null; } } } /** * Creates a toolkit that is self-sufficient (will manage its own colors). *

* Clients that call this method must call {@link #dispose()} when they * are finished using the toolkit. * */ public FormToolkit(Display display) { this(new FormColors(display)); } /** * Creates a toolkit that will use the provided (shared) colors. The toolkit * will dispose the colors if and only if they are not marked as * shared via the markShared() method. *

* Clients that call this method must call {@link #dispose()} when they * are finished using the toolkit. * * @param colors * the shared colors */ public FormToolkit(FormColors colors) { this.colors = colors; initialize(); } /** * Creates a button as a part of the form. * * @param parent * the button parent * @param text * an optional text for the button (can be null) * @param style * the button style (for example, SWT.PUSH) * @return the button widget */ public Button createButton(Composite parent, String text, int style) { Button button = new Button(parent, style | SWT.FLAT | orientation); if (text != null) button.setText(text); adapt(button, true, true); return button; } /** * Creates the composite as a part of the form. * * @param parent * the composite parent * @return the composite widget */ public Composite createComposite(Composite parent) { return createComposite(parent, SWT.NULL); } /** * Creates the composite as part of the form using the provided style. * * @param parent * the composite parent * @param style * the composite style * @return the composite widget */ public Composite createComposite(Composite parent, int style) { // Composite composite = new LayoutComposite(parent, style | orientation); Composite composite = new Composite(parent, style | orientation); adapt(composite); return composite; } /** * Creats the composite that can server as a separator between various parts * of a form. Separator height should be controlled by setting the height * hint on the layout data for the composite. * * @param parent * the separator parent * @return the separator widget */ // RAP [rh] createCompositeSeparator: currently no useful implementation possible, delete? public Composite createCompositeSeparator(Composite parent) { final Composite composite = new Composite(parent, orientation); // RAP [rh] GC and paint events missing // composite.addListener(SWT.Paint, new Listener() { // public void handleEvent(Event e) { // if (composite.isDisposed()) // return; // Rectangle bounds = composite.getBounds(); // GC gc = e.gc; // gc.setForeground(colors.getColor(IFormColors.SEPARATOR)); // if (colors.getBackground() != null) // gc.setBackground(colors.getBackground()); // gc.fillGradientRectangle(0, 0, bounds.width, bounds.height, // false); // } // }); // if (parent instanceof Section) // ((Section) parent).setSeparatorControl(composite); return composite; } /** * Creates a label as a part of the form. * * @param parent * the label parent * @param text * the label text * @return the label widget */ public Label createLabel(Composite parent, String text) { return createLabel(parent, text, SWT.NONE); } /** * Creates a label as a part of the form. * * @param parent * the label parent * @param text * the label text * @param style * the label style * @return the label widget */ public Label createLabel(Composite parent, String text, int style) { Label label = new Label(parent, style | orientation); if (text != null) label.setText(text); adapt(label, false, false); return label; } /** * Creates a hyperlink as a part of the form. The hyperlink will be added to * the hyperlink group that belongs to this toolkit. * * @param parent * the hyperlink parent * @param text * the text of the hyperlink * @param style * the hyperlink style * @return the hyperlink widget */ // public Hyperlink createHyperlink(Composite parent, String text, int style) { // Hyperlink hyperlink = new Hyperlink(parent, style | orientation); // if (text != null) // hyperlink.setText(text); // hyperlink.addFocusListener(visibilityHandler); // hyperlink.addKeyListener(keyboardHandler); // hyperlinkGroup.add(hyperlink); // return hyperlink; // } /** * Creates an image hyperlink as a part of the form. The hyperlink will be * added to the hyperlink group that belongs to this toolkit. * * @param parent * the hyperlink parent * @param style * the hyperlink style * @return the image hyperlink widget */ // public ImageHyperlink createImageHyperlink(Composite parent, int style) { // ImageHyperlink hyperlink = new ImageHyperlink(parent, style // | orientation); // hyperlink.addFocusListener(visibilityHandler); // hyperlink.addKeyListener(keyboardHandler); // hyperlinkGroup.add(hyperlink); // return hyperlink; // } /** * Creates a rich text as a part of the form. * * @param parent * the rich text parent * @param trackFocus * if true, the toolkit will monitor focus * transfers to ensure that the hyperlink in focus is visible in * the form. * @return the rich text widget * @since 1.2 */ // public FormText createFormText(Composite parent, boolean trackFocus) { // FormText engine = new FormText(parent, SWT.WRAP | orientation); // engine.marginWidth = 1; // engine.marginHeight = 0; // engine.setHyperlinkSettings(getHyperlinkGroup()); // adapt(engine, trackFocus, true); // engine.setMenu(parent.getMenu()); // return engine; // } /** * Adapts a control to be used in a form that is associated with this * toolkit. This involves adjusting colors and optionally adding handlers to * ensure focus tracking and keyboard management. * * @param control * a control to adapt * @param trackFocus * if true, form will be scrolled horizontally * and/or vertically if needed to ensure that the control is * visible when it gains focus. Set it to false if * the control is not capable of gaining focus. * @param trackKeyboard * if true, the control that is capable of * gaining focus will be tracked for certain keys that are * important to the underlying form (for example, PageUp, * PageDown, ScrollUp, ScrollDown etc.). Set it to * false if the control is not capable of gaining * focus or these particular key event are already used by the * control. */ public void adapt(Control control, boolean trackFocus, boolean trackKeyboard) { control.setBackground(colors.getBackground()); control.setForeground(colors.getForeground()); // if (control instanceof ExpandableComposite) { // ExpandableComposite ec = (ExpandableComposite) control; // if (ec.toggle != null) { // if (trackFocus) // ec.toggle.addFocusListener(visibilityHandler); // if (trackKeyboard) // ec.toggle.addKeyListener(keyboardHandler); // } // if (ec.textLabel != null) { // if (trackFocus) // ec.textLabel.addFocusListener(visibilityHandler); // if (trackKeyboard) // ec.textLabel.addKeyListener(keyboardHandler); // } // return; // } if (trackFocus) control.addFocusListener(visibilityHandler); if (trackKeyboard) control.addKeyListener(keyboardHandler); } /** * Adapts a composite to be used in a form associated with this toolkit. * * @param composite * the composite to adapt */ public void adapt(Composite composite) { composite.setBackground(colors.getBackground()); composite.addMouseListener(new MouseAdapter() { public void mouseDown(MouseEvent e) { ((Control) e.widget).setFocus(); } }); if (composite.getParent() != null) composite.setMenu(composite.getParent().getMenu()); } /** * A helper method that ensures the provided control is visible when * ScrolledComposite is somewhere in the parent chain. If scroll bars are * visible and the control is clipped, the client of the scrolled composite * will be scrolled to reveal the control. * * @param c * the control to reveal */ public static void ensureVisible(Control c) { FormUtil.ensureVisible(c); } /** * Creates a section as a part of the form. * * @param parent * the section parent * @param sectionStyle * the section style * @return the section widget */ // public Section createSection(Composite parent, int sectionStyle) { // Section section = new Section(parent, orientation, sectionStyle); // section.setMenu(parent.getMenu()); // adapt(section, true, true); // if (section.toggle != null) { // section.toggle.setHoverDecorationColor(colors // .getColor(IFormColors.TB_TOGGLE_HOVER)); // section.toggle.setDecorationColor(colors // .getColor(IFormColors.TB_TOGGLE)); // } // section.setFont(boldFontHolder.getBoldFont(parent.getFont())); // if ((sectionStyle & Section.TITLE_BAR) != 0 // || (sectionStyle & Section.SHORT_TITLE_BAR) != 0) { // colors.initializeSectionToolBarColors(); // section.setTitleBarBackground(colors.getColor(IFormColors.TB_BG)); // section.setTitleBarBorderColor(colors // .getColor(IFormColors.TB_BORDER)); // } // // call setTitleBarForeground regardless as it also sets the label color // section.setTitleBarForeground(colors // .getColor(IFormColors.TB_TOGGLE)); // return section; // } /** * Creates an expandable composite as a part of the form. * * @param parent * the expandable composite parent * @param expansionStyle * the expandable composite style * @return the expandable composite widget */ // public ExpandableComposite createExpandableComposite(Composite parent, // int expansionStyle) { // ExpandableComposite ec = new ExpandableComposite(parent, orientation, // expansionStyle); // ec.setMenu(parent.getMenu()); // adapt(ec, true, true); // ec.setFont(boldFontHolder.getBoldFont(ec.getFont())); // return ec; // } /** * Creates a separator label as a part of the form. * * @param parent * the separator parent * @param style * the separator style * @return the separator label */ public Label createSeparator(Composite parent, int style) { Label label = new Label(parent, SWT.SEPARATOR | style | orientation); label.setBackground(colors.getBackground()); label.setForeground(colors.getBorderColor()); return label; } /** * Creates a table as a part of the form. * * @param parent * the table parent * @param style * the table style * @return the table widget */ public Table createTable(Composite parent, int style) { Table table = new Table(parent, style | borderStyle | orientation); adapt(table, false, false); // hookDeleteListener(table); return table; } /** * Creates a text as a part of the form. * * @param parent * the text parent * @param value * the text initial value * @return the text widget */ public Text createText(Composite parent, String value) { return createText(parent, value, SWT.SINGLE); } /** * Creates a text as a part of the form. * * @param parent * the text parent * @param value * the text initial value * @param style * the text style * @return the text widget */ public Text createText(Composite parent, String value, int style) { Text text = new Text(parent, borderStyle | style | orientation); if (value != null) text.setText(value); text.setForeground(colors.getForeground()); text.setBackground(colors.getBackground()); text.addFocusListener(visibilityHandler); return text; } /** * Creates a tree widget as a part of the form. * * @param parent * the tree parent * @param style * the tree style * @return the tree widget */ public Tree createTree(Composite parent, int style) { Tree tree = new Tree(parent, borderStyle | style | orientation); adapt(tree, false, false); // hookDeleteListener(tree); return tree; } /** * Creates a scrolled form widget in the provided parent. If you do not * require scrolling because there is already a scrolled composite up the * parent chain, use 'createForm' instead. * * @param parent * the scrolled form parent * @return the form that can scroll itself * @see #createForm */ public ScrolledComposite createScrolledForm(Composite parent) { ScrolledComposite form = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL | orientation); form.setExpandHorizontal(true); form.setExpandVertical(true); form.setBackground(colors.getBackground()); form.setForeground(colors.getColor(IFormColors.TITLE)); form.setFont(JFaceResources.getHeaderFont()); return form; } /** * Creates a form widget in the provided parent. Note that this widget does * not scroll its content, so make sure there is a scrolled composite up the * parent chain. If you require scrolling, use 'createScrolledForm' instead. * * @param parent * the form parent * @return the form that does not scroll * @see #createScrolledForm */ // public Form createForm(Composite parent) { // Form formContent = new Form(parent, orientation); // formContent.setBackground(colors.getBackground()); // formContent.setForeground(colors.getColor(IFormColors.TITLE)); // formContent.setFont(JFaceResources.getHeaderFont()); // return formContent; // } /** * Takes advantage of the gradients and other capabilities to decorate the * form heading using colors computed based on the current skin and * operating system. * * @param form * the form to decorate */ // public void decorateFormHeading(Form form) { // Color top = colors.getColor(IFormColors.H_GRADIENT_END); // Color bot = colors.getColor(IFormColors.H_GRADIENT_START); // form.setTextBackground(new Color[] { top, bot }, new int[] { 100 }, // true); // form.setHeadColor(IFormColors.H_BOTTOM_KEYLINE1, colors // .getColor(IFormColors.H_BOTTOM_KEYLINE1)); // form.setHeadColor(IFormColors.H_BOTTOM_KEYLINE2, colors // .getColor(IFormColors.H_BOTTOM_KEYLINE2)); // form.setHeadColor(IFormColors.H_HOVER_LIGHT, colors // .getColor(IFormColors.H_HOVER_LIGHT)); // form.setHeadColor(IFormColors.H_HOVER_FULL, colors // .getColor(IFormColors.H_HOVER_FULL)); // form.setHeadColor(IFormColors.TB_TOGGLE, colors // .getColor(IFormColors.TB_TOGGLE)); // form.setHeadColor(IFormColors.TB_TOGGLE_HOVER, colors // .getColor(IFormColors.TB_TOGGLE_HOVER)); // form.setSeparatorVisible(true); // } /** * Creates a scrolled page book widget as a part of the form. * * @param parent * the page book parent * @param style * the text style * @return the scrolled page book widget */ // public ScrolledPageBook createPageBook(Composite parent, int style) { // ScrolledPageBook book = new ScrolledPageBook(parent, style // | orientation); // adapt(book, true, true); // book.setMenu(parent.getMenu()); // return book; // } /** * Disposes the toolkit. */ public void dispose() { if (isDisposed) { return; } isDisposed = true; if (colors.isShared() == false) { colors.dispose(); colors = null; } boldFontHolder.dispose(); } /** * Returns the hyperlink group that manages hyperlinks for this toolkit. * * @return the hyperlink group */ // public HyperlinkGroup getHyperlinkGroup() { // return hyperlinkGroup; // } /** * Sets the background color for the entire toolkit. The method delegates * the call to the FormColors object and also updates the hyperlink group so * that hyperlinks and other objects are in sync. * * @param bg * the new background color */ public void setBackground(Color bg) { // hyperlinkGroup.setBackground(bg); colors.setBackground(bg); } /** * Refreshes the hyperlink colors by loading from JFace settings. */ // public void refreshHyperlinkColors() { // hyperlinkGroup.initializeDefaultForegrounds(colors.getDisplay()); // } // RAP [rh] paintBordersFor not useful as no GC to actually paint borders // /** // * Paints flat borders for widgets created by this toolkit within the // * provided parent. Borders will not be painted if the global border style // * is SWT.BORDER (i.e. if native borders are used). Call this method during // * creation of a form composite to get the borders of its children painted. // * Care should be taken when selection layout margins. At least one pixel // * pargin width and height must be chosen to allow the toolkit to paint the // * border on the parent around the widgets. // *

// * Borders are painted for some controls that are selected by the toolkit by // * default. If a control needs a border but is not on its list, it is // * possible to force border in the following way: // * // *

//	 *
//	 *
//	 *
//	 *             widget.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TREE_BORDER);
//	 *
//	 *             or
//	 *
//	 *             widget.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
//	 *
//	 *
//	 *
//	 * 
// * // * @param parent // * the parent that owns the children for which the border needs // * to be painted. // */ // public void paintBordersFor(Composite parent) { // // if (borderStyle == SWT.BORDER) // // return; // if (borderPainter == null) // borderPainter = new BorderPainter(); // parent.addPaintListener(borderPainter); // } /** * Returns the colors used by this toolkit. * * @return the color object */ public FormColors getColors() { return colors; } /** * Returns the border style used for various widgets created by this * toolkit. The intent of the toolkit is to create controls with styles that * yield a 'flat' appearance. On systems where the native borders are * already flat, we set the style to SWT.BORDER and don't paint the borders * ourselves. Otherwise, the style is set to SWT.NULL, and borders are * painted by the toolkit. * * @return the global border style */ public int getBorderStyle() { return borderStyle; } /** * Returns the margin required around the children whose border is being * painted by the toolkit using {@link #paintBordersFor(Composite)}. Since * the border is painted around the controls on the parent, a number of * pixels needs to be reserved for this border. For windowing systems where * the native border is used, this margin is 0. * * @return the margin in the parent when children have their border painted */ public int getBorderMargin() { return getBorderStyle() == SWT.BORDER ? 0 : 2; } /** * Sets the border style to be used when creating widgets. The toolkit * chooses the correct style based on the platform but this value can be * changed using this method. * * @param style * SWT.BORDER or SWT.NULL * @see #getBorderStyle */ public void setBorderStyle(int style) { this.borderStyle = style; } /** * A utility method that ensures that the control is visible in the scrolled * composite. The prerequisite for this method is that the control has a * class that extends ScrolledComposite somewhere in the parent chain. If * the control is partially or fully clipped, the composite is scrolled to * set by setting the origin to the control origin. * * @param c * the control to make visible * @param verticalOnly * if true, the scrolled composite will be * scrolled only vertically if needed. Otherwise, the scrolled * composite origin will be set to the control origin. */ public static void setControlVisible(Control c, boolean verticalOnly) { ScrolledComposite scomp = FormUtil.getScrolledComposite(c); if (scomp == null) return; Point location = FormUtil.getControlLocation(scomp, c); scomp.setOrigin(location); } private void initialize() { initializeBorderStyle(); // hyperlinkGroup = new HyperlinkGroup(colors.getDisplay()); // hyperlinkGroup.setBackground(colors.getBackground()); visibilityHandler = new VisibilityHandler(); keyboardHandler = new KeyboardHandler(); boldFontHolder = new BoldFontHolder(); } // RAP [rh] revise detection of border style: can't ask OS here private void initializeBorderStyle() { // String osname = System.getProperty("os.name"); //$NON-NLS-1$ // String osversion = System.getProperty("os.version"); //$NON-NLS-1$ // if (osname.startsWith("Windows") && "5.1".compareTo(osversion) <= 0) { //$NON-NLS-1$ //$NON-NLS-2$ // // Skinned widgets used on newer Windows (e.g. XP (5.1), Vista // // (6.0)) // // Check for Windows Classic. If not used, set the style to BORDER // RGB rgb = colors.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND); // if (rgb.red != 212 || rgb.green != 208 || rgb.blue != 200) // borderStyle = SWT.BORDER; // } else if (osname.startsWith("Mac")) //$NON-NLS-1$ // borderStyle = SWT.BORDER; borderStyle = SWT.BORDER; } /** * Returns the orientation that all the widgets created by this toolkit will * inherit, if set. Can be SWT.NULL, * SWT.LEFT_TO_RIGHT and SWT.RIGHT_TO_LEFT. * * @return orientation style for this toolkit, or SWT.NULL if * not set. The default orientation is inherited from the Window * default orientation. * @see org.eclipse.jface.window.Window#getDefaultOrientation() */ public int getOrientation() { return orientation; } /** * Sets the orientation that all the widgets created by this toolkit will * inherit. Can be SWT.NULL, SWT.LEFT_TO_RIGHT * and SWT.RIGHT_TO_LEFT. * * @param orientation * style for this toolkit. */ public void setOrientation(int orientation) { this.orientation = orientation; } }