/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _DYNAMICLABEL_H
#define _DYNAMICLABEL_H
static char DynamicLabel_h_id[] = "$Header: /u/oreilly/rov/tmacs/RCS/DynamicLabel.h,v 1.8 1998/12/18 21:07:21 oreilly Exp $";

/*
$Log: DynamicLabel.h,v $
Revision 1.8  1998/12/18 21:07:21  oreilly
Added documentation

Revision 1.7  1997/08/12 14:42:52  oreilly
Added addXtEventHandler() method

 * Revision 1.6  97/05/08  09:31:33  09:31:33  oreilly (Thomas C. O'Reilly)
 * *** empty log message ***
 * 
 * Revision 1.5  97/05/08  09:26:16  09:26:16  oreilly (Thomas C. O'Reilly)
 * *** empty log message ***
 * 
 * Revision 1.4  97/05/06  16:26:57  16:26:57  oreilly (Thomas C. O'Reilly)
 * Allow baseWidget to shrink when label text does
 * 
 * Revision 1.3  97/04/30  19:34:16  19:34:16  oreilly (Thomas C. O'Reilly)
 * Improved performance
 * 
 * Revision 1.1  97/03/20  12:33:54  12:33:54  oreilly (Thomas C. O'Reilly)
 * Initial revision
 * 
*/


#include <Vk/VkComponent.h>

/*
CLASS 
DynamicLabel

DESCRIPTION
DynamicLabel is a label which is intended to change quickly.

AUTHOR
Tom O'Reilly
*/
class DynamicLabel : public VkComponent
{
  public:
  
  DynamicLabel(const char *name, Widget parent, 
	       unsigned char alignment = XmALIGNMENT_CENTER);

  ~DynamicLabel();

  virtual const char *className()
  {
    return "DynamicLabel";
  }
  
  /* Set foreground and background colors */
  void setColors(Pixel fg, Pixel bg);
  
  /* Set text string. If font not yet available (and so string not yet drawn
     into pixmap), return False, else return True. */
  Boolean setText(const char *text);
  
  /* Set text string and colors */
  void set(const char *text, Pixel fg, Pixel bg);
  
  // Add Xt event handler
  void addXtEventHandler(EventMask eventMask,
			 Boolean nonMaskable,
			 XtEventHandler handler,
			 XtPointer clientData);
  
  protected:

  char *_text;
  int _nTextLines;
  int _lineSpacing;
  unsigned char _alignment;
  Boolean _windowIsReady;
 
  Widget _label;
  XFontStruct *_fontInfo;
  Pixmap _pixmap;

  int _pixmapWidth, _pixmapHeight;

  Dimension _widgetWidth, _widgetHeight;
  static GC _gc;
  Pixel _foreground, _background;
  Dimension _shadowThickness;

  void getFont();
  void draw();
  void afterRealizeHook();
  void updateWindow();
  void resize(Dimension width, Dimension height);
  
  private:
  static void exposeCallback(Widget w, XtPointer clientData,
			     XEvent *event);

  static void structureNotifyCallback(Widget w, XtPointer clientData,
				      XEvent *event);
};


#endif
