Listing of Source ../source/GOF/GofControlIdentifier.java
package se.entra.phantom.server;

/**
 * The GofControlIdentifier is an interface that must be implemented by all the classes 
 * that will be used to identify different controls.
 * <p>
 * Each of the classes implementing this interface can load their own settings from the 
 * configuration file.
 * <p>
 * The class implementing this interface must have a default constructor, without any parameters, 
 * since it will be created dynamically from the class name.
 * @author J. Bergström
 */
public interface GofControlIdentifier
{
  /**
   * The unit for Gui-on-the-fly for GUI control positioning in X.
   */
  public static final int GOF_GUIUNITX  = 4;

  /**
   * The unit for Gui-on-the-fly for GUI control positioning in Y.
   */
  public static final int GOF_GUIUNITY  = 8;

  /**
   * The inter-line spacing for Gui-on-the-fly controls in X.
   */
  public static final int GOF_STEPX     = 4;

  /**
   * The inter-line spacing for Gui-on-the-fly controls in Y.
   */
  public static final int GOF_STEPY     = 10;

  /**
   * The margin for Gui-on-the-fly panels on the left and right side.
   */
  public static final int GOF_MARGINX   = GOF_STEPX/2;

  /**
   * The margin for Gui-on-the-fly panels at the top and bottom.
   */
  public static final int GOF_MARGINY   = GOF_STEPY/2;

  /**
   * How much can be offset before overlapping another field that is also offset in X.
   */
  public static final int GOF_OFFSETX   = 0;

  /**
   * How much can be offset before overlapping another field that is also offset in Y.
   */
  public static final int GOF_OFFSETY   = 2;

  /**
   * This method should read all the settings needed by the control identifier from the
   * configuration file.
   * @param confFile The server ini file.
   */
  public void getControlSettings( IniFile confFile, String subsection );

  /**
   * This method is where the class implementing this interface does all its work. The algorithm 
   * for identifying the control must be implemented here.
   * <p>
   * The classes implementing this interface should implement the following steps:
   * <ul>
   * <li>Create PhantomControlBase</li>
   * <li>Create PhantomHostField</li>
   * <li>Create PhantomControl</li>
   * <li>Add the control to PhantomPanelData</li>
   * <li>Add the control to the GofHostAreaIdentifier it belongs to</li>
   * <li>Mark the GofHostField connected to the new control as processed</li>
   * </ul>
   * @param gofRuntime        The GuiOnTheFlyRuntime instance.
   * @param areaIdentifier    The areaIdentifier in which the controls should be identified.
   * @param phantomHostScreen The Phantom host screen corresponding to the host screen.
   * @param hostScreen        The host screen that we are trying to build a GOF panel for.
   * @param newPanel          The newly created Gui-on-the-fly runtime panel.
   * @param offsetX           The offset in columns for popup window.
   * @param offsetY           The offset in lines for popup window.
   */
  public void identifyCtrls( GuiOnTheFlyRuntime gofRuntime,
                             GofHostAreaIdentifier areaIdentifier, 
                             PhantomHostScreen phantomHostScreen, 
                             HostScreen hostScreen,
                             PhantomPanelData templPanel,
                             PhantomPanelData newPanel,
                             int offsetX,
                             int offsetY );
}