/* 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.
*/
#include <stdlib.h>
#include <gtk/gtk.h>
#include <gtkextra/gtkextra.h>
#include "sg_edit_dialog.h"
#include "sg_dataset.h"
#include "sg.h"
#define DATASET_NAME_LENGTH 100
static gint toggle_selection = 0;
static gint the_layer = 0;
static SGdataStyle data_style;
static SGdataset *the_dataset = NULL;
static GtkWidget *matrix_list;
static GtkWidget* dialog = NULL;
static GtkWidget *toggle_combo;
SGdataset *
sg_edit_3d_update()
{/* the widget is needed to use this func as callback */
GList *selection;
SGworksheet *matrix = NULL;
gint toggle_selection;
gint row;
selection = GTK_CLIST(matrix_list)->selection;
if(!selection) return NULL;
row = GPOINTER_TO_INT(selection->data);
matrix = (SGworksheet *)gtk_clist_get_row_data(GTK_CLIST(matrix_list), row);
if(!matrix) return NULL;
if(!the_dataset){
toggle_selection = sg_toggle_data_get_selection(toggle_combo);
if(the_layer == SG_LAYER_3D){
switch(toggle_selection){
case 1:
data_style = SG_STYLE_SURFACE;
the_dataset = sg_dataset_new(data_style);
break;
case 2:
data_style = SG_STYLE_CSURFACE;
the_dataset = sg_dataset_new(data_style);
break;
case 0:
default:
data_style = SG_STYLE_LPOINTS;
the_dataset = sg_dataset_new(data_style);
the_dataset->real_data->symbol.symbol_type = GTK_PLOT_SYMBOL_SQUARE;
the_dataset->real_data->line.line_style = GTK_PLOT_LINE_NONE;
break;
}
} else {
switch(toggle_selection){
case 1:
data_style = SG_STYLE_DMAP;
the_dataset = sg_dataset_new(data_style);
break;
case 2:
data_style = SG_STYLE_BUBBLES;
the_dataset = sg_dataset_new(data_style);
the_dataset->real_data->symbol.symbol_type = GTK_PLOT_SYMBOL_SQUARE;
the_dataset->real_data->line.line_style = GTK_PLOT_LINE_NONE;
the_dataset->real_data->iterator_mask = SG_STYLE_BUBBLES_MASK;
break;
case 3:
data_style = SG_STYLE_COLORS;
the_dataset = sg_dataset_new(data_style);
the_dataset->real_data->symbol.symbol_type = GTK_PLOT_SYMBOL_SQUARE;
the_dataset->real_data->line.line_style = GTK_PLOT_LINE_NONE;
the_dataset->real_data->iterator_mask = SG_STYLE_COLORS_MASK - GTK_PLOT_DATA_A;
break;
case 0:
default:
data_style = SG_STYLE_CONTOUR;
the_dataset = sg_dataset_new(data_style);
break;
}
}
}
sg_dataset_set_matrix(the_dataset, matrix);
return the_dataset;
}
GtkWidget *
sg_edit_3d_dialog (SGdataset *dataset, SGlayerType layer_type)
{
GtkWidget *frame, *vbox;
GtkWidget *label;
GtkWidget *table;
GtkWidget *box, *sw;
GtkWidget *entries_box;
GList *list;
GtkWidget *item;
SGworksheet *worksheet;
gint i;
gint toggle_selection;
the_dataset = dataset;
the_layer = layer_type;
if(dataset){
data_style = dataset->style;
} else {
data_style = (SGdataStyle)0;
}
/* Create widgets */
vbox = gtk_vbox_new(FALSE, 5);
/*********************************************************************/
box = gtk_hbox_new(TRUE, 5);
gtk_box_pack_start (GTK_BOX (vbox), box, FALSE, FALSE, 0);
label = gtk_label_new("Dataset Style:");
gtk_misc_set_alignment(GTK_MISC(label), 1., 0.);
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
if(layer_type == SG_LAYER_3D)
toggle_combo = sg_toggle_data_new(4);
else
toggle_combo = sg_toggle_data_new(5);
gtk_box_pack_start (GTK_BOX (box), toggle_combo, FALSE, FALSE, 0);
switch(data_style){
case SG_STYLE_SURFACE:
toggle_selection = 1;
break;
case SG_STYLE_CSURFACE:
toggle_selection = 2;
break;
case SG_STYLE_LPOINTS:
case SG_STYLE_BUBBLES:
default:
toggle_selection = 0;
break;
}
sg_toggle_data_init(toggle_combo, toggle_selection);
if(the_dataset){
gtk_widget_set_sensitive(toggle_combo, FALSE);
}else{
gtk_widget_set_sensitive(toggle_combo, TRUE);
}
/*********************************************************************/
frame = gtk_frame_new("Select Matrix");
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
entries_box = gtk_hbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(entries_box), 5);
gtk_container_add (GTK_CONTAINER (frame), entries_box);
sw = gtk_scrolled_window_new(NULL, NULL);
gtk_widget_set_usize(sw, 240, 160);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (entries_box), sw, FALSE, FALSE, 0);
matrix_list = gtk_clist_new(1);
gtk_container_add(GTK_CONTAINER(sw), matrix_list);
list = worksheets;
while(list){
SGworksheet *worksheet;
worksheet = (SGworksheet *)list->data;
if(worksheet->mode == SG_MODE_MATRIX){
gtk_clist_append(GTK_CLIST(matrix_list), &worksheet->name);
gtk_clist_set_row_data(GTK_CLIST(matrix_list), GTK_CLIST(matrix_list)->rows-1, list->data);
if(dataset && dataset->worksheet == worksheet){
gtk_clist_select_row(GTK_CLIST(matrix_list), GTK_CLIST(matrix_list)->rows-1, 0);
}
}
list = list->next;
}
/********************************************************************/
return vbox;
}
syntax highlighted by Code2HTML, v. 0.9.1