#ifndef _ALARMLIST_H
#define _ALARMLIST_H
static char AlarmList_h_id[] = "$Header: /usr/tiburon/unix/gui/tmacs/RCS/AlarmList.h,v 1.3 1997/10/03 09:24:30 oreilly Exp $";

/*
$Log: AlarmList.h,v $
Revision 1.3  1997/10/03 09:24:30  oreilly
Use local SList iterator

 * Revision 1.2  97/05/30  15:43:56  15:43:56  oreilly (Thomas C. O'Reilly)
 * added sort()
 * 
 * Revision 1.1  96/10/28  09:13:13  09:13:13  oreilly (Thomas C. O'Reilly)
 * Initial revision
 * 
*/

#include <malloc.h>
#include <Vk/VkComponent.h>
#include "Alarm.h"
#include "SList.h"

#define EndOfList -1
#define TimeColumn 48

/*
AlarmList displays alarm information in a scrolling list
*/
class AlarmList : public VkComponent
{
  public:
  
  AlarmList(const char *name, Widget parent, Priority priority);
  ~AlarmList()
  {
  }
  
  virtual const char *className()
  {
    return "AlarmList";
  }

  // Clear list
  void clear();
  
  // Return pointer to selected alarm
  Alarm *selectedItem();

  int itemCount();

  // Return pointer to nth alarm in list
  Alarm *alarm(int n);

  void update(Alarm *alarm);

  // Append alarm to list
  void append(Alarm *alarm);
  
  // Remove specifed alarm from list
  int remove(Alarm *alarm);

  // Sort alarm list entries
  void sort();
  
  protected:
  Widget _listWidget;
  Widget _selectedItem;
  int _visibleItemCount;
  SList<Alarm *>_alarmList;
  Priority _priority;

  // Structure used in sorting list
  struct ListEntry
  {
    char *entryString;
    Alarm *alarm;
  };
  
  
  // Return position of specified alarm (0-based index)
  int entryPosition(Alarm *alarm);

  // Make string from specified alarm to display in list   
  XmString makeListString(Alarm *alarm);

  // Display info on item at specified (0-based) position in list
  void displaySelectedItem(int position);

  // Interface function for qsort
  static int timeCompare(const void *p1, const void *p2);
  
  private:
  static void listSelectCallback(Widget w, XtPointer clientData, 
				 XtPointer callData);
};


#endif
