SelectExample.java
/* 
 * Copyright 2009 IT Mill Ltd.
 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 
 * http://www.apache.org/licenses/LICENSE-2.0
 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.itmill.toolkit.demo.featurebrowser;

import com.itmill.toolkit.data.Property.ValueChangeEvent;
import com.itmill.toolkit.ui.AbstractSelect;
import com.itmill.toolkit.ui.ComboBox;
import com.itmill.toolkit.ui.CustomComponent;
import com.itmill.toolkit.ui.Field;
import com.itmill.toolkit.ui.HorizontalLayout;
import com.itmill.toolkit.ui.ListSelect;
import com.itmill.toolkit.ui.NativeSelect;
import com.itmill.toolkit.ui.OptionGroup;
import com.itmill.toolkit.ui.Panel;
import com.itmill.toolkit.ui.TwinColSelect;
import com.itmill.toolkit.ui.VerticalLayout;

/**
 * Shows some basic fields for value input; TextField, DateField, Slider...
 
 @author IT Mill Ltd.
 */
public class SelectExample extends CustomComponent {

    // listener that shows a value change notification
    private final Field.ValueChangeListener listener = new Field.ValueChangeListener() {
        public void valueChange(ValueChangeEvent event) {
            getWindow().showNotification("" + event.getProperty().getValue());
        }
    };

    public SelectExample() {
        final VerticalLayout main = new VerticalLayout();
        main.setMargin(true);
        setCompositionRoot(main);

        final HorizontalLayout horiz = new HorizontalLayout();
        horiz.setWidth("100%");
        main.addComponent(horiz);
        final Panel single = new Panel("Single selects");
        single.setStyleName(Panel.STYLE_LIGHT);
        horiz.addComponent(single);
        final Panel multi = new Panel("Multi selects");
        multi.setStyleName(Panel.STYLE_LIGHT);
        horiz.addComponent(multi);

        // radio button group
        AbstractSelect sel = new OptionGroup("OptionGroup");
        initSelect(sel);
        single.addComponent(sel);
        // checkbox group
        sel = new OptionGroup("OptionGroup");
        sel.setMultiSelect(true)// TODO: throws if set after listener - why?
        initSelect(sel);
        multi.addComponent(sel);
        // single-select list
        sel = new ListSelect("ListSelect");
        ((ListSelectsel).setColumns(15);
        initSelect(sel);
        single.addComponent(sel);
        // multi-select list
        sel = new ListSelect("ListSelect");
        ((ListSelectsel).setColumns(15);
        sel.setMultiSelect(true);
        initSelect(sel);
        multi.addComponent(sel);
        // native-style dropdows
        sel = new NativeSelect("NativeSelect");
        ((NativeSelectsel).setColumns(15);
        initSelect(sel);
        single.addComponent(sel);
        // combobox
        sel = new ComboBox("ComboBox");
        ((ComboBoxsel).setWidth("15em");
        initSelect(sel);
        single.addComponent(sel);
        // "twin column" select
        sel = new TwinColSelect("TwinColSelect");
        sel.setWidth("100%");
        ((TwinColSelectsel).setColumns(15);
        initSelect(sel);
        multi.addComponent(sel);
    }

    /*
     * Initialize select with some values, make immediate and add listener.
     */
    private void initSelect(AbstractSelect sel) {
        for (int i = 1; i <= 5; i++) {
            sel.addItem("Item " + i);
        }
        // select one item
        sel.select("Item 1");

        // make immediate, add listener
        sel.setImmediate(true);
        sel.addListener(listener);
    }

}