From 96b07a2ff024c6e852344f4614735132219d2104 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 26 Jun 2013 19:02:43 -0400 Subject: ETableCol: Embed an ETableColumnSpecification. Eliminates a few redundant fields. --- e-util/e-cell-combo.c | 6 +-- e-util/e-cell-date-edit.c | 8 ++-- e-util/e-table-col.c | 89 +++++-------------------------------- e-util/e-table-col.h | 30 +++++-------- e-util/e-table-field-chooser-item.c | 19 ++++---- e-util/e-table-group-container.c | 13 +++--- e-util/e-table-header-item.c | 58 ++++++++---------------- e-util/e-table-header.c | 30 ++++++------- e-util/e-table-item.c | 28 +++++++----- e-util/e-table-sorter.c | 2 +- e-util/e-table-sorting-utils.c | 14 +++--- e-util/e-table-utils.c | 30 ++++--------- e-util/e-table.c | 19 ++++---- e-util/e-tree.c | 16 ++++--- e-util/gal-a11y-e-table-item.c | 15 ++++--- 15 files changed, 139 insertions(+), 238 deletions(-) (limited to 'e-util') diff --git a/e-util/e-cell-combo.c b/e-util/e-cell-combo.c index dba6b53c50..0252b3a2db 100644 --- a/e-util/e-cell-combo.c +++ b/e-util/e-cell-combo.c @@ -377,7 +377,7 @@ e_cell_combo_select_matching_item (ECellCombo *ecc) ecol = e_table_header_get_column (eti->header, ecp->popup_view_col); cell_text = e_cell_text_get_text ( ecell_text, ecv->e_table_model, - ecol->col_idx, ecp->popup_row); + ecol->spec->model_col, ecp->popup_row); model = gtk_tree_view_get_model (GTK_TREE_VIEW (ecc->popup_tree_view)); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (ecc->popup_tree_view)); @@ -811,13 +811,13 @@ e_cell_combo_update_cell (ECellCombo *ecc) old_text = e_cell_text_get_text ( ecell_text, ecv->e_table_model, - ecol->col_idx, ecp->popup_row); + ecol->spec->model_col, ecp->popup_row); /* If they are different, update the cell contents. */ if (old_text && strcmp (old_text, text)) { e_cell_text_set_value ( ecell_text, ecv->e_table_model, - ecol->col_idx, ecp->popup_row, text); + ecol->spec->model_col, ecp->popup_row, text); } e_cell_text_free_text (ecell_text, old_text); diff --git a/e-util/e-cell-date-edit.c b/e-util/e-cell-date-edit.c index 8b43bc9745..1e7642eb3d 100644 --- a/e-util/e-cell-date-edit.c +++ b/e-util/e-cell-date-edit.c @@ -518,7 +518,7 @@ e_cell_date_edit_set_popup_values (ECellDateEdit *ecde) cell_text = e_cell_text_get_text ( ecell_text, ecv->e_table_model, - ecol->col_idx, ecp->popup_row); + ecol->spec->model_col, ecp->popup_row); /* Try to parse just a date first. If the value is only a date, we * use a DATE value. */ @@ -952,16 +952,16 @@ e_cell_date_edit_update_cell (ECellDateEdit *ecde, old_text = e_cell_text_get_text ( ecell_text, ecv->e_table_model, - ecol->col_idx, ecp->popup_row); + ecol->spec->model_col, ecp->popup_row); /* If they are different, update the cell contents. */ if (strcmp (old_text, text)) { e_cell_text_set_value ( ecell_text, ecv->e_table_model, - ecol->col_idx, ecp->popup_row, text); + ecol->spec->model_col, ecp->popup_row, text); e_cell_leave_edit ( ecv, ecp->popup_view_col, - ecol->col_idx, ecp->popup_row, NULL); + ecol->spec->model_col, ecp->popup_row, NULL); } e_cell_text_free_text (ecell_text, old_text); diff --git a/e-util/e-table-col.c b/e-util/e-table-col.c index 4e5e18a5b6..8762e2c913 100644 --- a/e-util/e-table-col.c +++ b/e-util/e-table-col.c @@ -30,11 +30,6 @@ G_DEFINE_TYPE (ETableCol, e_table_col, G_TYPE_OBJECT) -enum { - PROP_0, - PROP_COMPARE_COL -}; - static void etc_load_icon (ETableCol *etc) { @@ -61,6 +56,8 @@ etc_dispose (GObject *object) { ETableCol *etc = E_TABLE_COL (object); + g_clear_object (&etc->spec); + if (etc->ecell) g_object_unref (etc->ecell); etc->ecell = NULL; @@ -79,82 +76,28 @@ etc_dispose (GObject *object) G_OBJECT_CLASS (e_table_col_parent_class)->dispose (object); } -static void -etc_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec) -{ - ETableCol *etc = E_TABLE_COL (object); - - switch (property_id) { - case PROP_COMPARE_COL: - etc->compare_col = g_value_get_int (value); - break; - default: - break; - } -} - -static void -etc_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec) -{ - ETableCol *etc = E_TABLE_COL (object); - - switch (property_id) { - case PROP_COMPARE_COL: - g_value_set_int (value, etc->compare_col); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - break; - } -} - static void e_table_col_class_init (ETableColClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); object_class->dispose = etc_dispose; - object_class->set_property = etc_set_property; - object_class->get_property = etc_get_property; - - g_object_class_install_property ( - object_class, - PROP_COMPARE_COL, - g_param_spec_int ( - "compare_col", - "Width", - "Width", - 0, G_MAXINT, 0, - G_PARAM_READWRITE)); } static void e_table_col_init (ETableCol *etc) { etc->width = 0; - etc->sortable = 1; - etc->groupable = 1; etc->justification = GTK_JUSTIFY_LEFT; - etc->priority = 0; } /** * e_table_col_new: - * @col_idx: the column we represent in the model + * @spec: an #ETableColumnSpecification * @text: a title for this column * @icon_name: name of the icon to be used for the header, or %NULL - * @expansion: FIXME - * @min_width: minimum width in pixels for this column * @ecell: the renderer to be used for this column * @compare: comparision function for the elements stored in this column - * @resizable: whether the column can be resized interactively by the user - * @priority: FIXME * * The ETableCol represents a column to be used inside an ETable. The * ETableCol objects are inserted inside an ETableHeader (which is just a @@ -177,43 +120,31 @@ e_table_col_init (ETableCol *etc) * Returns: the newly created ETableCol object. */ ETableCol * -e_table_col_new (gint col_idx, +e_table_col_new (ETableColumnSpecification *spec, const gchar *text, const gchar *icon_name, - gdouble expansion, - gint min_width, ECell *ecell, - GCompareDataFunc compare, - gboolean resizable, - gboolean disabled, - gint priority) + GCompareDataFunc compare) { ETableCol *etc; - g_return_val_if_fail (expansion >= 0, NULL); - g_return_val_if_fail (min_width >= 0, NULL); + g_return_val_if_fail (E_IS_TABLE_COLUMN_SPECIFICATION (spec), NULL); g_return_val_if_fail (ecell != NULL, NULL); g_return_val_if_fail (compare != NULL, NULL); g_return_val_if_fail (text != NULL, NULL); etc = g_object_new (E_TYPE_TABLE_COL, NULL); - etc->col_idx = col_idx; - etc->compare_col = col_idx; + etc->spec = g_object_ref (spec); etc->text = g_strdup (text); etc->icon_name = g_strdup (icon_name); etc->pixbuf = NULL; - etc->expansion = expansion; - etc->min_width = min_width; - etc->ecell = ecell; + etc->min_width = spec->minimum_width; + etc->expansion = spec->expansion; + etc->ecell = g_object_ref (ecell); etc->compare = compare; - etc->disabled = disabled; - etc->priority = priority; etc->selected = 0; - etc->resizable = resizable; - - g_object_ref (etc->ecell); if (etc->icon_name != NULL) etc_load_icon (etc); diff --git a/e-util/e-table-col.h b/e-util/e-table-col.h index 243aa04e7a..1f8d4b158b 100644 --- a/e-util/e-table-col.h +++ b/e-util/e-table-col.h @@ -31,6 +31,7 @@ #include #include +#include /* Standard GObject macros */ #define E_TYPE_TABLE_COL \ @@ -68,6 +69,8 @@ typedef struct _ETableColClass ETableColClass; struct _ETableCol { GObject parent; + ETableColumnSpecification *spec; + gchar *text; gchar *icon_name; GdkPixbuf *pixbuf; @@ -78,15 +81,7 @@ struct _ETableCol { GCompareDataFunc compare; ETableSearchFunc search; - guint selected : 1; - guint resizable : 1; - guint disabled : 1; - guint sortable : 1; - guint groupable : 1; - - gint col_idx; - gint compare_col; - gint priority; + gboolean selected; GtkJustification justification; @@ -97,17 +92,12 @@ struct _ETableColClass { GObjectClass parent_class; }; -GType e_table_col_get_type (void) G_GNUC_CONST; -ETableCol * e_table_col_new (gint col_idx, - const gchar *text, - const gchar *icon_name, - gdouble expansion, - gint min_width, - ECell *ecell, - GCompareDataFunc compare, - gboolean resizable, - gboolean disabled, - gint priority); +GType e_table_col_get_type (void) G_GNUC_CONST; +ETableCol * e_table_col_new (ETableColumnSpecification *spec, + const gchar *text, + const gchar *icon_name, + ECell *ecell, + GCompareDataFunc compare); G_END_DECLS diff --git a/e-util/e-table-field-chooser-item.c b/e-util/e-table-field-chooser-item.c index f4a85d6b83..592349ae57 100644 --- a/e-util/e-table-field-chooser-item.c +++ b/e-util/e-table-field-chooser-item.c @@ -100,7 +100,7 @@ etfci_find_button (ETableFieldChooserItem *etfci, ETableCol *ecol; ecol = e_table_header_get_column (etfci->combined_header, i); - if (ecol->disabled) + if (ecol->spec->disabled) continue; height += e_table_header_compute_height ( ecol, GTK_WIDGET (GNOME_CANVAS_ITEM (etfci)->canvas)); @@ -127,9 +127,10 @@ etfci_rebuild_combined (ETableFieldChooserItem *etfci) count = e_table_header_count (etfci->header); for (i = 0; i < count; i++) { ETableCol *ecol = e_table_header_get_column (etfci->header, i); - if (ecol->disabled) + if (ecol->spec->disabled) continue; - g_hash_table_add (hash, GINT_TO_POINTER (ecol->col_idx)); + g_hash_table_add ( + hash, GINT_TO_POINTER (ecol->spec->model_col)); } count = e_table_header_count (etfci->full_header); @@ -138,9 +139,9 @@ etfci_rebuild_combined (ETableFieldChooserItem *etfci) gpointer key; ecol = e_table_header_get_column (etfci->full_header, i); - key = GINT_TO_POINTER (ecol->col_idx); + key = GINT_TO_POINTER (ecol->spec->model_col); - if (ecol->disabled) + if (ecol->spec->disabled) continue; if (!g_hash_table_contains (hash, key)) @@ -170,7 +171,7 @@ etfci_reflow (GnomeCanvasItem *item, ETableCol *ecol; ecol = e_table_header_get_column (etfci->combined_header, i); - if (ecol->disabled) + if (ecol->spec->disabled) continue; height += e_table_header_compute_height ( ecol, GTK_WIDGET (GNOME_CANVAS_ITEM (etfci)->canvas)); @@ -509,7 +510,7 @@ etfci_draw (GnomeCanvasItem *item, ecol = e_table_header_get_column (etfci->combined_header, row); - if (ecol->disabled) + if (ecol->spec->disabled) continue; y2 += e_table_header_compute_height (ecol, GTK_WIDGET (canvas)); @@ -588,10 +589,10 @@ etfci_start_drag (ETableFieldChooserItem *etfci, ecol = e_table_header_get_column (etfci->combined_header, drag_col); - if (ecol->disabled) + if (ecol->spec->disabled) return; - etfci->drag_col = ecol->col_idx; + etfci->drag_col = ecol->spec->model_col; etfci_drag_types[0].target = g_strdup_printf ( "%s-%s", etfci_drag_types[0].target, etfci->dnd_code); diff --git a/e-util/e-table-group-container.c b/e-util/e-table-group-container.c index 6fe5898f9a..68239b123f 100644 --- a/e-util/e-table-group-container.c +++ b/e-util/e-table-group-container.c @@ -76,7 +76,7 @@ e_table_group_container_child_node_free (ETableGroupContainer *etgc, g_object_run_dispose (G_OBJECT (child)); e_table_model_free_value ( - etg->model, etgc->ecol->col_idx, + etg->model, etgc->ecol->spec->model_col, child_node->key); g_free (child_node->string); g_object_run_dispose (G_OBJECT (child_node->text)); @@ -515,9 +515,9 @@ create_child_node (ETableGroupContainer *etgc, G_CALLBACK (child_start_drag), etgc); child_node->child = child; child_node->key = e_table_model_duplicate_value ( - etg->model, etgc->ecol->col_idx, val); + etg->model, etgc->ecol->spec->model_col, val); child_node->string = e_table_model_value_to_string ( - etg->model, etgc->ecol->col_idx, val); + etg->model, etgc->ecol->spec->model_col, val); child_node->count = 0; return child_node; @@ -536,7 +536,8 @@ etgc_add (ETableGroup *etg, gpointer val; gint i = 0; - val = e_table_model_value_at (etg->model, etgc->ecol->col_idx, row); + val = e_table_model_value_at ( + etg->model, etgc->ecol->spec->model_col, row); for (; list; list = g_list_next (list), i++) { gint comp_val; @@ -592,14 +593,14 @@ etgc_add_array (ETableGroup *etg, cmp_cache = e_table_sorting_utils_create_cmp_cache (); lastval = e_table_model_value_at ( - etg->model, etgc->ecol->col_idx, array[0]); + etg->model, etgc->ecol->spec->model_col, array[0]); for (i = 1; i < count; i++) { gpointer val; gint comp_val; val = e_table_model_value_at ( - etg->model, etgc->ecol->col_idx, array[i]); + etg->model, etgc->ecol->spec->model_col, array[i]); comp_val = (*comp)(lastval, val, cmp_cache); if (comp_val != 0) { diff --git a/e-util/e-table-header-item.c b/e-util/e-table-header-item.c index 103ed3a807..ddbe7c8cfd 100644 --- a/e-util/e-table-header-item.c +++ b/e-util/e-table-header-item.c @@ -561,26 +561,6 @@ ethi_remove_destroy_marker (ETableHeaderItem *ethi) ethi->remove_item = NULL; } -#if 0 -static gboolean -moved (ETableHeaderItem *ethi, - guint col, - guint model_col) -{ - if (col == -1) - return TRUE; - ecol = e_table_header_get_column (ethi->eth, col); - if (ecol->col_idx == model_col) - return FALSE; - if (col > 0) { - ecol = e_table_header_get_column (ethi->eth, col - 1); - if (ecol->col_idx == model_col) - return FALSE; - } - return TRUE; -} -#endif - static void do_drag_motion (ETableHeaderItem *ethi, GdkDragContext *context, @@ -823,7 +803,7 @@ ethi_drag_data_received (GtkWidget *canvas, if (column >= 0) { for (i = 0; i < count; i++) { ETableCol *ecol = e_table_header_get_column (ethi->eth, i); - if (ecol->col_idx == column) { + if (ecol->spec->model_col == column) { e_table_header_move (ethi->eth, i, drop_col); found = TRUE; break; @@ -837,7 +817,7 @@ ethi_drag_data_received (GtkWidget *canvas, ecol = e_table_header_get_column ( ethi->full_header, i); - if (ecol->col_idx == column) { + if (ecol->spec->model_col == column) { e_table_header_add_column ( ethi->eth, ecol, drop_col); @@ -862,7 +842,7 @@ ethi_drag_data_get (GtkWidget *canvas, if (ethi->drag_col != -1) { ETableCol *ecol = e_table_header_get_column (ethi->eth, ethi->drag_col); - gchar *string = g_strdup_printf ("%d", ecol->col_idx); + gchar *string = g_strdup_printf ("%d", ecol->spec->model_col); gtk_selection_data_set ( selection_data, GDK_SELECTION_TYPE_STRING, @@ -1092,7 +1072,7 @@ ethi_draw (GnomeCanvasItem *item, x1 - x, -y, width, height, x2 - x1, ethi->height, (ETableColArrow) g_hash_table_lookup ( - arrows, GINT_TO_POINTER (ecol->col_idx))); + arrows, GINT_TO_POINTER (ecol->spec->model_col))); gtk_style_context_restore (context); } @@ -1176,7 +1156,7 @@ set_cursor (ETableHeaderItem *ethi, ETableCol *ecol = e_table_header_get_column (ethi->eth, col); /* Last column is not resizable */ - if (ecol->resizable && col != last_col) { + if (ecol->spec->resizable && col != last_col) { gint c = col + 1; /* Column is not resizable if all columns after it @@ -1185,7 +1165,7 @@ set_cursor (ETableHeaderItem *ethi, ETableCol *ecol2; ecol2 = e_table_header_get_column (ethi->eth, c); - if (ecol2->resizable) { + if (ecol2->spec->resizable) { resizable = TRUE; break; } @@ -1307,7 +1287,7 @@ ethi_start_drag (ETableHeaderItem *ethi, col_width, ethi->height, col_width, ethi->height, (ETableColArrow) g_hash_table_lookup ( - arrows, GINT_TO_POINTER (ecol->col_idx))); + arrows, GINT_TO_POINTER (ecol->spec->model_col))); gtk_drag_set_icon_surface (context, s); cairo_surface_destroy (s); @@ -1332,8 +1312,8 @@ ethi_popup_sort_ascending (GtkWidget *widget, ETableHeaderItem *ethi = info->ethi; col = e_table_header_get_column (ethi->eth, info->col); - if (col->sortable) - model_col = col->col_idx; + if (col->spec->sortable) + model_col = col->spec->model_col; length = e_table_sort_info_grouping_get_count (ethi->sort_info); for (i = 0; i < length; i++) { @@ -1388,8 +1368,8 @@ ethi_popup_sort_descending (GtkWidget *widget, ETableHeaderItem *ethi = info->ethi; col = e_table_header_get_column (ethi->eth, info->col); - if (col->sortable) - model_col = col->col_idx; + if (col->spec->sortable) + model_col = col->spec->model_col; length = e_table_sort_info_grouping_get_count (ethi->sort_info); for (i = 0; i < length; i++) { @@ -1452,7 +1432,7 @@ ethi_popup_group_field (GtkWidget *widget, ETableSortColumn column; col = e_table_header_get_column (ethi->eth, info->col); - model_col = col->col_idx; + model_col = col->spec->model_col; column.column = model_col; column.ascending = 1; @@ -1655,7 +1635,7 @@ sort_by_id (GtkWidget *menu_item, ETableSortColumn column; column = e_table_sort_info_sorting_get_nth (ethi->sort_info, 0); - clearfirst = ecol->sortable && ecol->col_idx != column.column; + clearfirst = ecol->spec->sortable && ecol->spec->model_col != column.column; } if (clearfirst) @@ -1740,8 +1720,8 @@ ethi_header_context_menu (ETableHeaderItem *ethi, { gchar *text = NULL; - if (!ethi->full_header->columns[ncol]->sortable || - ethi->full_header->columns[ncol]->disabled) + if (!ethi->full_header->columns[ncol]->spec->sortable || + ethi->full_header->columns[ncol]->spec->disabled) continue; if (ncol == sort_col) { @@ -1801,8 +1781,8 @@ ethi_change_sort_state (ETableHeaderItem *ethi, if (col == NULL) return; - if (col->sortable) - model_col = col->col_idx; + if (col->spec->sortable) + model_col = col->spec->model_col; length = e_table_sort_info_grouping_get_count (ethi->sort_info); for (i = 0; i < length; i++) { @@ -1965,7 +1945,7 @@ ethi_event (GnomeCanvasItem *item, */ ecol = e_table_header_get_column (ethi->eth, col); - if (!ecol->resizable) + if (!ecol->spec->resizable) break; ethi->resize_col = col; ethi->resize_start_pos = start - ecol->width; @@ -2047,7 +2027,7 @@ ethi_event (GnomeCanvasItem *item, popup = e_popup_menu_create_with_domain ( ethi_context_menu, 1 + - (ecol->sortable ? 0 : 2) + + (ecol->spec->sortable ? 0 : 2) + ((ethi->table || ethi->tree) ? 0 : 4) + ((e_table_header_count (ethi->eth) > 1) ? 0 : 8), ((e_table_sort_info_get_can_group ( diff --git a/e-util/e-table-header.c b/e-util/e-table-header.c index d06b26e147..546c8d1d3b 100644 --- a/e-util/e-table-header.c +++ b/e-util/e-table-header.c @@ -483,7 +483,7 @@ e_table_header_get_column_by_col_idx (ETableHeader *eth, g_return_val_if_fail (E_IS_TABLE_HEADER (eth), NULL); for (i = 0; i < eth->col_count; i++) { - if (eth->columns[i]->col_idx == col_idx) { + if (eth->columns[i]->spec->model_col == col_idx) { return eth->columns[i]; } } @@ -526,7 +526,7 @@ e_table_header_index (ETableHeader *eth, g_return_val_if_fail (E_IS_TABLE_HEADER (eth), -1); g_return_val_if_fail (col >= 0 && col < eth->col_count, -1); - return eth->columns[col]->col_idx; + return eth->columns[col]->spec->model_col; } /** @@ -746,7 +746,7 @@ eth_set_size (ETableHeader *eth, g_return_if_fail (idx < eth->col_count); /* If this column is not resizable, don't do anything. */ - if (!eth->columns[idx]->resizable) + if (!eth->columns[idx]->spec->resizable) return; expansion = 0; @@ -770,7 +770,7 @@ eth_set_size (ETableHeader *eth, */ for (; i < eth->col_count; i++) { min_width += eth->columns[i]->min_width + eth->width_extras; - if (eth->columns[i]->resizable) { + if (eth->columns[i]->spec->resizable) { expansion += eth->columns[i]->expansion; expandable_count++; } @@ -837,7 +837,7 @@ eth_set_size (ETableHeader *eth, */ if (old_expansion == 0) { for (i = idx + 1; i < eth->col_count; i++) { - if (eth->columns[idx]->resizable) { + if (eth->columns[idx]->spec->resizable) { /* expandable_count != 0 by (1) */ eth->columns[i]->expansion = expansion / expandable_count; } @@ -847,7 +847,7 @@ eth_set_size (ETableHeader *eth, } for (i = idx + 1; i < eth->col_count; i++) { - if (eth->columns[idx]->resizable) { + if (eth->columns[idx]->spec->resizable) { /* old_expansion != 0 by (2) */ eth->columns[i]->expansion *= expansion / old_expansion; } @@ -910,9 +910,9 @@ eth_calc_widths (ETableHeader *eth) expansion = 0; for (i = 0; i < eth->col_count; i++) { extra -= eth->columns[i]->min_width + eth->width_extras; - if (eth->columns[i]->resizable && eth->columns[i]->expansion > 0) + if (eth->columns[i]->spec->resizable && eth->columns[i]->expansion > 0) last_resizable = i; - expansion += eth->columns[i]->resizable ? eth->columns[i]->expansion : 0; + expansion += eth->columns[i]->spec->resizable ? eth->columns[i]->expansion : 0; widths[i] = eth->columns[i]->min_width + eth->width_extras; } if (eth->sort_info) @@ -921,7 +921,7 @@ eth_calc_widths (ETableHeader *eth) if (expansion != 0 && extra > 0) { for (i = 0; i < last_resizable; i++) { next_position += - extra * (eth->columns[i]->resizable ? + extra * (eth->columns[i]->spec->resizable ? eth->columns[i]->expansion : 0) / expansion; widths[i] += next_position - last_position; last_position = next_position; @@ -974,13 +974,13 @@ e_table_header_prioritized_column (ETableHeader *eth) count = e_table_header_count (eth); if (count == 0) return -1; - best_priority = e_table_header_get_column (eth, 0)->priority; - best_model_col = e_table_header_get_column (eth, 0)->col_idx; + best_priority = e_table_header_get_column (eth, 0)->spec->priority; + best_model_col = e_table_header_get_column (eth, 0)->spec->model_col; for (i = 1; i < count; i++) { - gint priority = e_table_header_get_column (eth, i)->priority; + gint priority = e_table_header_get_column (eth, i)->spec->priority; if (priority > best_priority) { best_priority = priority; - best_model_col = e_table_header_get_column (eth, i)->col_idx; + best_model_col = e_table_header_get_column (eth, i)->spec->model_col; } } return best_model_col; @@ -1002,9 +1002,9 @@ e_table_header_prioritized_column_selected (ETableHeader *eth, for (i = 1; i < count; i++) { ETableCol *col = e_table_header_get_column (eth, i); if (col) { - if ((best_col == NULL || col->priority > best_priority) + if ((best_col == NULL || col->spec->priority > best_priority) && check_func (col, user_data)) { - best_priority = col->priority; + best_priority = col->spec->priority; best_col = col; } } diff --git a/e-util/e-table-item.c b/e-util/e-table-item.c index 66477f5cba..c552922a34 100644 --- a/e-util/e-table-item.c +++ b/e-util/e-table-item.c @@ -206,14 +206,14 @@ view_to_model_row (ETableItem *eti, inline static gint model_to_view_col (ETableItem *eti, - gint col) + gint model_col) { gint i; - if (col == -1) + if (model_col == -1) return -1; for (i = 0; i < eti->cols; i++) { ETableCol *ecol = e_table_header_get_column (eti->header, i); - if (ecol->col_idx == col) + if (ecol->spec->model_col == model_col) return i; } return -1; @@ -221,10 +221,11 @@ model_to_view_col (ETableItem *eti, inline static gint view_to_model_col (ETableItem *eti, - gint col) + gint view_col) { - ETableCol *ecol = e_table_header_get_column (eti->header, col); - return ecol ? ecol->col_idx : -1; + ETableCol *ecol = e_table_header_get_column (eti->header, view_col); + + return (ecol != NULL) ? ecol->spec->model_col : -1; } static void @@ -2038,7 +2039,7 @@ eti_draw (GnomeCanvasItem *item, switch (eti->cursor_mode) { case E_CURSOR_SIMPLE: case E_CURSOR_SPREADSHEET: - if (cursor_col == ecol->col_idx && cursor_row == view_to_model_row (eti, row)) { + if (cursor_col == ecol->spec->model_col && cursor_row == view_to_model_row (eti, row)) { col_selected = !col_selected; cursor = TRUE; } @@ -2122,8 +2123,11 @@ eti_draw (GnomeCanvasItem *item, } e_cell_draw ( - ecell_view, cr, ecol->col_idx, col, row, flags, - xd, yd, xd + ecol->width, yd + height); + ecell_view, cr, + ecol->spec->model_col, + col, row, flags, + xd, yd, + xd + ecol->width, yd + height); if (!f_found && !selected) { switch (eti->cursor_mode) { @@ -3747,13 +3751,13 @@ e_table_item_calculate_print_widths (ETableHeader *eth, expansion = 0; for (i = 0; i < eth->col_count; i++) { extra -= eth->columns[i]->min_width * scale; - if (eth->columns[i]->resizable && eth->columns[i]->expansion > 0) + if (eth->columns[i]->spec->resizable && eth->columns[i]->expansion > 0) last_resizable = i; - expansion += eth->columns[i]->resizable ? eth->columns[i]->expansion : 0; + expansion += eth->columns[i]->spec->resizable ? eth->columns[i]->expansion : 0; widths[i] = eth->columns[i]->min_width * scale; } for (i = 0; i <= last_resizable; i++) { - widths[i] += extra * (eth->columns[i]->resizable ? eth->columns[i]->expansion : 0) / expansion; + widths[i] += extra * (eth->columns[i]->spec->resizable ? eth->columns[i]->expansion : 0) / expansion; } return widths; diff --git a/e-util/e-table-sorter.c b/e-util/e-table-sorter.c index e570042217..1342326c8f 100644 --- a/e-util/e-table-sorter.c +++ b/e-util/e-table-sorter.c @@ -149,7 +149,7 @@ table_sorter_sort (ETableSorter *table_sorter) col = e_table_header_get_column (table_sorter->full_header, e_table_header_count (table_sorter->full_header) - 1); for (i = 0; i < rows; i++) { - qd.vals[i * cols + j] = e_table_model_value_at (table_sorter->source, col->col_idx, i); + qd.vals[i * cols + j] = e_table_model_value_at (table_sorter->source, col->spec->model_col, i); } qd.compare[j] = col->compare; diff --git a/e-util/e-table-sorting-utils.c b/e-util/e-table-sorting-utils.c index b5e7930462..a8c5bcdf5e 100644 --- a/e-util/e-table-sorting-utils.c +++ b/e-util/e-table-sorting-utils.c @@ -59,9 +59,9 @@ etsu_compare (ETableModel *source, comp_val = (*col->compare) ( e_table_model_value_at ( - source, col->compare_col, row1), + source, col->spec->compare_col, row1), e_table_model_value_at ( - source, col->compare_col, row2), + source, col->spec->compare_col, row2), cmp_cache); if (column.ascending) sort_type = GTK_SORT_ASCENDING; @@ -173,7 +173,7 @@ e_table_sorting_utils_sort (ETableModel *source, } for (i = 0; i < rows; i++) { - closure.vals[map_table[i] * cols + j] = e_table_model_value_at (source, col->compare_col, map_table[i]); + closure.vals[map_table[i] * cols + j] = e_table_model_value_at (source, col->spec->compare_col, map_table[i]); } closure.compare[j] = col->compare; if (column.ascending) @@ -214,7 +214,7 @@ e_table_sorting_utils_affects_sort (ETableSortInfo *sort_info, col = e_table_header_get_column (full_header, last); } - if (compare_col == col->compare_col) + if (compare_col == col->spec->compare_col) return TRUE; } @@ -302,9 +302,9 @@ etsu_tree_compare (ETreeModel *source, comp_val = (*col->compare) ( e_tree_model_value_at ( - source, path1, col->compare_col), + source, path1, col->spec->compare_col), e_tree_model_value_at ( - source, path2, col->compare_col), + source, path2, col->spec->compare_col), cmp_cache); if (column.ascending) sort_type = GTK_SORT_ASCENDING; @@ -368,7 +368,7 @@ e_table_sorting_utils_tree_sort (ETreeModel *source, } for (i = 0; i < count; i++) { - closure.vals[i * cols + j] = e_tree_model_sort_value_at (source, map_table[i], col->compare_col); + closure.vals[i * cols + j] = e_tree_model_sort_value_at (source, map_table[i], col->spec->compare_col); } closure.compare[j] = col->compare; if (column.ascending) diff --git a/e-util/e-table-utils.c b/e-util/e-table-utils.c index 207da0c04c..3c598e38a9 100644 --- a/e-util/e-table-utils.c +++ b/e-util/e-table-utils.c @@ -104,39 +104,25 @@ et_col_spec_to_col (ETableColumnSpecification *col_spec, ete, col_spec->pixbuf); if (icon_name != NULL) { col = e_table_col_new ( - col_spec->model_col, + col_spec, title, icon_name, - col_spec->expansion, - col_spec->minimum_width, - cell, compare, - col_spec->resizable, - col_spec->disabled, - col_spec->priority); + cell, compare); } } if (col == NULL && col_spec->title && *col_spec->title) { col = e_table_col_new ( - col_spec->model_col, title, NULL, - col_spec->expansion, - col_spec->minimum_width, - cell, compare, - col_spec->resizable, - col_spec->disabled, - col_spec->priority); + col_spec, + title, NULL, + cell, compare); } - if (col) { + if (col != NULL) col->search = search; - col->sortable = col_spec->sortable; - } + g_free (title); } - if (col && col_spec->compare_col != col_spec->model_col) - g_object_set ( - col, - "compare_col", col_spec->compare_col, - NULL); + return col; } diff --git a/e-util/e-table.c b/e-util/e-table.c index 24ee13f38c..0aae2032b6 100644 --- a/e-util/e-table.c +++ b/e-util/e-table.c @@ -480,27 +480,29 @@ et_search_search (ETableSearch *search, if ((flags & E_TABLE_SEARCH_FLAGS_CHECK_CURSOR_FIRST) && cursor < rows && cursor >= 0 && - check_row (et, cursor, col->col_idx, col->search, string)) + check_row (et, cursor, col->spec->model_col, col->search, string)) return TRUE; cursor = e_sorter_model_to_sorted (E_SORTER (et->sorter), cursor); for (i = cursor + 1; i < rows; i++) { gint model_row = e_sorter_sorted_to_model (E_SORTER (et->sorter), i); - if (check_row (et, model_row, col->col_idx, col->search, string)) { + if (check_row (et, model_row, col->spec->model_col, col->search, string)) { e_selection_model_select_as_key_press ( E_SELECTION_MODEL (et->selection), - model_row, col->col_idx, GDK_CONTROL_MASK); + model_row, col->spec->model_col, + GDK_CONTROL_MASK); return TRUE; } } for (i = 0; i < cursor; i++) { gint model_row = e_sorter_sorted_to_model (E_SORTER (et->sorter), i); - if (check_row (et, model_row, col->col_idx, col->search, string)) { + if (check_row (et, model_row, col->spec->model_col, col->search, string)) { e_selection_model_select_as_key_press ( E_SELECTION_MODEL (et->selection), - model_row, col->col_idx, GDK_CONTROL_MASK); + model_row, col->spec->model_col, + GDK_CONTROL_MASK); return TRUE; } } @@ -510,7 +512,7 @@ et_search_search (ETableSearch *search, /* Check if the cursor row is the only matching row. */ return (!(flags & E_TABLE_SEARCH_FLAGS_CHECK_CURSOR_FIRST) && cursor < rows && cursor >= 0 && - check_row (et, cursor, col->col_idx, col->search, string)); + check_row (et, cursor, col->spec->model_col, col->search, string)); } static void @@ -526,7 +528,8 @@ et_search_accept (ETableSearch *search, g_object_get (et->selection, "cursor_row", &cursor, NULL); e_selection_model_select_as_key_press ( - E_SELECTION_MODEL (et->selection), cursor, col->col_idx, 0); + E_SELECTION_MODEL (et->selection), + cursor, col->spec->model_col, 0); } static void @@ -1691,7 +1694,7 @@ e_table_get_state_object (ETable *e_table) ETableCol *col = e_table_header_get_column (e_table->header, i); state->columns[i] = -1; for (j = 0; j < full_col_count; j++) { - if (col->col_idx == e_table_header_index (e_table->full_header, j)) { + if (col->spec->model_col == e_table_header_index (e_table->full_header, j)) { state->columns[i] = j; break; } diff --git a/e-util/e-tree.c b/e-util/e-tree.c index 91caea7c43..a8ccefcb5d 100644 --- a/e-util/e-tree.c +++ b/e-util/e-tree.c @@ -527,7 +527,8 @@ search_search_callback (ETreeModel *model, ETableCol *col = current_search_col (cb_data->tree); value = e_tree_model_value_at ( - model, path, cb_data->tree->priv->current_search_col->col_idx); + model, path, + cb_data->tree->priv->current_search_col->spec->model_col); return col->search (value, cb_data->string); } @@ -554,7 +555,8 @@ et_search_search (ETableSearch *search, if (cursor && (flags & E_TABLE_SEARCH_FLAGS_CHECK_CURSOR_FIRST)) { gconstpointer value; - value = e_tree_model_value_at (tree->priv->model, cursor, col->col_idx); + value = e_tree_model_value_at ( + tree->priv->model, cursor, col->spec->model_col); if (col->search (value, string)) { return TRUE; @@ -577,12 +579,14 @@ et_search_search (ETableSearch *search, e_selection_model_select_as_key_press ( E_SELECTION_MODEL (tree->priv->selection), - model_row, col->col_idx, GDK_CONTROL_MASK); + model_row, col->spec->model_col, + GDK_CONTROL_MASK); return TRUE; } else if (cursor && !(flags & E_TABLE_SEARCH_FLAGS_CHECK_CURSOR_FIRST)) { gconstpointer value; - value = e_tree_model_value_at (tree->priv->model, cursor, col->col_idx); + value = e_tree_model_value_at ( + tree->priv->model, cursor, col->spec->model_col); return col->search (value, string); } else @@ -603,7 +607,7 @@ et_search_accept (ETableSearch *search, e_selection_model_select_as_key_press ( E_SELECTION_MODEL (tree->priv->selection), - cursor, col->col_idx, 0); + cursor, col->spec->model_col, 0); } static void @@ -1394,7 +1398,7 @@ e_tree_get_state_object (ETree *tree) ETableCol *col = e_table_header_get_column (tree->priv->header, i); state->columns[i] = -1; for (j = 0; j < full_col_count; j++) { - if (col->col_idx == e_table_header_index (tree->priv->full_header, j)) { + if (col->spec->model_col == e_table_header_index (tree->priv->full_header, j)) { state->columns[i] = j; break; } diff --git a/e-util/gal-a11y-e-table-item.c b/e-util/gal-a11y-e-table-item.c index 9f5c407507..51bce1725b 100644 --- a/e-util/gal-a11y-e-table-item.c +++ b/e-util/gal-a11y-e-table-item.c @@ -134,10 +134,11 @@ view_to_model_row (ETableItem *eti, inline static gint view_to_model_col (ETableItem *eti, - gint col) + gint view_col) { - ETableCol *ecol = e_table_header_get_column (eti->header, col); - return ecol ? ecol->col_idx : -1; + ETableCol *ecol = e_table_header_get_column (eti->header, view_col); + + return (ecol != NULL) ? ecol->spec->model_col : -1; } inline static gint @@ -165,14 +166,14 @@ model_to_view_row (ETableItem *eti, inline static gint model_to_view_col (ETableItem *eti, - gint col) + gint model_col) { gint i; - if (col == -1) + if (model_col == -1) return -1; for (i = 0; i < eti->cols; i++) { ETableCol *ecol = e_table_header_get_column (eti->header, i); - if (ecol->col_idx == col) + if (ecol->spec->model_col == model_col) return i; } return -1; @@ -405,7 +406,7 @@ eti_ref_at (AtkTable *table, item, cell_view, ATK_OBJECT (table), - ecol->col_idx, + ecol->spec->model_col, column, row); if (ATK_IS_OBJECT (ret)) { -- cgit v1.2.3