X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-data-store.c;h=6af1b2246088243905add8ac7d9468df4a403b64;hb=1d5a97ba2afec23855a8294ff2814ab052f6777a;hp=d75348584211afe2e72b3dbe5da8f8975c6d7fc9;hpb=75fe94ea24fd7b12a0d99b8f36a79d8423e668d4;p=pspp-builds.git diff --git a/src/ui/gui/psppire-data-store.c b/src/ui/gui/psppire-data-store.c index d7534858..6af1b224 100644 --- a/src/ui/gui/psppire-data-store.c +++ b/src/ui/gui/psppire-data-store.c @@ -77,7 +77,7 @@ static GObjectClass *parent_class = NULL; enum {FONT_CHANGED, n_SIGNALS}; -static guint signal[n_SIGNALS]; +static guint signals [n_SIGNALS]; inline GType @@ -152,7 +152,7 @@ psppire_data_store_class_init (PsppireDataStoreClass *class) object_class->finalize = psppire_data_store_finalize; - signal[FONT_CHANGED] = + signals [FONT_CHANGED] = g_signal_new ("font_changed", G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_FIRST, @@ -286,6 +286,25 @@ delete_variables_callback (GObject *obj, gint var_num, gint n_vars, gpointer dat var_num, -1); } + +static void +variable_changed_callback (GObject *obj, gint var_num, gpointer data) +{ + PsppireDataStore *store; + + g_return_if_fail (data); + + store = PSPPIRE_DATA_STORE (data); + + g_sheet_column_columns_changed (G_SHEET_COLUMN (store), + var_num, 1); + + + g_sheet_model_range_changed (G_SHEET_MODEL (store), + -1, var_num, + -1, var_num); +} + static void insert_variable_callback (GObject *obj, gint var_num, gpointer data) { @@ -298,8 +317,10 @@ insert_variable_callback (GObject *obj, gint var_num, gpointer data) if ( var_num > 0 ) { - struct variable *variable; - variable = psppire_dict_get_variable (store->dict, var_num); + struct variable *variable = + psppire_dict_get_variable (store->dict, var_num); + + g_assert (variable != NULL); posn = var_get_case_index (variable); } @@ -348,7 +369,6 @@ psppire_data_store_new (PsppireDict *dict) psppire_data_store_set_dictionary (retval, dict); - return retval; } @@ -365,8 +385,6 @@ psppire_data_store_new (PsppireDict *dict) void psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *dict) { - gint var_cnt = psppire_dict_get_next_value_idx (dict); - data_store->dict = dict; if ( data_store->case_file) @@ -375,7 +393,9 @@ psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *di data_store->case_file = 0; } - data_store->case_file = psppire_case_file_new (var_cnt); + data_store->case_file = psppire_case_file_new (); + + g_signal_connect (data_store->case_file, "cases-deleted", G_CALLBACK (delete_cases_callback), @@ -398,6 +418,11 @@ psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *di G_CALLBACK (delete_variables_callback), data_store); + g_signal_connect (dict, "variable-changed", + G_CALLBACK (variable_changed_callback), + data_store); + + g_signal_connect (dict, "dict-size-changed", G_CALLBACK (dict_size_change_callback), data_store); @@ -474,8 +499,12 @@ psppire_data_store_get_string (const GSheetModel *model, gint row, gint column) pv = psppire_dict_get_variable (store->dict, column); + g_assert (pv); + idx = var_get_case_index (pv); + g_assert (idx >= 0); + v = psppire_case_file_get_value (store->case_file, row, idx); g_return_val_if_fail (v, NULL); @@ -585,7 +614,7 @@ psppire_data_store_set_font (PsppireDataStore *store, #if 0 store->width_of_m = calc_m_width (fd); #endif - g_signal_emit (store, signal[FONT_CHANGED], 0); + g_signal_emit (store, signals [FONT_CHANGED], 0); g_sheet_model_range_changed (G_SHEET_MODEL (store), @@ -821,3 +850,4 @@ psppire_data_store_sheet_row_init (GSheetRowIface *iface) iface->get_button_label = geometry_get_row_button_label; } +