Add a handler for "model_pre_change" and properly stop editing.
2000-08-02 Christopher James Lahey <clahey@helixcode.com> * e-table-item.c, e-table-item.h: Add a handler for "model_pre_change" and properly stop editing. * e-table-model.c, e-table-model.h: Added a "model_pre_change" signal that gets sent before any row numbers are changed. * e-table-sorted-variable.c, e-table-subset-variable.c: Emit "model_pre_change" signals as appropriate. * e-table-subset.c, e-table-subset.h: Proxy "model_pre_changed" signals. svn path=/trunk/; revision=4472
This commit is contained in:
committed by
Chris Lahey
parent
2c7ed49b25
commit
5fbcc4828e
@ -1,3 +1,17 @@
|
||||
2000-08-02 Christopher James Lahey <clahey@helixcode.com>
|
||||
|
||||
* e-table-item.c, e-table-item.h: Add a handler for
|
||||
"model_pre_change" and properly stop editing.
|
||||
|
||||
* e-table-model.c, e-table-model.h: Added a "model_pre_change"
|
||||
signal that gets sent before any row numbers are changed.
|
||||
|
||||
* e-table-sorted-variable.c, e-table-subset-variable.c: Emit
|
||||
"model_pre_change" signals as appropriate.
|
||||
|
||||
* e-table-subset.c, e-table-subset.h: Proxy "model_pre_changed"
|
||||
signals.
|
||||
|
||||
2000-08-02 Christopher James Lahey <clahey@helixcode.com>
|
||||
|
||||
* e-table-model.c, e-table-model.h: Changed the API for the
|
||||
|
||||
@ -302,6 +302,8 @@ eti_remove_table_model (ETableItem *eti)
|
||||
if (!eti->table_model)
|
||||
return;
|
||||
|
||||
gtk_signal_disconnect (GTK_OBJECT (eti->table_model),
|
||||
eti->table_model_pre_change_id);
|
||||
gtk_signal_disconnect (GTK_OBJECT (eti->table_model),
|
||||
eti->table_model_change_id);
|
||||
gtk_signal_disconnect (GTK_OBJECT (eti->table_model),
|
||||
@ -316,6 +318,7 @@ eti_remove_table_model (ETableItem *eti)
|
||||
if (eti->source_model)
|
||||
gtk_object_unref (GTK_OBJECT (eti->source_model));
|
||||
|
||||
eti->table_model_pre_change_id = 0;
|
||||
eti->table_model_change_id = 0;
|
||||
eti->table_model_row_change_id = 0;
|
||||
eti->table_model_cell_change_id = 0;
|
||||
@ -558,6 +561,16 @@ eti_item_region_redraw (ETableItem *eti, int x0, int y0, int x1, int y1)
|
||||
gnome_canvas_request_redraw (item->canvas, rect.x0, rect.y0, rect.x1, rect.y1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Callback routine: invoked before the ETableModel has suffers a change
|
||||
*/
|
||||
static void
|
||||
eti_table_model_pre_change (ETableModel *table_model, ETableItem *eti)
|
||||
{
|
||||
if (eti_editing (eti))
|
||||
e_table_item_leave_edit (eti);
|
||||
}
|
||||
|
||||
/*
|
||||
* Callback routine: invoked when the ETableModel has suffered a change
|
||||
*/
|
||||
@ -720,7 +733,11 @@ eti_add_table_model (ETableItem *eti, ETableModel *table_model)
|
||||
|
||||
eti->table_model = table_model;
|
||||
gtk_object_ref (GTK_OBJECT (eti->table_model));
|
||||
|
||||
|
||||
eti->table_model_pre_change_id = gtk_signal_connect (
|
||||
GTK_OBJECT (table_model), "model_pre_change",
|
||||
GTK_SIGNAL_FUNC (eti_table_model_pre_change), eti);
|
||||
|
||||
eti->table_model_change_id = gtk_signal_connect (
|
||||
GTK_OBJECT (table_model), "model_changed",
|
||||
GTK_SIGNAL_FUNC (eti_table_model_changed), eti);
|
||||
@ -841,12 +858,12 @@ eti_destroy (GtkObject *object)
|
||||
|
||||
if (eti->selection)
|
||||
gtk_object_unref(GTK_OBJECT(eti->selection));
|
||||
|
||||
|
||||
if (eti->height_cache_idle_id)
|
||||
g_source_remove(eti->height_cache_idle_id);
|
||||
|
||||
|
||||
g_free (eti->height_cache);
|
||||
|
||||
|
||||
if (GTK_OBJECT_CLASS (eti_parent_class)->destroy)
|
||||
(*GTK_OBJECT_CLASS (eti_parent_class)->destroy) (object);
|
||||
}
|
||||
@ -1033,6 +1050,9 @@ eti_unrealize (GnomeCanvasItem *item)
|
||||
{
|
||||
ETableItem *eti = E_TABLE_ITEM (item);
|
||||
|
||||
if (eti_editing (eti))
|
||||
e_table_item_leave_edit (eti);
|
||||
|
||||
gdk_gc_unref (eti->fill_gc);
|
||||
eti->fill_gc = NULL;
|
||||
gdk_gc_unref (eti->grid_gc);
|
||||
@ -1844,18 +1864,26 @@ e_table_item_enter_edit (ETableItem *eti, int col, int row)
|
||||
void
|
||||
e_table_item_leave_edit (ETableItem *eti)
|
||||
{
|
||||
int col, row;
|
||||
void *edit_ctx;
|
||||
|
||||
g_return_if_fail (eti != NULL);
|
||||
g_return_if_fail (E_IS_TABLE_ITEM (eti));
|
||||
|
||||
if (!eti_editing (eti))
|
||||
return;
|
||||
|
||||
e_cell_leave_edit (eti->cell_views [eti->editing_col],
|
||||
view_to_model_col(eti, eti->editing_col), eti->editing_col, eti->editing_row,
|
||||
eti->edit_ctx);
|
||||
col = eti->editing_col;
|
||||
row = eti->editing_row;
|
||||
edit_ctx = eti->edit_ctx;
|
||||
|
||||
eti->editing_col = -1;
|
||||
eti->editing_row = -1;
|
||||
eti->edit_ctx = NULL;
|
||||
|
||||
e_cell_leave_edit (eti->cell_views [col],
|
||||
view_to_model_col(eti, col),
|
||||
col, row, edit_ctx);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
|
||||
@ -40,6 +40,7 @@ typedef struct {
|
||||
*/
|
||||
int header_dim_change_id;
|
||||
int header_structure_change_id;
|
||||
int table_model_pre_change_id;
|
||||
int table_model_change_id;
|
||||
int table_model_row_change_id;
|
||||
int table_model_cell_change_id;
|
||||
|
||||
@ -20,6 +20,7 @@ static GtkObjectClass *e_table_model_parent_class;
|
||||
|
||||
enum {
|
||||
MODEL_CHANGED,
|
||||
MODEL_PRE_CHANGE,
|
||||
MODEL_ROW_CHANGED,
|
||||
MODEL_CELL_CHANGED,
|
||||
MODEL_ROW_INSERTED,
|
||||
@ -176,6 +177,14 @@ e_table_model_class_init (GtkObjectClass *object_class)
|
||||
gtk_marshal_NONE__NONE,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
e_table_model_signals [MODEL_PRE_CHANGE] =
|
||||
gtk_signal_new ("model_pre_change",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableModelClass, model_pre_change),
|
||||
gtk_marshal_NONE__NONE,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
e_table_model_signals [MODEL_ROW_CHANGED] =
|
||||
gtk_signal_new ("model_row_changed",
|
||||
GTK_RUN_LAST,
|
||||
@ -255,6 +264,16 @@ e_table_model_get_type (void)
|
||||
return type;
|
||||
}
|
||||
|
||||
void
|
||||
e_table_model_pre_change (ETableModel *e_table_model)
|
||||
{
|
||||
g_return_if_fail (e_table_model != NULL);
|
||||
g_return_if_fail (E_IS_TABLE_MODEL (e_table_model));
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (e_table_model),
|
||||
e_table_model_signals [MODEL_PRE_CHANGE]);
|
||||
}
|
||||
|
||||
void
|
||||
e_table_model_changed (ETableModel *e_table_model)
|
||||
{
|
||||
|
||||
@ -50,6 +50,8 @@ typedef struct {
|
||||
* A row inserted: row_inserted
|
||||
* A row deleted: row_deleted
|
||||
*/
|
||||
void (*model_pre_change) (ETableModel *etm);
|
||||
|
||||
void (*model_changed) (ETableModel *etm);
|
||||
void (*model_row_changed) (ETableModel *etm, int row);
|
||||
void (*model_cell_changed) (ETableModel *etm, int col, int row);
|
||||
@ -76,6 +78,7 @@ char *e_table_model_value_to_string (ETableModel *e_table_model, int col,
|
||||
/*
|
||||
* Routines for emitting signals on the e_table
|
||||
*/
|
||||
void e_table_model_pre_change (ETableModel *e_table_model);
|
||||
void e_table_model_changed (ETableModel *e_table_model);
|
||||
void e_table_model_row_changed (ETableModel *e_table_model, int row);
|
||||
void e_table_model_cell_changed (ETableModel *e_table_model, int col, int row);
|
||||
|
||||
@ -169,8 +169,12 @@ etsv_add_all (ETableSubsetVariable *etssv)
|
||||
ETableModel *etm = E_TABLE_MODEL(etssv);
|
||||
ETableSubset *etss = E_TABLE_SUBSET(etssv);
|
||||
ETableSortedVariable *etsv = E_TABLE_SORTED_VARIABLE (etssv);
|
||||
int rows = e_table_model_row_count(etss->source);
|
||||
int rows;
|
||||
int i;
|
||||
|
||||
e_table_model_pre_change(etm);
|
||||
|
||||
rows = e_table_model_row_count(etss->source);
|
||||
|
||||
if (etss->n_map + rows > etssv->n_vals_allocated){
|
||||
etssv->n_vals_allocated += MAX(INCREMENT_AMOUNT, rows);
|
||||
@ -285,13 +289,17 @@ etsv_sort(ETableSortedVariable *etsv)
|
||||
ETableSubset *etss = E_TABLE_SUBSET(etsv);
|
||||
static int reentering = 0;
|
||||
int rows = E_TABLE_SUBSET(etsv)->n_map;
|
||||
int total_rows = e_table_model_row_count(E_TABLE_SUBSET(etsv)->source);
|
||||
int total_rows;
|
||||
int i;
|
||||
int j;
|
||||
int cols;
|
||||
if (reentering)
|
||||
return;
|
||||
reentering = 1;
|
||||
|
||||
e_table_model_pre_change(E_TABLE_MODEL(etsv));
|
||||
|
||||
total_rows = e_table_model_row_count(E_TABLE_SUBSET(etsv)->source);
|
||||
cols = e_table_sort_info_sorting_get_count(etsv->sort_info);
|
||||
cols_closure = cols;
|
||||
etsv_closure = etsv;
|
||||
|
||||
@ -30,6 +30,8 @@ etssv_add (ETableSubsetVariable *etssv,
|
||||
ETableSubset *etss = E_TABLE_SUBSET(etssv);
|
||||
int i;
|
||||
|
||||
e_table_model_pre_change(etm);
|
||||
|
||||
if (etss->n_map + 1 > etssv->n_vals_allocated){
|
||||
etss->map_table = g_realloc (etss->map_table, (etssv->n_vals_allocated + INCREMENT_AMOUNT) * sizeof(int));
|
||||
etssv->n_vals_allocated += INCREMENT_AMOUNT;
|
||||
@ -48,9 +50,12 @@ etssv_add_all (ETableSubsetVariable *etssv)
|
||||
{
|
||||
ETableModel *etm = E_TABLE_MODEL(etssv);
|
||||
ETableSubset *etss = E_TABLE_SUBSET(etssv);
|
||||
int rows = e_table_model_row_count(etss->source);
|
||||
int rows;
|
||||
int i;
|
||||
|
||||
e_table_model_pre_change(etm);
|
||||
|
||||
rows = e_table_model_row_count(etss->source);
|
||||
if (etss->n_map + rows > etssv->n_vals_allocated){
|
||||
etssv->n_vals_allocated += MAX(INCREMENT_AMOUNT, rows);
|
||||
etss->map_table = g_realloc (etss->map_table, etssv->n_vals_allocated * sizeof(int));
|
||||
@ -72,6 +77,7 @@ etssv_remove (ETableSubsetVariable *etssv,
|
||||
|
||||
for (i = 0; i < etss->n_map; i++){
|
||||
if (etss->map_table[i] == row) {
|
||||
e_table_model_pre_change (etm);
|
||||
memmove (etss->map_table + i, etss->map_table + i + 1, (etss->n_map - i - 1) * sizeof(int));
|
||||
etss->n_map --;
|
||||
|
||||
|
||||
@ -25,6 +25,8 @@ etss_destroy (GtkObject *object)
|
||||
if (etss->source)
|
||||
gtk_object_unref (GTK_OBJECT (etss->source));
|
||||
|
||||
gtk_signal_disconnect (GTK_OBJECT (etss->source),
|
||||
etss->table_model_pre_change_id);
|
||||
gtk_signal_disconnect (GTK_OBJECT (etss->source),
|
||||
etss->table_model_changed_id);
|
||||
gtk_signal_disconnect (GTK_OBJECT (etss->source),
|
||||
@ -32,6 +34,7 @@ etss_destroy (GtkObject *object)
|
||||
gtk_signal_disconnect (GTK_OBJECT (etss->source),
|
||||
etss->table_model_cell_changed_id);
|
||||
|
||||
etss->table_model_pre_change_id = 0;
|
||||
etss->table_model_changed_id = 0;
|
||||
etss->table_model_row_changed_id = 0;
|
||||
etss->table_model_cell_changed_id = 0;
|
||||
@ -152,6 +155,12 @@ etss_class_init (GtkObjectClass *klass)
|
||||
|
||||
E_MAKE_TYPE(e_table_subset, "ETableSubset", ETableSubset, etss_class_init, NULL, PARENT_TYPE);
|
||||
|
||||
static void
|
||||
etss_proxy_model_pre_change (ETableModel *etm, ETableSubset *etss)
|
||||
{
|
||||
e_table_model_pre_change (E_TABLE_MODEL (etss));
|
||||
}
|
||||
|
||||
static void
|
||||
etss_proxy_model_changed (ETableModel *etm, ETableSubset *etss)
|
||||
{
|
||||
@ -206,6 +215,8 @@ e_table_subset_construct (ETableSubset *etss, ETableModel *source, int nvals)
|
||||
for (i = 0; i < nvals; i++)
|
||||
etss->map_table [i] = i;
|
||||
|
||||
etss->table_model_pre_change_id = gtk_signal_connect (GTK_OBJECT (source), "model_pre_change",
|
||||
GTK_SIGNAL_FUNC (etss_proxy_model_pre_change), etss);
|
||||
etss->table_model_changed_id = gtk_signal_connect (GTK_OBJECT (source), "model_changed",
|
||||
GTK_SIGNAL_FUNC (etss_proxy_model_changed), etss);
|
||||
etss->table_model_row_changed_id = gtk_signal_connect (GTK_OBJECT (source), "model_row_changed",
|
||||
|
||||
@ -18,6 +18,7 @@ typedef struct {
|
||||
int n_map;
|
||||
int *map_table;
|
||||
|
||||
int table_model_pre_change_id;
|
||||
int table_model_changed_id;
|
||||
int table_model_row_changed_id;
|
||||
int table_model_cell_changed_id;
|
||||
|
||||
@ -302,6 +302,8 @@ eti_remove_table_model (ETableItem *eti)
|
||||
if (!eti->table_model)
|
||||
return;
|
||||
|
||||
gtk_signal_disconnect (GTK_OBJECT (eti->table_model),
|
||||
eti->table_model_pre_change_id);
|
||||
gtk_signal_disconnect (GTK_OBJECT (eti->table_model),
|
||||
eti->table_model_change_id);
|
||||
gtk_signal_disconnect (GTK_OBJECT (eti->table_model),
|
||||
@ -316,6 +318,7 @@ eti_remove_table_model (ETableItem *eti)
|
||||
if (eti->source_model)
|
||||
gtk_object_unref (GTK_OBJECT (eti->source_model));
|
||||
|
||||
eti->table_model_pre_change_id = 0;
|
||||
eti->table_model_change_id = 0;
|
||||
eti->table_model_row_change_id = 0;
|
||||
eti->table_model_cell_change_id = 0;
|
||||
@ -558,6 +561,16 @@ eti_item_region_redraw (ETableItem *eti, int x0, int y0, int x1, int y1)
|
||||
gnome_canvas_request_redraw (item->canvas, rect.x0, rect.y0, rect.x1, rect.y1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Callback routine: invoked before the ETableModel has suffers a change
|
||||
*/
|
||||
static void
|
||||
eti_table_model_pre_change (ETableModel *table_model, ETableItem *eti)
|
||||
{
|
||||
if (eti_editing (eti))
|
||||
e_table_item_leave_edit (eti);
|
||||
}
|
||||
|
||||
/*
|
||||
* Callback routine: invoked when the ETableModel has suffered a change
|
||||
*/
|
||||
@ -720,7 +733,11 @@ eti_add_table_model (ETableItem *eti, ETableModel *table_model)
|
||||
|
||||
eti->table_model = table_model;
|
||||
gtk_object_ref (GTK_OBJECT (eti->table_model));
|
||||
|
||||
|
||||
eti->table_model_pre_change_id = gtk_signal_connect (
|
||||
GTK_OBJECT (table_model), "model_pre_change",
|
||||
GTK_SIGNAL_FUNC (eti_table_model_pre_change), eti);
|
||||
|
||||
eti->table_model_change_id = gtk_signal_connect (
|
||||
GTK_OBJECT (table_model), "model_changed",
|
||||
GTK_SIGNAL_FUNC (eti_table_model_changed), eti);
|
||||
@ -841,12 +858,12 @@ eti_destroy (GtkObject *object)
|
||||
|
||||
if (eti->selection)
|
||||
gtk_object_unref(GTK_OBJECT(eti->selection));
|
||||
|
||||
|
||||
if (eti->height_cache_idle_id)
|
||||
g_source_remove(eti->height_cache_idle_id);
|
||||
|
||||
|
||||
g_free (eti->height_cache);
|
||||
|
||||
|
||||
if (GTK_OBJECT_CLASS (eti_parent_class)->destroy)
|
||||
(*GTK_OBJECT_CLASS (eti_parent_class)->destroy) (object);
|
||||
}
|
||||
@ -1033,6 +1050,9 @@ eti_unrealize (GnomeCanvasItem *item)
|
||||
{
|
||||
ETableItem *eti = E_TABLE_ITEM (item);
|
||||
|
||||
if (eti_editing (eti))
|
||||
e_table_item_leave_edit (eti);
|
||||
|
||||
gdk_gc_unref (eti->fill_gc);
|
||||
eti->fill_gc = NULL;
|
||||
gdk_gc_unref (eti->grid_gc);
|
||||
@ -1844,18 +1864,26 @@ e_table_item_enter_edit (ETableItem *eti, int col, int row)
|
||||
void
|
||||
e_table_item_leave_edit (ETableItem *eti)
|
||||
{
|
||||
int col, row;
|
||||
void *edit_ctx;
|
||||
|
||||
g_return_if_fail (eti != NULL);
|
||||
g_return_if_fail (E_IS_TABLE_ITEM (eti));
|
||||
|
||||
if (!eti_editing (eti))
|
||||
return;
|
||||
|
||||
e_cell_leave_edit (eti->cell_views [eti->editing_col],
|
||||
view_to_model_col(eti, eti->editing_col), eti->editing_col, eti->editing_row,
|
||||
eti->edit_ctx);
|
||||
col = eti->editing_col;
|
||||
row = eti->editing_row;
|
||||
edit_ctx = eti->edit_ctx;
|
||||
|
||||
eti->editing_col = -1;
|
||||
eti->editing_row = -1;
|
||||
eti->edit_ctx = NULL;
|
||||
|
||||
e_cell_leave_edit (eti->cell_views [col],
|
||||
view_to_model_col(eti, col),
|
||||
col, row, edit_ctx);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
|
||||
@ -40,6 +40,7 @@ typedef struct {
|
||||
*/
|
||||
int header_dim_change_id;
|
||||
int header_structure_change_id;
|
||||
int table_model_pre_change_id;
|
||||
int table_model_change_id;
|
||||
int table_model_row_change_id;
|
||||
int table_model_cell_change_id;
|
||||
|
||||
@ -20,6 +20,7 @@ static GtkObjectClass *e_table_model_parent_class;
|
||||
|
||||
enum {
|
||||
MODEL_CHANGED,
|
||||
MODEL_PRE_CHANGE,
|
||||
MODEL_ROW_CHANGED,
|
||||
MODEL_CELL_CHANGED,
|
||||
MODEL_ROW_INSERTED,
|
||||
@ -176,6 +177,14 @@ e_table_model_class_init (GtkObjectClass *object_class)
|
||||
gtk_marshal_NONE__NONE,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
e_table_model_signals [MODEL_PRE_CHANGE] =
|
||||
gtk_signal_new ("model_pre_change",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableModelClass, model_pre_change),
|
||||
gtk_marshal_NONE__NONE,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
e_table_model_signals [MODEL_ROW_CHANGED] =
|
||||
gtk_signal_new ("model_row_changed",
|
||||
GTK_RUN_LAST,
|
||||
@ -255,6 +264,16 @@ e_table_model_get_type (void)
|
||||
return type;
|
||||
}
|
||||
|
||||
void
|
||||
e_table_model_pre_change (ETableModel *e_table_model)
|
||||
{
|
||||
g_return_if_fail (e_table_model != NULL);
|
||||
g_return_if_fail (E_IS_TABLE_MODEL (e_table_model));
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (e_table_model),
|
||||
e_table_model_signals [MODEL_PRE_CHANGE]);
|
||||
}
|
||||
|
||||
void
|
||||
e_table_model_changed (ETableModel *e_table_model)
|
||||
{
|
||||
|
||||
@ -50,6 +50,8 @@ typedef struct {
|
||||
* A row inserted: row_inserted
|
||||
* A row deleted: row_deleted
|
||||
*/
|
||||
void (*model_pre_change) (ETableModel *etm);
|
||||
|
||||
void (*model_changed) (ETableModel *etm);
|
||||
void (*model_row_changed) (ETableModel *etm, int row);
|
||||
void (*model_cell_changed) (ETableModel *etm, int col, int row);
|
||||
@ -76,6 +78,7 @@ char *e_table_model_value_to_string (ETableModel *e_table_model, int col,
|
||||
/*
|
||||
* Routines for emitting signals on the e_table
|
||||
*/
|
||||
void e_table_model_pre_change (ETableModel *e_table_model);
|
||||
void e_table_model_changed (ETableModel *e_table_model);
|
||||
void e_table_model_row_changed (ETableModel *e_table_model, int row);
|
||||
void e_table_model_cell_changed (ETableModel *e_table_model, int col, int row);
|
||||
|
||||
@ -169,8 +169,12 @@ etsv_add_all (ETableSubsetVariable *etssv)
|
||||
ETableModel *etm = E_TABLE_MODEL(etssv);
|
||||
ETableSubset *etss = E_TABLE_SUBSET(etssv);
|
||||
ETableSortedVariable *etsv = E_TABLE_SORTED_VARIABLE (etssv);
|
||||
int rows = e_table_model_row_count(etss->source);
|
||||
int rows;
|
||||
int i;
|
||||
|
||||
e_table_model_pre_change(etm);
|
||||
|
||||
rows = e_table_model_row_count(etss->source);
|
||||
|
||||
if (etss->n_map + rows > etssv->n_vals_allocated){
|
||||
etssv->n_vals_allocated += MAX(INCREMENT_AMOUNT, rows);
|
||||
@ -285,13 +289,17 @@ etsv_sort(ETableSortedVariable *etsv)
|
||||
ETableSubset *etss = E_TABLE_SUBSET(etsv);
|
||||
static int reentering = 0;
|
||||
int rows = E_TABLE_SUBSET(etsv)->n_map;
|
||||
int total_rows = e_table_model_row_count(E_TABLE_SUBSET(etsv)->source);
|
||||
int total_rows;
|
||||
int i;
|
||||
int j;
|
||||
int cols;
|
||||
if (reentering)
|
||||
return;
|
||||
reentering = 1;
|
||||
|
||||
e_table_model_pre_change(E_TABLE_MODEL(etsv));
|
||||
|
||||
total_rows = e_table_model_row_count(E_TABLE_SUBSET(etsv)->source);
|
||||
cols = e_table_sort_info_sorting_get_count(etsv->sort_info);
|
||||
cols_closure = cols;
|
||||
etsv_closure = etsv;
|
||||
|
||||
@ -30,6 +30,8 @@ etssv_add (ETableSubsetVariable *etssv,
|
||||
ETableSubset *etss = E_TABLE_SUBSET(etssv);
|
||||
int i;
|
||||
|
||||
e_table_model_pre_change(etm);
|
||||
|
||||
if (etss->n_map + 1 > etssv->n_vals_allocated){
|
||||
etss->map_table = g_realloc (etss->map_table, (etssv->n_vals_allocated + INCREMENT_AMOUNT) * sizeof(int));
|
||||
etssv->n_vals_allocated += INCREMENT_AMOUNT;
|
||||
@ -48,9 +50,12 @@ etssv_add_all (ETableSubsetVariable *etssv)
|
||||
{
|
||||
ETableModel *etm = E_TABLE_MODEL(etssv);
|
||||
ETableSubset *etss = E_TABLE_SUBSET(etssv);
|
||||
int rows = e_table_model_row_count(etss->source);
|
||||
int rows;
|
||||
int i;
|
||||
|
||||
e_table_model_pre_change(etm);
|
||||
|
||||
rows = e_table_model_row_count(etss->source);
|
||||
if (etss->n_map + rows > etssv->n_vals_allocated){
|
||||
etssv->n_vals_allocated += MAX(INCREMENT_AMOUNT, rows);
|
||||
etss->map_table = g_realloc (etss->map_table, etssv->n_vals_allocated * sizeof(int));
|
||||
@ -72,6 +77,7 @@ etssv_remove (ETableSubsetVariable *etssv,
|
||||
|
||||
for (i = 0; i < etss->n_map; i++){
|
||||
if (etss->map_table[i] == row) {
|
||||
e_table_model_pre_change (etm);
|
||||
memmove (etss->map_table + i, etss->map_table + i + 1, (etss->n_map - i - 1) * sizeof(int));
|
||||
etss->n_map --;
|
||||
|
||||
|
||||
@ -25,6 +25,8 @@ etss_destroy (GtkObject *object)
|
||||
if (etss->source)
|
||||
gtk_object_unref (GTK_OBJECT (etss->source));
|
||||
|
||||
gtk_signal_disconnect (GTK_OBJECT (etss->source),
|
||||
etss->table_model_pre_change_id);
|
||||
gtk_signal_disconnect (GTK_OBJECT (etss->source),
|
||||
etss->table_model_changed_id);
|
||||
gtk_signal_disconnect (GTK_OBJECT (etss->source),
|
||||
@ -32,6 +34,7 @@ etss_destroy (GtkObject *object)
|
||||
gtk_signal_disconnect (GTK_OBJECT (etss->source),
|
||||
etss->table_model_cell_changed_id);
|
||||
|
||||
etss->table_model_pre_change_id = 0;
|
||||
etss->table_model_changed_id = 0;
|
||||
etss->table_model_row_changed_id = 0;
|
||||
etss->table_model_cell_changed_id = 0;
|
||||
@ -152,6 +155,12 @@ etss_class_init (GtkObjectClass *klass)
|
||||
|
||||
E_MAKE_TYPE(e_table_subset, "ETableSubset", ETableSubset, etss_class_init, NULL, PARENT_TYPE);
|
||||
|
||||
static void
|
||||
etss_proxy_model_pre_change (ETableModel *etm, ETableSubset *etss)
|
||||
{
|
||||
e_table_model_pre_change (E_TABLE_MODEL (etss));
|
||||
}
|
||||
|
||||
static void
|
||||
etss_proxy_model_changed (ETableModel *etm, ETableSubset *etss)
|
||||
{
|
||||
@ -206,6 +215,8 @@ e_table_subset_construct (ETableSubset *etss, ETableModel *source, int nvals)
|
||||
for (i = 0; i < nvals; i++)
|
||||
etss->map_table [i] = i;
|
||||
|
||||
etss->table_model_pre_change_id = gtk_signal_connect (GTK_OBJECT (source), "model_pre_change",
|
||||
GTK_SIGNAL_FUNC (etss_proxy_model_pre_change), etss);
|
||||
etss->table_model_changed_id = gtk_signal_connect (GTK_OBJECT (source), "model_changed",
|
||||
GTK_SIGNAL_FUNC (etss_proxy_model_changed), etss);
|
||||
etss->table_model_row_changed_id = gtk_signal_connect (GTK_OBJECT (source), "model_row_changed",
|
||||
|
||||
@ -18,6 +18,7 @@ typedef struct {
|
||||
int n_map;
|
||||
int *map_table;
|
||||
|
||||
int table_model_pre_change_id;
|
||||
int table_model_changed_id;
|
||||
int table_model_row_changed_id;
|
||||
int table_model_cell_changed_id;
|
||||
|
||||
Reference in New Issue
Block a user