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

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

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

import java.util.LinkedHashMap;
import java.util.Map;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.ui.swt.mainwindow.Colors;

abstract public class AbstractWizardPage
  implements IWizardPage
{
  public static final String BUTTON_OK = "button.ok";

  public static final String BUTTON_CANCEL = "button.cancel";

  public static final String BUTTON_NEXT = "button.next";

  public static final String BUTTON_BACK = "button.back";

  private MultipageWizard wizard;

  private Composite pageControl;

  private Composite contentPanel;

  private Composite toolbarPanel;

  /**
   * A map of buttonID(String)/<code>Button</code>; using LinkedHashMap since the order the buttons are added is important
   */
  private Map buttons = new LinkedHashMap();

  protected SelectionListener defaultButtonListener;

  /**
   * A little extra margin so the buttons are a little wider; typically the native buttons
   * are just a little wider than the text but a slightly wider button looks nicer
   */
  private int buttonExtraMargin = 50;

  public AbstractWizardPage(MultipageWizard wizard) {
    this.wizard = wizard;
  }

  /**
   * Returns the main Composite where subclasses can create controls
   */
  public Composite createControls(Composite parent) {
    pageControl = new Composite(parent, SWT.NONE);
    pageControl.setBackground(Colors.red);

    GridLayout gLayout = new GridLayout();
    gLayout.marginHeight = 0;
    gLayout.marginWidth = 0;
    gLayout.verticalSpacing = 0;
    pageControl.setLayout(gLayout);

    contentPanel = new Composite(pageControl, SWT.NONE);
    contentPanel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

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

    toolbarPanel = new Composite(pageControl, SWT.NONE);
    toolbarPanel.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true, false));
    GridLayout gLayout2 = new GridLayout(3, false);
    gLayout2.marginHeight = 16;
    gLayout2.marginWidth = 16;
    toolbarPanel.setLayout(gLayout2);

    defaultButtonListener = new SelectionListener() {
      public void widgetSelected(SelectionEvent e) {
        if (true == BUTTON_OK.equals(e.widget.getData("button.id"))) {
          performOK();
        } else if (true == BUTTON_CANCEL.equals(e.widget.getData("button.id"))) {
          performCancel();
        } else if (true == BUTTON_NEXT.equals(e.widget.getData("button.id"))) {
          performNext();
        } else if (true == BUTTON_BACK.equals(e.widget.getData("button.id"))) {
          performBack();
        }
      }

      public void widgetDefaultSelected(SelectionEvent e) {
        widgetSelected(e);
      }
    };

    /*
     * This invisible label is used to ensure the buttons are flushed-right
     */
    Label dummy = new Label(toolbarPanel, SWT.NONE);
    dummy.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    createButtons(toolbarPanel);

    return contentPanel;
  }

  public void fullScreen(boolean isFullScreen) {
    toolbarPanel.setVisible(false == isFullScreen);
    ((GridData) toolbarPanel.getLayoutData()).exclude = isFullScreen;
    pageControl.layout(true, true);

    getWizard().fullScreen(isFullScreen);

  }

  /**
   * Default buttons include Cancel, OK, Next, and Back
   * Subclasses may override to add more buttons or create a custom set of buttons
   * 
   * @param buttonPanel
   */
  protected void createButtons(Composite buttonPanel) {

    createButton(BUTTON_CANCEL, MessageText.getString("Button.cancel"),
        defaultButtonListener);
    createButton(BUTTON_BACK, MessageText.getString("wizard.previous"),
        defaultButtonListener);
    createButton(BUTTON_NEXT, MessageText.getString("wizard.next"),
        defaultButtonListener);
    createButton(BUTTON_OK, MessageText.getString("wizard.finish"),
        defaultButtonListener);

  }

  protected Button createButton(String buttonID, String buttonText,
      SelectionListener listener) {
    if (null == buttonID) {
      throw new IllegalArgumentException("A button requires a non-null ID");
    }

    if (true == buttons.containsKey(buttonID)) {
      Debug.out("AbstractWizardPage:: a button with this same ID already exists ID:"
          + buttonID);
      return (Button) buttons.get(buttonID);
    }

    Button button = new Button(toolbarPanel, SWT.PUSH);
    GridData gData = new GridData(SWT.END, SWT.BOTTOM, false, false);
    gData.widthHint = button.computeSize(SWT.DEFAULT, SWT.DEFAULT).y
        + buttonExtraMargin;
    button.setLayoutData(gData);

    /*
     * Add listener if given; for default buttons this is used in place of the default listener
     */
    if (null != listener) {
      button.addSelectionListener(listener);
    }

    button.setText(buttonText);
    button.setData("button.id", buttonID);

    buttons.put(buttonID, button);

    adjustToolbar();

    return button;
  }

  /**
   * Enable/Disable the button with the given id
   * @param buttonID
   * @param value
   */
  protected void enableButton(String buttonID, boolean value) {
    if (false == buttons.containsKey(buttonID)) {
      Debug.out("AbstractWizardPage:: a button with this ID is not found ID:"
          + buttonID);
      return;
    }

    ((Button) buttons.get(buttonID)).setEnabled(value);

    toolbarPanel.layout(true);
  }

  /**
   * Show or hide the button with the given id
   * @param buttonID
   * @param value
   */
  protected void showButton(String buttonID, boolean value) {
    if (false == buttons.containsKey(buttonID)) {
      Debug.out("AbstractWizardPage:: a button with this ID is not found ID:"
          + buttonID);
      return;
    }

    Button button = (Button) buttons.get(buttonID);
    button.setVisible(value);

    if (true == value) {
      GridData gData = ((GridData) button.getLayoutData());
      gData.exclude = false;
      gData.widthHint = button.computeSize(SWT.DEFAULT, SWT.DEFAULT).y
          + buttonExtraMargin;
    } else {
      GridData gData = ((GridData) button.getLayoutData());
      gData.exclude = true;
      gData.widthHint = 0;
    }

    toolbarPanel.layout(true);
  }

  /**
   * Return the <code>Button</code> with the given id; returns <code>null</code> if button is not found
   * @param buttonID
   * @return
   */
  protected Button getButton(String buttonID) {
    if (false == buttons.containsKey(buttonID)) {
      return null;
    }

    return (Button) buttons.get(buttonID);
  }

  /**
   * called when the default OK button is pressed
   */
  public void performOK() {
    //Does nothing
  }

  /**
   * Called when the default Cancel button is pressed
   */
  public void performCancel() {
    getWizard().performCancel();
  }

  /**
   * Called when the default Next button is pressed
   */
  public void performNext() {
    getWizard().performNext();
  }

  /**
   * Called when the default Back button is pressed
   */
  public void performBack() {
    getWizard().performBack();
  }

  /**
   * Adjusting the number of columns to correspond with the number of buttons
   */
  private void adjustToolbar() {
    /*
     * NOTE: we're adding 1 to the number of columns because there is always an invisible
     * label on the far left used for spacing so the buttons are right-aligned properly
     */
    ((GridLayout) toolbarPanel.getLayout()).numColumns = buttons.size() + 1;
    toolbarPanel.layout(true);
  }

  public Control getControl() {
    return pageControl;
  }

  public MultipageWizard getWizard() {
    return wizard;
  }

  public String getDesciption() {
    return null;
  }

  public String getTitle() {
    return null;
  }

  public String getWindowTitle() {
    return null;
  }

  public boolean isComplete() {
    return false;
  }

  public void performDispose() {
  }

  public void performFinish() {
  }

  public boolean setComplete() {
    return true;
  }

  public void performAboutToBeHidden() {
  }

  public void performAboutToBeShown() {
    /*
     * If it's the last page then disable the 'Next' button;
     * if there is no 'Next' button this will do nothing
     */
    if (null != getButton(BUTTON_NEXT)) {
      enableButton(BUTTON_NEXT, false == getWizard().isLastPage(getPageID()));
    }
    /*
     * If it's the first page then disable the 'Back' button;
     * if there is no 'Back' button this will do nothing
     */
    if (null != getButton(BUTTON_BACK)) {
      enableButton(BUTTON_BACK, false == getWizard().isFirstPage(getPageID()));
    }
  }

  public boolean isInitOnStartup(){
    return false;
  }
}
TOP

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

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.