edu.caltech.ipac.firefly.visualize.ui.ImageSelectDropDown.java Source code

Java tutorial

Introduction

Here is the source code for edu.caltech.ipac.firefly.visualize.ui.ImageSelectDropDown.java

Source

/*
 * License information at https://github.com/Caltech-IPAC/firefly/blob/master/License.txt
 */
package edu.caltech.ipac.firefly.visualize.ui;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import edu.caltech.ipac.firefly.commands.ImageSelectDropDownCmd;
import edu.caltech.ipac.firefly.core.Application;
import edu.caltech.ipac.firefly.core.HelpManager;
import edu.caltech.ipac.firefly.ui.BaseDialog;
import edu.caltech.ipac.firefly.ui.GwtUtil;
import edu.caltech.ipac.firefly.ui.PopupUtil;
import edu.caltech.ipac.firefly.ui.SimpleTargetPanel;
import edu.caltech.ipac.firefly.ui.input.InputField;
import edu.caltech.ipac.firefly.visualize.PlotWidgetFactory;
import edu.caltech.ipac.util.dd.ValidationException;

/**
 * @author Trey Roby
 */
public class ImageSelectDropDown {
    private boolean showing = false;
    private final Widget mainPanel;
    private ImageSelectPanel imSelPanel;
    private ImageSelectPanel2 imSelPanel2;
    private BaseDialog.HideType hideType = BaseDialog.HideType.AFTER_COMPLETE;
    private SubmitKeyPressHandler keyPressHandler = new SubmitKeyPressHandler();
    private final boolean useNewPanel;
    private final ImageSelectPanelPlotter plotter;
    private boolean inProcess = false;

    //======================================================================
    //----------------------- Constructors ---------------------------------
    //======================================================================

    public ImageSelectDropDown(PlotWidgetFactory plotFactory, boolean useNewPanel,
            ImageSelectPanelPlotter plotter) {
        this.useNewPanel = useNewPanel;
        this.plotter = plotter;
        createContents(plotFactory);
        mainPanel = createContents(plotFactory);
    }

    private Widget createContents(PlotWidgetFactory plotFactory) {

        if (useNewPanel) {
            imSelPanel2 = new ImageSelectPanel2(new DropDownComplete(), plotter);
        } else {
            imSelPanel = new ImageSelectPanel(null, true, null, new DropDownComplete(), plotFactory);
        }
        HorizontalPanel buttons = new HorizontalPanel();
        buttons.addStyleName("base-dialog-buttons");
        buttons.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
        GwtUtil.setStyle(buttons, "paddingRight", "80px");

        Button ok = new Button("Load");
        ok.addStyleName("highlight-text");
        ok.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent ev) {
                doOK();
            }
        });

        buttons.add(ok);
        buttons.add(HelpManager.makeHelpIcon("basics.catalog"));

        VerticalPanel vp = new VerticalPanel();
        Widget content;
        if (useNewPanel) {
            content = GwtUtil.centerAlign(imSelPanel2.getMainPanel());
        } else {
            content = GwtUtil.centerAlign(imSelPanel.getMainPanel());
        }
        vp.add(content);
        vp.add(buttons);

        vp.setCellHorizontalAlignment(content, VerticalPanel.ALIGN_CENTER);
        vp.setSize("95%", "450px");
        vp.setSpacing(3);
        content.setSize("95%", "95%");
        content.addStyleName("component-background");

        if (useNewPanel) {
            addKeyPressToAll(imSelPanel2.getMainPanel());
        } else {
            addKeyPressToAll(imSelPanel.getMainPanel());
        }

        return vp;
    }

    private void addKeyPressToAll(Widget inWidget) {
        if (inWidget instanceof HasWidgets) {
            HasWidgets container = (HasWidgets) inWidget;
            for (Widget w : container) {
                if (w instanceof InputField) {
                    InputField f = (InputField) w;
                    if (f.getFocusWidget() != null) {
                        f.getFocusWidget().addKeyPressHandler(keyPressHandler);
                    }
                } else if (w instanceof SimpleTargetPanel) {
                    SimpleTargetPanel sp = (SimpleTargetPanel) w;
                    if (sp.getInputField() != null && sp.getInputField().getFocusWidget() != null) {
                        sp.getInputField().getFocusWidget().addKeyPressHandler(keyPressHandler);
                    }
                } else {
                    addKeyPressToAll(w);
                }
            }
        }
    }

    private void doOK() {
        try {
            if (validateInput()) {
                inputComplete();
            }
        } catch (ValidationException e) {
            PopupUtil.showError("Error", e.getMessage());
        }
    }

    //======================================================================
    //----------------------- Public Methods -------------------------------
    //======================================================================

    public void hide() {
        showing = false;
        hideOnSearch();
        Application.getInstance().getToolBar().getDropdown().close();
    }

    protected void hideOnSearch() {
    }

    public void show() {
        showing = true;
        if (useNewPanel) {
            imSelPanel2.showPanel();
        } else {
            imSelPanel.showPanel();
        }
        Application app = Application.getInstance();
        app.getToolBar().getDropdown().setTitle("Select Image");
        app.getToolBar().getDropdown().setContent(mainPanel, true, null, ImageSelectDropDownCmd.COMMAND_NAME);
    }

    private void inputComplete() {
        inProcess = true;
        if (hideType == BaseDialog.HideType.BEFORE_COMPLETE)
            hide();
        if (useNewPanel) {
            imSelPanel2.inputComplete();
        } else {
            imSelPanel.inputComplete();
        }
        if (hideType == BaseDialog.HideType.AFTER_COMPLETE)
            hide();
        inProcess = false;
    }

    public boolean isInProcess() {
        return inProcess;
    }

    protected boolean validateInput() throws ValidationException {
        if (useNewPanel) {
            return imSelPanel2.validateInput();
        } else {
            return imSelPanel.validateInput();
        }
    }

    private class DropDownComplete implements ImageSelectPanel.PanelComplete, ImageSelectPanel2.PanelComplete {
        public void performInputComplete() {
            //To change body of implemented methods use File | Settings | File Templates.
        }

        public BaseDialog.HideType getHideAlgorythm() {
            return hideType;
        }

        public void setHideAlgorythm(BaseDialog.HideType hideType) {
            ImageSelectDropDown.this.hideType = hideType;
        }

        public void hide() {
            ImageSelectDropDown.this.hide();
        }
    }

    public class SubmitKeyPressHandler implements KeyPressHandler {
        public void onKeyPress(KeyPressEvent ev) {
            final int keyCode = ev.getNativeEvent().getKeyCode();
            char charCode = ev.getCharCode();
            if ((keyCode == KeyCodes.KEY_ENTER || charCode == KeyCodes.KEY_ENTER)
                    && ev.getRelativeElement() != null) {
                DeferredCommand.addCommand(new Command() {
                    public void execute() {
                        doOK();
                    }
                });
            }
        }
    }

}