Package org.geomajas.widget.utility.smartgwt.client.wizard

Source Code of org.geomajas.widget.utility.smartgwt.client.wizard.WizardWidget$DefaultPageButton

/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2011 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.widget.utility.smartgwt.client.wizard;

import java.util.ArrayList;
import java.util.List;

import org.geomajas.widget.utility.smartgwt.client.wizard.WizardButton.ButtonType;

import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Cursor;
import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.HTMLFlow;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.LayoutSpacer;
import com.smartgwt.client.widgets.layout.VLayout;

/**
* Default implementation of {@link WizardView}.
*
* @author Jan De Moerloose
*
* @param <DATA> type of data to view
*/
public class WizardWidget<DATA> extends VLayout implements WizardView<DATA> {

  private String title;

  private String helpText;

  private VLayout leftLayout;

  private VLayout pageBody;

  private HTMLFlow pageTitleDiv;

  private HTMLFlow loadingDiv;

  private List<WizardButton<DATA>> buttons;

  public WizardWidget(String title, String helpText) {
    this.title = title;
    buttons = new ArrayList<WizardButton<DATA>>();
    setStyleName("wizardWidget");
    setLayoutAlign(Alignment.CENTER);

    addMember(createTitle());

    HLayout body = new HLayout();
    leftLayout = new VLayout(10);
    leftLayout.setStyleName("wizardLeftLayout");
    leftLayout.setSize("220", "100%");
    leftLayout.setLayoutRightMargin(10);

    HTMLFlow explanation = new HTMLFlow("<div style='font-size:12px;'>" + helpText + "</div>");
    leftLayout.addMember(explanation);
    body.addMember(leftLayout);

    VLayout rightLayout = new VLayout();
    rightLayout.setLayoutRightMargin(5);
    rightLayout.addMember(createPageTop());
    pageBody = new VLayout();
    rightLayout.addMember(pageBody);
    rightLayout.addMember(createPageBottom());
    body.addMember(rightLayout);
    addMember(body);
  }

  public void addPageToView(WizardPage<DATA> page) {
    DefaultPageButton pageButton = new DefaultPageButton(page);
    leftLayout.addMember(pageButton);
    page.asWidget().setStyleName("wizardPageBody");
    page.asWidget().setSize("100%", "100%");
    pageBody.addMember(page.asWidget());
  }

  public void setCurrentPage(WizardPage<DATA> currentPage) {
    // Display correct title:
    pageTitleDiv.setContents(currentPage.getExplanation());
    markForRedraw();
  }

  public List<WizardButton<DATA>> getButtons() {
    return buttons;
  }

  public void setLoading(boolean loading) {
    if (loading) {
      pageTitleDiv.setVisible(false);
      loadingDiv.setVisible(true);
      setDisabled(true);
    } else {
      pageTitleDiv.setVisible(true);
      loadingDiv.setVisible(false);
      setDisabled(false);
    }
  }

  protected Canvas createTitle() {
    HLayout titleCanvas = new HLayout(5);
    titleCanvas.setSize("100%", "24px");
    titleCanvas.setStyleName("blockTitle");

    HTMLFlow titleDiv = new HTMLFlow(title);
    titleDiv.setSize("100%", "24px");
    titleDiv.setStyleName("blockTitleText");

    titleCanvas.addMember(titleDiv);
    return titleCanvas;
  }

  protected Canvas createLeftLayout() {
    HLayout body = new HLayout();
    VLayout leftLayout = new VLayout(10);
    leftLayout.setStyleName("wizardLeftLayout");
    leftLayout.setSize("220", "100%");
    leftLayout.setLayoutRightMargin(10);

    HTMLFlow explanation = new HTMLFlow("<div style='font-size:12px;'>" + helpText + "</div>");
    leftLayout.addMember(explanation);
    body.addMember(leftLayout);
    return body;
  }

  protected HLayout createPageTop() {
    HLayout layout = new HLayout(10);
    layout.setAlign(VerticalAlignment.CENTER);
    layout.setHeight(40);
    pageTitleDiv = new HTMLFlow();
    pageTitleDiv.setSize("100%", "40px");
    pageTitleDiv.setStyleName("wizardPageTitle");

    loadingDiv = new HTMLFlow();
    loadingDiv.setSize("100%", "40px");
    loadingDiv.setStyleName("wizardPageTitle");
    loadingDiv.setContents("Loading...");
    loadingDiv.setVisible(false);
    layout.addMember(pageTitleDiv);
    layout.addMember(loadingDiv);
    layout.addMember(new DefaultWizardButton(ButtonType.PREVIOUS));
    layout.addMember(new DefaultWizardButton(ButtonType.NEXT));
    layout.addMember(new DefaultWizardButton(ButtonType.CANCEL));
    layout.addMember(new DefaultWizardButton(ButtonType.FINISH));
    return layout;
  }

  protected HLayout createPageBottom() {
    HLayout layout = new HLayout(10);
    layout.setAlign(VerticalAlignment.CENTER);
    layout.setHeight(40);
    layout.addMember(new LayoutSpacer());
    layout.addMember(new DefaultWizardButton(ButtonType.PREVIOUS));
    layout.addMember(new DefaultWizardButton(ButtonType.NEXT));
    layout.addMember(new DefaultWizardButton(ButtonType.CANCEL));
    layout.addMember(new DefaultWizardButton(ButtonType.FINISH));
    return layout;
  }

  /**
   * Default implementation of page button.
   *
   * @author Jan De Moerloose
   *
   */
  class DefaultPageButton extends HTMLFlow implements WizardButton<DATA> {

    private WizardPage<DATA> page;

    DefaultPageButton(WizardPage<DATA> page) {
      this.page = page;
      setContents(page.getTitle());
      setSize("100%", "30px");
      setStyleName("wizardButton");
      setCursor(Cursor.HAND);
      buttons.add(this);
    }

    public void setActive(boolean active) {
      if (active) {
        setStyleName("wizardButtonActive");
      } else {
        setStyleName("wizardButton");
      }
    }

    public void setEnabled(boolean enabled) {
      setDisabled(!enabled);
    }

    public WizardPage<DATA> getPage() {
      return page;
    }

    public ButtonType getType() {
      return ButtonType.PAGE;
    }

  }

  /**
   * Default implementation of classical wizard button.
   *
   * @author Jan De Moerloose
   *
   */
  class DefaultWizardButton extends IButton implements WizardButton<DATA> {

    private ButtonType type;

    DefaultWizardButton(ButtonType type) {
      switch (type) {
        case CANCEL:
          setTitle("Cancel");
          break;
        case FINISH:
          setTitle("Finish");
          break;
        case NEXT:
          setTitle("Next");
          break;
        case PREVIOUS:
          setTitle("Previous");
          break;
      }
      this.type = type;
      setLayoutAlign(VerticalAlignment.CENTER);
      setEnabled(false);
      buttons.add(this);
    }

    public ButtonType getType() {
      return type;
    }

    public void setEnabled(boolean enabled) {
      setDisabled(!enabled);
    }

    public void setActive(boolean active) {
      // ignore
    }

    public WizardPage<DATA> getPage() {
      return null;
    }
  }

}
TOP

Related Classes of org.geomajas.widget.utility.smartgwt.client.wizard.WizardWidget$DefaultPageButton

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.