}
+/*
+ A callback which occurs after a variable has been deleted.
+ */
static void
-delete_variables_callback (GObject *obj, gint var_num, gint n_vars, gpointer data)
+delete_variable_callback (GObject *obj, gint dict_index,
+ gint case_index, gint val_cnt,
+ gpointer data)
{
- PsppireDataStore *store ;
+ PsppireDataStore *store = PSPPIRE_DATA_STORE (data);
- g_return_if_fail (data);
-
- store = PSPPIRE_DATA_STORE (data);
-
- g_sheet_model_columns_deleted (G_SHEET_MODEL (store), var_num, n_vars);
+ g_sheet_model_columns_deleted (G_SHEET_MODEL (store), dict_index, 1);
g_sheet_column_columns_changed (G_SHEET_COLUMN (store),
- var_num, -1);
+ dict_index, -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);
+ PsppireDataStore *store = PSPPIRE_DATA_STORE (data);
g_sheet_column_columns_changed (G_SHEET_COLUMN (store),
var_num, 1);
dict_size_change_callback (GObject *obj,
gint posn, gint adjustment, gpointer data)
{
- PsppireDataStore *store ;
+ PsppireDataStore *store = PSPPIRE_DATA_STORE (data);
- g_return_if_fail (data);
+ const struct variable *v = psppire_dict_get_variable (store->dict, posn);
- store = PSPPIRE_DATA_STORE (data);
+ const gint new_val_width = value_cnt_from_width (var_get_width (v));
- psppire_case_file_insert_values (store->case_file, adjustment, posn);
+ if ( adjustment > 0 )
+ psppire_case_file_insert_values (store->case_file, adjustment,
+ new_val_width - adjustment +
+ var_get_case_index(v));
}
data_store->case_file = cf;
+ g_sheet_model_range_changed (G_SHEET_MODEL (data_store),
+ -1, -1, -1, -1);
+
+
g_signal_connect (data_store->case_file, "cases-deleted",
G_CALLBACK (delete_cases_callback),
data_store);
G_CALLBACK (insert_variable_callback),
data_store);
- g_signal_connect (dict, "variables-deleted",
- G_CALLBACK (delete_variables_callback),
+ g_signal_connect (dict, "variable-deleted",
+ G_CALLBACK (delete_variable_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);
(* parent_class->finalize) (object);
}
+gboolean
+psppire_data_store_delete_cases (PsppireDataStore *ds,
+ casenumber first, casenumber count)
+{
+ g_return_val_if_fail (ds, FALSE);
+
+ return psppire_case_file_delete_cases (ds->case_file, count, first);
+}
+
/* Insert a blank case before POSN */
return TRAILING_ROWS + psppire_case_file_get_case_count (ds->case_file);
}
+#define ROW_HEIGHT 25
static gint
geometry_get_height (const GSheetRow *geom, glong unit, gpointer data)
{
- return 25;
+ return ROW_HEIGHT;
+}
+
+static guint
+geometry_get_top_ypixel (const GSheetRow *geo, glong row, gpointer data)
+{
+ return row * ROW_HEIGHT;
+}
+
+static glong
+geometry_pixel_to_row (const GSheetRow *geo, guint pixel, gpointer data)
+{
+ glong row = pixel / ROW_HEIGHT;
+
+ if (row >= geometry_get_row_count (geo, data))
+ row = geometry_get_row_count (geo, data) -1;
+
+ return row;
}
return text;
}
-
static void
psppire_data_store_sheet_row_init (GSheetRowIface *iface)
{
iface->set_height = 0;
iface->get_visibility = always_true;
iface->get_sensitivity = geometry_get_row_sensitivity;
-
+ iface->top_ypixel = geometry_get_top_ypixel;
+ iface->pixel_to_row = geometry_pixel_to_row;
iface->get_button_label = geometry_get_row_button_label;
}