diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2009-09-09 12:05:44 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2009-09-09 12:05:44 +0800 |
commit | 8f3e43fb7d94f2b120b3e3e53e0af3dd7c5e248c (patch) | |
tree | 4b0d5b1a9d838051f9ad41d77ccf3174411b135b | |
parent | 9b8fecaa7fa25bd3061c06bea630a5420e7f3470 (diff) | |
download | gsoc2013-evolution-8f3e43fb7d94f2b120b3e3e53e0af3dd7c5e248c.tar.gz gsoc2013-evolution-8f3e43fb7d94f2b120b3e3e53e0af3dd7c5e248c.tar.zst gsoc2013-evolution-8f3e43fb7d94f2b120b3e3e53e0af3dd7c5e248c.zip |
Remove unused ETable files.
-rw-r--r-- | widgets/table/clip.png | bin | 192 -> 0 bytes | |||
-rw-r--r-- | widgets/table/e-table-column.c | 283 | ||||
-rw-r--r-- | widgets/table/e-table-config-field.c | 298 | ||||
-rw-r--r-- | widgets/table/e-table-config-field.h | 68 | ||||
-rw-r--r-- | widgets/table/e-table-example-2.c | 348 | ||||
-rw-r--r-- | widgets/table/e-tree-simple.c | 210 | ||||
-rw-r--r-- | widgets/table/e-tree-simple.h | 84 | ||||
-rw-r--r-- | widgets/table/e-tree-sorted-variable.c | 476 | ||||
-rw-r--r-- | widgets/table/e-tree-sorted-variable.h | 85 | ||||
-rw-r--r-- | widgets/table/image1.png | bin | 1858 -> 0 bytes | |||
-rw-r--r-- | widgets/table/image2.png | bin | 1987 -> 0 bytes | |||
-rw-r--r-- | widgets/table/image3.png | bin | 2051 -> 0 bytes |
12 files changed, 0 insertions, 1852 deletions
diff --git a/widgets/table/clip.png b/widgets/table/clip.png Binary files differdeleted file mode 100644 index 27aa5f072f..0000000000 --- a/widgets/table/clip.png +++ /dev/null diff --git a/widgets/table/e-table-column.c b/widgets/table/e-table-column.c deleted file mode 100644 index 699fe95e69..0000000000 --- a/widgets/table/e-table-column.c +++ /dev/null @@ -1,283 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#include <config.h> - -#include "e-table-column.h" - -enum { - STRUCTURE_CHANGE, - DIMENSION_CHANGE, - LAST_SIGNAL -}; - -static guint etc_signals [LAST_SIGNAL] = { 0, }; - -G_DEFINE_TYPE (ETableColumn, e_table_column, GTK_TYPE_OBJECT) - -static void -e_table_column_finalize (GObject *object) -{ - ETableColumn *etc = E_TABLE_COLUMN (object); - const gint cols = etc->col_count; - - /* - * Destroy listeners - */ - for (l = etc->listeners; l; l = l->next) - g_free (l->data); - g_slist_free (etc->listeners); - etc->listeners = NULL; - - /* - * Destroy columns - */ - for (i = 0; i < cols; i++) - e_table_column_remove (etc, i); - - G_OBJECT_CLASS (e_table_column_parent_class)->finalize (object); -} - -static void -e_table_column_class_init (GtkObjectClass *object_class) -{ - G_OBJECT_CLASS (object_class)->finalize = e_table_column_finalize; - - e_table_column_parent_class = g_type_class_ref (PARENT_CLASS); - - etc_signals [STRUCTURE_CHANGE] = - g_signal_new ("structure_change", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (ETableColumn, structure_change), - NULL, NULL, - e_marshal_NONE__NONE, - G_TYPE_NONE, 0); - etc_signals [DIMENSION_CHANGE] = - g_signal_new ("dimension_change", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (ETableColumn, dimension_change), - e_marshal_NONE__INT, - G_TYPE_NONE, 1, G_TYPE_INT); -} - -static void -etc_do_insert (ETableColumn *etc, gint pos, ETableCol *val) -{ - memcpy (&etc->columns [pos+1], &etc->columns [pos], - sizeof (ETableCol *) * (etc->col_count - pos)); - etc->columns [pos] = val; -} - -void -e_table_column_add_column (ETableColumn *etc, ETableCol *tc, gint pos) -{ - ETableCol **new_ptr; - - g_return_if_fail (etc != NULL); - g_return_if_fail (E_IS_TABLE_COLUMN (etc)); - g_return_if_fail (tc != NULL); - g_return_if_fail (pos >= 0 && pos < etc->col_count); - - if (pos == -1) - pos = etc->col_count; - etc->columns = g_realloc (etc->columns, sizeof (ETableCol *) * (etc->col_count + 1)); - etc_do_insert (etc, pos, tc); - etc->col_count++; - - g_signal_emit (etc, etc_signals [STRUCTURE_CHANGE], 0); -} - -ETableCol * -e_table_column_get_column (ETableColumn *etc, gint column) -{ - g_return_val_if_fail (etc != NULL, NULL); - g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), NULL); - - if (column < 0) - return NULL; - - if (column >= etc->col_count) - return NULL; - - return etc->columns [column]; -} - -gint -e_table_column_count (ETableColumn *etc) -{ - g_return_val_if_fail (etc != NULL, 0); - g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), 0); - - return etc->col_count; -} - -gint -e_table_column_index (ETableColumn *etc, const gchar *identifier) -{ - gint i; - - g_return_val_if_fail (etc != NULL, 0); - g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), 0); - g_return_val_if_fail (identifier != NULL, 0); - - for (i = 0; i < etc->col_count; i++) { - ETableCol *tc = etc->columns [i]; - - if (strcmp (i->id, identifier) == 0) - return i; - } - - return -1; -} - -gint -e_table_column_get_index_at (ETableColumn *etc, gint x_offset) -{ - gint i, total; - - g_return_val_if_fail (etc != NULL, 0); - g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), 0); - g_return_val_if_fail (identifier != NULL, 0); - - total = 0; - for (i = 0; i < etc->col_count; i++) { - total += etc->columns [i]->width; - - if (x_offset < total) - return i; - } - - return -1; -} - -ETableCol ** -e_table_column_get_columns (ETableColumn *etc) -{ - ETableCol **ret; - gint i; - - g_return_val_if_fail (etc != NULL, 0); - g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), 0); - - ret = g_new (ETableCol *, etc->col_count + 1); - memcpy (ret, etc->columns, sizeof (ETableCol *) * etc->col_count); - ret [etc->col_count] = NULL; - - return ret; -} - -gboolean -e_table_column_selection_ok (ETableColumn *etc) -{ - g_return_val_if_fail (etc != NULL, FALSE); - g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), FALSE); - - return etc->selectable; -} - -gint -ve_table_column_get_selected (ETableColumn *etc) -{ - gint i; - gint selected = 0; - - g_return_val_if_fail (etc != NULL, 0); - g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), 0); - - for (i = 0; i < etc->col_count; i++) { - if (etc->columns [i]->selected) - selected++; - } - - return selected; -} - -gint -e_table_column_total_width (ETableColumn *etc) -{ - gint total; - - g_return_val_if_fail (etc != NULL, 0); - g_return_val_if_fail (E_IS_TABLE_COLUMN (etc), 0); - - total = 0; - for (i = 0; i < etc->col_count; i++) - total += etc->columns [i].width; - - return total; -} - -static void -etc_do_remove (ETableColumn *etc, gint idx) -{ - memcpy (&etc->columns [idx], &etc->columns [idx+1], - sizeof (ETableCol *) * etc->col_count - idx); - etc->col_count--; -} - -void -e_table_column_move (ETableColumn *etc, gint source_index, gint target_index) -{ - g_return_if_fail (etc != NULL); - g_return_if_fail (E_IS_TABLE_COLUMN (etc)); - g_return_if_fail (source_index >= 0); - g_return_if_fail (target_index >= 0); - g_return_if_fail (source_index < etc->col_count); - g_return_if_fail (target_index < etc->col_count); - - old = etc->columns [source_index]; - etc_do_remove (etc, source_index); - etc_do_insert (etc, target_index, old); - g_signal_emit (etc, etc_signals [STRUCTURE_CHANGE], 0); -} - -void -e_table_column_remove (ETableColumn *etc, gint idx) -{ - g_return_if_fail (etc != NULL); - g_return_if_fail (E_IS_TABLE_COLUMN (etc)); - g_return_if_fail (idx >= 0); - g_return_if_fail (idx < etc->col_count); - - etc_do_remove (etc, idx); - g_signal_emit (etc, etc_signals [STRUCTURE_CHANGE], 0); -} - -void -e_table_column_set_selection (ETableColumn *etc, gboolean allow_selection); -{ -} - -void -e_table_column_set_size (ETableColumn *etc, gint idx, gint size) -{ - g_return_if_fail (etc != NULL); - g_return_if_fail (E_IS_TABLE_COLUMN (etc)); - g_return_if_fail (idx >= 0); - g_return_if_fail (idx < etc->col_count); - g_return_if_fail (size > 0); - - etc->columns [idx]->width = size; - g_signal_emit (etc, etc_signals [SIZE_CHANGE], 0, idx); -} diff --git a/widgets/table/e-table-config-field.c b/widgets/table/e-table-config-field.c deleted file mode 100644 index 00b0ab2fd9..0000000000 --- a/widgets/table/e-table-config-field.c +++ /dev/null @@ -1,298 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#include <config.h> - -#include <stdlib.h> - -#include <gtk/gtk.h> - -#include <glib/gi18n.h> -#include "e-util/e-util.h" - -#include "e-table-config-field.h" - -G_DEFINE_TYPE (ETableConfigField, etcf, GTK_TYPE_VBOX) - -static void -etcf_dispose (GObject *object) -{ - ETableConfigField *etcf = E_TABLE_CONFIG_FIELD (object); - - if (etct->spec) - g_object_unref (etcf->spec); - etct->spec = NULL; - - if (etct->sort_info) - g_object_unref (etcf->sort_info); - etct->sort_info = NULL; - - G_OBJECT_CLASS (etcf_parent_class)->dispose (object); -} - -static void -etcf_class_init (ETableConfigFieldClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->dispose = etcf_dispose; -} - -static void -etcf_init (ETableConfigField *etcf) -{ - etcf->spec = NULL; - etcf->sort_info = NULL; - - etcf->combo = NULL; - etcf->radio_ascending = NULL; - etcf->radio_descending = NULL; - etcf->child_fields = NULL; -} - -ETableConfigField * -e_table_config_field_new (ETableSpecification *spec, - ETableSortInfo *sort_info, - gboolean grouping) -{ - ETableConfigField *etcf = g_object_new (E_TABLE_CONFIG_FIELD_TYPE, NULL); - - e_table_config_field_construct (etcf, spec, sort_info, grouping); - - return (ETableConfigField *) etcf; -} - -inline static gint -etcf_get_count (ETableConfigField *etcf) -{ - if (etcf->grouping) - return e_table_sort_info_grouping_get_count(etcf->sort_info); - else - return e_table_sort_info_sorting_get_count(etcf->sort_info); -} - -inline static ETableSortColumn -etcf_get_nth (ETableConfigField *etcf) -{ - if (etcf->grouping) - return e_table_sort_info_grouping_get_nth(etcf->sort_info, etcf->n); - else - return e_table_sort_info_sorting_get_nth(etcf->sort_info, etcf->n); -} - -inline static void -etcf_set_nth (ETableConfigField *etcf, ETableSortColumn column) -{ - if (etcf->grouping) - e_table_sort_info_grouping_set_nth(etcf->sort_info, etcf->n, column); - else - e_table_sort_info_sorting_set_nth(etcf->sort_info, etcf->n, column); -} - -inline static void -etcf_truncate (ETableConfigField *etcf) -{ - if (etcf->grouping) - e_table_sort_info_grouping_truncate(etcf->sort_info, etcf->n); - else - e_table_sort_info_sorting_truncate(etcf->sort_info, etcf->n); -} - -static void -etcf_set_sensitivity(ETableConfigField *etcf) -{ - gint count = etcf_get_count(etcf); - - if (etcf->n >= count) { - gtk_widget_set_sensitive(etcf->radio_ascending, FALSE); - gtk_widget_set_sensitive(etcf->radio_descending, FALSE); - if (etcf->child_fields) - gtk_widget_set_sensitive(etcf->child_fields, FALSE); - } else { - gtk_widget_set_sensitive(etcf->radio_ascending, TRUE); - gtk_widget_set_sensitive(etcf->radio_descending, TRUE); - if (etcf->child_fields) - gtk_widget_set_sensitive(etcf->child_fields, TRUE); - } -} - -static void -toggled(GtkWidget *widget, ETableConfigField *etcf) -{ - gint count; - - count = etcf_get_count(etcf); - if (count > etcf->n) { - ETableSortColumn sort_column; - - sort_column = etcf_get_nth(etcf); - sort_column.ascending = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(etcf->radio_ascending)); - etcf_set_nth(etcf, sort_column); - } -} - -static void -changed(GtkWidget *widget, ETableConfigField *etcf) -{ - ETableColumnSpecification **column; - gchar *text; - - text = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(etcf->combo)->entry)); - for (column = etcf->spec->columns; *column; column++) { - if (!strcmp((*column)->title_, text)) { - ETableSortColumn sort_column; - - sort_column.ascending = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(etcf->radio_ascending)); - sort_column.column = (*column)->model_col; - - etcf_set_nth(etcf, sort_column); - etcf_set_sensitivity(etcf); - return; - } - } - etcf_truncate(etcf); - etcf_set_sensitivity(etcf); -} - -static void -etcf_setup(ETableConfigField *etcf) -{ - gint count; - GList *list = NULL; - ETableColumnSpecification **column; - ETableColumnSpecification *chosen_column = NULL; - gint model_col = -1; - - etcf_set_sensitivity(etcf); - - count = etcf_get_count(etcf); - - if (count > etcf->n) { - ETableSortColumn sort_column; - - sort_column = etcf_get_nth(etcf); - model_col = sort_column.column; - if (sort_column.ascending) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(etcf->radio_ascending), TRUE); - else - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(etcf->radio_descending), TRUE); - } - - for (column = etcf->spec->columns; *column; column++) { - list = g_list_prepend(list, (*column)->title_); - if (count > etcf->n && chosen_column == NULL && (*column)->model_col == model_col) { - chosen_column = *column; - } - } - list = g_list_reverse(list); - list = g_list_prepend(list, "None"); - - gtk_combo_set_popdown_strings(GTK_COMBO(etcf->combo), list); - g_list_free(list); - - if (chosen_column) { - gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(etcf->combo)->entry), chosen_column->title_); - } else { - gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(etcf->combo)->entry), "None"); - } - - g_signal_connect(GTK_COMBO(etcf->combo)->entry, "changed", - G_CALLBACK (changed), etcf); - g_signal_connect(etcf->radio_ascending, "toggled", - G_CALLBACK (toggled), etcf); - g_signal_connect(etcf->radio_descending, "toggled", - G_CALLBACK (toggled), etcf); -} - -static ETableConfigField * -e_table_config_field_construct_nth (ETableConfigField *etcf, - ETableSpecification *spec, - ETableSortInfo *sort_info, - gboolean grouping, - gint n) -{ - GtkWidget *frame; - GtkWidget *internal_hbox; - GtkWidget *internal_vbox1; - GtkWidget *internal_vbox2; - - etcf->spec = spec; - g_object_ref (spec); - - etcf->sort_info = sort_info; - g_object_ref (sort_info); - - etcf->grouping = grouping; - etcf->n = n; - - gtk_box_set_spacing(GTK_BOX(etcf), 6); - - frame = gtk_frame_new(n > 0 ? _("Then By") : (grouping ? _("Group By") : _("Sort By"))); - gtk_box_pack_start(GTK_BOX(etcf), frame, FALSE, FALSE, 0); - - internal_hbox = gtk_hbox_new(FALSE, 6); - gtk_container_add(GTK_CONTAINER(frame), internal_hbox); - gtk_container_set_border_width(GTK_CONTAINER(internal_hbox), 6); - - internal_vbox1 = gtk_vbox_new(FALSE, 6); - gtk_box_pack_start(GTK_BOX(internal_hbox), internal_vbox1, FALSE, FALSE, 0); - - etcf->combo = gtk_combo_new(); - gtk_box_pack_start(GTK_BOX(internal_vbox1), etcf->combo, FALSE, FALSE, 0); - - internal_vbox2 = gtk_vbox_new(FALSE, 6); - gtk_box_pack_start(GTK_BOX(internal_hbox), internal_vbox2, FALSE, FALSE, 0); - - etcf->radio_ascending = gtk_radio_button_new_with_label (NULL, _("Ascending")); - gtk_box_pack_start(GTK_BOX(internal_vbox2), etcf->radio_ascending, FALSE, FALSE, 0); - - etcf->radio_descending = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(etcf->radio_ascending), _("Descending")); - gtk_box_pack_start(GTK_BOX(internal_vbox2), etcf->radio_descending, FALSE, FALSE, 0); - - if (n < 3) { - etcf->child_fields = GTK_WIDGET(g_object_new (E_TABLE_CONFIG_FIELD_TYPE, NULL)); - e_table_config_field_construct_nth(E_TABLE_CONFIG_FIELD(etcf->child_fields), spec, sort_info, grouping, n + 1); - gtk_box_pack_start(GTK_BOX(etcf), etcf->child_fields, FALSE, FALSE, 0); - gtk_widget_show(etcf->child_fields); - } else - etcf->child_fields = NULL; - - etcf_setup(etcf); - - gtk_widget_show(etcf->radio_descending); - gtk_widget_show(etcf->radio_ascending); - gtk_widget_show(internal_vbox2); - gtk_widget_show(etcf->combo); - gtk_widget_show(internal_vbox1); - gtk_widget_show(internal_hbox); - gtk_widget_show(frame); - return etcf; -} - -ETableConfigField * -e_table_config_field_construct (ETableConfigField *etcf, - ETableSpecification *spec, - ETableSortInfo *sort_info, - gboolean grouping) -{ - return e_table_config_field_construct_nth(etcf, spec, sort_info, grouping, 0); -} diff --git a/widgets/table/e-table-config-field.h b/widgets/table/e-table-config-field.h deleted file mode 100644 index eb13da90ab..0000000000 --- a/widgets/table/e-table-config-field.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifndef _E_TABLE_CONFIG_FIELD_H_ -#define _E_TABLE_CONFIG_FIELD_H_ - -#include <gtk/gtk.h> -#include <table/e-table-sort-info.h> -#include <table/e-table-specification.h> - -G_BEGIN_DECLS - -#define E_TABLE_CONFIG_FIELD_TYPE (e_table_config_field_get_type ()) -#define E_TABLE_CONFIG_FIELD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TABLE_CONFIG_FIELD_TYPE, ETableConfigField)) -#define E_TABLE_CONFIG_FIELD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TABLE_CONFIG_FIELD_TYPE, ETableConfigFieldClass)) -#define E_IS_TABLE_CONFIG_FIELD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TABLE_CONFIG_FIELD_TYPE)) -#define E_IS_TABLE_CONFIG_FIELD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TABLE_CONFIG_FIELD_TYPE)) - -typedef struct { - GtkVBox base; - - ETableSpecification *spec; - ETableSortInfo *sort_info; - guint grouping : 1; - gint n; - - GtkWidget *combo; - GtkWidget *radio_ascending; - GtkWidget *radio_descending; - - GtkWidget *child_fields; -} ETableConfigField; - -typedef struct { - GtkVBoxClass parent_class; -} ETableConfigFieldClass; - -GType e_table_config_field_get_type (void); -ETableConfigField *e_table_config_field_new (ETableSpecification *spec, - ETableSortInfo *sort_info, - gboolean grouping); -ETableConfigField *e_table_config_field_construct (ETableConfigField *field, - ETableSpecification *spec, - ETableSortInfo *sort_info, - gboolean grouping); - -G_END_DECLS - -#endif /* _E_TABLE_CONFIG_FIELD_H_ */ diff --git a/widgets/table/e-table-example-2.c b/widgets/table/e-table-example-2.c deleted file mode 100644 index 2c2cbe0ffe..0000000000 --- a/widgets/table/e-table-example-2.c +++ /dev/null @@ -1,348 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#include <stdio.h> -#include <string.h> - -#include <gdk-pixbuf/gdk-pixbuf.h> - -#include "gal/e-util/e-cursors.h" - -#include "e-table-simple.h" -#include "e-table-header.h" -#include "e-table-header-item.h" -#include "e-table-item.h" -#include "e-cell-text.h" -#include "e-cell-checkbox.h" -#include "e-table.h" - -#include "table-test.h" - -/* -One way in which we make it simpler to build an ETableModel is through -the ETableSimple class. Instead of creating your own ETableModel -class, you simply create a new object of the ETableSimple class. You -give it a bunch of functions that act as callbacks. - -You also get to pass a gpointer to ETableSimple and it gets passed to -your callbacks. This would be for having multiple models of the same -type. This is just an example though, so we statically define all the -data and ignore the gpointer data parameter. - -In our example we will be creating a table model with 6 columns and 10 -rows. This corresponds to having 6 different types of information and -10 different sets of data in our database. - -The headers will be hard coded, as will be the example data. - -*/ - -/* - There are two different meanings to the word "column". The first is - the model column. A model column corresponds to a specific type of - data. This is very much like the usage in a database table where a - column is a field in the database. - - The second type of column is a view column. A view column - corresponds to a visually displayed column. Each view column - corresponds to a specific model column, though a model column may - have any number of view columns associated with it, from zero to - greater than one. - - Also, a view column doesn't necessarily depend on only one model - column. In some cases, the view column renderer can be given a - reference to another column to get extra information about its - display. -*/ - -#define ROWS 10 -#define VIEW_COLS 4 -#define PHYSICAL_COLS 5 -#define VIRTUAL_COLS 6 - -#define IMPORTANCE_COLUMN 4 -#define COLOR_COLUMN 5 - -/* Here we define the initial layout of the table. This is an xml - format that allows you to change the initial ordering of the - columns or to do sorting or grouping initially. This specification - shows all 5 columns, but moves the importance column nearer to the - front. It also sorts by the "Full Name" column (ascending.) - Sorting and grouping take the model column as their arguments - (sorting is specified by the "column" argument to the leaf elemnt. */ -#define INITIAL_SPEC "<ETableSpecification> \ - <columns-shown> \ - <column> 0 </column> \ - <column> 4 </column> \ - <column> 1 </column> \ - <column> 2 </column> \ - <column> 3 </column> \ - </columns-shown> \ - <grouping> <leaf column=\"1\" ascending=\"true\"/> </grouping> \ -</ETableSpecification>" - -gchar *headers[VIEW_COLS] = { - "Email", - "Full Name", - "Address", - "Phone" -}; - -/* Virtual Column list: - 0 Full Name - 1 Email - 2 Address - 3 Phone - 4 Importance field. This field will be a boolean. It also has a - special header, so doesn't appear in the headers list. - 5 Color field. This column is also not displayed. It is also - not stored in the database. It's calculated based on the - Importance field. -*/ - -gchar *table_data[ROWS][VIEW_COLS]; -gboolean importance_data[ROWS]; - -/* - * ETableSimple callbacks - * These are the callbacks that define the behavior of our custom model. - */ - -/* Since our model is a constant size, we can just return its size in - the column and row count fields. */ - -static GdkColor *color1; -static GdkColor *color2; - -static gint -my_col_count (ETableModel *etc, gpointer data) -{ - return VIRTUAL_COLS; -} - -static gint -my_row_count (ETableModel *etc, gpointer data) -{ - return ROWS; -} - -static gpointer -my_value_at (ETableModel *etc, gint col, gint row, gpointer data) -{ - if (col == COLOR_COLUMN) { - if (importance_data[row]) { - return color1; - } else { - return color2; - } - } else if (col == IMPORTANCE_COLUMN) { - return (gpointer) importance_data[row]; - } else { - return (gpointer) table_data [row][col]; - } -} - -static void -my_set_value_at (ETableModel *etc, gint col, gint row, gconstpointer val, gpointer data) -{ - if (col == COLOR_COLUMN) { - } else if (col == IMPORTANCE_COLUMN) { - importance_data[row] = (gboolean) val; - } else { - g_free (table_data [row][col]); - table_data [row][col] = g_strdup (val); - } -} - -static gboolean -my_is_cell_editable (ETableModel *etc, gint col, gint row, gpointer data) -{ - if (col == IMPORTANCE_COLUMN) - return FALSE; - else - return TRUE; -} - -static gpointer -my_duplicate_value (ETableModel *etc, gint col, gconstpointer value, gpointer data) -{ - if (col == COLOR_COLUMN) { - return (gpointer) value; - } else if (col == IMPORTANCE_COLUMN) { - return (gpointer) value; - } else { - return g_strdup (value); - } -} - -static void -my_free_value (ETableModel *etc, gint col, gpointer value, gpointer data) -{ - if (col == COLOR_COLUMN) { - } else if (col == IMPORTANCE_COLUMN) { - } else { - g_free (value); - } -} - -static gpointer -my_initialize_value (ETableModel *etc, gint col, gpointer data) -{ - if (col == COLOR_COLUMN) { - return NULL; - } else if (col == IMPORTANCE_COLUMN) { - return NULL; - } else { - return g_strdup (""); - } -} - -static gboolean -my_value_is_empty (ETableModel *etc, gint col, gconstpointer value, gpointer data) -{ - if (col == COLOR_COLUMN) { - return value == NULL; - } else if (col == IMPORTANCE_COLUMN) { - return value == NULL; - } else { - return !(value && *(gchar *)value); - } -} - -static gchar * -my_value_to_string (ETableModel *etc, gint col, gconstpointer value, gpointer data) -{ - if (col == COLOR_COLUMN) { - return g_strdup_printf("%d", (gint) value); - } else if (col == IMPORTANCE_COLUMN) { - return g_strdup_printf("%d", (gint) value); - } else { - return g_strdup(value); - } -} - -/* We create a window containing our new table. */ -static void -create_table () -{ - GtkWidget *e_table, *window, *frame; - ECell *cell_left_just; - ECell *cell_checkbox; - ETableHeader *e_table_header; - gint i, j; - ETableModel *e_table_model = NULL; - ETableCol *ecol; - GdkPixbuf *pixbuf; - - /* First we fill in the simple data. */ - for (i = 0; i < ROWS; i++) { - for (j = 0; j < VIEW_COLS; j++) { - table_data[i][j] = g_strdup (""); - } - importance_data[i] = FALSE; - } - /* Next we create our model. This uses the functions we defined - earlier. */ - e_table_model = e_table_simple_new ( - my_col_count, my_row_count, my_value_at, - my_set_value_at, my_is_cell_editable, - my_duplicate_value, my_free_value, - my_initialize_value, my_value_is_empty, - my_value_to_string, - NULL); - /* - Next we create a header. The ETableHeader is used in two - different way. The first is the full_header. This is the - list of possible columns in the view. The second use is - completely internal. Many of the ETableHeader functions are - for that purpose. The only functions we really need are - e_table_header_new and e_table_header_add_col. - - First we create the header. */ - e_table_header = e_table_header_new (); - - /* Next we have to build renderers for all of the columns. - Since all our columns are text columns, we can simply use - the same renderer over and over again. If we had different - types of columns, we could use a different renderer for - each column. */ - cell_left_just = e_cell_text_new (e_table_model, NULL, GTK_JUSTIFY_LEFT); - - /* Next we create a column object for each view column and add - them to the header. We don't create a column object for - the importance column since it will not be shown. */ - for (i = 0; i < VIEW_COLS; i++) { - /* Create the column. */ - ETableCol *ecol = e_table_col_new ( - i, headers [i], - 1.0, 20, cell_left_just, - e_str_compare, TRUE); - /* Add it to the header. */ - e_table_header_add_column (e_table_header, ecol, i); - } - - /* Next we add a special column for the check box. */ - - cell_checkbox = e_cell_checkbox_new (); - pixbuf = gdk_pixbuf_new_from_file ("clip.png"); - ecol = e_table_col_new_with_pixbuf (i, pixbuf, 0.0, 18, cell_checkbox, e_int_compare, TRUE); - e_table_header_add_column (e_table_header, ecol, i); - - /* - * Setup GUI - */ - /* Here we create a window for our new table. This window - will get shown and the person will be able to test their - item. */ - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - /* This frame is simply to get a bevel around our table. */ - frame = gtk_frame_new (NULL); - /* Here we create the table. We give it the three pieces of - the table we've created, the header, the model, and the - initial layout. It does the rest. */ - e_table = e_table_new (e_table_header, e_table_model, INITIAL_SPEC); - - /* Build the gtk widget hierarchy. */ - gtk_container_add (GTK_CONTAINER (frame), e_table); - gtk_container_add (GTK_CONTAINER (window), frame); - - /* Size the initial window. */ - gtk_widget_set_size_request (window, 200, 200); - /* Show it all. */ - gtk_widget_show_all (window); -} - -gint -main (gint argc, gchar *argv []) -{ - gnome_init ("TableExample", "TableExample", argc, argv); - e_cursors_init (); - - gtk_widget_push_colormap (gdk_rgb_get_colormap ()); - - create_table (); - - gtk_main (); - - e_cursors_shutdown (); - return 0; -} diff --git a/widgets/table/e-tree-simple.c b/widgets/table/e-tree-simple.c deleted file mode 100644 index a1668dc542..0000000000 --- a/widgets/table/e-tree-simple.c +++ /dev/null @@ -1,210 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#include <config.h> - -#include "e-util/e-util.h" - -#include "e-tree-simple.h" - -static gint -simple_column_count (ETableModel *etm) -{ - ETreeSimple *simple = E_TREE_SIMPLE(etm); - - if (simple->col_count) - return simple->col_count (etm, simple->model_data); - else - return 0; -} - -/* The default for simple_duplicate_value is to return the raw value. */ -static gpointer -simple_duplicate_value (ETableModel *etm, gint col, gconstpointer value) -{ - ETreeSimple *simple = E_TREE_SIMPLE(etm); - - if (simple->duplicate_value) - return simple->duplicate_value (etm, col, value, simple->model_data); - else - return (gpointer)value; -} - -static void -simple_free_value (ETableModel *etm, gint col, gpointer value) -{ - ETreeSimple *simple = E_TREE_SIMPLE(etm); - - if (simple->free_value) - simple->free_value (etm, col, value, simple->model_data); -} - -static gpointer -simple_initialize_value (ETableModel *etm, gint col) -{ - ETreeSimple *simple = E_TREE_SIMPLE(etm); - - if (simple->initialize_value) - return simple->initialize_value (etm, col, simple->model_data); - else - return NULL; -} - -static gboolean -simple_value_is_empty (ETableModel *etm, gint col, gconstpointer value) -{ - ETreeSimple *simple = E_TREE_SIMPLE(etm); - - if (simple->value_is_empty) - return simple->value_is_empty (etm, col, value, simple->model_data); - else - return FALSE; -} - -static gchar * -simple_value_to_string (ETableModel *etm, gint col, gconstpointer value) -{ - ETreeSimple *simple = E_TREE_SIMPLE(etm); - - if (simple->value_to_string) - return simple->value_to_string (etm, col, value, simple->model_data); - else - return g_strdup (""); -} - -static gpointer -simple_value_at (ETreeModel *etm, ETreePath *node, gint col) -{ - ETreeSimple *simple = E_TREE_SIMPLE(etm); - - return simple->value_at (etm, node, col, simple->model_data); -} - -static GdkPixbuf * -simple_icon_at (ETreeModel *etm, ETreePath *node) -{ - ETreeSimple *simple = E_TREE_SIMPLE(etm); - - return simple->icon_at (etm, node, simple->model_data); -} - -static void -simple_set_value_at (ETreeModel *etm, ETreePath *node, gint col, gconstpointer val) -{ - ETreeSimple *simple = E_TREE_SIMPLE(etm); - - simple->set_value_at (etm, node, col, val, simple->model_data); -} - -static gboolean -simple_is_editable (ETreeModel *etm, ETreePath *node, gint col) -{ - ETreeSimple *simple = E_TREE_SIMPLE(etm); - - return simple->is_editable (etm, node, col, simple->model_data); -} - -static void -e_tree_simple_class_init (GObjectClass *object_class) -{ - ETreeModelClass *model_class = (ETreeModelClass *) object_class; - ETableModelClass *table_model_class = (ETableModelClass *) object_class; - - table_model_class->column_count = simple_column_count; - table_model_class->duplicate_value = simple_duplicate_value; - table_model_class->free_value = simple_free_value; - table_model_class->initialize_value = simple_initialize_value; - table_model_class->value_is_empty = simple_value_is_empty; - table_model_class->value_to_string = simple_value_to_string; - - model_class ->icon_at = simple_icon_at; - model_class ->value_at = simple_value_at; - model_class ->set_value_at = simple_set_value_at; - model_class ->is_editable = simple_is_editable; -} - -G_DEFINE_TYPE (ETreeSimple, e_tree_simple, E_TREE_MODEL_TYPE) - -/** - * e_tree_simple_new: - * @col_count: - * @duplicate_value: - * @free_value: - * @initialize_value: - * @value_is_empty: - * @value_to_string: - * @icon_at: - * @value_at: - * @set_value_at: - * @is_editable: - * @model_data: - * - * This initializes a new ETreeSimpleModel object. ETreeSimpleModel is - * an implementaiton of the abstract class ETreeModel. The ETreeSimpleModel - * is designed to allow people to easily create ETreeModels without having - * to create a new GType derived from ETreeModel every time they need one. - * - * Instead, ETreeSimpleModel uses a setup based in callback functions, every - * callback function signature mimics the signature of each ETreeModel method - * and passes the extra @data pointer to each one of the method to provide them - * with any context they might want to use. - * - * ETreeSimple is to ETreeModel as ETableSimple is to ETableModel. - * - * Return value: An ETreeSimple object (which is also an ETreeModel - * object). - **/ -ETreeModel * -e_tree_simple_new (ETableSimpleColumnCountFn col_count, - ETableSimpleDuplicateValueFn duplicate_value, - ETableSimpleFreeValueFn free_value, - ETableSimpleInitializeValueFn initialize_value, - ETableSimpleValueIsEmptyFn value_is_empty, - ETableSimpleValueToStringFn value_to_string, - - ETreeSimpleIconAtFn icon_at, - ETreeSimpleValueAtFn value_at, - ETreeSimpleSetValueAtFn set_value_at, - ETreeSimpleIsEditableFn is_editable, - - gpointer model_data) -{ - ETreeSimple *etg = g_object_new (E_TREE_SIMPLE_TYPE, NULL); - - etg->col_count = col_count; - etg->duplicate_value = duplicate_value; - etg->free_value = free_value; - etg->initialize_value = initialize_value; - etg->value_is_empty = value_is_empty; - etg->value_to_string = value_to_string; - - etg->icon_at = icon_at; - etg->value_at = value_at; - etg->set_value_at = set_value_at; - etg->is_editable = is_editable; - - etg->model_data = model_data; - - return (ETreeModel*)etg; -} - diff --git a/widgets/table/e-tree-simple.h b/widgets/table/e-tree-simple.h deleted file mode 100644 index 8b71bd7728..0000000000 --- a/widgets/table/e-tree-simple.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifndef _E_TREE_SIMPLE_H_ -#define _E_TREE_SIMPLE_H_ - -#include <table/e-tree-model.h> -#include <table/e-table-simple.h> - -G_BEGIN_DECLS - -#define E_TREE_SIMPLE_TYPE (e_tree_simple_get_type ()) -#define E_TREE_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TREE_SIMPLE_TYPE, ETreeSimple)) -#define E_TREE_SIMPLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TREE_SIMPLE_TYPE, ETreeSimpleClass)) -#define E_IS_TREE_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TREE_SIMPLE_TYPE)) -#define E_IS_TREE_SIMPLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TREE_SIMPLE_TYPE)) -#define E_TREE_SIMPLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), E_TREE_SIMPLE_TYPE, ETreeSimpleClass)) - -typedef GdkPixbuf* (*ETreeSimpleIconAtFn) (ETreeModel *etree, ETreePath *path, gpointer model_data); -typedef gpointer (*ETreeSimpleValueAtFn) (ETreeModel *etree, ETreePath *path, gint col, gpointer model_data); -typedef void (*ETreeSimpleSetValueAtFn) (ETreeModel *etree, ETreePath *path, gint col, gconstpointer val, gpointer model_data); -typedef gboolean (*ETreeSimpleIsEditableFn) (ETreeModel *etree, ETreePath *path, gint col, gpointer model_data); - -typedef struct { - ETreeModel parent; - - /* Table methods */ - ETableSimpleColumnCountFn col_count; - ETableSimpleDuplicateValueFn duplicate_value; - ETableSimpleFreeValueFn free_value; - ETableSimpleInitializeValueFn initialize_value; - ETableSimpleValueIsEmptyFn value_is_empty; - ETableSimpleValueToStringFn value_to_string; - - /* Tree methods */ - ETreeSimpleIconAtFn icon_at; - ETreeSimpleValueAtFn value_at; - ETreeSimpleSetValueAtFn set_value_at; - ETreeSimpleIsEditableFn is_editable; - - gpointer model_data; -} ETreeSimple; - -typedef struct { - ETreeModelClass parent_class; -} ETreeSimpleClass; - -GType e_tree_simple_get_type (void); - -ETreeModel *e_tree_simple_new (ETableSimpleColumnCountFn col_count, - ETableSimpleDuplicateValueFn duplicate_value, - ETableSimpleFreeValueFn free_value, - ETableSimpleInitializeValueFn initialize_value, - ETableSimpleValueIsEmptyFn value_is_empty, - ETableSimpleValueToStringFn value_to_string, - ETreeSimpleIconAtFn icon_at, - ETreeSimpleValueAtFn value_at, - ETreeSimpleSetValueAtFn set_value_at, - ETreeSimpleIsEditableFn is_editable, - gpointer model_data); - -G_END_DECLS - -#endif /* _E_TREE_SIMPLE_H_ */ diff --git a/widgets/table/e-tree-sorted-variable.c b/widgets/table/e-tree-sorted-variable.c deleted file mode 100644 index a919f900b4..0000000000 --- a/widgets/table/e-tree-sorted-variable.c +++ /dev/null @@ -1,476 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#include <config.h> - -#include <stdlib.h> -#include <string.h> - -#include "e-util/e-util.h" - -#include "e-tree-sorted-variable.h" - -#define d(x) - -#define INCREMENT_AMOUNT 100 - -/* maximum insertions between an idle event that we will do without scheduling an idle sort */ -#define ETSV_INSERT_MAX (4) - -static ETreeModelClass *etsv_parent_class; - -struct ETreePath { - GNode node; -}; - -struct ETreeSortedVariablePrivate { - GNode *root; -}; - -static void etsv_proxy_model_changed (ETableModel *etm, ETreeSortedVariable *etsv); -#if 0 -static void etsv_proxy_model_row_changed (ETableModel *etm, gint row, ETreeSortedVariable *etsv); -static void etsv_proxy_model_cell_changed (ETableModel *etm, gint col, gint row, ETreeSortedVariable *etsv); -#endif -static void etsv_sort_info_changed (ETableSortInfo *info, ETreeSortedVariable *etsv); -static void etsv_sort (ETreeSortedVariable *etsv); -static void etsv_add (ETreeSortedVariable *etsv, gint row); -static void etsv_add_all (ETreeSortedVariable *etsv); - -static void -etsv_dispose (GObject *object) -{ - ETreeSortedVariable *etsv = E_TREE_SORTED_VARIABLE (object); - - if (etsv->table_model_changed_id) - g_signal_handler_disconnect (G_OBJECT (etss->source), - etsv->table_model_changed_id); - etsv->table_model_changed_id = 0; - -#if 0 - g_signal_handler_disconnect (etss->source, - etsv->table_model_row_changed_id); - g_signal_handler_disconnect (etss->source, - etsv->table_model_cell_changed_id); - - etsv->table_model_row_changed_id = 0; - etsv->table_model_cell_changed_id = 0; -#endif - if (etsv->sort_info_changed_id) - g_signal_handler_disconnect (etsv->sort_info, - etsv->sort_info_changed_id); - etsv->sort_info_changed_id = 0; - - if (etsv->sort_idle_id) - g_source_remove(etsv->sort_idle_id); - etsv->sort_idle_id = 0; - - if (etsv->insert_idle_id) - g_source_remove(etsv->insert_idle_id); - etsv->insert_idle_id = 0; - - if (etsv->sort_info) - g_object_unref(etsv->sort_info); - etsv->sort_info = NULL; - - if (etsv->full_header) - g_object_unref(etsv->full_header); - etsv->full_header = NULL; - - G_OBJECT_CLASS (etsv_parent_class)->dispose (object); -} - -static void -etsv_class_init (GObjectClass *object_class) -{ - ETreeSortedVariableClass *etsv_class = E_TREE_MODEL_CLASS(object_class); - - etsv_parent_class = g_type_class_peek_parent (object_class); - - object_class->dispose = etsv_dispose; - - etsv_class->add = etsv_add; - etsv_class->add_all = etsv_add_all; -} - -static void -etsv_init (ETreeSortedVariable *etsv) -{ - etsv->full_header = NULL; - etsv->sort_info = NULL; - - etsv->table_model_changed_id = 0; - etsv->table_model_row_changed_id = 0; - etsv->table_model_cell_changed_id = 0; - etsv->sort_info_changed_id = 0; - - etsv->sort_idle_id = 0; - etsv->insert_count = 0; -} - -G_DEFINE_TYPE (ETreeSortedVariable, etsv, E_TREE_MODEL_TYPE) - -static gboolean -etsv_sort_idle(ETreeSortedVariable *etsv) -{ - g_object_ref(etsv); - etsv_sort(etsv); - etsv->sort_idle_id = 0; - etsv->insert_count = 0; - g_object_unref(etsv); - return FALSE; -} - -static gboolean -etsv_insert_idle(ETreeSortedVariable *etsv) -{ - etsv->insert_count = 0; - etsv->insert_idle_id = 0; - return FALSE; -} - -ETableModel * -e_tree_sorted_variable_new (ETreeModel *source, ETableHeader *full_header, ETableSortInfo *sort_info) -{ - ETreeSortedVariable *etsv = g_object_new (E_TREE_SORTED_VARIABLE_TYPE, NULL); - ETreeSortedVariable *etsv = E_TABLE_SUBSET_VARIABLE (etsv); - - if (e_table_subset_variable_construct (etsv, source) == NULL) { - g_object_unref (etsv); - return NULL; - } - - etsv->sort_info = sort_info; - g_object_ref(etsv->sort_info); - etsv->full_header = full_header; - g_object_ref(etsv->full_header); - - etsv->table_model_changed_id = g_signal_connect (source, "model_changed", - G_CALLBACK (etsv_proxy_model_changed), etsv); -#if 0 - etsv->table_model_row_changed_id = g_signal_connect (source, "model_row_changed", - G_CALLBACK (etsv_proxy_model_row_changed), etsv); - etsv->table_model_cell_changed_id = g_signal_connect (source, "model_cell_changed", - G_CALLBACK (etsv_proxy_model_cell_changed), etsv); -#endif - etsv->sort_info_changed_id = g_signal_connect (sort_info, "sort_info_changed", - G_CALLBACK (etsv_sort_info_changed), etsv); - - return E_TABLE_MODEL(etsv); -} - -static void -etsv_proxy_model_changed (ETableModel *etm, ETreeSortedVariable *etsv) -{ - /* FIXME: do_resort (); */ -} -#if 0 -static void -etsv_proxy_model_row_changed (ETableModel *etm, gint row, ETreeSortedVariable *etsv) -{ - ETreeSortedVariable *etsv = E_TABLE_SUBSET_VARIABLE(etsv); - - if (e_table_subset_variable_remove(etsv, row)) - e_table_subset_variable_add (etsv, row); -} - -static void -etsv_proxy_model_cell_changed (ETableModel *etm, gint col, gint row, ETreeSortedVariable *etsv) -{ - ETreeSortedVariable *etsv = E_TABLE_SUBSET_VARIABLE(etsv); - - if (e_table_subset_variable_remove(etsv, row)) - e_table_subset_variable_add (etsv, row); -} -#endif - -static void -etsv_sort_info_changed (ETableSortInfo *info, ETreeSortedVariable *etsv) -{ - etsv_sort(etsv); -} - -/* This takes source rows. */ -static gint -etsv_compare(ETreeSortedVariable *etsv, const ETreePath *path1, const ETreePath *path2) -{ - gint j; - gint sort_count = e_table_sort_info_sorting_get_count(etsv->sort_info); - gint comp_val = 0; - gint ascending = 1; - - for (j = 0; j < sort_count; j++) { - ETableSortColumn column = e_table_sort_info_sorting_get_nth(etsv->sort_info, j); - ETableCol *col; - 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); - comp_val = (*col->compare)(e_tree_model_value_at (etsv->source, path1, col->col_idx), - e_tree_model_value_at (etsv->source, path2, col->col_idx)); - ascending = column.ascending; - if (comp_val != 0) - break; - } - if (comp_val == 0) { - if (row1 < row2) - comp_val = -1; - if (row1 > row2) - comp_val = 1; - } - if (!ascending) - comp_val = -comp_val; - return comp_val; -} - -static ETreeSortedVariable *etsv_closure; -gint cols_closure; -gint *ascending_closure; -gint *col_idx_closure; -GCompareFunc *compare_closure; - -static gint -etsv_compare_closure(const ETreePath *path1, const ETreePath *path2) -{ - gint j; - gint sort_count = e_table_sort_info_sorting_get_count(etsv_closure->sort_info); - gint comp_val = 0; - gint ascending = 1; - for (j = 0; j < sort_count; j++) { - - comp_val = (*(compare_closure[j]))(e_tree_model_value_at (etsv_closure->source, path1, col_idx_closure[j]), - e_tree_model_value_at (etsv_closure->source, path2, col_idx_closure[j])); - ascending = ascending_closure[j]; - if (comp_val != 0) - break; - } - if (comp_val == 0) { - if (row1 < row2) - comp_val = -1; - if (row1 > row2) - comp_val = 1; - } - if (!ascending) - comp_val = -comp_val; - return comp_val; -} - -static gint -qsort_callback(gconstpointer data1, gconstpointer data2) -{ - GNode *node1 = *(GNode **)data1; - GNode *node2 = *(GNode **)data2; - return etsv_compare_closure(node1->data, node2->data); -} - -static gint -qsort_callback_source(gconstpointer data1, gconstpointer data2) -{ - return etsv_compare_closure(data1, data2); -} - -static void -etsv_setup_closures(ETreeSortedVariable *etsv) -{ - gint j; - gint cols; - - cols = e_table_sort_info_sorting_get_count(etsv->sort_info); - cols_closure = cols; - etsv_closure = etsv; - - ascending_closure = g_new(int, cols); - col_idx_closure = g_new(int, cols); - compare_closure = g_new(GCompareFunc, cols); - - for (j = 0; j < cols; j++) { - ETableSortColumn column = e_table_sort_info_sorting_get_nth(etsv->sort_info, j); - ETableCol *col; - - 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); - } - - ascending_closure[j] = column.ascending; - col_idx_closure[j] = col->col_idx; - compare_closure[j] = col->compare; - } -} - -static void -etsv_free_closures(ETreeSortedVariable *etsv) -{ - g_free(ascending_closure); - g_free(col_idx_closure); - g_free(compare_closure); - -} - -static void -etsv_sort_node(ETreeSortedVariable *etsv, GNode *node) -{ - gint n; - gint i; - GNode **children; - GNode *child; - GNode *prev; - - n = g_node_n_children(node); - children = g_new(GNode *, n); - for (i = 0, child = node->children; child && i; child = child->next, i++) { - children[i] = child; - } - qsort(children, n, sizeof(GNode *), qsort_callback); - - prev = NULL; - for (i = 0; i < n; i++) { - children[i]->prev = prev; - if (prev) prev->next = children[i]; - prev = children[i]; - children[i]->next = NULL; - } -} - -static void -etsv_sort_tree(ETreeSortedVariable *etsv, GNode *root) -{ - GNode *childr; - - etsv_sort_node(etsv, node); - - for (child = node->child; child; child = child->next) { - etsv_sort_tree(etsv, child); - } -} - -static void -etsv_sort(ETreeSortedVariable *etsv) -{ - static gint reentering = 0; - if (reentering) - return; - reentering = 1; - - e_table_model_pre_change(E_TABLE_MODEL(etsv)); - - etsv_setup_closures(etsv); - - etsv_sort_tree(etsv, etsv->root); - - etsv_free_closures(etsv); - - e_table_model_changed (E_TABLE_MODEL(etsv)); - reentering = 0; -} - -static void -etsv_add_node (ETreeSortedVariable *etsv, ETreePath *path, GNode *root) -{ - GNode *node; - GNode *new_node; - for (node = root; node; node = node->next) { - if (e_tree_model_node_is_ancestor(etsv->source, path, node->data)) { - etsv_add_node(etsv, path, node->data); - return; - } - } - new_node = g_node_new(path); - for (node = root; node; ) { - if (e_tree_model_node_is_ancestor(etsv->source, node->data, path)) { - GNode *next; - next = node->next; - g_node_unlink(node); - g_node_prepend(new_node, node); - node = next; - } else - node = node->next; - } - - etsv_sort_node(etsv, new_node); - -#if 0 - g_node_prepend(root, new_node); - etsv_sort_node(etsv, root); -#else - /* Insert sort to be a bit faster than the above prepend and then sort. */ - for (node = root; node; node = node->next) { - if (etsv_compare(etsv, path, node->data) > 0) { - g_node_insert_before (root, node, new_node); - return; - } - } - g_node_append(root, new_node); -#endif -} - -etsv_add(ETreeSortedVariable *etsv, gint row) -{ - ETreeModel *source = etsv->source; - ETreePath *path; - - path = e_table_model_value_at (E_TABLE_MODEL(source), -1, row); - etsv_add_node(etsv, path, etsv->root); -} - -/* Optimize by doing the qsorts as we build. But we'll do that later. */ -static void -etsv_add_all_node (ETreeSortedVariable *etsv, ETreePath *path, GNode *node) -{ - ETreeModel *source = etsv->source; - ETreePath **children; - gint n; - gint i; - - n = e_tree_model_node_get_children(source, path, &children); - qsort(children, n, sizeof(ETreePath *), qsort_callback_source); - - for (i = n - 1; i >= 0; i--) { - GNode *new_child = g_node_new(children[i]); - g_node_prepend(path, new_child); - etsv_add_all_node (etsv, children[i], new_child) - } - - g_free(children); -} - -static void -etsv_add_all (ETreeSortedVariable *etsv) -{ - GNode *node; - ETreePath *path; - - e_table_model_pre_change(etm); - - if (etsv->root) - g_node_destroy(etsv->root); - - etsv_setup_closures(etsv); - - path = e_tree_model_get_root(etsv->source); - node = g_node_new(path); - etsv_add_all_node(etsv, path, node); - etsv->root = node; - - etsv_free_closures(etsv); - - e_tree_model_node_changed (etsv, etsv->root); -} diff --git a/widgets/table/e-tree-sorted-variable.h b/widgets/table/e-tree-sorted-variable.h deleted file mode 100644 index 1c4de3ed9c..0000000000 --- a/widgets/table/e-tree-sorted-variable.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifndef _E_TREE_SORTED_VARIABLE_H_ -#define _E_TREE_SORTED_VARIABLE_H_ - -#include <glib-object.h> -#include <gal/e-tree/e-tree-model.h> -#include <table/e-table-subset-variable.h> -#include <table/e-table-sort-info.h> -#include <table/e-table-header.h> - -G_BEGIN_DECLS - -#define E_TREE_SORTED_VARIABLE_TYPE (e_tree_sorted_variable_get_type ()) -#define E_TREE_SORTED_VARIABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TREE_SORTED_VARIABLE_TYPE, ETreeSortedVariable)) -#define E_TREE_SORTED_VARIABLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_TREE_SORTED_VARIABLE_TYPE, ETreeSortedVariableClass)) -#define E_IS_TREE_SORTED_VARIABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TREE_SORTED_VARIABLE_TYPE)) -#define E_IS_TREE_SORTED_VARIABLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_TREE_SORTED_VARIABLE_TYPE)) -#define E_TREE_SORTED_VARIABLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((obj), E_TREE_SORTED_VARIABLE_TYPE, ETreeSortedVariableClass)) - -typedef struct { - ETreeModel base; - - ETableSortInfo *sort_info; - - ETableHeader *full_header; - - gint table_model_changed_id; - gint table_model_row_changed_id; - gint table_model_cell_changed_id; - gint sort_info_changed_id; - gint sort_idle_id; - gint insert_idle_id; - gint insert_count; - -} ETreeSortedVariable; - -typedef struct { - ETreeModelClass parent_class; -} ETreeSortedVariableClass; - -GType e_tree_sorted_variable_get_type (void); -ETableModel *e_tree_sorted_variable_new (ETreeModel *etm, - ETableHeader *header, - ETableSortInfo *sort_info); - -ETreeModel *e_tree_sorted_get_toplevel (ETreeSortedVariable *tree_model); - -void e_tree_sorted_variable_add (ETreeSortedVariable *ets, - gint row); -void e_tree_sorted_variable_add_all (ETreeSortedVariable *ets); -gboolean e_tree_sorted_variable_remove (ETreeSortedVariable *ets, - gint row); -void e_tree_sorted_variable_increment (ETreeSortedVariable *ets, - gint position, - gint amount); -void e_tree_sorted_variable_decrement (ETreeSortedVariable *ets, - gint position, - gint amount); -void e_tree_sorted_variable_set_allocation (ETreeSortedVariable *ets, - gint total); -G_END_DECLS - -#endif /* _E_TREE_SORTED_VARIABLE_H_ */ diff --git a/widgets/table/image1.png b/widgets/table/image1.png Binary files differdeleted file mode 100644 index 8326ac241f..0000000000 --- a/widgets/table/image1.png +++ /dev/null diff --git a/widgets/table/image2.png b/widgets/table/image2.png Binary files differdeleted file mode 100644 index e6a4c75dbe..0000000000 --- a/widgets/table/image2.png +++ /dev/null diff --git a/widgets/table/image3.png b/widgets/table/image3.png Binary files differdeleted file mode 100644 index 50e16e8620..0000000000 --- a/widgets/table/image3.png +++ /dev/null |