aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/table/e-table-specification.c
diff options
context:
space:
mode:
authorMiguel de Icaza <miguel@gnu.org>2001-01-16 07:25:42 +0800
committerMiguel de Icaza <miguel@src.gnome.org>2001-01-16 07:25:42 +0800
commitfeccdbccfbf9fa1c4d2f8b4d50da3a764d475089 (patch)
tree3363907f161a30cf7ea9160e288c529396559d6d /widgets/table/e-table-specification.c
parentc152134378a6567dd69d6570017fc2ab1cb37f52 (diff)
downloadgsoc2013-evolution-feccdbccfbf9fa1c4d2f8b4d50da3a764d475089.tar
gsoc2013-evolution-feccdbccfbf9fa1c4d2f8b4d50da3a764d475089.tar.gz
gsoc2013-evolution-feccdbccfbf9fa1c4d2f8b4d50da3a764d475089.tar.bz2
gsoc2013-evolution-feccdbccfbf9fa1c4d2f8b4d50da3a764d475089.tar.lz
gsoc2013-evolution-feccdbccfbf9fa1c4d2f8b4d50da3a764d475089.tar.xz
gsoc2013-evolution-feccdbccfbf9fa1c4d2f8b4d50da3a764d475089.tar.zst
gsoc2013-evolution-feccdbccfbf9fa1c4d2f8b4d50da3a764d475089.zip
Document all entry points. (e_table_specification_save_to_file): Change
2001-01-15 Miguel de Icaza <miguel@gnu.org> * e-table-specification.c: Document all entry points. (e_table_specification_save_to_file): Change prototype to return the number of bytes written. (e_table_specification_duplicate): Implement a function to duplicate nodes. (e_table_specification_save_to_node): Implement missing function. (e_table_specification_save_to_file): Enable. (e_table_specification_save_to_string): Enable. (e_table_specification_load_from_node): Just load the normal version of the click-to-add-message version, let other code translate it. (e_table_specification_load_from_string): Alter prototype to return success code. * e-table-specification.h: Do not store the translated version, store the plain version, so we can restore this later during the saving routines. * e-table.c (et_real_construct): Translate click to add message here. * e-table-header-item.c: Destroy config object if we are destroyed. svn path=/trunk/; revision=7518
Diffstat (limited to 'widgets/table/e-table-specification.c')
-rw-r--r--widgets/table/e-table-specification.c272
1 files changed, 201 insertions, 71 deletions
diff --git a/widgets/table/e-table-specification.c b/widgets/table/e-table-specification.c
index e562f85ccb..1a630e7c5c 100644
--- a/widgets/table/e-table-specification.c
+++ b/widgets/table/e-table-specification.c
@@ -2,10 +2,11 @@
/*
* E-table-specification.c: Implements a savable description of the inital state of a table.
*
- * Author:
- * Chris Lahey <clahey@helixcode.com>
+ * Authors:
+ * Chris Lahey <clahey@ximian.com>
+ * Miguel de Icaza (miguel@ximian.com)
*
- * (C) 2000 Helix Code, Inc.
+ * (C) 2000, 2001 Ximian, Inc.
*/
#include <config.h>
#include <stdlib.h>
@@ -16,7 +17,7 @@
#include "gal/util/e-xml-utils.h"
#include "e-table-specification.h"
-#define PARENT_TYPE (gtk_object_get_type())
+#define PARENT_TYPE (gtk_object_get_type ())
static GtkObjectClass *etsp_parent_class;
@@ -30,16 +31,16 @@ etsp_destroy (GtkObject *object)
for (i = 0; etsp->columns[i]; i++) {
gtk_object_unref (GTK_OBJECT (etsp->columns[i]));
}
- g_free(etsp->columns);
+ g_free (etsp->columns);
}
if (etsp->state)
- gtk_object_unref(GTK_OBJECT(etsp->state));
- g_free(etsp->click_to_add_message_);
+ gtk_object_unref (GTK_OBJECT (etsp->state));
+ g_free (etsp->click_to_add_message);
- etsp->columns = NULL;
- etsp->state = NULL;
- etsp->click_to_add_message_ = NULL;
+ etsp->columns = NULL;
+ etsp->state = NULL;
+ etsp->click_to_add_message = NULL;
GTK_OBJECT_CLASS (etsp_parent_class)->destroy (object);
}
@@ -64,11 +65,19 @@ etsp_init (ETableSpecification *etsp)
etsp->cursor_mode = E_TABLE_CURSOR_SIMPLE;
etsp->selection_mode = GTK_SELECTION_MULTIPLE;
- etsp->click_to_add_message_ = NULL;
+ etsp->click_to_add_message = NULL;
}
-E_MAKE_TYPE(e_table_specification, "ETableSpecification", ETableSpecification, etsp_class_init, etsp_init, PARENT_TYPE);
+E_MAKE_TYPE (e_table_specification, "ETableSpecification", ETableSpecification, etsp_class_init, etsp_init, PARENT_TYPE);
+/**
+ * e_table_specification_new:
+ *
+ * Creates a new %ETableSpecification object. This object is used to hold the
+ * information about the rendering information for ETable.
+ *
+ * Returns: a newly created %ETableSpecification object.
+ */
ETableSpecification *
e_table_specification_new (void)
{
@@ -77,132 +86,253 @@ e_table_specification_new (void)
return (ETableSpecification *) etsp;
}
+/**
+ * e_table_specification_load_from_file:
+ * @specification: An ETableSpecification that you want to modify
+ * @filename: a filename that contains an ETableSpecification
+ *
+ * This routine modifies @specification to reflect the state described
+ * by the file @filename.
+ *
+ * Returns: TRUE on success, FALSE on failure.
+ */
gboolean
-e_table_specification_load_from_file (ETableSpecification *specification,
- const char *filename)
+e_table_specification_load_from_file (ETableSpecification *specification,
+ const char *filename)
{
xmlDoc *doc;
doc = xmlParseFile (filename);
if (doc) {
- xmlNode *node = xmlDocGetRootElement(doc);
- e_table_specification_load_from_node(specification, node);
- xmlFreeDoc(doc);
+ xmlNode *node = xmlDocGetRootElement (doc);
+ e_table_specification_load_from_node (specification, node);
+ xmlFreeDoc (doc);
return TRUE;
}
return FALSE;
}
-void
-e_table_specification_load_from_string (ETableSpecification *specification,
- const char *xml)
+/**
+ * e_table_specification_load_from_string:
+ * @specification: An ETableSpecification that you want to modify
+ * @xml: a stringified representation of an ETableSpecification description.
+ *
+ * This routine modifies @specification to reflect the state described
+ * by @xml. @xml is typically returned by e_table_specification_save_to_string
+ * or it can be embedded in your source code.
+ *
+ * Returns: TRUE on success, FALSE on failure.
+ */
+gboolean
+e_table_specification_load_from_string (ETableSpecification *specification,
+ const char *xml)
{
xmlDoc *doc;
- doc = xmlParseMemory ((char *) xml, strlen(xml));
+ doc = xmlParseMemory ( (char *) xml, strlen (xml));
if (doc) {
- xmlNode *node = xmlDocGetRootElement(doc);
- e_table_specification_load_from_node(specification, node);
- xmlFreeDoc(doc);
+ xmlNode *node = xmlDocGetRootElement (doc);
+ e_table_specification_load_from_node (specification, node);
+ xmlFreeDoc (doc);
+ return TRUE;
}
+
+ return FALSE;
}
+/**
+ * e_table_specification_load_from_node:
+ * @specification: An ETableSpecification that you want to modify
+ * @node: an xmlNode with an XML ETableSpecification description.
+ *
+ * This routine modifies @specification to reflect the state described
+ * by @node.
+ */
void
-e_table_specification_load_from_node (ETableSpecification *specification,
- const xmlNode *node)
+e_table_specification_load_from_node (ETableSpecification *specification,
+ const xmlNode *node)
{
char *temp;
xmlNode *children;
GList *list = NULL, *list2;
int i;
- specification->no_headers = e_xml_get_bool_prop_by_name(node, "no-headers");
- specification->click_to_add = e_xml_get_bool_prop_by_name(node, "click-to-add");
- specification->draw_grid = e_xml_get_bool_prop_by_name(node, "draw-grid");
+ specification->no_headers = e_xml_get_bool_prop_by_name (node, "no-headers");
+ specification->click_to_add = e_xml_get_bool_prop_by_name (node, "click-to-add");
+ specification->draw_grid = e_xml_get_bool_prop_by_name (node, "draw-grid");
specification->selection_mode = GTK_SELECTION_MULTIPLE;
- temp = e_xml_get_string_prop_by_name(node, "selection-mode");
- if (temp && !strcasecmp(temp, "single")) {
+ temp = e_xml_get_string_prop_by_name (node, "selection-mode");
+ if (temp && !strcasecmp (temp, "single")) {
specification->selection_mode = GTK_SELECTION_SINGLE;
- } else if (temp && !strcasecmp(temp, "browse")) {
+ } else if (temp && !strcasecmp (temp, "browse")) {
specification->selection_mode = GTK_SELECTION_BROWSE;
- } else if (temp && !strcasecmp(temp, "extended")) {
+ } else if (temp && !strcasecmp (temp, "extended")) {
specification->selection_mode = GTK_SELECTION_EXTENDED;
}
- g_free(temp);
+ g_free (temp);
specification->cursor_mode = E_TABLE_CURSOR_SIMPLE;
- temp = e_xml_get_string_prop_by_name(node, "cursor-mode");
- if (temp && !strcasecmp(temp, "line")) {
+ temp = e_xml_get_string_prop_by_name (node, "cursor-mode");
+ if (temp && !strcasecmp (temp, "line")) {
specification->cursor_mode = E_TABLE_CURSOR_LINE;
}
- g_free(temp);
-
- g_free(specification->click_to_add_message_);
+ g_free (temp);
+ g_free (specification->click_to_add_message);
- specification->click_to_add_message_ = e_xml_get_translated_string_prop_by_name(node, "_click-to-add-message");
+ specification->click_to_add_message =
+ e_xml_get_string_prop_by_name (
+ node, "_click-to-add-message");
if (specification->state)
- gtk_object_unref(GTK_OBJECT(specification->state));
+ gtk_object_unref (GTK_OBJECT (specification->state));
specification->state = NULL;
if (specification->columns) {
for (i = 0; specification->columns[i]; i++) {
- gtk_object_unref(GTK_OBJECT(specification->columns[i]));
+ gtk_object_unref (GTK_OBJECT (specification->columns[i]));
}
- g_free(specification->columns);
+ g_free (specification->columns);
}
specification->columns = NULL;
for (children = node->xmlChildrenNode; children; children = children->next) {
- if (!strcmp(children->name, "ETableColumn")) {
- ETableColumnSpecification *col_spec = e_table_column_specification_new();
-
- e_table_column_specification_load_from_node(col_spec, children);
- list = g_list_append(list, col_spec);
- } else if (specification->state == NULL && !strcmp(children->name, "ETableState")) {
- specification->state = e_table_state_new();
- e_table_state_load_from_node(specification->state, children);
+ if (!strcmp (children->name, "ETableColumn")) {
+ ETableColumnSpecification *col_spec = e_table_column_specification_new ();
+
+ e_table_column_specification_load_from_node (col_spec, children);
+ list = g_list_append (list, col_spec);
+ } else if (specification->state == NULL && !strcmp (children->name, "ETableState")) {
+ specification->state = e_table_state_new ();
+ e_table_state_load_from_node (specification->state, children);
}
}
- specification->columns = g_new(ETableColumnSpecification *, g_list_length(list) + 1);
- for (list2 = list, i = 0; list2; list2 = g_list_next(list2), i++) {
+ specification->columns = g_new (ETableColumnSpecification *, g_list_length (list) + 1);
+ for (list2 = list, i = 0; list2; list2 = g_list_next (list2), i++) {
specification->columns[i] = list2->data;
}
specification->columns[i] = NULL;
- g_list_free(list);
+ g_list_free (list);
}
-#if 0
-void
-e_table_specification_save_to_file (ETableSpecification *specification,
- const char *filename)
+/**
+ * e_table_specification_save_to_file:
+ * @specification: An %ETableSpecification that you want to save
+ * @filename: a file name to store the specification.
+ *
+ * This routine stores the @specification into @filename.
+ *
+ * Returns: the number of bytes written or -1 on error.
+ */
+int
+e_table_specification_save_to_file (ETableSpecification *specification,
+ const char *filename)
{
xmlDoc *doc;
- doc = xmlNewDoc(NULL);
- xmlDocSetRootElement(doc, e_table_specification_save_to_node(specification, doc));
- xmlSaveFile(filename, doc);
+
+ doc = xmlNewDoc (NULL);
+ xmlDocSetRootElement (doc, e_table_specification_save_to_node (specification, doc));
+ return xmlSaveFile (filename, doc);
}
+/**
+ * e_table_specification_save_to_string:
+ * @specification: An %ETableSpecification that you want to stringify
+ *
+ * Saves the state of @specification to a string.
+ *
+ * Returns: an g_alloc() allocated string containing the stringified
+ * representation of @specification. This stringified representation
+ * uses XML as a convenience.
+ */
char *
-e_table_specification_save_to_string (ETableSpecification *specification)
+e_table_specification_save_to_string (ETableSpecification *specification)
{
char *ret_val;
xmlChar *string;
int length;
xmlDoc *doc;
- doc = xmlNewDoc(NULL);
- xmlDocSetRootElement(doc, e_table_specification_save_to_node(specification, doc));
- xmlDocDumpMemory(doc, &string, &length);
+ doc = xmlNewDoc (NULL);
+ xmlDocSetRootElement (doc, e_table_specification_save_to_node (specification, doc));
+ xmlDocDumpMemory (doc, &string, &length);
- ret_val = g_strdup(string);
- xmlFree(string);
+ ret_val = g_strdup (string);
+ xmlFree (string);
return ret_val;
}
+/**
+ * e_table_specification_save_to_node:
+ * @specification: An ETableSpecification that you want to store.
+ * @doc: Node where the specification is saved
+ *
+ * This routine saves the %ETableSpecification state in the object @specification
+ * into the xmlDoc represented by @doc.
+ *
+ * Returns: The node that has been attached to @doc with the contents
+ * of the ETableSpecification.
+ */
xmlNode *
-e_table_specification_save_to_node (ETableSpecification *specification,
- xmlDoc *doc)
+e_table_specification_save_to_node (ETableSpecification *specification,
+ xmlDoc *doc)
{
- return NULL;
+ xmlNode *node = xmlDocGetRootElement (doc);
+ char *s;
+
+ e_xml_set_bool_prop_by_name (node, "no-headers", specification->no_headers);
+ e_xml_set_bool_prop_by_name (node, "click-to-add", specification->click_to_add);
+ e_xml_set_bool_prop_by_name (node, "draw-grid", specification->draw_grid);
+
+ switch (specification->selection_mode){
+ case GTK_SELECTION_SINGLE:
+ s = "single";
+ break;
+ case GTK_SELECTION_BROWSE:
+ s = "browse";
+ break;
+ default:
+ case GTK_SELECTION_EXTENDED:
+ s = "extended";
+ }
+ xmlSetProp (node, "selection-mode", s);
+ if (specification->cursor_mode == E_TABLE_CURSOR_LINE)
+ s = "line";
+ else
+ s = "cell";
+ xmlSetProp (node, "cursor-mode", s);
+
+ xmlSetProp (node, "_click-to-add-message", specification->click_to_add_message);
+
+ if (specification->columns){
+ int i;
+
+ for (i = 0; specification->columns [i]; i++)
+ e_table_column_specification_save_to_node (
+ specification->columns [i],
+ node);
+ }
+
+ if (specification->state)
+ e_table_state_save_to_node (specification->state, node);
+
+ return node;
+}
+
+/**
+ * e_table_specification_duplicate:
+ * @spec: specification to duplicate
+ *
+ * This creates a copy of the %ETableSpecification @spec
+ *
+ * Returns: The duplicated %ETableSpecification.
+ */
+ETableSpecification *
+e_table_specification_duplicate (ETableSpecification *spec)
+{
+ ETableSpecification *new_spec = e_table_specification_new ();
+ char *spec_str = e_table_specification_save_to_string (spec);
+
+ printf ("This is the spec: \n%s\n", spec_str);
+ e_table_specification_load_from_string (new_spec, spec_str);
+
+ return new_spec;
}
-#endif