aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/table/e-table-subset.c
diff options
context:
space:
mode:
authorArturo Espinosa <unammx@src.gnome.org>1999-12-12 17:20:46 +0800
committerArturo Espinosa <unammx@src.gnome.org>1999-12-12 17:20:46 +0800
commitfa895ed8e1454d4d761b8789381ca5ba464a7c93 (patch)
tree594aa949bfdb351a0cb6646bb950744c8a791c88 /widgets/table/e-table-subset.c
parent863f8aa634005c6400d629c353f5fed485106fce (diff)
downloadgsoc2013-evolution-fa895ed8e1454d4d761b8789381ca5ba464a7c93.tar
gsoc2013-evolution-fa895ed8e1454d4d761b8789381ca5ba464a7c93.tar.gz
gsoc2013-evolution-fa895ed8e1454d4d761b8789381ca5ba464a7c93.tar.bz2
gsoc2013-evolution-fa895ed8e1454d4d761b8789381ca5ba464a7c93.tar.lz
gsoc2013-evolution-fa895ed8e1454d4d761b8789381ca5ba464a7c93.tar.xz
gsoc2013-evolution-fa895ed8e1454d4d761b8789381ca5ba464a7c93.tar.zst
gsoc2013-evolution-fa895ed8e1454d4d761b8789381ca5ba464a7c93.zip
More work. We now have the basics for nesting working, now we need all the
More work. We now have the basics for nesting working, now we need all the interactions done properly. I want to use a new GnomeCanvasItem for the nesting parent as well. DnD will have to be done with our own protocol to provide all the feedback we want to provide. Miguel svn path=/trunk/; revision=1481
Diffstat (limited to 'widgets/table/e-table-subset.c')
-rw-r--r--widgets/table/e-table-subset.c75
1 files changed, 51 insertions, 24 deletions
diff --git a/widgets/table/e-table-subset.c b/widgets/table/e-table-subset.c
index 41763d309b..88f5c18c85 100644
--- a/widgets/table/e-table-subset.c
+++ b/widgets/table/e-table-subset.c
@@ -7,6 +7,8 @@
* (C) 1999 Helix Code, Inc.
*/
#include <config.h>
+#include <stdlib.h>
+#include <gtk/gtksignal.h>
#include "e-util.h"
#include "e-table-subset.h"
@@ -36,20 +38,12 @@ etss_column_count (ETableModel *etm)
return e_table_model_column_count (etss->source);
}
-static const char *
-etss_column_name (ETableModel *etm, int col)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- return e_table_model_column_name (etss->source, col);
-}
-
static int
etss_row_count (ETableModel *etm)
{
ETableSubset *etss = (ETableSubset *)etm;
- return e_table_model_row_count (etss->source);
+ return etss->n_map;
}
static void *
@@ -61,7 +55,7 @@ etss_value_at (ETableModel *etm, int col, int row)
}
static void
-etss_set_value_at (ETableModel *etm, int col, int row, void *val)
+etss_set_value_at (ETableModel *etm, int col, int row, const void *val)
{
ETableSubset *etss = (ETableSubset *)etm;
@@ -76,14 +70,6 @@ etss_is_cell_editable (ETableModel *etm, int col, int row)
return e_table_model_is_cell_editable (etss->source, col, etss->map_table [row]);
}
-static int
-etss_row_height (ETableModel *etm, int row)
-{
- ETableSubset *etss = (ETableSubset *)etm;
-
- return e_table_model_row_height (etss->source, etss->map_table [row]);
-}
-
static void
etss_class_init (GtkObjectClass *klass)
{
@@ -94,25 +80,58 @@ etss_class_init (GtkObjectClass *klass)
klass->destroy = etss_destroy;
table_class->column_count = etss_column_count;
- table_class->column_name = etss_column_name;
table_class->row_count = etss_row_count;
table_class->value_at = etss_value_at;
table_class->set_value_at = etss_set_value_at;
table_class->is_cell_editable = etss_is_cell_editable;
- table_class->row_height = etss_row_height;
-
}
E_MAKE_TYPE(e_table_subset, "ETableSubset", ETableSubset, etss_class_init, NULL, PARENT_TYPE);
+static void
+etss_proxy_model_changed (ETableModel *etm, ETableSubset *etss)
+{
+ e_table_model_changed (E_TABLE_MODEL (etss));
+}
+
+static void
+etss_proxy_model_row_changed (ETableModel *etm, int row, ETableSubset *etss)
+{
+ const int n = etss->n_map;
+ const int * const map_table = etss->map_table;
+ int i;
+
+ for (i = 0; i < n; i++){
+ if (map_table [i] == row){
+ e_table_model_row_changed (E_TABLE_MODEL (etss), i);
+ return;
+ }
+ }
+}
+
+static void
+etss_proxy_model_cell_changed (ETableModel *etm, int col, int row, ETableSubset *etss)
+{
+ const int n = etss->n_map;
+ const int * const map_table = etss->map_table;
+ int i;
+
+ for (i = 0; i < n; i++){
+ if (map_table [i] == row){
+ e_table_model_cell_changed (E_TABLE_MODEL (etss), col, i);
+ return;
+ }
+ }
+}
+
ETableModel *
e_table_subset_construct (ETableSubset *etss, ETableModel *source, int nvals)
{
unsigned int *buffer;
int i;
- buffer = (unsigned int *) malloc (sizeof (unsigned int *) * nvals);
- if (buffer = NULL)
+ buffer = (unsigned int *) malloc (sizeof (unsigned int) * nvals);
+ if (buffer == NULL)
return NULL;
etss->map_table = buffer;
etss->n_map = nvals;
@@ -123,6 +142,14 @@ e_table_subset_construct (ETableSubset *etss, ETableModel *source, int nvals)
for (i = 0; i < nvals; i++)
etss->map_table [i] = i;
+ gtk_signal_connect (GTK_OBJECT (source), "model_changed",
+ GTK_SIGNAL_FUNC (etss_proxy_model_changed), etss);
+ gtk_signal_connect (GTK_OBJECT (source), "model_row_changed",
+ GTK_SIGNAL_FUNC (etss_proxy_model_row_changed), etss);
+ gtk_signal_connect (GTK_OBJECT (source), "model_cell_changed",
+ GTK_SIGNAL_FUNC (etss_proxy_model_cell_changed), etss);
+
+ return E_TABLE_MODEL (etss);
}
ETableModel *
@@ -147,5 +174,5 @@ e_table_subset_get_toplevel (ETableSubset *table)
if (E_IS_TABLE_SUBSET (table->source))
return e_table_subset_get_toplevel (E_TABLE_SUBSET (table->source));
else
- return table->subset;
+ return table->source;
}