
static char AcPdu_id[] = "$Header: /usr/tiburon/unix/gui/tmacs/RCS/AcPdu.cc,v 1.4 1997/11/20 08:52:54 oreilly Exp $";

/*
$Log: AcPdu.cc,v $
Revision 1.4  1997/11/20 08:52:54  oreilly
*** empty log message ***

Revision 1.3  97/11/20  08:20:31  08:20:31  oreilly (Thomas C. O'Reilly)
Made bargraphs taller

Revision 1.2  97/03/20  12:28:21  12:28:21  oreilly (Thomas C. O'Reilly)
*** empty log message ***

Revision 1.1  96/10/28  09:11:20  09:11:20  oreilly (Thomas C. O'Reilly)
Initial revision

*/
#include <Xm/Form.h>
#include <Xm/Label.h>
#include <Xm/Separator.h>
#include "AcPdu.h"
#include "acMicro.h"
#include "pduMicro.h"
#include "DmBarGraph.h"
 
AcPdu::AcPdu(const char *name, Widget parent)
{
  _baseWidget = XtVaCreateWidget(name, xmFormWidgetClass, parent, NULL);
  installDestroyHandler();

  char errorBuf[errorMsgSize];
  char *itemName;
  char *alarmName;

  const int barGraphHeight = 200;
  int leftOffset = 10;
  
  Widget mainLabel = 
    XtVaCreateManagedWidget("acSection", xmLabelWidgetClass, _baseWidget,
			    XmNtopAttachment, XmATTACH_FORM,
			    XmNleftAttachment, XmATTACH_FORM,
			    XmNrightAttachment, XmATTACH_FORM,
			    NULL);

  const int sumpColumn = 30;
  const int tankColumn = 60;
  const int coolantRow = 10;
  
  Widget label = 
    XtVaCreateManagedWidget("sumpCoolant", xmLabelWidgetClass, _baseWidget,
			    XmNtopAttachment, XmATTACH_POSITION,
			    XmNtopPosition, coolantRow,
			    XmNleftAttachment, XmATTACH_POSITION,
			    XmNleftPosition, sumpColumn,
			    NULL);

  label = 
    XtVaCreateManagedWidget("tankCoolant", xmLabelWidgetClass, _baseWidget,
			    XmNtopAttachment, XmATTACH_POSITION,
			    XmNtopPosition, coolantRow,
			    XmNleftAttachment, XmATTACH_POSITION,
			    XmNleftPosition, tankColumn,
			    NULL);

  const int upperGraphRow = coolantRow + 5;
  
  itemName = AC_MICRO_DM_PREFIX PRESSURE_DM;
  alarmName = AC_MICRO_DM_PREFIX PRESSURE_ALARM_DM;

  DmFlt32BarGraph *pressure = 
    new DmFlt32BarGraph("pressureGuage", _baseWidget, itemName, 500, 
			alarmName, 0., 30.);
  
  if (pressure->error())
  {
    pressure->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }

  pressure->setTickmarks(14);
  
  XtVaSetValues(pressure->baseWidget(),
		XmNleftAttachment, XmATTACH_FORM,
		XmNleftOffset, leftOffset,
		XmNtopAttachment, XmATTACH_POSITION,
		XmNtopPosition, upperGraphRow,
		XmNheight, barGraphHeight,
		NULL);
  
  pressure->show();

  itemName = AC_MICRO_DM_PREFIX OUTBD_SUMP_LEVEL_DM;
  alarmName =  NULL;

  DmNat16BarGraph *outbd = 
    new DmNat16BarGraph("outbdSumpGuage", _baseWidget, itemName, 500, 
			alarmName, 0, 10);

  if (outbd->error())
  {
    outbd->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }
  outbd->setMultiplier(0.001);
  outbd->setDecimalPlaces(2);
  outbd->setTickmarks(9);
  
  XtVaSetValues(outbd->baseWidget(),
		XmNleftAttachment, XmATTACH_POSITION,
		XmNleftPosition, sumpColumn,
		XmNtopAttachment, XmATTACH_POSITION,
		XmNtopPosition, upperGraphRow,
		XmNheight, barGraphHeight,
		NULL);
  
  outbd->show();

  itemName = AC_MICRO_DM_PREFIX INBD_SUMP_LEVEL_DM;
  alarmName = NULL;

  DmNat16BarGraph *inbd = 
    new DmNat16BarGraph("inbdSumpGuage", _baseWidget, itemName, 500, 
			alarmName, 0, 10);

  if (inbd->error())
  {
    inbd->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }
  
  inbd->setMultiplier(0.001);
  inbd->setDecimalPlaces(2);
  inbd->setTickmarks(9);
  
  leftOffset = 20;
  
  XtVaSetValues(inbd->baseWidget(),
		XmNleftAttachment, XmATTACH_WIDGET,
		XmNleftWidget, outbd->baseWidget(),
		XmNleftOffset, leftOffset,
		XmNtopAttachment, XmATTACH_POSITION,
		XmNtopPosition, upperGraphRow,
		XmNheight, barGraphHeight,
		NULL);
  
  inbd->show();

  itemName = AC_MICRO_DM_PREFIX OUTBD_TANK_LEVEL_DM;
  alarmName = AC_MICRO_DM_PREFIX TANK_LEVEL_ALARM_DM;

  outbd = 
    new DmNat16BarGraph("outbdTankGuage", _baseWidget, itemName, 500, 
			alarmName, 0, 5);

  if (outbd->error())
  {
    outbd->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }
  
  outbd->setMultiplier(0.001);
  outbd->setDecimalPlaces(2);
  outbd->setTickmarks(4);
  
  XtVaSetValues(outbd->baseWidget(),
		XmNleftAttachment, XmATTACH_POSITION,
		XmNleftPosition, tankColumn,
		XmNtopAttachment, XmATTACH_POSITION,
		XmNtopPosition, upperGraphRow,
		XmNheight, barGraphHeight,
		NULL);
  
  outbd->show();

  itemName = AC_MICRO_DM_PREFIX INBD_TANK_LEVEL_DM;
  alarmName = AC_MICRO_DM_PREFIX TANK_LEVEL_ALARM_DM;

  inbd = 
    new DmNat16BarGraph("inbdTankGuage", _baseWidget, itemName, 500, 
			alarmName, 0, 5);

  if (inbd->error())
  {
    inbd->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }

  inbd->setMultiplier(0.001);
  inbd->setDecimalPlaces(2);
  inbd->setTickmarks(4);
  
  XtVaSetValues(inbd->baseWidget(),
		XmNleftAttachment, XmATTACH_WIDGET,
		XmNleftWidget, outbd->baseWidget(),
		XmNleftOffset, leftOffset,
		XmNtopAttachment, XmATTACH_POSITION,
		XmNtopPosition, upperGraphRow,
		XmNheight, barGraphHeight,
		NULL);
  
  inbd->show();

  const int separatorRow = 50;
  
  Widget separator = 
    XtVaCreateManagedWidget("separator", xmSeparatorWidgetClass, _baseWidget,
			    XmNtopAttachment, XmATTACH_POSITION,
			    XmNtopPosition, separatorRow,
			    XmNleftAttachment, XmATTACH_FORM,
			    XmNrightAttachment, XmATTACH_FORM,
			    NULL);

  mainLabel = 
    XtVaCreateManagedWidget("pduSection", xmLabelWidgetClass, _baseWidget,
			    XmNtopAttachment, XmATTACH_WIDGET,
			    XmNtopWidget, separator,
			    XmNtopOffset, 20,
			    XmNleftAttachment, XmATTACH_FORM,
			    XmNrightAttachment, XmATTACH_FORM,
			    NULL);

  const int currentColumn = 50;
  const int currentRow = separatorRow + 10;
  
  Widget currentLabel = 
    XtVaCreateManagedWidget("currents", xmLabelWidgetClass, _baseWidget,
			    XmNtopAttachment, XmATTACH_POSITION,
			    XmNtopPosition, currentRow,
			    XmNleftAttachment, XmATTACH_POSITION,
			    XmNleftPosition, currentColumn,
			    NULL);

  itemName = PDU_MICRO_DM_PREFIX WATTAGE_DM;
  alarmName = PDU_MICRO_DM_PREFIX WATTAGE_ALARM_DM;

  DmFlt32BarGraph *kWatts = 
    new DmFlt32BarGraph("kWattGuage", _baseWidget, itemName, 500, 
			alarmName, 0., 120.);

  if (kWatts->error())
  {
    kWatts->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }
  kWatts->setTickmarks(11);
  
  leftOffset = 10;
  const int lowerGraphRow = currentRow + 5;
  
  XtVaSetValues(kWatts->baseWidget(),
		XmNleftAttachment, XmATTACH_FORM,
		XmNleftOffset, leftOffset,
		XmNtopAttachment, XmATTACH_POSITION,
		XmNtopPosition, lowerGraphRow,
		XmNheight, barGraphHeight,
		NULL);
  
  kWatts->show();

  leftOffset = 20;

  itemName = PDU_MICRO_DM_PREFIX VOLTAGE_DM;
  alarmName = PDU_MICRO_DM_PREFIX VOLTAGE_ALARM_DM;

  DmInt16BarGraph *volts = 
    new DmInt16BarGraph("voltGuage", _baseWidget, itemName, 500, 
			alarmName, 0, 150);

  if (volts->error())
  {
    volts->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }
  volts->setTickmarks(14);
  
  XtVaSetValues(volts->baseWidget(),
		XmNleftAttachment, XmATTACH_WIDGET,
		XmNleftWidget, kWatts->baseWidget(),
		XmNleftOffset, leftOffset,
		XmNtopAttachment, XmATTACH_POSITION,
		XmNtopPosition, lowerGraphRow,
		XmNheight, barGraphHeight,
		NULL);
  
  volts->show();

  itemName = PDU_MICRO_DM_PREFIX TRANS_TEMP_DM;
  alarmName = PDU_MICRO_DM_PREFIX TRANS_TEMP_ALARM_DM;

  DmInt16BarGraph *temp = 
    new DmInt16BarGraph("tempGuage", _baseWidget, itemName, 500, 
			alarmName, 0, 150);

  if (temp->error())
  {
    temp->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }
  temp->setTickmarks(14);
  
  XtVaSetValues(temp->baseWidget(),
		XmNleftAttachment, XmATTACH_WIDGET,
		XmNleftWidget, volts->baseWidget(),
		XmNleftOffset, leftOffset,
		XmNtopAttachment, XmATTACH_POSITION,
		XmNtopPosition, lowerGraphRow,
		XmNheight, barGraphHeight,
		NULL);
  
  temp->show();

  itemName = PDU_MICRO_DM_PREFIX AMPS_PHASE1_DM;
  alarmName = PDU_MICRO_DM_PREFIX AMPS_PHASE1_ALARM_DM;

  DmInt16BarGraph *phase1 = 
    new DmInt16BarGraph("phase1Guage", _baseWidget, itemName, 500, 
			alarmName, 0, 100);

  if (phase1->error())
  {
    phase1->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }

  phase1->setTickmarks(9);
  
  XtVaSetValues(phase1->baseWidget(),
		XmNleftAttachment, XmATTACH_POSITION,
		XmNleftPosition, currentColumn,
		XmNtopAttachment, XmATTACH_POSITION,
		XmNtopPosition, lowerGraphRow,
		XmNheight, barGraphHeight,
		NULL);
  
  phase1->show();

  itemName = PDU_MICRO_DM_PREFIX AMPS_PHASE2_DM;
  alarmName = PDU_MICRO_DM_PREFIX AMPS_PHASE2_ALARM_DM;

  DmInt16BarGraph *phase2 = 
    new DmInt16BarGraph("phase2Guage", _baseWidget, itemName, 500, 
			alarmName, 0, 100);

  if (phase2->error())
  {
    phase2->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }

  phase2->setTickmarks(9);

  XtVaSetValues(phase2->baseWidget(),
		XmNleftAttachment, XmATTACH_WIDGET,
		XmNleftWidget, phase1->baseWidget(),
		XmNleftOffset, leftOffset,
		XmNtopAttachment, XmATTACH_POSITION,
		XmNtopPosition, lowerGraphRow,
		XmNheight, barGraphHeight,
		NULL);
  
  phase2->show();

  itemName = PDU_MICRO_DM_PREFIX AMPS_PHASE3_DM;
  alarmName = PDU_MICRO_DM_PREFIX AMPS_PHASE3_ALARM_DM;

  DmInt16BarGraph *phase3 = 
    new DmInt16BarGraph("phase3Guage", _baseWidget, itemName, 500, 
			alarmName, 0, 100);

  if (phase3->error())
  {
    phase3->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }

  phase3->setTickmarks(9);

  XtVaSetValues(phase3->baseWidget(),
		XmNleftAttachment, XmATTACH_WIDGET,
		XmNleftWidget, phase2->baseWidget(),
		XmNleftOffset, leftOffset,
		XmNtopAttachment, XmATTACH_POSITION,
		XmNtopPosition, lowerGraphRow,
		XmNheight, barGraphHeight,
		NULL);
  
  phase3->show();

}


AcPdu::~AcPdu()
{
}
