Package org.eclipse.ui.forms

Source Code of org.eclipse.ui.forms.ManagedForm

/*******************************************************************************
* Copyright (c) 2000, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.forms;

import java.util.Vector;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.*;
import org.eclipse.ui.internal.forms.MessageManager;

/**
* Managed form wraps a form widget and adds life cycle methods for form parts.
* A form part is a portion of the form that participates in form life cycle
* events.
* <p>
* There is requirement for 1/1 mapping between widgets and form parts. A widget
* like Section can be a part by itself, but a number of widgets can join around
* one form part.
* <p>
* Note to developers: this class is left public to allow its use beyond the
* original intention (inside a multi-page editor's page). You should limit the
* use of this class to make new instances inside a form container (wizard page,
* dialog etc.). Clients that need access to the class should not do it
* directly. Instead, they should do it through IManagedForm interface as much
* as possible.
*
* @since 3.0
*/
public class ManagedForm implements IManagedForm {
  private Object input;

  private ScrolledForm form;

  private FormToolkit toolkit;

  private Object container;

  private boolean ownsToolkit;

  private boolean initialized;

  private MessageManager messageManager;

  private Vector parts = new Vector();

  /**
   * Creates a managed form in the provided parent. Form toolkit and widget
   * will be created and owned by this object.
   *
   * @param parent
   *            the parent widget
   */
  public ManagedForm(Composite parent) {
    toolkit = new FormToolkit(parent.getDisplay());
    ownsToolkit = true;
    form = toolkit.createScrolledForm(parent);
  }

  /**
   * Creates a managed form that will use the provided toolkit and
   *
   * @param toolkit
   * @param form
   */
  public ManagedForm(FormToolkit toolkit, ScrolledForm form) {
    this.form = form;
    this.toolkit = toolkit;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#addPart(org.eclipse.ui.forms.IFormPart)
   */
  public void addPart(IFormPart part) {
    parts.add(part);
    part.initialize(this);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#removePart(org.eclipse.ui.forms.IFormPart)
   */
  public void removePart(IFormPart part) {
    parts.remove(part);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#getParts()
   */
  public IFormPart[] getParts() {
    return (IFormPart[]) parts.toArray(new IFormPart[parts.size()]);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#getToolkit()
   */
  public FormToolkit getToolkit() {
    return toolkit;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#getForm()
   */
  public ScrolledForm getForm() {
    return form;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#reflow(boolean)
   */
  public void reflow(boolean changed) {
    form.reflow(changed);
  }

  /**
   * A part can use this method to notify other parts that implement
   * IPartSelectionListener about selection changes.
   *
   * @param part
   *            the part that broadcasts the selection
   * @param selection
   *            the selection in the part
   * @see IPartSelectionListener
   */
  public void fireSelectionChanged(IFormPart part, ISelection selection) {
    for (int i = 0; i < parts.size(); i++) {
      IFormPart cpart = (IFormPart) parts.get(i);
      if (part.equals(cpart))
        continue;
      if (cpart instanceof IPartSelectionListener) {
        ((IPartSelectionListener) cpart).selectionChanged(part,
            selection);
      }
    }
  }

  /**
   * Initializes the form by looping through the managed parts and
   * initializing them. Has no effect if already called once.
   */
  public void initialize() {
    if (initialized)
      return;
    for (int i = 0; i < parts.size(); i++) {
      IFormPart part = (IFormPart) parts.get(i);
      part.initialize(this);
    }
    initialized = true;
  }

  /**
   * Disposes all the parts in this form.
   */
  public void dispose() {
    for (int i = 0; i < parts.size(); i++) {
      IFormPart part = (IFormPart) parts.get(i);
      part.dispose();
    }
    if (ownsToolkit) {
      toolkit.dispose();
    }
  }

  /**
   * Refreshes the form by refreshes all the stale parts. Since 3.1, this
   * method is performed on a UI thread when called from another thread so it
   * is not needed to wrap the call in <code>Display.syncExec</code> or
   * <code>asyncExec</code>.
   */
  public void refresh() {
    Thread t = Thread.currentThread();
    Thread dt = toolkit.getColors().getDisplay().getThread();
    if (t.equals(dt))
      doRefresh();
    else {
      toolkit.getColors().getDisplay().asyncExec(new Runnable() {
        public void run() {
          doRefresh();
        }
      });
    }
  }

  private void doRefresh() {
    int nrefreshed = 0;
    for (int i = 0; i < parts.size(); i++) {
      IFormPart part = (IFormPart) parts.get(i);
      if (part.isStale()) {
        part.refresh();
        nrefreshed++;
      }
    }
    if (nrefreshed > 0)
      form.reflow(true);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#commit(boolean)
   */
  public void commit(boolean onSave) {
    for (int i = 0; i < parts.size(); i++) {
      IFormPart part = (IFormPart) parts.get(i);
      if (part.isDirty())
        part.commit(onSave);
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#setInput(java.lang.Object)
   */
  public boolean setInput(Object input) {
    boolean pageResult = false;

    this.input = input;
    for (int i = 0; i < parts.size(); i++) {
      IFormPart part = (IFormPart) parts.get(i);
      boolean result = part.setFormInput(input);
      if (result)
        pageResult = true;
    }
    return pageResult;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#getInput()
   */
  public Object getInput() {
    return input;
  }

  /**
   * Transfers the focus to the first form part.
   */
  public void setFocus() {
    if (parts.size() > 0) {
      IFormPart part = (IFormPart) parts.get(0);
      part.setFocus();
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#isDirty()
   */
  public boolean isDirty() {
    for (int i = 0; i < parts.size(); i++) {
      IFormPart part = (IFormPart) parts.get(i);
      if (part.isDirty())
        return true;
    }
    return false;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#isStale()
   */
  public boolean isStale() {
    for (int i = 0; i < parts.size(); i++) {
      IFormPart part = (IFormPart) parts.get(i);
      if (part.isStale())
        return true;
    }
    return false;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#dirtyStateChanged()
   */
  public void dirtyStateChanged() {
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#staleStateChanged()
   */
  public void staleStateChanged() {
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#getContainer()
   */
  public Object getContainer() {
    return container;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.forms.IManagedForm#setContainer(java.lang.Object)
   */
  public void setContainer(Object container) {
    this.container = container;
  }

  /* (non-Javadoc)
   * @see org.eclipse.ui.forms.IManagedForm#getMessageManager()
   */
  public IMessageManager getMessageManager() {
    if (messageManager == null)
      messageManager = new MessageManager(form);
    return messageManager;
  }
}
TOP

Related Classes of org.eclipse.ui.forms.ManagedForm

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.