edu.caltech.ipac.firefly.ui.FormBuilder.java Source code

Java tutorial

Introduction

Here is the source code for edu.caltech.ipac.firefly.ui.FormBuilder.java

Source

/*
 * License information at https://github.com/Caltech-IPAC/firefly/blob/master/License.txt
 */
package edu.caltech.ipac.firefly.ui;

import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import edu.caltech.ipac.util.dd.FieldDef;
import edu.caltech.ipac.firefly.ui.input.InputField;
import edu.caltech.ipac.firefly.ui.input.InputFieldCreator;
import edu.caltech.ipac.firefly.ui.input.ValidationInputField;
import edu.caltech.ipac.firefly.ui.input.SimpleInputField;
import edu.caltech.ipac.firefly.ui.input.InputFieldPanel;
import edu.caltech.ipac.util.dd.FieldDefSource;

/**
 * Date: Nov 7, 2007
 *
 * @author loi
 * @version $Id: FormBuilder.java,v 1.13 2012/05/16 01:39:04 loi Exp $
 */
public class FormBuilder {

    public static Widget createPanel(int labelWidth, String... propNames) {
        return createPanel(new Config(labelWidth), propNames);
    }

    public static Widget createPanel(Config config, String... propNames) {
        FieldDef[] fields = new FieldDef[propNames.length];
        for (int i = 0; i < fields.length; i++) {
            fields[i] = FieldDefCreator.makeFieldDef(propNames[i]);
        }
        return createPanel(config, fields);
    }

    public static Widget createPanel(int labelWidth, FieldDefSource... fdss) {
        return createPanel(new Config(labelWidth), fdss);
    }

    public static Widget createPanel(Config config, FieldDefSource... fdss) {
        FieldDef[] fields = new FieldDef[fdss.length];
        for (int i = 0; i < fields.length; i++) {
            fields[i] = FieldDefCreator.makeFieldDef(fdss[i]);
        }
        return createPanel(config, fields);
    }

    public static Widget createPanel(int labelWidth, FieldDef... fds) {
        return createPanel(new Config(labelWidth), fds);
    }

    public static Widget createPanel(Config config, FieldDef... fds) {
        InputField[] fields = new InputField[fds.length];
        for (int i = 0; i < fds.length; i++) {
            fields[i] = createField(fds[i]);
        }
        return createPanel(config, fields);
    }

    public static Widget createPanel(int labelWidth, InputField... fields) {
        return createPanel(new Config(labelWidth), fields);
    }

    /**
     * convenience method to create a panel and layout the fields.
     * @param config configuration
     * @param fields fields
     * @return panel widget
     */
    public static Widget createPanel(Config config, InputField... fields) {
        if (config.getDirection().equals(Config.Direction.HORIZONTAL)) {
            HorizontalPanel p = new HorizontalPanel();
            for (InputField f : fields) {
                p.add(layoutFields(config, f));
            }
            return p;
        } else {
            return layoutFields(config, fields);
        }
    }

    public static Widget createWidget(int labelWidth, int padding, Widget label, Widget field) {
        HorizontalPanel hp = new HorizontalPanel();
        hp.add(label);
        hp.add(field);
        hp.setCellWidth(label, labelWidth + "px");
        GwtUtil.setStyle(hp, "paddingLeft", padding + "px");
        return hp;
    }

    /*
     * used for Hydra
     */
    public static Widget createPanel(Config config, Widget... widgets) {
        if (config.getDirection().equals(Config.Direction.HORIZONTAL)) {
            HorizontalPanel hp = new HorizontalPanel();
            for (Widget w : widgets) {
                if (w instanceof InputField) {
                    InputField f = (InputField) w;
                    hp.add(layoutFields(config, f));
                } else {
                    hp.add(w);
                }
            }
            return hp;

        } else {
            VerticalPanel vp = new VerticalPanel();
            for (Widget w : widgets) {
                if (w instanceof InputField) {
                    InputField f = (InputField) w;
                    vp.add(layoutFields(config, f));
                } else {
                    vp.add(w);
                }
            }
            return vp;
        }
    }

    private static InputFieldPanel layoutFields(Config config, InputField... fields) {
        InputFieldPanel panel = new InputFieldPanel(config.getLabelWidth());
        panel.setPadding(config.getPadding());
        //int maxWidth = 0;
        for (InputField f : fields) {
            //int width= f.getFieldDef().getPreferWidth();
            //maxWidth = Math.max(width, maxWidth);
            panel.addUserField(f, config.getLabelAlign());
        }
        //panel.setDefaultWidth(maxWidth);
        return panel;
    }

    public static InputField createField(String propName) {
        return createField(FieldDefCreator.makeFieldDef(propName));
    }

    public static InputField createField(FieldDefSource fds) {
        return createField(FieldDefCreator.makeFieldDef(fds));
    }

    public static InputField createField(FieldDef fd) {
        InputField field = InputFieldCreator.createFieldWidget(fd);
        return SimpleInputField.needsWarnings(field) ? new ValidationInputField(field) : field;
    }

    //====================================================================
    //  static public methods
    //====================================================================
    public static class Config {

        public static enum Direction {
            HORIZONTAL, VERTICAL
        }

        private Direction direction;
        private int labelWidth;
        private HorizontalPanel.HorizontalAlignmentConstant labelAlign;
        private int padding = 0;

        public Config() {
            this(Direction.VERTICAL, 100, HorizontalPanel.ALIGN_LEFT);
        }

        public Config(int labelWidth, int padding) {
            this(Direction.VERTICAL, labelWidth, padding, HorizontalPanel.ALIGN_LEFT);
        }

        public Config(int labelWidth) {
            this(Direction.VERTICAL, labelWidth, HorizontalPanel.ALIGN_LEFT);
        }

        public Config(int labelWidth, HorizontalPanel.HorizontalAlignmentConstant labelAlign) {
            this(Direction.VERTICAL, labelWidth, labelAlign);
        }

        public Config(Direction direction, int labelWidth, HorizontalPanel.HorizontalAlignmentConstant labelAlign) {
            this(direction, labelWidth, 10, labelAlign);
        }

        public Config(Direction direction, int labelWidth, int padding,
                HorizontalPanel.HorizontalAlignmentConstant labelAlign) {
            this.direction = direction;
            this.labelWidth = labelWidth;
            this.labelAlign = labelAlign;
            this.padding = padding;
        }

        public Direction getDirection() {
            return direction;
        }

        public void setDirection(Direction direction) {
            this.direction = direction;
        }

        public int getLabelWidth() {
            return labelWidth;
        }

        public void setLabelWidth(int labelWidth) {
            this.labelWidth = labelWidth;
        }

        public HorizontalPanel.HorizontalAlignmentConstant getLabelAlign() {
            return labelAlign;
        }

        public void setLabelAlign(HorizontalPanel.HorizontalAlignmentConstant labelAlign) {
            this.labelAlign = labelAlign;
        }

        public int getPadding() {
            return padding;
        }

        public void setPadding(int padding) {
            this.padding = padding;
        }
    }

}