#ifndef _ALARMEDTABLE_H
#define _ALARMEDTABLE_H

#include <Vk/VkComponent.h>
#include "Alarm.h"
#include "TableForm.h"

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 : public VkComponent, public ErrorHandler
{
  public: 

  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



