view flys-client/src/main/java/de/intevation/flys/client/client/ui/ParameterList.java @ 38:7142386e86c2

Some improvements for displaying old parameters. flys-client/trunk@1471 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 14 Mar 2011 18:09:21 +0000
parents dc086030e6a3
children 1458bc0a20e2
line wrap: on
line source
package de.intevation.flys.client.client.ui;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.core.client.GWT;

import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;

import de.intevation.flys.client.shared.model.Data;
import de.intevation.flys.client.shared.model.DataItem;


public class ParameterList extends VLayout {

    protected List<Data> old;
    protected Data       current;

    protected UIProvider uiProvider;

    protected VLayout oldItems;
    protected VLayout currentItems;

    public ParameterList() {
        old          = new ArrayList<Data>();
        oldItems     = new VLayout();
        currentItems = new VLayout();

        init();
    }


    protected void init() {
        oldItems.setHeight(20);
        currentItems.setHeight("*");
        currentItems.setAlign(VerticalAlignment.TOP);

        addMember(oldItems);
        addMember(currentItems);
    }


    protected void clearOldData() {
        old.clear();
    }


    public void addOldData(Data old) {
        if (old != null) {
            this.old.add(old);
        }

        refreshOld();
    }


    public void addOldDatas(Data[] old) {
        if (old != null && old.length > 0) {
            for (Data o: old) {
                if (!exists(o)) {
                    GWT.log("Data '" + o.getLabel() + "' is new.");
                    addOldData(o);
                }
            }

            return;
        }

        addOldData(null);
    }


    public boolean exists(Data data) {
        String label = data.getLabel();

        for (Data o: old) {
            if (label.equals(o.getLabel())) {
                return true;
            }
        }

        return false;
    }


    public void setCurrentData(Data current, UIProvider uiProvider) {
        this.current    = current;
        this.uiProvider = uiProvider;

        refreshCurrent();
    }


    public void refreshOld() {
        // XXX maybe we should not remove all items but just add the newest item
        // to the list.
        oldItems.removeMembers(oldItems.getMembers());

        for (Data data: old) {
            HLayout h = new HLayout();
            h.setAlign(VerticalAlignment.TOP);
            h.setHeight(20);

            DataItem[] items = data.getItems();
            Label label = new Label(data.getLabel());
            Label value = new Label(items[0].getLabel());

            h.addMember(label);
            h.addMember(value);

            oldItems.addMember(h);
        }

        int minHeight = oldItems.getMinHeight();
        if (minHeight <= 20) {
            oldItems.setHeight(20);
        }
        else {
            oldItems.setHeight(minHeight);
        }
    }


    /**
     * This method refreshes the part displaying the data of the current state.
     * The UI is created using the UIProvider stored in the Data object.
     */
    public void refreshCurrent() {
        currentItems.addMember(uiProvider.create(current));
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org