#include <Xm/Form.h>
#include <Xm/Label.h>
#include <Vk/VkErrorDialog.h>
#include "PduGfAlarm.h"
#include "TiburonApp.h"
#include "pduMicro.h"
#include "DataRates.h"

PduGfAlarm::PduGfAlarm(const char *name, Widget parent)
{
  _alarmText = 0;
  _valueText = 0;

  _baseWidget = XtVaCreateWidget(name, xmFormWidgetClass, parent, NULL);
  installDestroyHandler();

  char errorBuf[errorMsgSize];
  char itemName[MaxDmNameLen];
  strcpy(itemName, PDU_MICRO_DM_PREFIX);
  
  char *namePtr = itemName + strlen(itemName);
  strcpy(namePtr, EXT_GND_FLT_CURRENT_DM);
  DmInt16Object *dmObj = new DmInt16Object(itemName);
  if (dmObj->error())
  {
    dmObj->errorMsg(errorBuf);
    setError(errorBuf);
    theErrorDialog->postAndWait(errorBuf);
    return;
  }

  SystemAlarms *alarms = ((TiburonApp *)theApplication)->systemAlarms;

  strcpy(namePtr, EXT_GND_FLT_ALARM_DM);
  Alarm *alarm;
  if ((alarm = alarms->find(itemName)) == NULL)
  {
    sprintf(errorBuf,
	    "PduGfAlarm::PduGfAlarm() - couldn't find alarm \"%s\"",
	    itemName);

    theErrorDialog->postAndWait(errorBuf);
  }

  Widget label = 
    XtVaCreateManagedWidget("pduGfAlarmLabel", xmLabelWidgetClass, _baseWidget,
			    XmNtopAttachment, XmATTACH_FORM,
			    XmNleftAttachment, XmATTACH_FORM,
			    NULL);
  
  _valueText = 
    new AlarmedInt16Text("valueText", _baseWidget, "%-4.0f",
			 dmObj, GfCurrentPeriod, alarm, Dynamic,
			 1., XmALIGNMENT_BEGINNING);
  
  XtVaSetValues(_valueText->baseWidget(),
		XmNtopAttachment, XmATTACH_FORM,
		XmNleftAttachment, XmATTACH_WIDGET,
		XmNleftWidget, label,
		XmNleftOffset, 3,
		NULL);
  
  _valueText->show();
  
  _alarmText = 
    new FlashingAlarmText("alarmText", _baseWidget, alarm);
  
  XtVaSetValues(_alarmText->baseWidget(),
		XmNtopAttachment, XmATTACH_FORM,
		XmNleftAttachment, XmATTACH_WIDGET,
		XmNleftWidget, _valueText->baseWidget(),
		NULL);
  
  _alarmText->show();
}


PduGfAlarm::~PduGfAlarm()
{
  delete _alarmText;
  delete _valueText;
}
