static char ErsMode_id[] = "$Header: /usr/tiburon/unix/gui/tmacs/RCS/ErsMode.cc,v 1.3 1997/08/12 14:43:56 oreilly Exp $";


/*
$Log: ErsMode.cc,v $
Revision 1.3  1997/08/12 14:43:56  oreilly
Use form widget for baseWidget

Revision 1.2  97/03/20  12:29:28  12:29:28  oreilly (Thomas C. O'Reilly)
..

Revision 1.1  96/07/22  10:42:00  10:42:00  oreilly (Thomas C. O'Reilly)
First external release

*/
#include <Xm/Form.h>
#include <Xm/Label.h>
#include "VehicleState.h"
#include "TiburonApp.h"
#include "Alarm.h"
#include "ErsMode.h"
#include "ers.h"
#include "tiburon.h"
#include "ersDcon.h"

const char *const ErsMode::operatingModeMnem = "Operating";
const char *const ErsMode::emergencyModeMnem = "Emergency";
const char *const ErsMode::powerOffMnem = "PowerOff";
const char *const ErsMode::unknownModeMnem = "Unknown";

ErsMode::ErsMode(const char *name, Widget parent)
  : DmGuiObject(name, parent)
{
  _baseWidget = XtCreateWidget(_name, xmFormWidgetClass, parent, NULL, 0);
  installDestroyHandler();

  _label = XtVaCreateManagedWidget("ersMode", xmLabelWidgetClass, 
				   _baseWidget, 
				   XmNleftAttachment, XmATTACH_FORM,
				   XmNrightAttachment, XmATTACH_FORM,
				   XmNtopAttachment, XmATTACH_FORM,
				   NULL);

  XtManageChild(_baseWidget);

  char errorBuf[errorMsgSize];
  
  // Create data manager items
  char itemName[MaxDmNameLen];
  strcpy(itemName, ERS_DCON_DM_PREFIX);
  char *namePtr = itemName + strlen(itemName);
  strcpy(namePtr, ERS_OPERATING_MODE_DM);
  _dmErsMode = new DmEnumObject(itemName);

  if (_dmErsMode->error())
  {
    _dmErsMode->errorMsg(errorBuf);
    setError(errorBuf);
    return;
  }
  if (addDmObject(_dmErsMode, DmConsumeFlag) == -1)
    return;

  if (setConsumePeriod(Aperiodic) == -1)
    return;
  
  updateGui();
}


void ErsMode::updateGui(DM_Item handle)
{
  DM_Time t;
  Int32 mode;
  char errorBuf[errorMsgSize];
  
  if (_dmErsMode->read(&mode, &t) != SUCCESS)
  {
    _dmErsMode->errorMsg(errorBuf);
    setError(errorBuf);
  }

  char *ptr;
  Priority priority;
  
  switch (mode)
  {
    case OPERATING_MODE:
    ptr = (char *)operatingModeMnem;
    priority = NoPriority;
    break;
    
    case EMERGENCY_MODE:
    ptr = (char *)emergencyModeMnem;
    priority = Priority1;
    break;
    
    case ERS_POWER_OFF:
    ptr = (char *)powerOffMnem;
    priority = Priority1;
    break;

    default:
    ptr = (char *)unknownModeMnem;
    priority = Priority1;
    break;    
  }

  TiburonApp *app = (TiburonApp *)theApplication;  
  Pixel foreground, background;
  app->priorityColors(priority, &foreground, &background);
  XmString xmstr = XmStringCreateSimple(ptr);
  XtVaSetValues(_label, XmNlabelString, xmstr, 
		XmNforeground, foreground, XmNbackground, background, NULL);
  
  XmStringFree(xmstr);
}
  
