001    /*
002     * Copyright 2002-2006 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.richclient.samples.simple.ui;
017    
018    import com.jgoodies.forms.layout.FormLayout;
019    import org.springframework.richclient.form.AbstractFocussableForm;
020    import org.springframework.richclient.form.FormModelHelper;
021    import org.springframework.richclient.form.binding.swing.NumberBinder;
022    import org.springframework.richclient.form.builder.FormLayoutFormBuilder;
023    import org.springframework.richclient.form.builder.TableFormBuilder;
024    import org.springframework.richclient.samples.simple.domain.Contact;
025    import org.springframework.richclient.samples.simple.ui.binding.TodoItemListBinding;
026    
027    import javax.swing.*;
028    import java.util.HashMap;
029    
030    /**
031     * Form to handle the properties of a Contact object. It uses a {@link TableFormBuilder} to construct the layout of the
032     * form. Contact object properties are easily bound to UI controls using the form builder's
033     * {@link TableFormBuilder#add(String)} method. The platform takes care of determining which kind of control to create
034     * based on the type of the property in question.
035     * @author Larry Streepy
036     */
037    public class ContactForm extends AbstractFocussableForm
038    {
039            public ContactForm(Contact contact) {
040                    super(FormModelHelper.createFormModel(contact, "contactForm"));
041            }
042    
043            protected JComponent createFormControl()
044        {
045            FormLayout layout = new FormLayout("right:pref, 4dlu, fill:pref:grow, 6dlu, right:pref, 4dlu, fill:pref:grow", "default");
046            FormLayoutFormBuilder formBuilder = new FormLayoutFormBuilder(getBindingFactory(), layout);
047            
048            formBuilder.setLabelAttributes("r, c");
049            formBuilder.addHorizontalSeparator("General", 7);
050            formBuilder.nextRow();
051            formBuilder.addPropertyAndLabel("lastName");
052            setFocusControl(formBuilder.addPropertyAndLabel("firstName", 5)[1]);
053            formBuilder.nextRow();
054            formBuilder.addPropertyAndLabel("dateOfBirth");
055            formBuilder.nextRow();
056            formBuilder.addPropertyAndLabel("homePhone");
057                    formBuilder.addPropertyAndLabel("workPhone", 5);
058                    formBuilder.nextRow();
059                    formBuilder.addPropertyAndLabel("emailAddress");
060                    formBuilder.nextRow();
061                    formBuilder.addPropertyAndLabel("contactType");
062                    formBuilder.nextRow();
063            NumberBinder binder = new NumberBinder();
064            binder.setLeftDecoration("€");
065            formBuilder.addLabel("monthlyIncome");
066            formBuilder.addBinding(binder.bind(getFormModel(), "monthlyIncome", new HashMap()), 3);
067                    formBuilder.nextRow();
068                    formBuilder.addHorizontalSeparator("Address", 7);
069                    formBuilder.nextRow();
070                    formBuilder.addPropertyAndLabel("address.address1");
071                    formBuilder.nextRow();
072                    formBuilder.addPropertyAndLabel("address.address2");
073                    formBuilder.nextRow();
074                    formBuilder.addPropertyAndLabel("address.address3");
075                    formBuilder.nextRow();
076                    formBuilder.addPropertyAndLabel("address.city");
077                    formBuilder.nextRow();
078                    // formBuilder.add(getBindingFactory().createBoundComboBox( "address.state", MasterLists.STATE_CODE), "colSpan=1 align=left" );
079                    formBuilder.addPropertyAndLabel("address.state");
080                    formBuilder.nextRow();
081            JComponent zipField = formBuilder.addPropertyAndLabel("address.zip")[1];
082                    ((JTextField) zipField).setColumns(8);
083            formBuilder.nextRow();
084                    formBuilder.addHorizontalSeparator("Memo", 7);
085                    formBuilder.nextRow("fill:default:grow");
086            formBuilder.addTextArea("memo", 1, formBuilder.getRow(), 7, 1);
087             formBuilder.nextRow();
088            formBuilder.addHorizontalSeparator("Todo items", 7);
089                    formBuilder.nextRow("fill:default:grow");
090            TodoItemListBinding todoItemListBinding = new TodoItemListBinding(getFormModel(), "todoItems");
091            formBuilder.addBinding(todoItemListBinding, 1, formBuilder.getRow(), 7, 1);
092    
093            /*
094                    TableFormBuilder formBuilder = new TableFormBuilder(getBindingFactory());
095                    formBuilder.setLabelAttributes("colGrId=label colSpec=right:pref");
096    
097                    formBuilder.addSeparator("General");
098                    formBuilder.row();
099                    firstNameField = formBuilder.add("firstName")[1];
100                    formBuilder.add("lastName");
101                    formBuilder.row();
102                    formBuilder.add("dateOfBirth", "colSpan=1");
103                    formBuilder.row();
104                    formBuilder.add("homePhone");
105                    formBuilder.add("workPhone");
106                    formBuilder.row();
107                    formBuilder.add("emailAddress");
108                    formBuilder.row();
109                    formBuilder.row();
110                    formBuilder.add("contactType", "colSpan=1 align=left");
111                    formBuilder.row();
112                    formBuilder.addSeparator("Address");
113                    formBuilder.row();
114                    formBuilder.add("address.address1");
115                    formBuilder.row();
116                    formBuilder.add("address.address2");
117                    formBuilder.row();
118                    formBuilder.add("address.address3");
119                    formBuilder.row();
120                    formBuilder.add("address.city", "colSpan=1 align=left");
121                    formBuilder.row();
122                    // formBuilder.add(getBindingFactory().createBoundComboBox( "address.state", MasterLists.STATE_CODE), "colSpan=1 align=left" );
123                    formBuilder.add("address.state", "colSpan=1 align=left");
124                    formBuilder.row();
125    
126                    // We want to make the zip code UI field smaller than the default. The add method
127                    // returns an array of two components, the field label and the component bound to
128                    // the property.
129                    JComponent zipField = formBuilder.add("address.zip", "colSpan=1 align=left")[1];
130                    ((JTextField) zipField).setColumns(8);
131                    formBuilder.row();
132                    */
133    
134                    return formBuilder.getPanel();
135            }
136    
137    }