view flys-client/src/main/java/de/intevation/flys/client/client/ui/DatacagePairWidget.java @ 1283:e8bb11976c70

Neaten certain GUI aspects with W-Diff waterlevel-pair selection. flys-client/trunk@2867 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Fri, 30 Sep 2011 07:44:35 +0000
parents 87b6a93db523
children cdb1505a32f1
line wrap: on
line source
package de.intevation.flys.client.client.ui;

import java.util.List;
import java.util.Map;
import java.util.Set;

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

import com.smartgwt.client.widgets.Button;

import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.layout.HLayout;

import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.events.ClickEvent;

import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridRecord;

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

import de.intevation.flys.client.client.FLYSConstants;

import de.intevation.flys.client.shared.model.Recommendation;
import de.intevation.flys.client.shared.model.Recommendation.Facet;
import de.intevation.flys.client.shared.model.Recommendation.Filter;


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

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

/** First attribute-name for StringPairRecord. */
protected static final String ATTRIBUTE_FIRST  = "first";

/** Second attribute-name for StringPairRecord. */
protected static final String ATTRIBUTE_SECOND = "second";

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

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


/**
 * Two strings to be displayed in a GridList, derived from two
 * Recommendations.
 */
protected class RecommendationPairRecord extends ListGridRecord {
    Recommendation first;
    Recommendation second;
    String firstName;
    String secondName;

    public RecommendationPairRecord() {
    }

    public RecommendationPairRecord(String firstName,
        Recommendation first,
        String secondName,
        Recommendation second)
    {
        setFirst(first, firstName);
        setSecond(second, secondName);
    }


    public void setFirst(Recommendation first, String name) {
        this.first = first;
        this.firstName = name;
        setAttribute(ATTRIBUTE_FIRST, name);
    }


    public void setSecond(Recommendation second, String name) {
        this.second = second;
        this.secondName = name;
        setAttribute(ATTRIBUTE_SECOND, name);
    }

    public Recommendation getFirst() {return first;}
    public Recommendation getSecond() {return second;}
    public String getFirstName() {return firstName;}
    public String getSecondName() {return secondName;}
}


/**
 *
 * @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, false);
        secondDatacageWidget = new DatacageWidget(artifact, user, outs, false);
        firstDatacageWidget.setIsMutliSelectable(false);
        secondDatacageWidget.setIsMutliSelectable(false);

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

        // TODO: i18n + icon
        Button plusBtn = new Button("+");
        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();
        String [] sel1 = firstDatacageWidget.getSelectionTitles();
        String [] sel2 = secondDatacageWidget.getSelectionTitles();

        // TODO further sanitize (toRecommendations.length)
        if (toLoad1 == null || toLoad2 == null) {
            return;
        }

        grid.addData(new RecommendationPairRecord(
            sel1[0],
            toLoad1.toRecommendations().get(0),
            sel2[0],
            toLoad2.toRecommendations().get(0)));
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org