diff options
author | Arturo Espinosa <unammx@src.gnome.org> | 1999-11-19 16:35:05 +0800 |
---|---|---|
committer | Arturo Espinosa <unammx@src.gnome.org> | 1999-11-19 16:35:05 +0800 |
commit | 5a2fcbd0a44557ec3f9b333cbb3896ca3e43f132 (patch) | |
tree | b352227cdc65609c1d42e48be09c5ea5ac8f92a0 /widgets/e-table | |
parent | 8940a14544be4a714e29478c4bb9b8a0deff41fa (diff) | |
download | gsoc2013-evolution-5a2fcbd0a44557ec3f9b333cbb3896ca3e43f132.tar.gz gsoc2013-evolution-5a2fcbd0a44557ec3f9b333cbb3896ca3e43f132.tar.zst gsoc2013-evolution-5a2fcbd0a44557ec3f9b333cbb3896ca3e43f132.zip |
New files -mig
svn path=/trunk/; revision=1422
Diffstat (limited to 'widgets/e-table')
-rw-r--r-- | widgets/e-table/e-table-subset.c | 70 | ||||
-rw-r--r-- | widgets/e-table/e-table-subset.h | 29 |
2 files changed, 99 insertions, 0 deletions
diff --git a/widgets/e-table/e-table-subset.c b/widgets/e-table/e-table-subset.c new file mode 100644 index 0000000000..0b9621ac84 --- /dev/null +++ b/widgets/e-table/e-table-subset.c @@ -0,0 +1,70 @@ +/* + * E-table-subset.c: Implements a table that contains a subset of another table. + * + * Author: + * Miguel de Icaza (miguel@gnu.org) + * + * (C) 1999 Helix Code, Inc. + */ +#include <config.h> +#include "e-util.h" +#include "e-table-subset.h" + +#define PARENT_TYPE E_TABLE_MODEL_TYPE + +static ETableModelClass *etss_parent_class; + +static void +etss_destroy (GtkObject *object) +{ + ETableSubset *etss = E_TABLE_SUBSET (object); + + gtk_object_unref (GTK_OBJECT (etss->source)); + free (ets->subset_table); + + GTK_OBJECT_CLASS (ets_parent_class)->destroy (object); +} + +static void +etss_class_init (GtkObjectClass *klass) +{ + etss_parent_class = gtk_type_class (PARENT_TYPE); + + klass->destroy = etss_destroy; +} + +E_MAKE_TYPE(e_table_subset, "ETableSubset", ETableSubset, etss_class_init, NULL, PARENT_TYPE); + +ETableModel * +e_table_subset_new (ETableModel *source, ETableHeader *header, short sort_field) +{ + ETableSorted *ets = gtk_type_new (E_TABLE_SORTED_TYPE); + const int nvals = e_table_model_row_count (source); + unsigned int *buffer; + int i; + + buffer = malloc (sizeof (unsigned int *) * nvals); + if (buffer = NULL) + return NULL; + ets->map_table = buffer; + ets->n_map = nvals; + ets->source = source; + ets->header = header; + ets->sort_col = e_table_header_get_column (header, sort_field); + ets->sort_idx = sort_field; + gtk_object_ref (GTK_OBJECT (source)); + gtk_object_ref (GTK_OBJECT (header)); + + /* Init */ + for (i = 0; i < nvals; i++) + ets->map_table [i] = i; + + /* Sort */ + g_assert (sort_ets == NULL); + sort_ets = ets; + qsort (ets->map_table, nvals, sizeof (unsigned int), my_sort); + sort_ets = NULL; + + return (ETableModel *) ets; +} + diff --git a/widgets/e-table/e-table-subset.h b/widgets/e-table/e-table-subset.h new file mode 100644 index 0000000000..a87d6d0df8 --- /dev/null +++ b/widgets/e-table/e-table-subset.h @@ -0,0 +1,29 @@ +#ifndef _E_TABLE_SUBSET_H_ +#define _E_TABLE_SUBSET_H_ + +#include <gtk/gtkobject.h> +#include "e-table-model.h" +#include "e-table-header.h" + +#define E_TABLE_SUBSET_TYPE (e_table_subset_get_type ()) +#define E_TABLE_SUBSET(o) (GTK_CHECK_CAST ((o), E_TABLE_SUBSET_TYPE, ETableSubset)) +#define E_TABLE_SUBSET_CLASS(k) (GTK_CHECK_CLASS_CAST((k), E_TABLE_SUBSET_TYPE, ETableSubsetClass)) +#define E_IS_TABLE_SUBSET(o) (GTK_CHECK_TYPE ((o), E_TABLE_SUBSET_TYPE)) +#define E_IS_TABLE_SUBSET_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_TABLE_SUBSET_TYPE)) + +typedef struct { + ETableModel base; + + ETableModel *source; + int subset_count; + int *subset_table; +} ETableSubset; + +typedef struct { + ETableModelClass parent_class; +} ETableSubsetClass; + +GtkType e_table_subset_get_type (void); +ETableModel *e_table_subset_new (ETableModel *etm, + int n_vals, int *ptrs); +#endif /* _E_TABLE_SUBSET_H_ */ |