static char CoreHydraulics_id[] = "$Header: CoreHydraulics.cc,v 1.6 97/08/12 15:00:34 oreilly Exp $";


/*
$Log:	CoreHydraulics.cc,v $
Revision 1.6  97/08/12  15:00:34  15:00:34  oreilly (Thomas C. O'Reilly)
*** empty log message ***

Revision 1.5  97/04/30  19:48:29  19:48:29  oreilly (Thomas C. O'Reilly)
show pressure object

Revision 1.4  97/04/09  14:05:20  14:05:20  oreilly (Thomas C. O'Reilly)
Sensitize/de-sensitize controls depending on Hydraulic system state

Revision 1.3  97/03/20  12:31:17  12:31:17  oreilly (Thomas C. O'Reilly)
..

Revision 1.2  96/10/28  09:12:45  09:12:45  oreilly (Thomas C. O'Reilly)
*** empty log message ***

Revision 1.1  96/07/22  10:42:14  10:42:14  oreilly (Thomas C. O'Reilly)
First external release

*/
#include <Xm/RowColumn.h>
#include <Xm/Form.h>
#include <Xm/Separator.h>
#include <Xm/Label.h>
#include <Xm/Scale.h>
#include <Vk/VkTickMarks.h>
#include "CoreHydraulics.h"
#include "HydraulicSelect.h"
#include "LabeledText.h"
#include "tiburon.h"
#include "TiburonApp.h"
#include "AlarmedText.h"
#include "DmErrno.h"
#include "VbMode.h"
#include "powerDM.h"

#define dprintf if (debug) fprintf

#define ScaleMargin 19   // Half-thickness of Scale's slider

DM_Time CoreHydraulics::_t;
struct timezone CoreHydraulics::_tz = {0, 0};
 
CoreHydraulics::CoreHydraulics(const char *name, Widget parent, int period)
  : DmGuiObject(name, parent)
{
  MBool debug = FALSE;
  
  _baseWidget = XtVaCreateWidget(name, xmRowColumnWidgetClass, parent, 
				 XmNorientation, XmVERTICAL, 0);
  installDestroyHandler();

  char errorBuf[errorMsgSize];
  char itemName[MaxDmNameLen];
  char *namePtr;
  strcpy(itemName, TIBURON_DM_PREFIX);
  namePtr = itemName + strlen(itemName);
  strcpy(namePtr, HYDRAULIC_PRESSURE_DM);
  DmNat16Object *dmPressure = new DmNat16Object(itemName);
  if (dmPressure->error())
  {
    dmPressure->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }

  strcpy(namePtr, HYDRAULIC_PRESSURE_ALARM_DM);
  Alarm *pressureAlarm;
  if ((pressureAlarm = ((TiburonApp *)theApplication)->systemAlarms->
       find(itemName)) == NULL)
  {
    sprintf(errorBuf, "Couldn't find alarm \"%s\"", itemName);
    setError(errorBuf);
    return;
  }
  
  Widget mgr = XtVaCreateWidget("mgr", xmFormWidgetClass, _baseWidget, 0);

  Widget mainLabel;
  Widget label;
  
  mainLabel = 
    XtVaCreateManagedWidget("coreHydraulicsLabel", 
			    xmLabelWidgetClass, mgr, 
			    XmNtopAttachment, XmATTACH_FORM,
			    XmNleftAttachment, XmATTACH_FORM,
			    NULL);
  
  label = 
    XtVaCreateManagedWidget("pressureLabel", xmLabelWidgetClass, mgr,
			    XmNtopAttachment, XmATTACH_FORM,
			    XmNleftAttachment, XmATTACH_WIDGET,
			    XmNleftWidget, mainLabel,
			    NULL);

  AlarmedNat16Text *pressure = 
    new AlarmedNat16Text("pressure", mgr, "%4.0f psi", dmPressure, 
			 period, pressureAlarm);
  
  XtVaSetValues(pressure->baseWidget(),
		XmNtopAttachment, XmATTACH_FORM,
		XmNleftAttachment, XmATTACH_WIDGET,
		XmNleftWidget, label,
		NULL);

  pressure->show();

  XtManageChild(mgr);

  Widget selectLabel = 
    XtVaCreateManagedWidget("hydraulicSelectLabel", xmLabelWidgetClass,
			    _baseWidget, 0);
  
  HydraulicSelect *hydraulicSelect = 
    new HydraulicSelect("hydraulicSelect", _baseWidget);
  
  hydraulicSelect->show();

  mgr = XtVaCreateWidget("mgr", xmRowColumnWidgetClass, _baseWidget, 
			  XmNorientation, XmHORIZONTAL, 0);


  Widget mgr2 = XtVaCreateWidget("mgr2", xmFormWidgetClass, mgr,
				 XmNorientation, XmHORIZONTAL, 0);

  char dmName[MaxDmNameLen];
  sprintf(dmName, "%s%s", POWER_DM_PREFIX, VB_FILL_DM);

  _vbFill = new PowerSwitchGui("vbFill", mgr2, dmName, "VB Fill", 
			       100, 50, 500, True);

  XtVaSetValues(_vbFill->baseWidget(),
		XmNleftAttachment, XmATTACH_FORM,
		XmNtopAttachment, XmATTACH_FORM,
		NULL);

  _vbFill->show();

  XtManageChild(mgr2);

  strcpy(dmName, TIBURON_DM_PREFIX);

  _valveFunctions = new ValveFunctions("valveFunctions", mgr, 
				       7, 1, dmName, True);

  _valveFunctions->show();


  XtManageChild(mgr);

  if (setConsumePeriod(period) == -1)
    return;

  updateGui();
}


void CoreHydraulics::updateGui(DM_Item handle)
{
  Errno errno;
  char errorBuf[errorMsgSize];
  
  Flt32 value;
  DM_Time t;
}


