diff options
Diffstat (limited to 'widgets/table')
-rw-r--r-- | widgets/table/e-cell-text.c | 18 | ||||
-rw-r--r-- | widgets/table/e-cell-text.h | 5 | ||||
-rw-r--r-- | widgets/table/e-table-item.c | 2 |
3 files changed, 21 insertions, 4 deletions
diff --git a/widgets/table/e-cell-text.c b/widgets/table/e-cell-text.c index a354efde13..d7ef682fde 100644 --- a/widgets/table/e-cell-text.c +++ b/widgets/table/e-cell-text.c @@ -73,6 +73,7 @@ enum { ARG_ELLIPSIS, ARG_STRIKEOUT_COLUMN, ARG_BOLD_COLUMN, + ARG_TEXT_FILTER, }; @@ -1045,7 +1046,13 @@ ect_height (ECellView *ecell_view, int model_col, int view_col, int row) GdkFont *font; font = text_view->font; - return (font->ascent + font->descent) * number_of_lines(e_table_model_value_at (ecell_view->e_table_model, model_col, row)) + TEXT_PAD; + if (text_view->filter) { + char *string = text_view->filter(e_table_model_value_at (ecell_view->e_table_model, model_col, row)); + int value = (font->ascent + font->descent) * number_of_lines(string) + TEXT_PAD; + g_free(string); + return value; + } else + return (font->ascent + font->descent) * number_of_lines(e_table_model_value_at (ecell_view->e_table_model, model_col, row)) + TEXT_PAD; } /* @@ -1055,7 +1062,7 @@ static void * ect_enter_edit (ECellView *ecell_view, int model_col, int view_col, int row) { ECellTextView *text_view = (ECellTextView *) ecell_view; - const char *str = e_table_model_value_at (ecell_view->e_table_model, model_col, row); + char *str; CellEdit *edit; edit = g_new (CellEdit, 1); @@ -1096,7 +1103,12 @@ ect_enter_edit (ECellView *ecell_view, int model_col, int view_col, int row) edit->pointer_in = FALSE; edit->default_cursor_shown = TRUE; - edit->old_text = g_strdup (str); + if (ect->filter) { + str = ect->filter(e_table_model_value_at (ecell_view->e_table_model, model_col, row)); + edit->old_text = str; + } else { + edit->old_text = g_strdup (str); + } edit->cell.text = g_strdup (str); #if 0 diff --git a/widgets/table/e-cell-text.h b/widgets/table/e-cell-text.h index dc8d8300bf..59b6558157 100644 --- a/widgets/table/e-cell-text.h +++ b/widgets/table/e-cell-text.h @@ -27,6 +27,9 @@ #include <libgnomeui/gnome-canvas.h> #include "e-cell.h" +/* Should return a malloced object. */ +typedef char *(*ECellTextFilter) (void *); + #define E_CELL_TEXT_TYPE (e_cell_text_get_type ()) #define E_CELL_TEXT(o) (GTK_CHECK_CAST ((o), E_CELL_TEXT_TYPE, ECellText)) #define E_CELL_TEXT_CLASS(k) (GTK_CHECK_CLASS_CAST((k), E_CELL_TEXT_TYPE, ECellTextClass)) @@ -50,6 +53,8 @@ typedef struct { int strikeout_column; int bold_column; + + ECellTextFilter *filter; } ECellText; typedef struct { diff --git a/widgets/table/e-table-item.c b/widgets/table/e-table-item.c index 1a10363fcc..90fcfdb7b1 100644 --- a/widgets/table/e-table-item.c +++ b/widgets/table/e-table-item.c @@ -1410,7 +1410,7 @@ eti_class_init (GtkObjectClass *object_class) GTK_ARG_READABLE, ARG_HEIGHT); gtk_object_add_arg_type ("ETableItem::has_cursor", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_HAS_CURSOR); - gtk_object_add_arg_type ("ETableItem::has_cursor", GTK_TYPE_INT, + gtk_object_add_arg_type ("ETableItem::cursor_row", GTK_TYPE_INT, GTK_ARG_READABLE, ARG_CURSOR_ROW); eti_signals [ROW_SELECTION] = |