package sale;

import javax.swing.*;

/**
  * An object that can contain and display {@link FormSheet FormSheets}. FormSheetContainers are usually also
  * {@link Display displays}. The two interfaces FormSheetContainer and Display are two sides of one coin,
  * with Display being the view of the application developer and FormSheetContainer the framework (i.e.
  * FormSheet) view.
  *
  * @author Steffen Zschaler
  * @version 2.0 21/05/1999
  * @since v2.0
  */
public interface FormSheetContainer {

  /**
    * Close a FormSheet.
    *
    * <p>Closing a FormSheet must hide all the GUI elements that stem from displaying the
    * FormSheet. It must then {@link FormSheet#detachDisplay detach} this display
    * from the FormSheet. Any {@link Display#setFormSheet} calls waiting for this FormSheet to
    * be closed, must be unblocked.</p>
    *
    * @override Always
    *
    * @param fs the FormSheet to be closed.
    */
  public void closeFormSheet (FormSheet fs);

  /**
    * Notification event informing about a change of a FormSheet's caption.
    *
    * @override Always
    *
    * @param fs the FormSheet whose caption changed.
    * @param sNewCaption the new caption of the FormSheet.
    */
  public void onFormSheetCaptionChanged (FormSheet fs, String sNewCaption);

  /**
    * Notification event informing about a change of a FormSheet's component.
    *
    * @override Always
    *
    * @param fs the FormSheet whose component changed.
    * @param jcmpNew the new component of the FormSheet.
    */
  public void onFormSheetComponentChanged (FormSheet fs, JComponent jcmpNew);

  /**
    * Notification event informing that a button was added to the FormSheet's button bar.
    *
    * @override Always
    *
    * @param fs the FormSheet whose button bar changed.
    * @param fb the button that was added to the FormSheet.
    */
  public void onFormSheetButtonAdded (FormSheet fs, FormSheet.FormButton fb);

  /**
    * Notification event informing that a button was removed from the FormSheet's button bar.
    *
    * @override Always
    *
    * @param fs the FormSheet whose button bar changed.
    * @param fb the button that was removed from the FormSheet.
    */
  public void onFormSheetButtonRemoved (FormSheet fs, FormSheet.FormButton fb);

  /**
    * Notification event informing that all buttons were removed from a FormSheet's button bar.
    *
    * @override Always
    *
    * @param fs the FormSheet whose button bar was cleared.
    */
  public void onFormSheetButtonsCleared (FormSheet fs);
}