static char EnvironTable_id[] = "$Header: /u/oreilly/rov/tmacs/RCS/EnvironTable.cc,v 1.2 1996/10/28 09:12:03 oreilly Exp $";


/*
$Log: EnvironTable.cc,v $
Revision 1.2  1996/10/28 09:12:03  oreilly
*** empty log message ***

Revision 1.1  96/07/22  10:41:58  10:41:58  oreilly (Thomas C. O'Reilly)
First external release

*/
#include <Xm/Form.h>
#include <Xm/Label.h>
#include <Xm/Separator.h>
#include <Xm/ScrolledW.h>
#include "EnvironTable.h"
#include "MicroEnviron.h"
#include "TiburonApp.h"

struct DconSpec 
{  
  char *name;
  DconDm *dconDm;
};


EnvironTable::EnvironTable(const char *name, Widget parent)
  : VkComponent(name)
{
  const int fractionBase = 7;
  const int tableWidth = 600;
  DconSpec dconSpec[15];
  
  TiburonApp *app = (TiburonApp *)theApplication;
  dconSpec[0].name = "camera";
  dconSpec[0].dconDm = app->systemMicros->dcons->camera;  
  dconSpec[1].name = "ers";
  dconSpec[1].dconDm = app->systemMicros->dcons->ers;
  dconSpec[2].name = "lighting";
  dconSpec[2].dconDm = app->systemMicros->dcons->lighting;
  dconSpec[3].name = "powerA";
  dconSpec[3].dconDm = app->systemMicros->dcons->powerA;
  dconSpec[4].name = "powerB";
  dconSpec[4].dconDm = app->systemMicros->dcons->powerB;
  dconSpec[5].name = "sensor";
  dconSpec[5].dconDm = app->systemMicros->dcons->sensor;  
  dconSpec[6].name = "sonar";
  dconSpec[6].dconDm = app->systemMicros->dcons->sonar;

  dconSpec[7].name = NULL;
  dconSpec[7].dconDm = NULL;
  
  _baseWidget = XtVaCreateWidget(name, xmFormWidgetClass,
				 parent, XmNfractionBase, fractionBase, 
				 NULL);
  installDestroyHandler();

  Widget microNameLabel =
    XtVaCreateManagedWidget("microName", xmLabelWidgetClass, _baseWidget,
			    XmNtopAttachment, XmATTACH_FORM,
			    XmNleftAttachment, XmATTACH_POSITION,
			    XmNleftPosition, 0,
			    NULL);
  
  const int column1Pos = 1;
  
  MicroEnvironHeader *hdr = new MicroEnvironHeader("hdr", _baseWidget);
  XtVaSetValues(hdr->baseWidget(), 
		XmNtopAttachment, XmATTACH_FORM,
		XmNleftAttachment, XmATTACH_POSITION,
		XmNleftPosition, column1Pos,
		XmNrightAttachment, XmATTACH_FORM,
		NULL);
  
  Widget tableForm = 
    XtVaCreateWidget("tableForm", xmFormWidgetClass, _baseWidget,
		     XmNtopAttachment, XmATTACH_WIDGET,
		     XmNtopWidget, microNameLabel,
		     XmNfractionBase, fractionBase, 
		     XmNleftAttachment, XmATTACH_FORM,
		     XmNrightAttachment, XmATTACH_FORM,
		     XmNbottomAttachment, XmATTACH_FORM,
		     NULL);
  
  
  Widget separator = 
    XtVaCreateManagedWidget("separator", xmSeparatorWidgetClass,
			    tableForm, 
			    XmNleftAttachment, XmATTACH_FORM,
			    XmNrightAttachment, XmATTACH_FORM,
			    XmNtopAttachment, XmATTACH_FORM,
			    NULL);

  char errorBuf[errorMsgSize];
  
  for (int i = 0; dconSpec[i].name != NULL; i++)
  {
    char rowName[100];
    sprintf(rowName, "%sLabel", dconSpec[i].name);
    
    Widget rowLabel = 
      XtVaCreateManagedWidget(rowName, xmLabelWidgetClass, tableForm,
			      XmNtopAttachment, XmATTACH_WIDGET,
			      XmNtopWidget, separator,
			      XmNleftAttachment, XmATTACH_POSITION,
			      XmNleftPosition, 0,
			      NULL);			    

    DconEnviron *dcon = new DconEnviron(dconSpec[i].name,
					tableForm, 
					dconSpec[i].dconDm,
					500);

    if (dcon->error())
    {
      dcon->prtErrorMsg();
      app->exit(1);
    }
    
    XtVaSetValues(dcon->baseWidget(), 
		  XmNtopAttachment, XmATTACH_WIDGET,
		  XmNtopWidget, separator,
		  XmNleftAttachment, XmATTACH_POSITION,
		  XmNleftPosition, column1Pos,
		  XmNrightAttachment, XmATTACH_FORM,
		  NULL);

    separator = XtVaCreateManagedWidget("separator", xmSeparatorWidgetClass,
					tableForm, 
					XmNleftAttachment, XmATTACH_FORM,
					XmNrightAttachment, XmATTACH_FORM,
					XmNtopAttachment, XmATTACH_WIDGET,
					XmNtopWidget, dcon->baseWidget(),
					NULL);
  }
  
  
  XtManageChild(tableForm);
  XtManageChild(_baseWidget);
}  





