aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/table
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/table')
-rw-r--r--widgets/table/e-table-group-container.c7
-rw-r--r--widgets/table/e-table-header.c23
-rw-r--r--widgets/table/e-table-header.h66
-rw-r--r--widgets/table/e-table-sorted-variable.c10
-rw-r--r--widgets/table/e-table-sorter.c5
5 files changed, 69 insertions, 42 deletions
diff --git a/widgets/table/e-table-group-container.c b/widgets/table/e-table-group-container.c
index 5e2b86c800..194e744f8c 100644
--- a/widgets/table/e-table-group-container.c
+++ b/widgets/table/e-table-group-container.c
@@ -118,10 +118,9 @@ e_table_group_container_construct (GnomeCanvasGroup *parent, ETableGroupContaine
ETableCol *col;
ETableSortColumn column = e_table_sort_info_grouping_get_nth(sort_info, n);
- if (column.column > e_table_header_count (full_header))
+ col = e_table_header_get_column_by_col_idx(full_header, column.column);
+ if (col == NULL)
col = e_table_header_get_column (full_header, e_table_header_count (full_header) - 1);
- else
- col = e_table_header_get_column (full_header, column.column);
e_table_group_construct (parent, E_TABLE_GROUP (etgc), full_header, header, model);
etgc->ecol = col;
@@ -401,7 +400,9 @@ etgc_add (ETableGroup *etg, gint row)
"cursor_mode", etgc->cursor_mode,
"table_selection_model", etgc->table_selection_model,
"length_threshold", etgc->length_threshold,
+ "minimum_width", etgc->minimum_width - GROUP_INDENT,
NULL);
+
gtk_signal_connect (GTK_OBJECT (child), "cursor_change",
GTK_SIGNAL_FUNC (child_cursor_change), etgc);
gtk_signal_connect (GTK_OBJECT (child), "double_click",
diff --git a/widgets/table/e-table-header.c b/widgets/table/e-table-header.c
index 6c1431863a..3f2a363c94 100644
--- a/widgets/table/e-table-header.c
+++ b/widgets/table/e-table-header.c
@@ -373,6 +373,29 @@ e_table_header_get_column (ETableHeader *eth, int column)
}
/**
+ * e_table_header_get_column_by_col_id:
+ * @eth: the ETableHeader to query
+ * @col_id: the col_id to search for.
+ *
+ * Returns: The ETableCol with col_idx = @col_idx in the @eth object
+ */
+ETableCol *
+e_table_header_get_column_by_col_idx (ETableHeader *eth, int col_idx)
+{
+ int i;
+ g_return_val_if_fail (eth != NULL, NULL);
+ 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) {
+ return eth->columns [i];
+ }
+ }
+
+ return NULL;
+}
+
+/**
* e_table_header_count:
* @eth: the ETableHeader to query
*
diff --git a/widgets/table/e-table-header.h b/widgets/table/e-table-header.h
index 34d79e6b11..6476c25d47 100644
--- a/widgets/table/e-table-header.h
+++ b/widgets/table/e-table-header.h
@@ -43,36 +43,42 @@ typedef struct {
int (*request_width) (ETableHeader *eth, int col);
} ETableHeaderClass;
-GtkType e_table_header_get_type (void);
-ETableHeader *e_table_header_new (void);
-
-void e_table_header_add_column (ETableHeader *eth,
- ETableCol *tc, int pos);
-ETableCol * e_table_header_get_column (ETableHeader *eth,
- int column);
-int e_table_header_count (ETableHeader *eth);
-int e_table_header_index (ETableHeader *eth,
- int col);
-int e_table_header_get_index_at (ETableHeader *eth,
- int x_offset);
-ETableCol **e_table_header_get_columns (ETableHeader *eth);
-
-int e_table_header_get_selected (ETableHeader *eth);
-int e_table_header_total_width (ETableHeader *eth);
-void e_table_header_move (ETableHeader *eth,
- int source_index,
- int target_index);
-void e_table_header_remove (ETableHeader *eth, int idx);
-void e_table_header_set_size (ETableHeader *eth, int idx, int size);
-void e_table_header_set_selection (ETableHeader *eth,
- gboolean allow_selection);
-
-int e_table_header_col_diff (ETableHeader *eth,
- int start_col, int end_col);
-
-void e_table_header_calc_widths (ETableHeader *eth);
-
-GList *e_table_header_get_selected_indexes (ETableHeader *eth);
+GtkType e_table_header_get_type (void);
+ETableHeader *e_table_header_new (void);
+
+void e_table_header_add_column (ETableHeader *eth,
+ ETableCol *tc,
+ int pos);
+ETableCol *e_table_header_get_column (ETableHeader *eth,
+ int column);
+ETableCol *e_table_header_get_column_by_col_idx (ETableHeader *eth,
+ int col_idx);
+int e_table_header_count (ETableHeader *eth);
+int e_table_header_index (ETableHeader *eth,
+ int col);
+int e_table_header_get_index_at (ETableHeader *eth,
+ int x_offset);
+ETableCol **e_table_header_get_columns (ETableHeader *eth);
+int e_table_header_get_selected (ETableHeader *eth);
+
+int e_table_header_total_width (ETableHeader *eth);
+void e_table_header_move (ETableHeader *eth,
+ int source_index,
+ int target_index);
+void e_table_header_remove (ETableHeader *eth,
+ int idx);
+void e_table_header_set_size (ETableHeader *eth,
+ int idx,
+ int size);
+void e_table_header_set_selection (ETableHeader *eth,
+ gboolean allow_selection);
+int e_table_header_col_diff (ETableHeader *eth,
+ int start_col,
+ int end_col);
+
+void e_table_header_calc_widths (ETableHeader *eth);
+GList *e_table_header_get_selected_indexes (ETableHeader *eth);
+
#endif /* _E_TABLE_HEADER_H_ */
diff --git a/widgets/table/e-table-sorted-variable.c b/widgets/table/e-table-sorted-variable.c
index 5fd747eaff..216bc8dd4d 100644
--- a/widgets/table/e-table-sorted-variable.c
+++ b/widgets/table/e-table-sorted-variable.c
@@ -133,10 +133,9 @@ etsv_compare(ETableSortedVariable *etsv, int row1, int row2)
for (j = 0; j < sort_count; j++) {
ETableSortColumn column = e_table_sort_info_sorting_get_nth(etsv->sort_info, j);
ETableCol *col;
- if (column.column > e_table_header_count (etsv->full_header))
+ col = e_table_header_get_column_by_col_idx(etsv->full_header, column.column);
+ if (col == NULL)
col = e_table_header_get_column (etsv->full_header, e_table_header_count (etsv->full_header) - 1);
- else
- col = e_table_header_get_column (etsv->full_header, column.column);
comp_val = (*col->compare)(e_table_model_value_at (etss->source, col->col_idx, row1),
e_table_model_value_at (etss->source, col->col_idx, row2));
ascending = column.ascending;
@@ -640,10 +639,9 @@ etsv_sort(ETableSortedVariable *etsv)
for (j = 0; j < cols; j++) {
ETableSortColumn column = e_table_sort_info_sorting_get_nth(etsv->sort_info, j);
ETableCol *col;
- if (column.column > e_table_header_count (etsv->full_header))
+ col = e_table_header_get_column_by_col_idx(etsv->full_header, column.column);
+ if (col == NULL)
col = e_table_header_get_column (etsv->full_header, e_table_header_count (etsv->full_header) - 1);
- else
- col = e_table_header_get_column (etsv->full_header, column.column);
for (i = 0; i < rows; i++) {
#if 0
if( !(i & 0xff) ) {
diff --git a/widgets/table/e-table-sorter.c b/widgets/table/e-table-sorter.c
index 2f6db12622..cf878c56ca 100644
--- a/widgets/table/e-table-sorter.c
+++ b/widgets/table/e-table-sorter.c
@@ -463,10 +463,9 @@ ets_sort(ETableSorter *ets)
else
column = e_table_sort_info_sorting_get_nth(ets->sort_info, j - group_cols);
- if (column.column > e_table_header_count (ets->full_header))
+ col = e_table_header_get_column_by_col_idx(ets->full_header, column.column);
+ if (col == NULL)
col = e_table_header_get_column (ets->full_header, e_table_header_count (ets->full_header) - 1);
- else
- col = e_table_header_get_column (ets->full_header, column.column);
for (i = 0; i < rows; i++) {
vals_closure[i * cols + j] = e_table_model_value_at (ets->source, col->col_idx, i);