static void insert_variable (GtkAction *, gpointer data);
+static void insert_case (GtkAction *a, gpointer data);
+
+
/* Switch between the VAR SHEET and the DATA SHEET */
G_CALLBACK (insert_variable), de);
-
- g_signal_connect (de->insert_variable, "activate",
- G_CALLBACK (insert_variable), de);
-
-
gtk_action_connect_proxy (de->insert_variable,
get_widget_assert (de->xml, "button-insert-variable")
);
get_widget_assert (de->xml, "data_insert-variable")
);
+
+ de->insert_case =
+ gtk_action_new ("insert-case",
+ _("Insert Case"),
+ _("Create a new case at the current position"),
+ "pspp-insert-case");
+
+ g_signal_connect (de->insert_case, "activate",
+ G_CALLBACK (insert_case), de);
+
+
+ gtk_action_connect_proxy (de->insert_case,
+ get_widget_assert (de->xml, "button-insert-case")
+ );
+
+
+ gtk_action_connect_proxy (de->insert_case,
+ get_widget_assert (de->xml, "data_insert-case")
+ );
+
+
+
de->invoke_goto_dialog =
gtk_action_new ("goto-case-dialog",
_("Goto Case"),
G_CALLBACK (reference_manual),
e->window);
- g_signal_connect (get_widget_assert (de->xml,"data_sheet"),
+ g_signal_connect (data_sheet,
"double-click-column",
G_CALLBACK (click2column),
de);
- g_signal_connect (get_widget_assert (de->xml, "variable_sheet"),
+ g_signal_connect (data_sheet,
+ "select-row",
+ GTK_SIGNAL_FUNC (enable_edit_clear),
+ de);
+
+ g_signal_connect (data_sheet,
+ "activate",
+ GTK_SIGNAL_FUNC (disable_edit_clear),
+ de);
+
+ g_signal_connect (var_sheet,
"double-click-row",
GTK_SIGNAL_FUNC (click2row),
de);
- g_signal_connect (get_widget_assert (de->xml, "variable_sheet"),
+ g_signal_connect (var_sheet,
"select-row",
GTK_SIGNAL_FUNC (enable_edit_clear),
de);
static void
select_sheet (struct data_editor *de, guint page_num)
{
- GtkWidget *insert_variable = get_widget_assert (de->xml, "data_insert-variable");
- GtkWidget *insert_cases = get_widget_assert (de->xml, "insert-cases");
-
GtkWidget *view_data = get_widget_assert (de->xml, "view_data");
GtkWidget *view_variables = get_widget_assert (de->xml, "view_variables");
case PAGE_VAR_SHEET:
gtk_widget_hide (view_variables);
gtk_widget_show (view_data);
- gtk_widget_set_sensitive (insert_variable, TRUE);
- gtk_widget_set_sensitive (insert_cases, FALSE);
+ gtk_action_set_sensitive (de->insert_variable, TRUE);
+ gtk_action_set_sensitive (de->insert_case, FALSE);
gtk_action_set_sensitive (de->invoke_goto_dialog, FALSE);
break;
case PAGE_DATA_SHEET:
gtk_widget_show (view_variables);
gtk_widget_hide (view_data);
gtk_action_set_sensitive (de->invoke_goto_dialog, TRUE);
+ gtk_action_set_sensitive (de->insert_case, TRUE);
break;
default:
g_assert_not_reached ();
}
-
/* Callback for when the Clear item in the edit menu is activated */
static void
on_clear_activate (GtkMenuItem *menuitem, gpointer data)
{
struct data_editor *de = data;
+ GtkSheet *sheet = NULL;
+ GtkSheetRange range ;
+
GtkNotebook *notebook = GTK_NOTEBOOK (get_widget_assert (de->xml,
"notebook"));
- switch ( gtk_notebook_get_current_page (notebook) )
+ const gint page = gtk_notebook_get_current_page (notebook);
+
+ sheet = GTK_SHEET
+ (get_widget_assert (de->xml,
+ (page == PAGE_VAR_SHEET) ? "variable_sheet" : "data_sheet"));
+
+ /* This shouldn't be able to happen, because the menuitem
+ should be disabled */
+ g_return_if_fail (gtk_sheet_get_state (sheet) == GTK_SHEET_ROW_SELECTED );
+
+
+ gtk_sheet_get_selected_range (sheet, &range);
+
+ switch ( page )
{
case PAGE_VAR_SHEET:
{
- GtkSheet *var_sheet =
- GTK_SHEET (get_widget_assert (de->xml, "variable_sheet"));
-
PsppireVarStore *vs = PSPPIRE_VAR_STORE
- (gtk_sheet_get_model (var_sheet) );
+ (gtk_sheet_get_model (sheet) );
- /* This shouldn't be able to happen, because the menuitem
- should be disabled */
- g_return_if_fail (var_sheet->state == GTK_SHEET_ROW_SELECTED );
psppire_dict_delete_variables (vs->dict,
- var_sheet->range.row0,
+ range.row0,
1 +
- var_sheet->range.rowi -
- var_sheet->range.row0 );
+ range.rowi -
+ range.row0 );
}
break;
- case PAGE_DATA_SHEET:
- break;
- default:
- g_assert_not_reached ();
+ case PAGE_DATA_SHEET:
+ {
+ PsppireDataStore *data_store = PSPPIRE_DATA_STORE
+ (gtk_sheet_get_model (sheet) );
+
+
+ /* This shouldn't be able to happen, because the menuitem
+ should be disabled */
+ g_return_if_fail (gtk_sheet_get_state (sheet)
+ == GTK_SHEET_ROW_SELECTED );
+
+
+ psppire_data_store_delete_cases (data_store, range.row0,
+ 1 + range.rowi - range.row0);
+ }
+ break;
+ default:
+ g_assert_not_reached ();
}
+
+ gtk_sheet_unselect_range (sheet);
}
+static void
+insert_case (GtkAction *action, gpointer data)
+{
+ gint current_row ;
+ struct data_editor *de = data;
+
+ GtkSheet *data_sheet =
+ GTK_SHEET (get_widget_assert (de->xml, "data_sheet"));
+
+ PsppireDataStore *ds = PSPPIRE_DATA_STORE
+ (gtk_sheet_get_model (data_sheet) );
+
+
+ gtk_sheet_get_active_cell (data_sheet, ¤t_row, NULL);
+
+ if (current_row < 0) current_row = 0;
+
+ psppire_data_store_insert_new_case (ds, current_row);
+}
/* Insert a new variable before the current row in the variable sheet,
or before the current column in the data sheet, whichever is selected */