#ifndef _JOYSTICK_H
#define _JOYSTICK_H
#include <Vk/VkOptionMenu.h>
#include "DmGuiObject.h"
#include "Iview.h"

#define HighTiltRate 1023
#define LowTiltRate 256
#define HighPanRate 1023
#define LowPanRate 256

class Joystick : public VkComponent, public ErrorHandler
{
  public:
  Joystick(const char *name, Widget parent, 
	   DmInt16Object *dmJoystickX,
	   DmInt16Object *dmJoystickY,
	   DmEmptyObject *dmPortLight,
	   DmEmptyObject *dmPortCamera,
	   DmEmptyObject *dmStbdLight,
	   DmEmptyObject *dmStbdCamera
	   );
  
  ~Joystick();

  virtual const char *className()
  {
    return "Joystick";
  }

  // Return widget of specified device button
  Widget deviceButton(IviewDevice device);
  

  protected:
  Widget _coarseUp;
  Widget _fineUp;
  Widget _coarseDown;
  Widget _fineDown;
  Widget _coarseRight;
  Widget _fineRight;
  Widget _coarseLeft;
  Widget _fineLeft;

  Widget _portLight;
  Widget _portCamera;
  Widget _stbdLight;
  Widget _stbdCamera;

  void toggleDevice(Widget w);
  void startMoving(Widget w);
  void stopMoving(Widget w);

  static Pixmap _coarseLeftImage, _fineLeftImage;
  static Pixmap _coarseRightImage, _fineRightImage;
  static Pixmap _coarseUpImage, _fineUpImage; 
  static Pixmap _coarseDownImage, _fineDownImage;

  DmInt16Object *_dmJoystickX;
  DmInt16Object *_dmJoystickY;
  DmEmptyObject *_dmPortLight;
  DmEmptyObject *_dmPortCamera;
  DmEmptyObject *_dmStbdLight;
  DmEmptyObject *_dmStbdCamera;  

  private:
  static void deviceButtonCallback(Widget w,
				   XtPointer clientData,
				   XtPointer callData);
  
  static void controlPressCallback(Widget w, XtPointer clientData, 
				   XtPointer callData); 

  static void controlReleaseCallback(Widget w, XtPointer clientData, 
				     XtPointer callData); 
};


#endif
