Package org.gudy.azureus2.ui.swt.shells

Source Code of org.gudy.azureus2.ui.swt.shells.MultipageWizard

package org.gudy.azureus2.ui.swt.shells;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.components.shell.ShellFactory;

import com.aelitis.azureus.ui.swt.utils.FontUtils;

abstract public class MultipageWizard
{

  private Shell shell;

  private int shellStyle;

  private Composite topPanel;

  private Composite contentPanel;

  private Label titleLabel;

  private Label descriptionLabel;

  /**
   * A map of pageID(String)/<code>IWizardPage</code>; using LinkedHashMap since the order the pages are inserted is important
   */
  private Map pages = new LinkedHashMap();

  private StackLayout contentStackLayout;

  private IWizardPage currentPage;

  private IWizardPage previousPage;

  private List initializedPages = new ArrayList();

  public abstract void createPages();

  private void init() {

    shell = ShellFactory.createMainShell(shellStyle);

    createControls();
    createPages();

  }

  private void createControls() {
    GridLayout gLayout = new GridLayout();
    gLayout.marginHeight = 0;
    gLayout.marginWidth = 0;
    gLayout.verticalSpacing = 0;
    shell.setLayout(gLayout);
    Utils.setShellIcon(shell);

    topPanel = new Composite(shell, SWT.NONE);
    topPanel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
    GridLayout gLayout1 = new GridLayout();
    gLayout1.marginBottom = 10;
    topPanel.setLayout(gLayout1);
    topPanel.setBackground(shell.getDisplay().getSystemColor(
        SWT.COLOR_LIST_BACKGROUND));
    topPanel.setBackgroundMode(SWT.INHERIT_FORCE);

    Label separator1 = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
    separator1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

    contentPanel = new Composite(shell, SWT.NONE);
    contentPanel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    contentStackLayout = new StackLayout();
    contentPanel.setLayout(contentStackLayout);

    titleLabel = new Label(topPanel, SWT.NONE);
    titleLabel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
    FontUtils.setFontHeight(titleLabel, 16, SWT.NORMAL);

    descriptionLabel = new Label(topPanel, SWT.WRAP);
    GridData gData = new GridData(SWT.FILL, SWT.FILL, true, true);
    gData.horizontalIndent = 10;
    descriptionLabel.setLayoutData(gData);

    shell.layout(true, true);

  }

  public void fullScreen(boolean isFullScreen) {
    topPanel.setVisible(false == isFullScreen);
    ((GridData) topPanel.getLayoutData()).exclude = isFullScreen;
    shell.layout(true, true);
  }

  public boolean addPage(IWizardPage page) {
    if (null == page) {
      return false;
    }
    if (true == pages.containsKey(page.getPageID())) {
      Debug.out("MultipageWizard:: a page with this ID already exists ID:"
          + page.getPageID());
      return false;
    }

    pages.put(page.getPageID(), page);

    if (true == page.isInitOnStartup()) {
      page.createControls(contentPanel);
      initializedPages.add(page.getPageID());
    }
    return true;
  }

  public boolean isFirstPage(String pageID) {
    if (false == pages.isEmpty()) {
      return pageID.equals(((IWizardPage) pages.values().iterator().next()).getPageID());
    }
    return false;
  }

  public boolean isLastPage(String pageID) {
    if (false == pages.isEmpty()) {
      IWizardPage page = null;
      for (Iterator iterator = pages.values().iterator(); iterator.hasNext();) {
        page = (IWizardPage) iterator.next();
      }

      if (null != page) {
        return page.getPageID().equals(pageID);
      }
    }
    return false;
  }

  public boolean removePage(IWizardPage page) {
    if (null == page) {
      return false;
    }

    if (false == pages.containsKey(page.getPageID())) {
      Debug.out("MultipageWizard:: a page with this ID is not found ID:"
          + page.getPageID());
      return false;
    }
    pages.remove(page.getPageID());
    page.performDispose();
    return true;
  }

  public void showPage(String pageID) {
    if (false == pages.containsKey(pageID)) {
      Debug.out("MultipageWizard:: a page with this ID is not found ID:"
          + pageID);
      return;
    }

    IWizardPage page = (IWizardPage) pages.get(pageID);

    if (null != currentPage) {
      if (true == currentPage.getPageID().equals(page.getPageID())) {
        return;
      }
      currentPage.performAboutToBeHidden();
    }

    /*
     * Initializing the page if not done already
     */
    if (false == initializedPages.contains(page.getPageID())) {
      page.createControls(contentPanel);
      initializedPages.add(page.getPageID());
    }

    page.performAboutToBeShown();

    previousPage = currentPage;
    currentPage = page;
    contentStackLayout.topControl = page.getControl();

    update();

    contentPanel.layout(true);
  }

  public void open() {
    /*
     * Show the first page
     */
    if (false == pages.isEmpty()) {
      IWizardPage page = (IWizardPage) pages.values().iterator().next();
      showPage(page.getPageID());
    }

    shell.open();
  }

  private void update() {
    if (null != currentPage) {
      setText(currentPage.getWindowTitle());
      setTitle(currentPage.getTitle());
      setDescription(currentPage.getDesciption());
    }
  }

  public void setTitle(String title) {
    titleLabel.setText(title + "");
  }

  public void setDescription(String description) {
    descriptionLabel.setText(description + "");
  }

  /**
   * Return the <code>IWizardPage</code> with the given id; returns <code>null</code> if page is not found
   * @param pageID
   * @return
   */
  public IWizardPage getPage(String pageID) {
    if (false == pages.containsKey(pageID)) {
      Debug.out("MultipageWizard:: a Page with this ID is not found ID:"
          + pageID);
      return null;
    }

    return (IWizardPage) pages.get(pageID);
  }

  public void performCancel() {
    close();
  }

  public void performNext() {
    if (true == pages.isEmpty()) {
      return;
    }

    if (null == currentPage) {
      IWizardPage page = (IWizardPage) pages.values().iterator().next();
      showPage(page.getPageID());
    } else {
      boolean foundCurrent = false;
      for (Iterator iterator = pages.values().iterator(); iterator.hasNext();) {
        IWizardPage page = (IWizardPage) iterator.next();
        if (true == foundCurrent) {
          showPage(page.getPageID());
          return;
        }

        if (page.getPageID().equals(currentPage.getPageID())) {
          foundCurrent = true;
        }
      }

      if (false == foundCurrent) {
        Debug.out("MultipageWizard:: there is no more page to go to");
      }

    }
  }

  public void performBack() {

    if (null != previousPage) {
      showPage(previousPage.getPageID());
    }
  }

  /* ===========================================
     * Below are just some convenience delegations
     * =========================================== */
  public Shell getShell() {
    return shell;
  }

  public void close() {
    shell.close();
  }

  public Object getData(String key) {
    return shell.getData(key);
  }

  public Point getLocation() {
    return shell.getLocation();
  }

  public Point getSize() {
    return shell.getSize();
  }

  public String getText() {
    return shell.getText();
  }

  public String getToolTipText() {
    return shell.getToolTipText();
  }

  public void setBounds(int x, int y, int width, int height) {
    shell.setBounds(x, y, width, height);
  }

  public void setData(String key, Object value) {
    shell.setData(key, value);
  }

  public void setLocation(int x, int y) {
    shell.setLocation(x, y);
  }

  public void setSize(int width, int height) {
    shell.setSize(width, height);
  }

  public void setText(String string) {
    shell.setText(string);
  }

  public void setToolTipText(String string) {
    shell.setToolTipText(string);
  }

  public void setVisible(boolean visible) {
    shell.setVisible(visible);
  }

  public Image getImage() {
    return shell.getImage();
  }

  public void setImage(Image image) {
    shell.setImage(image);
  }

}
TOP

Related Classes of org.gudy.azureus2.ui.swt.shells.MultipageWizard

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.