package VisualServoSolution;

import Carmen.*;

/**
 * <p>Message used to erase items from GUI.</p>
 * 
 * <p>Examples:
 * <pre>
 *   (new GUIEraseMessage(VisionGUI.ERASE_POSE)).publish();
 *   (new GUIEraseMessage(VisionGUI.ERASE_ALL)).publish();
 * </pre></p>
 *
 * @author vona
 **/
public class GUIEraseMessage extends Message {

  /**
   * <p>Bitmask of items to erase, made up of <code>ERASE_*</code> constants
   * from the GUI classes.</p>
   **/
  public int eraseBitmask;

  private static final String CARMEN_GUI_ERASE_NAME = "carmen_gui_erase";
  private static final String CARMEN_GUI_ERASE_FMT =  "{int, double, string};";
  private static final int IPC_QUEUE_LENGTH = 10;
  
  /**
   * <p>Create a new GUIEraseMessage.</p>
   **/
  public GUIEraseMessage(int eraseBitmask) {
    this.eraseBitmask = eraseBitmask;
    timestamp = Util.getTime();
    host = Util.getHostName();
  }
  
  /**
   * <p>Create a new GUIEraseMessage.</p>
   **/
  public GUIEraseMessage() {
    timestamp = Util.getTime();
    host = Util.getHostName();    
  }
  
  /**
   * <p>Subscribe a class to GUIEraseMessage.</p>
   * 
   * @param handler a GUIEraseHandler
   */
  public static void subscribe(GUIEraseHandler handler) {
    subscribe(CARMEN_GUI_ERASE_NAME, CARMEN_GUI_ERASE_FMT, handler, 
              GUIEraseMessage.class, "handle");
    IPC.IPC.setMsgQueueLength(CARMEN_GUI_ERASE_NAME, IPC_QUEUE_LENGTH);
  }
  
  /**
   * <p>Publish GUIEraseMessage to subscribers</p>
   */
  public void publish() {
    publish(CARMEN_GUI_ERASE_NAME, CARMEN_GUI_ERASE_FMT, this);
  }
}
