diff options
author | Christopher James Lahey <clahey@helixcode.com> | 2000-12-23 13:55:20 +0800 |
---|---|---|
committer | Chris Lahey <clahey@src.gnome.org> | 2000-12-23 13:55:20 +0800 |
commit | 51284ee84a6e135df27c957701bb6c580d5ecb73 (patch) | |
tree | cfca60d5d2867af645fe086b6bb74cd5ec04b153 /widgets/table | |
parent | 9c08224bb70a06686a8a67464bee5ea0b9204d73 (diff) | |
download | gsoc2013-evolution-51284ee84a6e135df27c957701bb6c580d5ecb73.tar.gz gsoc2013-evolution-51284ee84a6e135df27c957701bb6c580d5ecb73.tar.zst gsoc2013-evolution-51284ee84a6e135df27c957701bb6c580d5ecb73.zip |
Destroy text and pixbuf if they exist whether or not is_pixbuf is set.
2000-12-23 Christopher James Lahey <clahey@helixcode.com>
* e-table-col.c, e-table-col.h (etc_destroy): Destroy text and
pixbuf if they exist whether or not is_pixbuf is set.
(e_table_col_new_with_pixbuf): Make new_with_pixbuf take a title
argument which is for when you can't display pixmaps.
* e-table-column-specification.c
(e_table_column_specification_load_from_node): Don't translate the
pixbuf string attribute.
* e-table-sort-info.c, e-table-sort-info.h
(e_table_sort_info_load_from_node): Added a state_version
parameter to the load_from_node function. This lets the loader
specify which version of ETableState is being processed. If it's
less than .05, use the old nested version. If it's greater, use
the new flat version.
(e_table_sort_info_save_to_node): Changed this to store a list of
group and leaf nodes instead of nesting the group nodes and leaf
nodes one inside the other. This is much easier to understand and
requires less typing when creating a new ETableSpecification's
initial ETableState.
* e-table-state.c: Changed the state-version parameter to 0.1.
(e_table_state_load_from_node): Use
e_xml_get_double_prop_by_name_with_default so that we can specify
a state-version default of 0.1 for people writing ETableStates by
hand. Pass the state-version to e_table_sort_info_load_from_node.
* e-table.c (et_col_spec_to_col): Pass the title from the
ETableColumnSpecification to the ETableCol even if it's a pixbuf
column.
svn path=/trunk/; revision=7138
Diffstat (limited to 'widgets/table')
-rw-r--r-- | widgets/table/e-table-col.c | 8 | ||||
-rw-r--r-- | widgets/table/e-table-col.h | 3 | ||||
-rw-r--r-- | widgets/table/e-table-column-specification.c | 2 | ||||
-rw-r--r-- | widgets/table/e-table-sort-info.c | 51 | ||||
-rw-r--r-- | widgets/table/e-table-sort-info.h | 3 | ||||
-rw-r--r-- | widgets/table/e-table-state.c | 9 | ||||
-rw-r--r-- | widgets/table/e-table.c | 2 |
7 files changed, 51 insertions, 27 deletions
diff --git a/widgets/table/e-table-col.c b/widgets/table/e-table-col.c index f1f2fb452d..143c8a1693 100644 --- a/widgets/table/e-table-col.c +++ b/widgets/table/e-table-col.c @@ -30,9 +30,9 @@ etc_destroy (GtkObject *object) gtk_object_unref (GTK_OBJECT(etc->ecell)); - if (etc->is_pixbuf) + if (etc->pixbuf) gdk_pixbuf_unref (etc->pixbuf); - else + if (etc->text) g_free (etc->text); (*parent_class->destroy)(object); @@ -174,7 +174,7 @@ e_table_col_new (int col_idx, const char *text, double expansion, int min_width, * Returns: the newly created ETableCol object. */ ETableCol * -e_table_col_new_with_pixbuf (int col_idx, GdkPixbuf *pixbuf, double expansion, int min_width, +e_table_col_new_with_pixbuf (int col_idx, const char *text, GdkPixbuf *pixbuf, double expansion, int min_width, ECell *ecell, GCompareFunc compare, gboolean resizable) { ETableCol *etc; @@ -190,7 +190,7 @@ e_table_col_new_with_pixbuf (int col_idx, GdkPixbuf *pixbuf, double expansion, i etc->is_pixbuf = TRUE; etc->col_idx = col_idx; - etc->text = NULL; + etc->text = g_strdup(text); etc->pixbuf = pixbuf; etc->expansion = expansion; etc->min_width = min_width; diff --git a/widgets/table/e-table-col.h b/widgets/table/e-table-col.h index 012fa10267..fd15108ab9 100644 --- a/widgets/table/e-table-col.h +++ b/widgets/table/e-table-col.h @@ -50,7 +50,8 @@ ETableCol *e_table_col_new (int col_idx, const char *text, double expansion, int min_width, ECell *ecell, GCompareFunc compare, gboolean resizable); -ETableCol *e_table_col_new_with_pixbuf (int col_idx, GdkPixbuf *pixbuf, +ETableCol *e_table_col_new_with_pixbuf (int col_idx, const char *text, + GdkPixbuf *pixbuf, double expansion, int min_width, ECell *ecell, GCompareFunc compare, gboolean resizable); diff --git a/widgets/table/e-table-column-specification.c b/widgets/table/e-table-column-specification.c index 88604e03ea..c22bde9eef 100644 --- a/widgets/table/e-table-column-specification.c +++ b/widgets/table/e-table-column-specification.c @@ -80,7 +80,7 @@ e_table_column_specification_load_from_node (ETableColumnSpecification *etcs, etcs->model_col = e_xml_get_integer_prop_by_name(node, "model_col"); etcs->title_ = e_xml_get_translated_string_prop_by_name(node, "_title"); - etcs->pixbuf = e_xml_get_translated_string_prop_by_name(node, "pixbuf"); + etcs->pixbuf = e_xml_get_string_prop_by_name(node, "pixbuf"); etcs->expansion = e_xml_get_double_prop_by_name(node, "expansion"); etcs->minimum_width = e_xml_get_integer_prop_by_name(node, "minimum_width"); diff --git a/widgets/table/e-table-sort-info.c b/widgets/table/e-table-sort-info.c index bea5bde0eb..c7f5f12525 100644 --- a/widgets/table/e-table-sort-info.c +++ b/widgets/table/e-table-sort-info.c @@ -240,24 +240,42 @@ e_table_sort_info_new (void) void e_table_sort_info_load_from_node (ETableSortInfo *info, - xmlNode *node) + xmlNode *node, + gdouble state_version) { int i; xmlNode *grouping; - i = 0; - for (grouping = node->childs; grouping && !strcmp (grouping->name, "group"); grouping = grouping->childs) { - ETableSortColumn column; - column.column = e_xml_get_integer_prop_by_name (grouping, "column"); - column.ascending = e_xml_get_bool_prop_by_name (grouping, "ascending"); - e_table_sort_info_grouping_set_nth(info, i++, column); - } - i = 0; - for (; grouping && !strcmp (grouping->name, "leaf"); grouping = grouping->childs) { - ETableSortColumn column; - column.column = e_xml_get_integer_prop_by_name (grouping, "column"); - column.ascending = e_xml_get_bool_prop_by_name (grouping, "ascending"); - e_table_sort_info_sorting_set_nth(info, i++, column); + if (state_version <= 0.05) { + i = 0; + for (grouping = node->childs; grouping && !strcmp (grouping->name, "group"); grouping = grouping->childs) { + ETableSortColumn column; + column.column = e_xml_get_integer_prop_by_name (grouping, "column"); + column.ascending = e_xml_get_bool_prop_by_name (grouping, "ascending"); + e_table_sort_info_grouping_set_nth(info, i++, column); + } + i = 0; + for (; grouping && !strcmp (grouping->name, "leaf"); grouping = grouping->childs) { + ETableSortColumn column; + column.column = e_xml_get_integer_prop_by_name (grouping, "column"); + column.ascending = e_xml_get_bool_prop_by_name (grouping, "ascending"); + e_table_sort_info_sorting_set_nth(info, i++, column); + } + } else { + i = 0; + for (grouping = node->childs; grouping && !strcmp (grouping->name, "group"); grouping = grouping->next) { + ETableSortColumn column; + column.column = e_xml_get_integer_prop_by_name (grouping, "column"); + column.ascending = e_xml_get_bool_prop_by_name (grouping, "ascending"); + e_table_sort_info_grouping_set_nth(info, i++, column); + } + i = 0; + for (; grouping && !strcmp (grouping->name, "leaf"); grouping = grouping->next) { + ETableSortColumn column; + column.column = e_xml_get_integer_prop_by_name (grouping, "column"); + column.ascending = e_xml_get_bool_prop_by_name (grouping, "ascending"); + e_table_sort_info_sorting_set_nth(info, i++, column); + } } } @@ -272,11 +290,10 @@ e_table_sort_info_save_to_node (ETableSortInfo *info, const int group_count = e_table_sort_info_grouping_get_count (info); grouping = xmlNewChild (parent, NULL, "grouping", NULL); - node = grouping; for (i = 0; i < group_count; i++) { ETableSortColumn column = e_table_sort_info_grouping_get_nth(info, i); - xmlNode *new_node = xmlNewChild(node, NULL, "group", NULL); + xmlNode *new_node = xmlNewChild(grouping, NULL, "group", NULL); e_xml_set_integer_prop_by_name (new_node, "column", column.column); e_xml_set_bool_prop_by_name (new_node, "ascending", column.ascending); @@ -285,7 +302,7 @@ e_table_sort_info_save_to_node (ETableSortInfo *info, for (i = 0; i < sort_count; i++) { ETableSortColumn column = e_table_sort_info_sorting_get_nth(info, i); - xmlNode *new_node = xmlNewChild(node, NULL, "leaf", NULL); + xmlNode *new_node = xmlNewChild(grouping, NULL, "leaf", NULL); e_xml_set_integer_prop_by_name (new_node, "column", column.column); e_xml_set_bool_prop_by_name (new_node, "ascending", column.ascending); diff --git a/widgets/table/e-table-sort-info.h b/widgets/table/e-table-sort-info.h index 78ecbed29f..71822337b7 100644 --- a/widgets/table/e-table-sort-info.h +++ b/widgets/table/e-table-sort-info.h @@ -66,7 +66,8 @@ void e_table_sort_info_sorting_set_nth (ETableSortInfo *info, ETableSortInfo *e_table_sort_info_new (void); void e_table_sort_info_load_from_node (ETableSortInfo *info, - xmlNode *node); + xmlNode *node, + gdouble state_version); xmlNode *e_table_sort_info_save_to_node (ETableSortInfo *info, xmlNode *parent); diff --git a/widgets/table/e-table-state.c b/widgets/table/e-table-state.c index b36bbf41c7..5bfc9c390b 100644 --- a/widgets/table/e-table-state.c +++ b/widgets/table/e-table-state.c @@ -18,6 +18,8 @@ #define PARENT_TYPE (gtk_object_get_type()) +#define STATE_VERSION 0.1 + static GtkObjectClass *etst_parent_class; static void @@ -83,8 +85,11 @@ e_table_state_load_from_node (ETableState *state, { xmlNode *children; GList *list = NULL, *iterator; + gdouble state_version; int i; + state_version = e_xml_get_double_prop_by_name_with_default(node, "state-version", STATE_VERSION); + if (state->sort_info) gtk_object_unref(GTK_OBJECT(state->sort_info)); state->sort_info = NULL; @@ -97,7 +102,7 @@ e_table_state_load_from_node (ETableState *state, list = g_list_append(list, column); } else if (state->sort_info == NULL && !strcmp(children->name, "grouping")) { state->sort_info = e_table_sort_info_new(); - e_table_sort_info_load_from_node(state->sort_info, children); + e_table_sort_info_load_from_node(state->sort_info, children, state_version); } } g_free(state->columns); @@ -151,7 +156,7 @@ e_table_state_save_to_node (ETableState *state, else node = xmlNewNode (NULL, "ETableState"); - e_xml_set_double_prop_by_name(node, "state-version", 0.0); + e_xml_set_double_prop_by_name(node, "state-version", STATE_VERSION); for (i = 0; i < state->col_count; i++) { int column = state->columns[i]; diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c index 12a23bfdd7..5c7697c10a 100644 --- a/widgets/table/e-table.c +++ b/widgets/table/e-table.c @@ -660,7 +660,7 @@ et_col_spec_to_col (ETable *e_table, ETableColumnSpecification *col_spec, ETable pixbuf = e_table_extras_get_pixbuf(ete, col_spec->pixbuf); if (pixbuf) { - col = e_table_col_new_with_pixbuf (col_spec->model_col, pixbuf, + col = e_table_col_new_with_pixbuf (col_spec->model_col, col_spec->title_, pixbuf, col_spec->expansion, col_spec->minimum_width, cell, compare, col_spec->resizable); } |