#ifndef _DYNAMICLABEL_H
#define _DYNAMICLABEL_H
static char DynamicLabel_h_id[] = "$Header: /usr/tiburon/unix/gui/tmacs/RCS/DynamicLabel.h,v 1.7 1997/08/12 14:42:52 oreilly Exp $";

/*
$Log: DynamicLabel.h,v $
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>

/* DynamicLabel is a label which is intended to change quickly.
*/
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
