/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _FIRECONTROL_H
#define _FIRECONTROL_H

#include "DmGuiObject.h"
#include "DynamicLabel.h"
#include "View.h"
#include "FireControlDm.h"
#include "DmBooleanIndicator.h"

/*
CLASS 
FireControl

DESCRIPTION
GUI to display and control charge-firing (e.g. DrillSled cutter)

AUTHOR
Tom O'Reilly
*/
class FireControl : public DmGuiObject
{

public:

  FireControl(const char *name, Widget parent, FireControlDm *dmObjects);

  ~FireControl();

  virtual const char *className()
  {
    return "FireControl";
  }
  
  virtual void updateGui(DM_Item handle = 0);

  static const char *const disarmedMnem;
  static const char *const armedMnem;  
  static const char *const fastFiringMnem;  
  static const char *const slowFiringMnem;  
  static const char *const firedMnem;  
  static const char *const unknownMnem;  

protected:

  View *_coveredView;
  View *_uncoveredView;

  Widget _controlsMgr;

  Widget _safeButton;
  Widget _armButton;
  Widget _disarmButton;
  Widget _fireButton;

  DynamicLabel *_status;
  DmBooleanIndicator *_pressureSwitch;

  FireControlDm *_dmObjects;

  void safe();
  void unsafe();
  void flash();
  
  static const char *const dmArmCmdSuffix;
  static const char *const dmDisarmCmdSuffix;
  static const char *const dmFireCmdSuffix;
  static const char *const dmStatusSuffix;

  XtIntervalId _flashTimer;
  int _flashPeriod;
  int _timerPhase;
  Pixel _normalForeground, _normalBackground;
  Pixel _alertForeground, _alertBackground;

  Colormap _colormap;
  Pixmap _fireCoverPixmap;

private:

  static void uncoverButtonCallback(Widget w, 
				    XtPointer clientData, 
				    XtPointer callData);

  static void safeCallback(Widget w, XtPointer clientData, XtPointer callData);

  static void armCallback(Widget w, XtPointer clientData, XtPointer callData);

  static void disarmCallback(Widget w, XtPointer clientData, 
			     XtPointer callData);

  static void fireCallback(Widget w, XtPointer clientData, 
			   XtPointer callData);

  static void timerCallback(XtPointer clientData, XtIntervalId *id);
};


#endif
