#ifndef _DYNAMICBUTTON_H
#define _DYNAMICBUTTON_H
static char DynamicButton_h_id[] = "$Header: /usr/tiburon/unix/gui/tmacs/RCS/DynamicButton.h,v 1.4 1998/02/23 16:12:15 oreilly Exp $";

/*
$Log: DynamicButton.h,v $
Revision 1.4  1998/02/23 16:12:15  oreilly
*** empty log message ***

Revision 1.3  1997/08/12 14:41:56  oreilly
added getFont() method

 * Revision 1.2  97/03/20  12:33:52  12:33:52  oreilly (Thomas C. O'Reilly)
 * *** empty log message ***
 * 
 * Revision 1.1  96/10/28  09:13:39  09:13:39  oreilly (Thomas C. O'Reilly)
 * Initial revision
 * 
*/


#include <Vk/VkComponent.h>

// DynamicButton is a button whose label is intended to change quickly
// It includes a Motif DrawnButton  
class DynamicButton : public VkComponent
{
  public:
  
  DynamicButton(const char *name, Widget parent, int width, int height);
  ~DynamicButton();

  virtual const char *className()
  {
    return "DynamicButton";
  }
  
  void setColors(Pixel fg, Pixel bg);
  void setPixmap(Pixmap pixmap);
  void setText(const char *text, Boolean recomputeSize = False);

  // Set function to call on button activation 
  void setActivateCallback(XtCallbackProc callback, XtPointer clientData)
  {
    XtAddCallback(_drawnB, XmNactivateCallback, callback, clientData);
  }

  // Set function to call on button arming
  void setArmCallback(XtCallbackProc callback, XtPointer clientData)
  {
    XtAddCallback(_drawnB, XmNarmCallback, callback, clientData);
  }


  // Set function to call on button disarming
  void setDisarmCallback(XtCallbackProc callback, XtPointer clientData)
  {
    XtAddCallback(_drawnB, XmNdisarmCallback, callback, clientData);
  }

  void setSensitive(Boolean sensitive);
  Widget buttonWidget();
  
  protected:
  char *_text;
  int _nTextLines;
  int _lineSpacing;
  
  Widget _drawnB;
  XFontStruct *_fontInfo;
  Pixmap _pixmap;
  int _pixmapWidth, _pixmapHeight;
  static Pixmap _stipple;
  
  static GC _gc;

  void draw();
  void drawArmed();
  void drawDisarmed();
  void reverseBorders();
  void getFont();
  
  Pixel _background;
  Pixel _armColor;
  Dimension _shadowThickness;
  
  private:
  static void activateCallback(Widget w, XtPointer clientData,
			       XtPointer callData);

  static void armCallback(Widget w, XtPointer clientData,
			  XtPointer callData);

  static void disarmCallback(Widget w, XtPointer clientData,
			     XtPointer callData);
  
  static void exposeResizeCallback(Widget w, XtPointer clientData,
				   XtPointer callData);
};


#endif
