#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include <Xm/Form.h>
#include "AlarmedTable.h"
#include "TiburonApp.h"


AlarmedTableHeader::AlarmedTableHeader(const char *name, Widget parent, 
				       int nColumns)
{
  _baseWidget = XtVaCreateWidget(name, xmFormWidgetClass, parent, NULL, 0);
  
  installDestroyHandler();

  if ((_columnLabels = (Widget *)malloc(nColumns * sizeof(Widget))) == NULL)
  {
    fprintf(stderr, 
	    "AlarmedTableHeader::AlarmedTableHeader() - "
	    "couldn't allocate %d columns\n");
    exit(1);
  }

  _mgr = new TableRowForm("mgr", _baseWidget, nColumns);

  XtVaSetValues(_mgr->baseWidget(),
		XmNleftAttachment, XmATTACH_POSITION,
		XmNleftPosition, 0,
		XmNtopAttachment, XmATTACH_FORM,
		XmNrightAttachment, XmATTACH_FORM,
		NULL);

  _nColumns = nColumns;
}


AlarmedTableHeader::~AlarmedTableHeader()
{
  free(_columnLabels);
}


void AlarmedTableHeader::setColumnPriority(int column, Priority priority)
{
  if (column < 0 || column > _nColumns)
    return;
  
  TiburonApp *app = (TiburonApp *)theApplication;
  Pixel foreground, background;
  
  app->priorityColors(priority, &foreground, &background);
  
  XtVaSetValues(_columnLabels[column],
		XmNforeground, foreground,
		XmNbackground, background,
		NULL);
}



void AlarmedTableHeader::clearColumnPriorities()
{
  Pixel foreground, background;

  XtVaGetValues(_baseWidget,
		XmNforeground, &foreground,
		XmNbackground, &background,
		NULL);
  
  for (int column = 0; column < _nColumns; column++)
  {
    XtVaSetValues(_columnLabels[column],
		  XmNforeground, foreground,
		  XmNbackground, background,
		  NULL);
  }
}


const char *const AlarmedTableRow::alarmUpdateCallback = "alarmUpdateCallback";

AlarmedTableRow::AlarmedTableRow(const char *name, Widget parent, int nColumns)
{
  _row = 0;
  
  _baseWidget = XtVaCreateWidget(name, xmFormWidgetClass, parent, NULL, 0);

  installDestroyHandler();

  _row = new TableRowForm("row", _baseWidget, nColumns);

  XtVaSetValues(_row->baseWidget(),
		XmNleftAttachment, XmATTACH_FORM,
		XmNtopAttachment, XmATTACH_FORM,
		XmNrightAttachment, XmATTACH_FORM,
		XmNbottomAttachment, XmATTACH_FORM,
		NULL);
}


AlarmedTableRow::~AlarmedTableRow()
{
  delete _row;
}



void AlarmedTableRow::alarmUpdate(VkCallbackObject *obj,
				  void *clientData,
				  void *callData)
{
  callCallbacks(alarmUpdateCallback, (void *)NULL);
}


void AlarmedTableRow::afterRealizeHook()
{
  addCallbacks();
}


void AlarmedTableRow::addCallbacks()
{
}
