view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacagePairWidget.java @ 9133:af73fdd96920

Title current/historical diff pair; limit on entries in diff'pair twin_panel
author gernotbelger
date Thu, 07 Jun 2018 11:41:10 +0200
parents 8f6d6d26e96f
children e3c2ae1887e8
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.client.client.ui;

import org.dive4elements.river.client.client.FLYSConstants;
import org.dive4elements.river.client.shared.model.Artifact;
import org.dive4elements.river.client.shared.model.ToLoad;
import org.dive4elements.river.client.shared.model.User;

import com.google.gwt.core.client.GWT;
import com.smartgwt.client.util.SC;
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;

/**
 * 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;

    /** Max number of recommendation pairs to be added */
    private final int maxCount;
    /** errorMsg maxCount */
    private final String msgMaxCount;

    /**
     *
     * @param artifact
     *            Artifact to query datacage with.
     * @param user
     *            User to query datacage with.
     * @param leftOuts
     *            outs to query the left datacage with.
     * @param rightOuts
     *            outs to query the right datacage with.
     * @param grid
     *            Grid into which to insert selection of pairs.
     * @param max
     */
    public DatacagePairWidget(final Artifact artifact, final User user, final String leftOuts, final String rightOuts, final ListGrid grid, final int maxCount,
            final String msgMaxCount) {
        this.msgMaxCount = msgMaxCount;
        this.maxCount = maxCount;
        this.grid = grid;

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

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

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

        addMember(hLayout);
        addMember(plusBtn);
    }

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

        if (toLoad1 == null || toLoad2 == null || toLoad1.toRecommendations().isEmpty() || toLoad2.toRecommendations().isEmpty()) {
            SC.say(this.MSG.warning_select_two_values());
            return;
        }
        if (this.grid.getTotalRows() >= this.maxCount) {
            SC.say(this.msgMaxCount);
            return;
        }

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

http://dive4elements.wald.intevation.org