#ifndef _PARTIVIEW_H
#define _PARTIVIEW_H

/*
 * User-interface-related data for partiview, using FLTK.
 * Stuart Levy, slevy@ncsa.uiuc.edu
 * National Center for Supercomputing Applications,
 * University of Illinois 2001.
 * This file is part of partiview, released under the
 * Illinois Open Source License; see the file LICENSE.partiview for details.
 */

#ifdef WIN32
# include "winjunk.h"
#endif

#ifndef FLHACK
#include "Hist.H"
#include "Fl_Log_Slider.H"
#include "partipanel.H"
#include "Gview.H"
#include "Plot.H"
#include "specks.h"
#include "partiviewc.h"
#include "Fl_Scroll_Thin.H"
#else // FLHACK
#include "Gview.H"
#endif // FLHACK

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;

  float home[6];        //marx marx version 0.7.03 home is equivalent to a jump to a named point of view

  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  64
  Subcam sc[MAXSUBCAM];
  int subcam;

#ifndef FLHACK
  Fl_Double_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_Button* homejump;            //steven marx: version 0.7.03

  Fl_Value_Slider* slum;

  Fl_Group* slidergroup;          //steven marx: version 0.7.02 original slum slider overlaid by generic sliders
  Fl_Menu_Button* sldtype;        //steven marx: version 0.7.02  menu selectable sliders
  Fl_Value_Slider* genericslider; //steven marx: version 0.7.02  we change genericslider into the one we want (replaced by the following line)
  Fl_Button* linlog;             //steven marx: version 0.7.02 makes genericslider toggle linear <-> log 

  Fl_Light_Button* feed;
  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_Double_Window* hrdiagwin;
  Fl_Menu_Item* hrdiagon;
  Fl_Plot*  hrdiag;

  Fl_Gview *freewin;
  Fl_Gview *boundwin;
  Fl_Double_Window *freemain;
#endif // !FLHACK

  Fl_Gview* view;

  int detached;

  void (*drawtrace)();
};

extern struct _ppui  ppui;

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

#endif /*_PARTIVIEW_H*/