#include <stdio.h>
#include <stdlib.h>
#include <Xm/Label.h>
#include <Xm/Form.h>
#include <Xm/RowColumn.h>
#include <Xm/ScrollBar.h>
#include <Xm/PushB.h>
#include <Xm/Frame.h>
#include <Vk/VkApp.h>
#include <Vk/VkSimpleWindow.h>
#include <Vk/VkOptionMenu.h>
#include "TiburonApp.h"
#include "HeadingControl.h"
#include "Compass.h"
#include "RovCompass.h"
#include "controlDM.h"

#define dprintf if (debug) fprintf

class TestWindow: public VkSimpleWindow 
{
  public:

  TestWindow ( const char *name );
  
  ~TestWindow ();
  
  virtual const char* className()
  {
    return "TestWindow";
  }
};


TestWindow::~TestWindow ()
{
  // Empty
}


TestWindow::TestWindow(const char *name) :
  VkSimpleWindow(name)
{

  Widget baseMgr =
    XtVaCreateWidget("mgr", xmRowColumnWidgetClass, mainWindowWidget(),
		     XmNorientation, XmHORIZONTAL, NULL);

  Widget frame;
  Widget mgr;
  Widget label;
  
  frame = XtVaCreateManagedWidget("frame", xmFrameWidgetClass, baseMgr, NULL);
  
  mgr =
    XtVaCreateWidget("mgr", xmRowColumnWidgetClass, frame,
		     XmNorientation, XmVERTICAL, NULL);

  label = 
    XtVaCreateManagedWidget("shipHeading", xmLabelWidgetClass, mgr, NULL);
  
  Compass *compass = 
    new Compass("compass", mgr, 100, 
		"WESTERN_FLYER.GYRO.DEGREES", True,
		120);
  
  if (compass->error())
  {
    compass->prtErrorMsg();
    exit(1);
  }
  
  compass->show();

  HeadingControl *headingControl = 
    new HeadingControl("headingControl", mgr,
		       "WESTERN_FLYER.GYRO.DEGREES", True);
  
  if (headingControl->error())
  {
    headingControl->prtErrorMsg();
    exit(1);
  }

  headingControl->show();
  XtManageChild(mgr);

  frame = XtVaCreateManagedWidget("frame", xmFrameWidgetClass, baseMgr, NULL);
  
  mgr =
    XtVaCreateWidget("mgr", xmRowColumnWidgetClass, frame,
		     XmNorientation, XmVERTICAL, NULL);

  label = 
    XtVaCreateManagedWidget("rovHeading", xmLabelWidgetClass, mgr, NULL);

  RovCompass *rovCompass = 
    new RovCompass("rovCompass", mgr, 100, 120);
  
  if (rovCompass->error())
  {
    rovCompass->prtErrorMsg();
    exit(1);
  }

  rovCompass->show();

  RovHeadingControl *rovHeadingControl = 
    new RovHeadingControl("headingControl", mgr);
  
  if (rovHeadingControl->error())
  {
    rovHeadingControl->prtErrorMsg();
    exit(1);
  }

  rovHeadingControl->show();
  XtManageChild(mgr);



  XtManageChild(baseMgr);
  
  addView(baseMgr);
}



void main ( int argc, char **argv )
{
  TiburonApp *app = new TiburonApp("HeadingTest", &argc, argv);
	  
  TestWindow *window = new TestWindow("Heading Test");
	  
  window->show();
	  
  app->startTelemetryHandlers();
  
  app->run();
	  
}






