From: John Darrington Date: Fri, 21 Sep 2007 01:53:58 +0000 (+0000) Subject: Added a BACKEND_CHANGED signal on PsppireDict, and handled it accordingly. X-Git-Tag: v0.6.0~260 X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ddf093b6f8428a45a14a24aaf17417d30777d9a3;p=pspp-builds.git Added a BACKEND_CHANGED signal on PsppireDict, and handled it accordingly. Closes bug #20821 --- diff --git a/lib/gtksheet/ChangeLog b/lib/gtksheet/ChangeLog index 011169e2..c8afa6e5 100644 --- a/lib/gtksheet/ChangeLog +++ b/lib/gtksheet/ChangeLog @@ -1,3 +1,8 @@ +21 Septempber 2007 John Darrington + + * gtksheet.c (range_update_callback): Scroll to cell 0,0 if the + current position is outside the model's range. + 24 July 2007 John Darrington * gtksheet.c gtksheet.h: Removed the `clip' feature, which IMO diff --git a/lib/gtksheet/gtksheet.c b/lib/gtksheet/gtksheet.c index 3830dac1..18922cf1 100644 --- a/lib/gtksheet/gtksheet.c +++ b/lib/gtksheet/gtksheet.c @@ -1320,6 +1320,15 @@ range_update_callback (GSheetModel *m, gint row0, gint col0, range.rowi = rowi; range.coli = coli; + if ( MAX_VISIBLE_ROW (sheet) > + g_sheet_model_get_row_count (sheet->model) + || + MAX_VISIBLE_COLUMN (sheet) > + g_sheet_model_get_column_count (sheet->model)) + { + gtk_sheet_move_query (sheet, 0, 0); + } + if ( ( row0 < 0 && col0 < 0 ) || ( rowi < 0 && coli < 0 ) ) { gint i; diff --git a/src/ui/gui/ChangeLog b/src/ui/gui/ChangeLog index a58adace..31453f01 100644 --- a/src/ui/gui/ChangeLog +++ b/src/ui/gui/ChangeLog @@ -1,3 +1,14 @@ +2007-09-27 John Darrington + + Addressing bug #20821: + + * psppire-dict.c: Added a BACKEND_CHANGED signal to indicate when + a PsppireDict's struct dictionary has been replaced. + + * psppire-var-store.c: Added the appropriate method for + get_column_count. Added a signal handler for dict:BACKEND_CHANGED, + which calls the g_sheet_model_range_changed for the entire sheet. + 2007-09-18 Ben Pfaff * helper.c (create_casereader_from_data_store): New function. diff --git a/src/ui/gui/psppire-dict.c b/src/ui/gui/psppire-dict.c index 8560c223..cf66ca13 100644 --- a/src/ui/gui/psppire-dict.c +++ b/src/ui/gui/psppire-dict.c @@ -42,14 +42,19 @@ static void dictionary_tree_model_init (GtkTreeModelIface *iface); /* --- variables --- */ static GObjectClass *parent_class = NULL; -enum {VARIABLE_CHANGED, - VARIABLE_RESIZED, - VARIABLE_INSERTED, - VARIABLE_DELETED, - WEIGHT_CHANGED, - FILTER_CHANGED, - SPLIT_CHANGED, - n_SIGNALS}; +enum { + BACKEND_CHANGED, + + VARIABLE_CHANGED, + VARIABLE_RESIZED, + VARIABLE_INSERTED, + VARIABLE_DELETED, + + WEIGHT_CHANGED, + FILTER_CHANGED, + SPLIT_CHANGED, + n_SIGNALS +}; static guint signals [n_SIGNALS]; @@ -106,6 +111,17 @@ psppire_dict_class_init (PsppireDictClass *class) object_class->finalize = psppire_dict_finalize; + signals [BACKEND_CHANGED] = + g_signal_new ("backend-changed", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + + signals [VARIABLE_CHANGED] = g_signal_new ("variable_changed", G_TYPE_FROM_CLASS (class), @@ -289,6 +305,7 @@ void psppire_dict_replace_dictionary (PsppireDict *dict, struct dictionary *d) { struct variable *var = dict_get_weight (d); + dict->dict = d; weight_changed_callback (d, var ? var_get_dict_index (var) : -1, dict); @@ -299,6 +316,8 @@ psppire_dict_replace_dictionary (PsppireDict *dict, struct dictionary *d) split_changed_callback (d, dict); dict_set_callbacks (dict->dict, &gui_callbacks, dict); + + g_signal_emit (dict, signals [BACKEND_CHANGED], 0); } diff --git a/src/ui/gui/psppire-var-store.c b/src/ui/gui/psppire-var-store.c index c296bfe2..f9b2d081 100644 --- a/src/ui/gui/psppire-var-store.c +++ b/src/ui/gui/psppire-var-store.c @@ -61,6 +61,7 @@ static gboolean psppire_var_store_set_string (GSheetModel *model, const gchar *text, glong row, glong column); static glong psppire_var_store_get_row_count (const GSheetModel * model); +static glong psppire_var_store_get_column_count (const GSheetModel * model); static gchar *text_for_column (const struct variable *pv, gint c, GError **err); @@ -223,10 +224,12 @@ psppire_var_store_get_font_desc (const GSheetModel *model, + static void psppire_var_store_sheet_model_init (GSheetModelIface *iface) { iface->get_row_count = psppire_var_store_get_row_count; + iface->get_column_count = psppire_var_store_get_column_count; iface->free_strings = TRUE; iface->get_string = psppire_var_store_get_string; iface->set_string = psppire_var_store_set_string; @@ -288,7 +291,13 @@ var_insert_callback (GtkWidget *w, glong row, gpointer data) g_sheet_model_rows_inserted (model, row, 1); } +static void +refresh (PsppireDict *d, gpointer data) +{ + PsppireVarStore *vs = data; + g_sheet_model_range_changed (G_SHEET_MODEL (vs), -1, -1, -1, -1); +} /** * psppire_var_store_replace_set_dictionary: @@ -311,9 +320,11 @@ psppire_var_store_set_dictionary (PsppireVarStore *var_store, PsppireDict *dict) g_signal_connect (dict, "variable-deleted", G_CALLBACK (var_delete_callback), var_store); - g_signal_connect (dict, "variable-inserted", G_CALLBACK (var_insert_callback), - var_store); + g_signal_connect (dict, "variable-inserted", + G_CALLBACK (var_insert_callback), var_store); + g_signal_connect (dict, "backend-changed", G_CALLBACK (refresh), + var_store); /* The entire model has changed */ g_sheet_model_range_changed (G_SHEET_MODEL (var_store), -1, -1, -1, -1); @@ -664,6 +675,13 @@ psppire_var_store_get_row_count (const GSheetModel * model) return rows ; } +static glong +psppire_var_store_get_column_count (const GSheetModel * model) +{ + return n_COLS ; +} + + /* Row related funcs */ static glong