/*  SciGraphica - Scientific graphics and data manipulation
 *  Copyright (C) 2001 Adrian E. Feiguin <feiguin@ifir.edu.ar>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#ifndef __SG_DATASET_H__
#define __SG_DATASET_H__

#include <gtk/gtk.h>
#include <gtkextra/gtkextra.h>
#include "sg_worksheet.h"

#define SG_DATASET(obj)        GTK_CHECK_CAST (obj, sg_dataset_get_type (), SGdataset)
#define GTK_TYPE_SG_DATASET   (sg_dataset_get_type ())

#define SG_DATASET_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, sg_dataset_get_type(), SGdatasetClass)
#define GTK_IS_SG_DATASET(obj)     GTK_CHECK_TYPE (obj, sg_dataset_get_type ())


typedef enum {
	SG_DATA_PYTHON,
	SG_DATA_FUNCTION,
	SG_DATA_COLUMNS,
	SG_DATA_MATRIX,
	SG_DATA_POINTS,
} SGdataType;

typedef enum {
	SG_STYLE_LPOINTS,  /* Regular XY dataset    */
	SG_STYLE_VBARS,    /* Vertical GtkPlotBar   */
	SG_STYLE_HBARS,    /* Horizontal GtkPlotBar */
	SG_STYLE_VBOXES,   /* Vertical GtkPlotBox   */
	SG_STYLE_HBOXES,   /* Horizontal GtkPlotBox */
	SG_STYLE_BUBBLES,  /* GtkPlotBubble         */
	SG_STYLE_FLUX,     /* GtkPlotFlux           */
	SG_STYLE_COLORS,   /* colored symbols       */
	SG_STYLE_DMAP,     /* GtkPlotDMap           */
	SG_STYLE_CONTOUR,  /* GtkPlotCSurface?      */
	SG_STYLE_CSURFACE, /* GtkPlotCSurface       */
	SG_STYLE_SURFACE,  /* GtkPlotSurface        */
} SGdataStyle;

#define  SG_STYLE_LPOINTS_MASK  GTK_PLOT_DATA_X | \
                                GTK_PLOT_DATA_Y | \
                                GTK_PLOT_DATA_DX | \
                                GTK_PLOT_DATA_DY | \
                                GTK_PLOT_DATA_LABELS
#define  SG_STYLE_VBARS_MASK    GTK_PLOT_DATA_X | \
                                GTK_PLOT_DATA_Y
#define  SG_STYLE_HBARS_MASK    GTK_PLOT_DATA_X | \
                                GTK_PLOT_DATA_Y
#define  SG_STYLE_VBOXES_MASK   GTK_PLOT_DATA_X | \
                                GTK_PLOT_DATA_Y | \
                                GTK_PLOT_DATA_Z | \
                                GTK_PLOT_DATA_DZ
#define  SG_STYLE_HBOXES_MASK   GTK_PLOT_DATA_X | \
                                GTK_PLOT_DATA_Y | \
                                GTK_PLOT_DATA_Z | \
                                GTK_PLOT_DATA_DZ
#define  SG_STYLE_BUBBLES_MASK  GTK_PLOT_DATA_X | \
                                GTK_PLOT_DATA_Y | \
                                GTK_PLOT_DATA_A
#define  SG_STYLE_FLUX_MASK     GTK_PLOT_DATA_X | \
                                GTK_PLOT_DATA_Y | \
                                GTK_PLOT_DATA_DX | \
                                GTK_PLOT_DATA_DY | \
                                GTK_PLOT_DATA_DA
#define  SG_STYLE_COLORS_MASK   GTK_PLOT_DATA_X | \
                                GTK_PLOT_DATA_Y | \
                                GTK_PLOT_DATA_A | \
                                GTK_PLOT_DATA_DA
#define  SG_STYLE_CONTOUR_MASK  GTK_PLOT_DATA_X | \
                                GTK_PLOT_DATA_Y | \
                                GTK_PLOT_DATA_Z


typedef struct _SGdataset SGdataset;
typedef struct _SGdatasetClass SGdatasetClass;


struct _SGdataset 
{
  GtkObject object;

  gint id;

  SGworksheet *worksheet;
  gint x;
  gint y;
  gint z;
  gint a;
  gint dx;
  gint dy;
  gint dz;
  gint da;
  gint l;

  GtkPlotData *real_data;

  SGdataType type;
  SGdataStyle style;

  gchar *exp;

  gchar *p_exp[9];

  gint ref_count;
};

struct _SGdatasetClass 
{
  GtkObjectClass parent_class;
};

GtkType		sg_dataset_get_type		(void);
SGdataset*	sg_dataset_new			(SGdataStyle style); 
SGdataset*      sg_dataset_new_function         (gchar *exp);
SGdataset*      sg_dataset_new_python           (SGdataStyle style,
						 gchar *p_exp[9]);
SGdataset*	sg_dataset_clone		(SGdataset *dataset);
void		sg_dataset_set_worksheet	(SGdataset *dataset,
						 SGworksheet *worksheet, 
				 	 	 gint col_x,
					 	 gint col_y,
					 	 gint col_z,
					 	 gint col_a,
					 	 gint col_ex,
					 	 gint col_ey,
					 	 gint col_ez,
					 	 gint col_ea,
					 	 gint col_l);
void		sg_dataset_set_matrix		(SGdataset *dataset,
						 SGworksheet *matrix); 
void		sg_dataset_add_point		(SGdataset *dataset,
						 gdouble *x,
						 gdouble *y,
						 gdouble *z,
						 gdouble *a,
						 gdouble *ex,
						 gdouble *ey,
						 gdouble *ez,
						 gdouble *ea,
						 gchar *label); 
void		sg_dataset_refresh		(SGdataset *dataset); 
void		sg_dataset_free_points		(SGdataset *dataset); 
void		sg_dataset_set_name		(SGdataset *dataset,
						 gchar *name); 
void            sg_dataset_set_exp              (SGdataset *dataset,
                                                 gchar *exp);
void            sg_dataset_set_python           (SGdataset *dataset,
                                                 gchar *p_exp[9]);

#endif /* __SG_DATASET_H__ */



syntax highlighted by Code2HTML, v. 0.9.1