#ifndef _POWERSWITCH_H
#define _POWERSWITCH_H
#include "DmGuiObject.h"
#include "DmInputDetector.h"
#include "powerTypes.h"

#define SWITCH_REQUEST ".SWITCH_REQ"
#define SWITCH_STATUS ".SWITCH_STATUS"
#define SWITCH_CURRENT ".CURRENT"

class PowerSwitch : public DmGuiObject 
{
  public:

  PowerSwitch(const char *name, Widget parent, const char *switchName,
	      int period);

  ~PowerSwitch();

  virtual const char *className()
  {
    return "PowerSwitch";
  }
  
  virtual void updateGui(DM_Item handle = 0);
  virtual void updateFromPeer(DmGuiObject *peer, void *clientData);
  
  protected:

  Widget _button;
  Widget _currentLabel;
  DmEnumObject *_dmRequest;
  DmEnumObject *_dmStatus;
  DmInt16Object *_dmCurrent;
  DmInputDetector *_statusDetector;
  
  Pixel _onForeground, _onBackground;
  Pixel _faultForeground, _faultBackground;
  Nat32 _status;
  Int16 _current;
  
  static XtResource _resources[];

  void toggleState(void);

  private:
  static void callback(Widget w, XtPointer clientData, XtPointer callData);

};


class MotorSwitch : public PowerSwitch
{
  public:
  MotorSwitch(const char *name, Widget parent, const char *switchName,
	      int period);

  ~MotorSwitch();

  virtual const char *className()
  {
    return "MotorSwitch";
  }
  
  virtual void updateFromPeer(DmGuiObject *peer, void *clientData);

  protected:
  Widget _enableButton;
  
  private:
  static void enableCallback(Widget w, 
			     XtPointer clientData, XtPointer callData);  
  
};


#endif
