view flys-client/src/main/java/de/intevation/flys/client/client/ui/map/ExternalWMSWindow.java @ 1406:6c8a29abbe30

Added an initial control that allows (when it is finished) adding map layers from external WMS. flys-client/trunk@3291 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 18 Nov 2011 15:18:29 +0000
parents
children 5b5a20e4c4e5
line wrap: on
line source
package de.intevation.flys.client.client.ui.map;

import com.google.gwt.user.client.ui.TextBox;

import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Button;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.Layout;
import com.smartgwt.client.widgets.layout.VLayout;


public class ExternalWMSWindow extends Window {

    protected Layout inputPanel;
    protected Layout infoPanel;
    protected Layout layersPanel;

    protected String url;


    public ExternalWMSWindow() {
        super();
    }


    protected void setUrl(String url) {
        this.url = url;
    }


    protected String getUrl() {
        return url;
    }


    public void start() {
        show();
        centerInPage();

        goToInputPanel();
    }


    protected void goToInputPanel() {
        clearItems();

        inputPanel = createInputPanel();

        addItem(inputPanel);

        setWidth(380);
        setHeight(140);
    }


    protected void goToInfoPanel() {
        clearItems();

        infoPanel = createInfoPanel();

        addItem(infoPanel);

        setWidth(500);
        setHeight(500);
    }


    protected void goToLayersPanel() {
        clearItems();

        layersPanel = createLayersPanel();

        addItem(layersPanel);

        setWidth(500);
        setHeight(500);
    }


    protected void clearItems() {
        Canvas[] items = getItems();

        if (items != null) {
            for (Canvas item: items) {
                removeItem(item);
            }
        }
    }


    protected Layout createInputPanel() {
        // TODO I18N
        setTitle("Basis URL des WMS Dienstes");

        final TextBox url = new TextBox();
        url.setHeight("25px");
        url.setWidth("326px");

        String oldUrl = getUrl();
        if (oldUrl != null && oldUrl.length() > 0) {
            url.setValue(oldUrl);
        }

        ClickHandler goHandler = new ClickHandler() {
            @Override
            public void onClick(ClickEvent e) {
                String newUrl = url.getValue();

                if (!isUrlValid(newUrl)) {
                    // TODO I18N
                    SC.warn("Enter a valid URL!");
                    return;
                }

                setUrl(url.getValue());
                goToInfoPanel();
            }
        };

        ClickHandler cancelHandler = new ClickHandler() {
            @Override
            public void onClick(ClickEvent e) {
                quit();
            }
        };

        VLayout root = new VLayout();
        root.setHeight(75);
        root.setMargin(10);
        root.setLayoutMargin(10);

        root.addMember(url);
        root.addMember(createButtonPanel(null, goHandler, cancelHandler));

        return root;
    }


    protected Layout createInfoPanel() {
        // TODO I18N
        setTitle("Informationen des WMS Dienstes");

        ClickHandler backHandler = new ClickHandler() {
            @Override
            public void onClick(ClickEvent e) {
                goToInputPanel();
            }
        };

        ClickHandler goHandler = new ClickHandler() {
            @Override
            public void onClick(ClickEvent e) {
                goToLayersPanel();
            }
        };

        ClickHandler cancelHandler = new ClickHandler() {
            @Override
            public void onClick(ClickEvent e) {
                quit();
            }
        };

        VLayout root = new VLayout();

        root.addMember(new Label("STEP 2: " + getUrl()));

        // TODO IMPLEMENT ME

        root.addMember(createButtonPanel(backHandler, goHandler, cancelHandler));

        return root;
    }


    protected Layout createLayersPanel() {
        // TODO I18N
        setTitle("Ebene auswählen");

        ClickHandler backHandler = new ClickHandler() {
            @Override
            public void onClick(ClickEvent e) {
                goToInfoPanel();
            }
        };

        ClickHandler goHandler = new ClickHandler() {
            @Override
            public void onClick(ClickEvent e) {
                goToLayersPanel();
            }
        };

        ClickHandler cancelHandler = new ClickHandler() {
            @Override
            public void onClick(ClickEvent e) {
                quit();
            }
        };

        VLayout root = new VLayout();

        root.addMember(new Label("STEP 3"));

        // TODO IMPLEMENT ME

        root.addMember(createButtonPanel(backHandler, goHandler, cancelHandler));

        return root;
    }


    /**
     * @param back
     * @param ok
     * @param cancel
     *
     * @return
     */
    protected Layout createButtonPanel(
        ClickHandler backHandler,
        ClickHandler goHandler,
        ClickHandler cancelHandler
    ) {
        Button back   = new Button("Back");
        Button go     = new Button("Go on");
        Button cancel = new Button("Cancel");

        if (backHandler != null) {
            back.addClickHandler(backHandler);
        }
        else {
            back.setDisabled(true);
        }

        if (goHandler != null) {
            go.addClickHandler(goHandler);
        }
        else {
            go.setDisabled(true);
        }

        if (cancelHandler != null) {
            cancel.addClickHandler(cancelHandler);
        }
        else {
            cancel.setDisabled(true);
        }

        HLayout buttonPanel = new HLayout();
        buttonPanel.setHeight(25);
        buttonPanel.setMembersMargin(15);
        buttonPanel.setLayoutTopMargin(10);
        buttonPanel.addMember(back);
        buttonPanel.addMember(go);
        buttonPanel.addMember(cancel);

        return buttonPanel;
    }


    protected boolean isUrlValid(String url) {
        // TODO Improve URL validation
        return !(url == null || url.length() == 0);
    }


    protected void quit() {
        destroy();
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org