/* 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 <Python.h>
#include "sg_preferences_dialog.h"
#include "sg.h"
#include "sg_project_autosave.h"
#include "sg_config.h"
#include "python/python_main.h"
#include "python/python_int.h"
static void label_pos_apply(GtkWidget *widget,sg_config_info *info);
static void label_pos_init(GtkWidget *widget,sg_config_info *info);
static void label_width_apply(GtkWidget *widget,sg_config_info *info);
static void label_width_init(GtkWidget *widget,sg_config_info *info);
static void autosave_apply(GtkWidget *widget,sg_config_info *info);
static void autosave_init(GtkWidget *widget,sg_config_info *info);
static void compress_apply(GtkWidget *widget,sg_config_info *info);
static void compress_init(GtkWidget *widget,sg_config_info *info);
static void autoscale_init(GtkWidget *widget,sg_config_info *info);
static void autoscale_apply(GtkWidget *widget,sg_config_info *info);
static void show_plot_toolbar_init(GtkWidget *widget,sg_config_info *info);
static void show_plot_toolbar_apply(GtkWidget *widget,sg_config_info *info);
static void show_plot_menubar_init(GtkWidget *widget,sg_config_info *info);
static void show_plot_menubar_apply(GtkWidget *widget,sg_config_info *info);
static gchar *label_pos[] = {"Right",
"Bottom",
NULL
};
sg_menu_info label_pos_info={label_pos,&label_pos_init,&label_pos_apply};
sg_bound_int_info label_width_info={30,120,&label_width_init,&label_width_apply},
autosave_info={0,1440,&autosave_init,&autosave_apply},
autoscale_info={0,50,&autoscale_init,&autoscale_apply},
show_plot_toolbar_info={0,1,&show_plot_toolbar_init,&show_plot_toolbar_apply},
show_plot_menubar_info={0,1,&show_plot_menubar_init,&show_plot_menubar_apply},
compression_info={0,9,&compress_init,&compress_apply};
sg_config_info gen_var_info[]={
{ DIALOG_SEP,NULL,NULL,NULL,NULL,"Preferences"},
{ NOTEBOOK_START,NULL,NULL,NULL,NULL,NULL},
{ PAGE_SEP,NULL,NULL,NULL,NULL,"Icon lists"},
{ FRAME_START,NULL,NULL,NULL,NULL,NULL},
{ DICT_MENU,"label_pos", "maingui",(gpointer)&label_pos_info,NULL,"Label position"},
{ DICT_INT_BOUND_SLIDER,"label_width", "maingui",(gpointer)&label_width_info,NULL,"Label width (pixels)"},
{ PAGE_SEP,NULL,NULL,NULL,NULL,"Files"},
{ FRAME_START,NULL,NULL,NULL,NULL,NULL},
{ DICT_INT_BOUND,"save_interval", "file",(gpointer)&autosave_info,NULL,"Autosave frequency in minutes\n(0=off)"},
{ DICT_INT_BOUND_SLIDER,"compress_level", "file",(gpointer)&compression_info,NULL,"Compression level\n(0=none, 1=low, .. , 9=high)"},
{ PAGE_SEP,NULL,NULL,NULL,NULL,"Plot window"},
{ FRAME_START,NULL,NULL,NULL,NULL,"Autoscale Spacing (percent)"},
{ DICT_INT_BOUND_SLIDER,"autoscale_left", "plotgui",(gpointer)&autoscale_info,NULL,"Left"},
{ DICT_INT_BOUND_SLIDER,"autoscale_right", "plotgui",(gpointer)&autoscale_info,NULL,"Right"},
{ DICT_INT_BOUND_SLIDER,"autoscale_top", "plotgui",(gpointer)&autoscale_info,NULL,"Top"},
{ DICT_INT_BOUND_SLIDER,"autoscale_bottom", "plotgui",(gpointer)&autoscale_info,NULL,"Bottom"},
{ FRAME_START,NULL,NULL,NULL,NULL,"Plot window appearance"},
{ DICT_BOOLEAN,"show_toolbar", "plotgui",(gpointer)&show_plot_toolbar_info,NULL,"Show left toolbar"},
{ DICT_BOOLEAN,"show_menubar", "plotgui",(gpointer)&show_plot_menubar_info,NULL,"Show top toolbar"},
{ NOTEBOOK_END,NULL,NULL,NULL,NULL,NULL},
{ END_CONFIG,NULL,NULL,NULL,NULL,NULL}
};
static
void label_pos_init(GtkWidget *widget,sg_config_info *info)
{
gtk_list_select_item(GTK_LIST(GTK_COMBO(widget)->list),
sg_canvas_label_pos);
}
static
void label_pos_apply(GtkWidget *widget,sg_config_info *info)
{
GtkWidget *child;
gint mode;
child = (GtkWidget *)GTK_LIST(GTK_COMBO(widget)->list)->selection->data;
mode = gtk_list_child_position(GTK_LIST(GTK_COMBO(widget)->list),
child);
sg_config_set_value("label_pos", "maingui", PyInt_FromLong ((long) mode), TRUE);
sg_config_exec_commit(sg_config_get_config("label_pos", "maingui"));
}
static
void label_width_init(GtkWidget *widget,sg_config_info *info)
{
gtk_adjustment_set_value(GTK_RANGE(widget)->adjustment,
sg_canvas_label_width);
}
static
void label_width_apply(GtkWidget *widget,sg_config_info *info)
{
gint space;
space = GTK_RANGE(widget)->adjustment->value;
sg_config_set_value("label_width", "maingui", PyInt_FromLong ((long) space), TRUE);
sg_config_exec_commit(sg_config_get_config("label_width", "maingui"));
}
static
void autosave_init(GtkWidget *widget,sg_config_info *info)
{
gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget),
sg_autosave_interval);
}
static
void autosave_apply(GtkWidget *widget,sg_config_info *info)
{
gint minutes;
minutes = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
sg_config_set_value("save_interval", "file", PyInt_FromLong ((long)minutes), TRUE);
sg_config_exec_commit(sg_config_get_config("save_interval", "file"));
}
static
void compress_init(GtkWidget *widget,sg_config_info *info)
{
gtk_adjustment_set_value(GTK_RANGE(widget)->adjustment,
sg_compress_level);
}
static
void compress_apply(GtkWidget *widget,sg_config_info *info)
{
gint level;
level = GTK_RANGE(widget)->adjustment->value;
sg_config_set_value("compress_level", "file", PyInt_FromLong ((long)level), TRUE);
sg_config_exec_commit(sg_config_get_config("compress_level", "file"));
}
static
void autoscale_init(GtkWidget *widget,sg_config_info *info)
{
if (!strcmp(info->config_name,"autoscale_left"))
gtk_adjustment_set_value(GTK_RANGE(widget)->adjustment,
sg_autoscale_left);
else if (!strcmp(info->config_name,"autoscale_right"))
gtk_adjustment_set_value(GTK_RANGE(widget)->adjustment,
sg_autoscale_right);
if (!strcmp(info->config_name,"autoscale_top"))
gtk_adjustment_set_value(GTK_RANGE(widget)->adjustment,
sg_autoscale_top);
else if (!strcmp(info->config_name,"autoscale_bottom"))
gtk_adjustment_set_value(GTK_RANGE(widget)->adjustment,
sg_autoscale_bottom);
}
static
void autoscale_apply(GtkWidget *widget,sg_config_info *info)
{
gint level;
level = GTK_RANGE(widget)->adjustment->value;
sg_config_set_value(info->config_name, info->config_group, PyInt_FromLong ((long)level), TRUE);
sg_config_exec_commit(sg_config_get_config(info->config_name, info->config_group));
}
static
void show_plot_toolbar_init(GtkWidget *widget,sg_config_info *info)
{
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),sg_show_plot_toolbar);
}
static
void show_plot_toolbar_apply(GtkWidget *widget,sg_config_info *info)
{
gint show;
show = (gint)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
sg_config_set_value(info->config_name, info->config_group, PyInt_FromLong ((long)show), TRUE);
show=(gint)PyInt_AsLong(sg_config_get_value(info->config_name, info->config_group));
sg_config_exec_commit(sg_config_get_config(info->config_name, info->config_group));
}
static
void show_plot_menubar_init(GtkWidget *widget,sg_config_info *info)
{
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),sg_show_plot_menubar);
}
static
void show_plot_menubar_apply(GtkWidget *widget,sg_config_info *info)
{ gint show;
show = (gint)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
sg_config_set_value(info->config_name, info->config_group, PyInt_FromLong ((long)show), TRUE);
show=(gint)PyInt_AsLong(sg_config_get_value(info->config_name, info->config_group));
sg_config_exec_commit(sg_config_get_config(info->config_name, info->config_group));
}
void general_config_dialog(GtkWidget *widget, gpointer data)
{
sg_create_config_dialog(gen_var_info, &config_apply, &config_ok);
}
syntax highlighted by Code2HTML, v. 0.9.1