/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _ALARMEDTABLE_H
#define _ALARMEDTABLE_H

#include <Vk/VkComponent.h>
#include "Alarm.h"
#include "TableForm.h"

/*
CLASS 
AlarmedTableHeader

DESCRIPTION
Header for a collection of AlarmedTableRow objects; contains column
labels. Color of each column label reflects highest priority alarm
in associated AlarmedTableRow objects.

AUTHOR
Tom O'Reilly
*/
class AlarmedTableHeader : public VkComponent
{
  public: 
  AlarmedTableHeader(const char *name, Widget parent, int nColumns);

  ~AlarmedTableHeader();
  
  const char *className()
  {
    return "AlarmedTableHeader";
  }
  
  ///////////////////////////////////////////////////////////////////
  // Set color of column based on alarm priority
  virtual void setColumnPriority(int column, Priority priority);

  ///////////////////////////////////////////////////////////////////
  // Set color of all columns to normal
  virtual void clearColumnPriorities();


  Widget mgrWidget()
  {
    return _mgr->baseWidget();
  }
  
  protected:
  TableRowForm *_mgr;
  int _nColumns;
  Widget *_columnLabels;
};


/*
CLASS 
AlarmedTableRow

DESCRIPTION
Row of table which contains Alarm-containing GUI components

AUTHOR
Tom O'Reilly
*/
class AlarmedTableRow : public VkComponent, public ErrorHandler
{
  public: 

  ///////////////////////////////////////////////////////////////////
  // [input] name: Name of AlarmedTableRow
  // [input] parent: Parent Widget
  // [input] nColumns: Number of columns in row
  AlarmedTableRow(const char *name, Widget parent, int nColumns);

  ~AlarmedTableRow();

  static const char *const alarmUpdateCallback;

  ///////////////////////////////////////////////////////////////////
  // Return current alarm priority of given column
  virtual Priority priority(int column) = 0;
  
  protected:

  TableRowForm *_row;

  ///////////////////////////////////////////////////////////////////
  // This calls addCallbacks() after component is realized
  virtual void afterRealizeHook();

  ///////////////////////////////////////////////////////////////////
  // Add callback handlers for embedded alarmed objects
  virtual void addCallbacks();

  ///////////////////////////////////////////////////////////////////
  // Embedded alarmed objects should call this when their state changes
  virtual void alarmUpdate(VkCallbackObject *obj,
			   void *clientData,
			   void *callData);
};

#endif



