#ifndef _PARTIVIEW_H
#define _PARTIVIEW_H

#ifdef WIN32
# include <windows.h>
#endif

#include "Hist.H"
#include "Fl_Log_Slider.H"
#include "partipanel.H"
#include "Gview.H"
#include "Plot.H"
#include "specks.h"
#include "partiviewc.h"

typedef struct subcam {
  char name[8];
  float azim, elev, roll;
  float nleft, right, ndown, up;
} Subcam;

struct _ppui {
  struct stuff *st;

  struct wfpath path;
  char *snapfmt;
  int snapfno;
  float censize;
  float pickrange;
  char *reqwinsize;

  SClock *clk;		/* master data clock */
  SClock *camclock;	/* camera animation clock */
    int playing;
    int playevery;
    int playidling;
    float playspeed;
    int framebase;
    float playtimebase;
    int playloop;

  double timebasetime;

#define MAXSUBCAM  32
  Subcam sc[MAXSUBCAM];
  int subcam;

  Fl_Window* mainwin;

  class Fl_Tile* maintile;
  Fl_Group* topclump;
  Fl_Group* toprow;
  Fl_Pack*  objtogs;
  Fl_Group* objgroup;
  Fl_Menu_Button* more;
  Fl_Menu_Button* obj;
  Fl_Menu_Button* nav;
  Fl_Menu_Item* inertiaon;
  Fl_Light_Button* point;
  Fl_Light_Button* poly;
  Fl_Light_Button* label;
  Fl_Light_Button* texture;
  Fl_Light_Button* box;
  Fl_Value_Slider* slum;

  Fl_Menu_Button* playmenu;

  Fl_Group* steprow;
  Fl_Button* step[2];
  Fl_Button* runstop[2];
  Fl_Input* timestep;
  Fl_Roller* jog;
  Fl_Button* settrip;
  Fl_Button* backtrip;
  Fl_Input* timebase;
  Fl_Log_Slider* stepspeed;

  Fl_Group* animrow;
  Fl_Button* rdata;
  Fl_Button* play;
  Fl_Counter* playframe;
  Fl_Value_Slider* playtime;

  Hist *cmdhist;
  HistInput *cmd;

  Fl_Gview* view;

  Fl_Window* hrdiagwin;
  Fl_Menu_Item* hrdiagon;
  Fl_Plot*  hrdiag;
};

struct parser {
  int (*parsefunc)( struct stuff **stp, int argc, char *argv[], void *etc );
  char *whose;			// name
  void *etc;			// client data
  struct parser *next;
};

extern struct parser *parsers;

extern struct _ppui  ppui;

extern void ppui_refresh( struct stuff * );
extern int specks_commandfmt( struct stuff **, const char *fmt, ... );

#endif /*_PARTIVIEW_H*/