
/**************** Graphic carries X info around ****************/
typedef struct {
  Display       *display;
  int            screen;
  int            depth;
  Window         window;
  Visual        *visual;
  int            visualclass;
  int            Nbits;
  GC             gc;
  XFontStruct   *font;
  Cursor         cursor;
  int            x,  y;
  int            dx, dy;
  XColor         cmap[256];
  Colormap       colormap;
  unsigned long  fore;
  unsigned long  back;
  unsigned long  *color;
  unsigned long  pixels[256];
  unsigned long  overlay_color[NOVERLAYS];
  int Npixels;
  int Ncolors;
} Graphic;

/**************** X related "widget" structures ****************/
typedef struct {
  int      x, y, dx, dy;      /* position and size */
  int      width, height;     /* size of the bitmap */
  char    *bitmap;            /* picture on button */
  int    (*function_1) ();    /* mouse_button 1 function */
  int    (*function_2) ();    /* mouse_button 2 function */
  int    (*function_3) ();    /* mouse_button 3 function */
} Button;

typedef struct {
  int      x, y, dx, dy;   /* position and size */
  char    *label;          /* label on TextLine */
  char     text[1024];     /* words of TextLine */
  char     old_text[1024]; /* words of TextLine */
  int      outline;        /* draw an outline?  */ 
  int      cursor;         /* location of cursor (if selected) */
  int    (*function) ();   /* textline function */
} TextLine;

typedef char STRING[1024];

typedef struct {
  int      x, y, dx, dy;   /* position and size */
  STRING  *text;           /* words of TextLine */
  int      Nlines;
  int      outline;        /* draw an outline?  */ 
  int      cursor_line;    /* cursor line */
  int      cursor_x;       /* location of cursor (if selected) */
  int      cursor_y;       /* location of cursor (if selected) */
  int    (*function) ();   /* textline function */
} TextBox;

/**************** general structures ****************/
typedef struct {
  Pixmap pixmap;
  int    width;
  int    height;
  unsigned char *bits;
} Icon;

typedef struct {
  int      dx, dy, x, y;
  XImage  *pix;
  char    *data;
} Picture;

// objects associated with a KiiImage
// XXX rename thi
typedef struct {
  char type[10];
  double x, y;
  double dx, dy;
  double angle;
  char  *text;
} Object;

typedef struct {
  int x, y;
  int dx, dy;
  double angle;
  int  size;
  char font[64]; 
  char text[LABEL_MAXLEN];
} Label;

typedef struct {
  int active;
  int Nobjects;
  unsigned long color;
  KiiOverlay *objects;
} Overlay;
  
typedef struct {
  float *x, *y, *z, *dxp, *dxm, *dyp, *dym;
  int Npts;
  int style, ptype, ltype, color, etype, ebar;
  double lweight, size;
  double x0, x1, y0, y1;  /* limits for this object */
} Gobjects;

typedef struct {
  double min, max;
  char isaxis, areticks, islabel, islog;
  double fx, dfx, fy, dfy;  /* axis location on graphic */
} Axis;

// a single graph in the display window
typedef struct {
  Axis      axis[4];    /* coordinate axes */
  Label     label[8];   /* fixed axis labels */
  Graphdata data;       /* current graph data */

  Gobjects *objects;    /* graphic objects */    
  int      Nobjects;    

  Label    *textline;      /* placed text labels */
  int      Ntextline;      
} KapaGraphWidget;

// a single image in the display window
typedef struct {
  // picture components of the image element
  Picture  picture;	      // the primary view of the image
  Picture  zoom;	      // the zoom window
  Picture  wide;	      // the wide-view window
  Picture  cmapbar;	      // the colormap bar

  // the control buttons
  Button   PS_button;
  Button   recenter_button;
  Button   hms_button; /* toggle HMS/DECIMAL mode (DECIMAL_DEG macro) */
  Button   grey_button;
  Button   rainbow_button;
  Button    puns_button;
  Button   overlay_button[NOVERLAYS];

  // location of the status box
  int      text_x, text_y;
  int      text_dx, text_dy;
  int      location;	      // position of the zoom/status widgets (0 = none, 1-4 = bottom,left,top,right)
  int      MovePointer;
  int      DecimalDegrees;

  // data associated with this image element
  Overlay  overlay[NOVERLAYS];
  Overlay  tickmarks;
  Matrix   matrix;         /* data for picture */
  double   X, Y;           /* image pixel at screen center */
  int      expand;         /* zoomscale */
  double   zero, range;    /* zero, range for picture to cmap */
  double   max, min;       /* zero, range for data to z-value */
  double   start, slope;   /* zero, range for cmap to pixels */
  double   x, y, z;        /* last pointer coords */
  Coords   coords;
  char     file[1024];     /* name of file */
  char     name[1024];  /* name of buffer */
} KapaImageWidget;

typedef struct {
  KapaGraphWidget *graph;
  KapaImageWidget *image;
  float  x,  y;
  float dx, dy;
  char *name;
} Section;
