/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _LIGHTSWITCH_H
#define _LIGHTSWITCH_H

#include "DmGuiObject.h"
#include "DynamicButton.h"
#include "powerTypes.h"

#define SWITCH_REQUEST "SWITCH_REQ"
#define SWITCH_STATUS "SWITCH_STATUS"

/*
CLASS 
LightSwitch

DESCRIPTION
GUI to turn light on and off 

AUTHOR
Tom O'Reilly
*/
class LightSwitch : public DmGuiObject
{
  public:
  
  LightSwitch(const char *name, Widget parent,
	      const char *lpDconDmPrefix,
	      const char *hpDconDmPrefix,
	      const char *ballastDmPrefix,
	      const char *lightDmPrefix,
	      const char *switchName,
	      int buttonWidth,
	      int buttonHeight,
	      int period);

  ~LightSwitch();
  
  virtual const char *className()
  {
    return "LightSwitch";
  }
  
  virtual void updateGui(DM_Item handle = 0);
 
  protected:

  typedef enum
  {
    SwitchingOn, SwitchingOff, On, Off
  } State;
  
  State _state;
  State _prevState;
  State _buttonState;
  Boolean _error;
  
  Nat32 _lpDconStatus;
  Nat32 _hpDconStatus;
  Nat32 _ballastStatus;
  Nat32 _lightStatus;

  DmEnumObject *_dmLpDconReq;
  DmEnumObject *_dmHpDconReq;
  DmEnumObject *_dmBallastReq;
  DmEnumObject *_dmLightReq;
  DmEnumObject *_dmLpDconStatus;
  DmEnumObject *_dmHpDconStatus;
  DmEnumObject *_dmBallastStatus;
  DmEnumObject *_dmLightStatus;
  
  DynamicButton *_powerButton;

  char *_switchName;
  
  void switchOn();
  void switchOff();

  void setState(State state);
  

  void toggleState();
  
  private:
  
  static void powerButtonCallback(Widget w, XtPointer clientData, 
				  XtPointer callData);
};


#endif
