From bf794358e25773ec43a6f3dbb98cd019779e0e2f Mon Sep 17 00:00:00 2001 From: Miguel de Icaza Date: Fri, 31 Mar 2000 04:49:36 +0000 Subject: More work svn path=/trunk/; revision=2266 --- widgets/table/e-table-config.c | 168 ++++++++++++++++++++++++++++++++++++- widgets/table/e-table-config.glade | 84 +++++++++---------- widgets/table/e-table-sort-info.c | 30 +------ widgets/table/e-table.c | 3 + 4 files changed, 211 insertions(+), 74 deletions(-) (limited to 'widgets/table') diff --git a/widgets/table/e-table-config.c b/widgets/table/e-table-config.c index da7dde1990..8367a727c1 100644 --- a/widgets/table/e-table-config.c +++ b/widgets/table/e-table-config.c @@ -9,7 +9,7 @@ */ #include #include -#inclued +#include #include "e-util/e-util.h" #include "e-util/e-xml-utils.h" #include "e-util/e-canvas.h" @@ -19,6 +19,112 @@ #include "e-table-item.h" #include "e-table-group.h" +typedef struct { + GladeXML *gui; + char *old_spec; +} ConfigData; + +static void +load_data (GladeXML *xml, char *label_widget, const char *content) +{ + GtkLabel *label = GTK_LABEL (glade_xml_get_widget (xml, label_widget)); + + gtk_label_set_text (label, content); +} + +static char * +get_fields (ETable *etable) +{ + xmlNode *xmlRoot, *xmlColumns; + xmlNode *column; + GString *res; + char *s; + + res = g_string_new (""); + xmlRoot = xmlDocGetRootElement (xmlSpec); + xmlColumns = e_xml_get_child_by_name (xmlRoot, "columns-shown"); + + for (column = xmlColumns->childs; column; column = column->next){ + ETableCol *ecol; + int col = atoi (colum->childs->content); + + ecol = e_table_header_get_column (etable->header, col); + + g_string_append (res, text); + if (column->next) + g_string_appen (res, ", "); + } + s = res->str; + g_string_free (res, FALSE); + + return s; +} + +static char * +get_grouping (ETable *etable) +{ + return g_strdup ("None"); +} + +static char * +get_sort (ETable *etable) +{ + return g_strdup ("None"); +} + +static char * +get_filter (ETable *etable) +{ + return g_strdup ("None"); +} + +/* + * Loads a user-readable definition of the various e-table parameters + * into the dialog for configuring it + */ +static void +load_label_data (GladeXML *gui, ETabel *etable) +{ + GtkWidget *l; + char *s; + + s = get_fields (etable); + load_data (gui, "label1", s); + g_free (s); + + s = get_grouping (etable); + load_data (gui, "label2", s); + g_free (s); + + s = get_sort (etable); + load_data (gui, "label3", s); + g_free (s); + + s = get_filter (etable); + load_data (gui, "label4", s); + g_free (s); +} + +static void +cb_button_fields (GtkWidget *widget, ETable *etable) +{ +} + +static void +cb_button_grouping (GtkWidget *widget, ETable *etable) +{ +} + +static void +cb_button_sort (GtkWidget *widget, ETable *etable) +{ +} + +static void +cb_button_filter (GtkWidget *widget, ETable *etable) +{ +} + GtkWidget * e_table_gui_config (ETable *etable) { @@ -30,12 +136,70 @@ e_table_gui_config (ETable *etable) return NULL; dialog = GNOME_DIALOG (glade_xml_get_widget (gui, "e-table-config")); + + gtk_signal_connect ( + GTK_OBJECT (glade_xml_get_widget (gui, "button-fields")), + "clicked", GTK_SIGNAL_FUNC (cb_button_fields), etable); + gtk_signal_connect ( + GTK_OBJECT (glade_xml_get_widget (gui, "button-grouping")), + "clicked", GTK_SIGNAL_FUNC (cb_button_grouping), etable); + gtk_signal_connect ( + GTK_OBJECT (glade_xml_get_widget (gui, "button-sort")), + "clicked", GTK_SIGNAL_FUNC (cb_button_sort), etable); + gtk_signal_connect ( + GTK_OBJECT (glade_xml_get_widget (gui, "button-filter")), + "clicked", GTK_SIGNAL_FUNC (cb_button_filter), etable); + + load_label_data (etable); + + gtk_object_set_data ( + GTK_OBJECT (dialog), "config-data", + config_data); + + return dialog; +} + +static void +e_table_gui_destroy_config_data (GtkWidget *widget) +{ + ConfigData *cd = gtk_object_get_data (GTK_OBJECT (widget), "config-data"); + + g_free (cd->old_spec); + gtk_object_destroy (cd->gui); + g_free (cd); +} + +void +e_table_gui_config_accept (GtkWidget *widget, ETable *etable) +{ + e_table_gui_destroy_config_data (widget); } +void +e_table_gui_config_cancel (GtkWidget *widget, ETable *etable) +{ + e_table_gui_destroy_config_data (widget); +} void -e_table_do_gui_config (ETable *etable) +e_table_do_gui_config (GtkWidget *parent, ETable *etable) { + GnomeDialog *dialog; + int r; + + dialog = GNOME_DIALOG (e_table_gui_config (etable)); + if (!dialog) + return; + + if (parent) + gnome_dialog_set_parent (dialog, parent); + + r = gnome_dialog_run (GNOME_DIALOG (dialog)); + + if (r == -1 || r == 1) + e_table_gui_config_cancel (GTK_WIDGET (dialog), etable); + else + e_table_gui_config_accept (GTK_WIDGET (dialog), etable); } diff --git a/widgets/table/e-table-config.glade b/widgets/table/e-table-config.glade index 176a8c3ab7..8affa8cefa 100644 --- a/widgets/table/e-table-config.glade +++ b/widgets/table/e-table-config.glade @@ -10,17 +10,9 @@ C True True - False False False False - True - interface.c - interface.h - callbacks.c - callbacks.h - support.c - support.h True e-table-config.glade.h @@ -50,6 +42,40 @@ True + + GtkHButtonBox + GnomeDialog:action_area + dialog-action_area2 + GTK_BUTTONBOX_END + 0 + 85 + 27 + 7 + 0 + + 0 + False + True + GTK_PACK_END + + + + GtkButton + button12 + True + True + GNOME_STOCK_BUTTON_OK + + + + GtkButton + button14 + True + True + GNOME_STOCK_BUTTON_CANCEL + + + GtkFrame top-frame @@ -75,7 +101,7 @@ GtkButton - button3 + button-fields True @@ -96,7 +122,7 @@ GtkButton - button4 + button-groups True @@ -117,7 +143,7 @@ GtkButton - button5 + button-sort True @@ -138,7 +164,7 @@ GtkButton - button6 + button-filter True @@ -262,40 +288,6 @@ - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area2 - GTK_BUTTONBOX_END - 0 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button12 - True - True - GNOME_STOCK_BUTTON_OK - - - - GtkButton - button14 - True - True - GNOME_STOCK_BUTTON_CANCEL - - diff --git a/widgets/table/e-table-sort-info.c b/widgets/table/e-table-sort-info.c index 9e8d6e8228..bf90a13602 100644 --- a/widgets/table/e-table-sort-info.c +++ b/widgets/table/e-table-sort-info.c @@ -11,10 +11,11 @@ #include #include #include "e-table-sort-info.h" +#include "e-util/e-util.h" #define ETM_CLASS(e) ((ETableSortInfoClass *)((GtkObject *)e)->klass) -#define PARENT_TYPE gtk_object_get_type (); +#define PARENT_TYPE gtk_object_get_type () static GtkObjectClass *e_table_sort_info_parent_class; @@ -81,31 +82,8 @@ e_table_sort_info_class_init (GtkObjectClass *object_class) GTK_ARG_READWRITE, ARG_GROUPING); } - -guint -e_table_sort_info_get_type (void) -{ - static guint type = 0; - - if (!type) - { - GtkTypeInfo info = - { - "ETableSortInfo", - sizeof (ETableSortInfo), - sizeof (ETableSortInfoClass), - (GtkClassInitFunc) e_table_sort_info_class_init, - NULL, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - type = gtk_type_unique (gtk_object_get_type (), &info); - } - - return type; -} +E_MAKE_TYPE(e_table_sort_info, "ETableSortInfo", ETableSortInfo, + e_table_sort_info_class_init, NULL, PARENT_TYPE); void e_table_sort_info_changed (ETableSortInfo *e_table_sort_info) diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c index fbf0dbfa67..7360666d06 100644 --- a/widgets/table/e-table.c +++ b/widgets/table/e-table.c @@ -104,6 +104,7 @@ e_table_make_header (ETable *e_table, ETableHeader *full_header, xmlNode *xmlCol const int max_cols = e_table_header_count (full_header); nh = e_table_header_new (); + for (column = xmlColumns->childs; column; column = column->next) { int col = atoi (column->childs->content); @@ -881,6 +882,7 @@ e_table_get_specification (ETable *e_table) xmlDoc *doc = et_build_tree (e_table); xmlChar *buffer; gint size; + xmlDocDumpMemory (doc, &buffer, &size); @@ -892,6 +894,7 @@ void e_table_save_specification (ETable *e_table, gchar *filename) { xmlDoc *doc = et_build_tree (e_table); + xmlSaveFile (filename, doc); xmlFreeDoc (doc); } -- cgit v1.2.3