view flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacagePairWidget.java @ 4182:ad2489b595d7

Fix for issue #967
author Christian Lins <christian.lins@intevation.de>
date Tue, 16 Oct 2012 12:44:15 +0200
parents 6a8f83c538e3
children 1755a1bfe5ce
line wrap: on
line source
package de.intevation.flys.client.client.ui;

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

import com.smartgwt.client.widgets.Button;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;

import de.intevation.flys.client.client.FLYSConstants;
import de.intevation.flys.client.shared.model.Artifact;
import de.intevation.flys.client.shared.model.Recommendation;
import de.intevation.flys.client.shared.model.ToLoad;
import de.intevation.flys.client.shared.model.User;

import java.util.List;


/**
 * Widget showing two Datacages and a add-this-button.
 * Insert a record into a listgrid when add-this-button clicked.
 */
public class DatacagePairWidget
extends      VLayout
{
    /** i18n resource. */
    protected FLYSConstants MSG =
        GWT.create(FLYSConstants.class);

    /** The "remote" ListGrid to insert data to when add-button is clicked. */
    protected ListGrid grid;

    /** First (upper) DataCage Grid. */
    protected DatacageWidget firstDatacageWidget;

    /** Second (lower) DataCage Grid. */
    protected DatacageWidget secondDatacageWidget;


    /**
     *
     * @param artifact Artifact to query datacage with.
     * @param user     User to query datacage with.
     * @param outs     outs to query datacage with.
     * @param grid     Grid into which to insert selection of pairs.
     */
    public DatacagePairWidget(Artifact artifact,
         User user,
         String outs,
         ListGrid grid) {
        this.grid = grid;

        HLayout hLayout      = new HLayout();
        firstDatacageWidget  = new DatacageWidget(
            artifact,
            user,
            outs,
            "load-system:true",
            false);
        secondDatacageWidget = new DatacageWidget(
            artifact,
            user,
            outs,
            "load-system:true",
            false);
        firstDatacageWidget.setIsMutliSelectable(false);
        secondDatacageWidget.setIsMutliSelectable(false);

        hLayout.addMember(firstDatacageWidget);
        hLayout.addMember(secondDatacageWidget);

        // TODO: icon
        Button plusBtn = new Button(MSG.datacage_add_pair());
        plusBtn.setAutoFit(true);
        plusBtn.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                plusClicked();
            }
        });

        addMember(hLayout);
        addMember(plusBtn);
    }


    /**
     * Callback for add-button.
     * Fires to load for every selected element and handler.
     */
    public void plusClicked() {
        ToLoad toLoad1 = firstDatacageWidget.getSelection();
        ToLoad toLoad2 = secondDatacageWidget.getSelection();

        if (toLoad1 == null || toLoad2 == null) {
            return;
        }

        List<Recommendation> toLoad1Rec = toLoad1.toRecommendations();
        List<Recommendation> toLoad2Rec = toLoad2.toRecommendations();

        if (toLoad1Rec.size() <= 0 || toLoad2Rec.size() <= 0) {
            return;
        }

        grid.addData(new RecommendationPairRecord(toLoad1Rec.get(0), toLoad2Rec.get(0)));
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org