/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _RELEASECONTROL_H
#define _RELEASECONTROL_H

#include "DmGuiObject.h"
#include "DynamicLabel.h"

/*
CLASS 
ReleaseControl

DESCRIPTION
GUI to control release of latches (i.e. toolsled, deployment), and 
display their state

AUTHOR
Tom O'Reilly
*/
class ReleaseControl : public DmGuiObject
{
  public:

  ReleaseControl(const char *name, Widget parent, const char *dmPrefix);
  ~ReleaseControl();

  virtual const char *className()
  {
    return "ReleaseControl";
  }
  
  virtual void updateGui(DM_Item handle = 0);

  static const char *const latchDisarmedMnem;
  static const char *const latchArmedMnem;  
  static const char *const latchArmedNoPwrMnem;  
  static const char *const latchRunningMnem;  
  

  protected:

  Widget _safeButton;
  Widget _armButton;
  Widget _armedMgr;
  Widget _jogButton;
  Widget _releaseButton;
  Widget _statusMgr;
  
  Nat16 _armCode;
  
  DynamicLabel *_status;

  DmNat16Object *_dmArmCmd;
  DmBooleanObject *_dmJogCmd;
  DmEnumObject *_dmStatus;

  void enableControls();
  void disableControls();
  void safe();
  void unsafe();
  void safetyCheck();
  void flash();
  
  static const char *const dmArmCmdSuffix;
  static const char *const dmJogCmdSuffix;
  static const char *const dmReleaseCmdSuffix;
  static const char *const dmStatusSuffix;

  XtIntervalId _flashTimer;
  int _flashPeriod;
  int _timerPhase;
  Pixel _normalForeground, _normalBackground;
  Pixel _alertForeground, _alertBackground;

  Colormap _colormap;
  Boolean _ready;
  
  private:
  static void safeCallback(Widget w, XtPointer clientData, XtPointer callData);

  static void armCallback(Widget w, XtPointer clientData, XtPointer callData);

  static void jogCallback(Widget w, XtPointer clientData, XtPointer callData);

  static void timerCallback(XtPointer clientData, XtIntervalId *id);
};


#endif
