pspp-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pspp-cvs] pspp lib/gtksheet/gtksheet.c lib/gtksheet/gtksh...


From: John Darrington
Subject: [Pspp-cvs] pspp lib/gtksheet/gtksheet.c lib/gtksheet/gtksh...
Date: Tue, 10 Jul 2007 07:40:02 +0000

CVSROOT:        /sources/pspp
Module name:    pspp
Changes by:     John Darrington <jmd>   07/07/10 07:40:02

Modified files:
        lib/gtksheet   : gtksheet.c gtksheet.h 
        src/ui/gui     : data-editor.c psppire-data-store.c 
                         psppire-data-store.h 

Log message:
        Enabled deletion of cases from the datasheet.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/gtksheet.c?cvsroot=pspp&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/gtksheet.h?cvsroot=pspp&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/data-editor.c?cvsroot=pspp&r1=1.36&r2=1.37
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-data-store.c?cvsroot=pspp&r1=1.45&r2=1.46
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-data-store.h?cvsroot=pspp&r1=1.16&r2=1.17

Patches:
Index: lib/gtksheet/gtksheet.c
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/gtksheet.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- lib/gtksheet/gtksheet.c     9 Jul 2007 05:21:12 -0000       1.21
+++ lib/gtksheet/gtksheet.c     10 Jul 2007 07:40:02 -0000      1.22
@@ -2215,6 +2215,8 @@
   gtk_sheet_real_select_range (sheet, NULL);
 }
 
+
+
 void
 gtk_sheet_clip_range (GtkSheet *sheet, const GtkSheetRange *range)
 {
@@ -4707,6 +4709,16 @@
   gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[SELECT_RANGE], 
&sheet->range);
 }
 
+
+void
+gtk_sheet_get_selected_range           (GtkSheet *sheet,
+                                        GtkSheetRange *range)
+{
+  g_return_if_fail (sheet != NULL);
+  *range = sheet->range;
+}
+
+
 void
 gtk_sheet_select_range (GtkSheet * sheet, const GtkSheetRange *range)
 {

Index: lib/gtksheet/gtksheet.h
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/gtksheet.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- lib/gtksheet/gtksheet.h     9 Jul 2007 05:21:12 -0000       1.11
+++ lib/gtksheet/gtksheet.h     10 Jul 2007 07:40:02 -0000      1.12
@@ -353,6 +353,11 @@
 void
 gtk_sheet_get_visible_range            (GtkSheet *sheet,
                                         GtkSheetRange *range);
+
+void
+gtk_sheet_get_selected_range           (GtkSheet *sheet,
+                                        GtkSheetRange *range);
+
 void
 gtk_sheet_set_selection_mode           (GtkSheet *sheet, gint mode);
 

Index: src/ui/gui/data-editor.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/data-editor.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -b -r1.36 -r1.37
--- src/ui/gui/data-editor.c    9 Jul 2007 05:21:12 -0000       1.36
+++ src/ui/gui/data-editor.c    10 Jul 2007 07:40:02 -0000      1.37
@@ -494,17 +494,27 @@
                    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);
@@ -844,42 +854,67 @@
 }
 
 
-
 /* 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:
+      {
+       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

Index: src/ui/gui/psppire-data-store.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-data-store.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -b -r1.45 -r1.46
--- src/ui/gui/psppire-data-store.c     9 Jul 2007 11:31:17 -0000       1.45
+++ src/ui/gui/psppire-data-store.c     10 Jul 2007 07:40:02 -0000      1.46
@@ -455,6 +455,15 @@
   (* 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 */

Index: src/ui/gui/psppire-data-store.h
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-data-store.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- src/ui/gui/psppire-data-store.h     8 Jul 2007 10:49:31 -0000       1.16
+++ src/ui/gui/psppire-data-store.h     10 Jul 2007 07:40:02 -0000      1.17
@@ -99,6 +99,10 @@
 
 gboolean psppire_data_store_insert_new_case (PsppireDataStore *ds, casenumber 
posn);
 
+
+gboolean psppire_data_store_delete_cases (PsppireDataStore *ds, casenumber 
first, casenumber count);
+
+
 struct casereader * psppire_data_store_get_reader (PsppireDataStore *ds);
 
 gchar * psppire_data_store_get_string (PsppireDataStore *ds,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]