pspp-cvs
[Top][All Lists]
Advanced

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

[Pspp-cvs] pspp/src data/ChangeLog data/procedure.c data/p...


From: John Darrington
Subject: [Pspp-cvs] pspp/src data/ChangeLog data/procedure.c data/p...
Date: Thu, 26 Jul 2007 02:02:23 +0000

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

Modified files:
        src/data       : ChangeLog procedure.c procedure.h 
        src/ui/gui     : ChangeLog data-editor.c data-editor.glade 
                         helper.c helper.h 

Log message:
        Patch #6086. Adds "transformation pending" state.
        Thanks to Ben for the review.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/ChangeLog?cvsroot=pspp&r1=1.143&r2=1.144
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/procedure.c?cvsroot=pspp&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/pspp/src/data/procedure.h?cvsroot=pspp&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/ChangeLog?cvsroot=pspp&r1=1.72&r2=1.73
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/data-editor.c?cvsroot=pspp&r1=1.43&r2=1.44
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/data-editor.glade?cvsroot=pspp&r1=1.27&r2=1.28
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/helper.c?cvsroot=pspp&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/helper.h?cvsroot=pspp&r1=1.15&r2=1.16

Patches:
Index: data/ChangeLog
===================================================================
RCS file: /sources/pspp/pspp/src/data/ChangeLog,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -b -r1.143 -r1.144
--- data/ChangeLog      25 Jul 2007 04:32:14 -0000      1.143
+++ data/ChangeLog      26 Jul 2007 02:02:22 -0000      1.144
@@ -1,3 +1,8 @@
+2007-07-26 John Darrington <address@hidden>
+
+       * procedure.c procedure.h: Added callbacks which get invoked whenever 
+       a dataset's transformation chain changes.
+
 2007-07-24  Ben Pfaff  <address@hidden>
 
        Fix bug #6113.

Index: data/procedure.c
===================================================================
RCS file: /sources/pspp/pspp/src/data/procedure.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- data/procedure.c    7 Jul 2007 06:14:09 -0000       1.32
+++ data/procedure.c    26 Jul 2007 02:02:23 -0000      1.33
@@ -37,6 +37,7 @@
 #include <libpspp/str.h>
 #include <libpspp/taint.h>
 
+
 struct dataset {
   /* Cases are read from source,
      their transformation variables are initialized,
@@ -61,6 +62,11 @@
   /* Callback which occurs whenever the DICT is replaced by a new one */
   replace_dictionary_callback *replace_dict;
 
+  /* Callback which occurs whenever the transformation chain(s) have
+     been modified */
+  transformation_change_callback_func *xform_callback;
+  void *xform_callback_aux;
+
   /* If true, cases are discarded instead of being written to
      sink. */
   bool discard_output;
@@ -384,6 +390,10 @@
   assert (ds->temporary_trns_chain == NULL);
   chain = ds->permanent_trns_chain;
   ds->cur_trns_chain = ds->permanent_trns_chain = trns_chain_create ();
+
+  if ( ds->xform_callback)
+    ds->xform_callback (false, ds->xform_callback_aux);
+
   return chain;
 }
 
@@ -394,6 +404,8 @@
 add_transformation (struct dataset *ds, trns_proc_func *proc, trns_free_func 
*free, void *aux)
 {
   trns_chain_append (ds->cur_trns_chain, NULL, proc, free, aux);
+  if ( ds->xform_callback)
+    ds->xform_callback (true, ds->xform_callback_aux);
 }
 
 /* Adds a transformation that processes a case with PROC and
@@ -408,6 +420,9 @@
                                    trns_free_func *free, void *aux)
 {
   trns_chain_append (ds->cur_trns_chain, finalize, proc, free, aux);
+
+  if ( ds->xform_callback)
+    ds->xform_callback (true, ds->xform_callback_aux);
 }
 
 /* Returns the index of the next transformation.
@@ -442,6 +457,9 @@
 
       trns_chain_finalize (ds->permanent_trns_chain);
       ds->temporary_trns_chain = ds->cur_trns_chain = trns_chain_create ();
+
+      if ( ds->xform_callback)
+       ds->xform_callback (true, ds->xform_callback_aux);
     }
 }
 
@@ -483,6 +501,10 @@
       trns_chain_destroy (ds->temporary_trns_chain);
       ds->temporary_trns_chain = NULL;
 
+      if ( ds->xform_callback)
+       ds->xform_callback (!trns_chain_is_empty (ds->permanent_trns_chain),
+                           ds->xform_callback_aux);
+
       return true;
     }
   else
@@ -500,23 +522,35 @@
   ok = trns_chain_destroy (ds->temporary_trns_chain) && ok;
   ds->permanent_trns_chain = ds->cur_trns_chain = trns_chain_create ();
   ds->temporary_trns_chain = NULL;
+  if ( ds->xform_callback)
+    ds->xform_callback (false, ds->xform_callback_aux);
+
   return ok;
 }
 
 /* Initializes procedure handling. */
 struct dataset *
-create_dataset (replace_source_callback *rps,
-               replace_dictionary_callback *rds)
+create_dataset (transformation_change_callback_func *cb, void *aux)
 {
   struct dataset *ds = xzalloc (sizeof(*ds));
   ds->dict = dict_create ();
   ds->caseinit = caseinit_create ();
-  ds->replace_source = rps;
-  ds->replace_dict = rds;
+  ds->xform_callback = cb;
+  ds->xform_callback_aux = aux;
   proc_cancel_all_transformations (ds);
   return ds;
 }
 
+
+void
+dataset_add_transform_change_callback (struct dataset *ds,
+                                      transformation_change_callback_func *cb,
+                                      void *aux)
+{
+  ds->xform_callback = cb;
+  ds->xform_callback_aux = aux;
+}
+
 /* Finishes up procedure handling. */
 void
 destroy_dataset (struct dataset *ds)
@@ -525,6 +559,9 @@
   dict_destroy (ds->dict);
   caseinit_destroy (ds->caseinit);
   trns_chain_destroy (ds->permanent_trns_chain);
+
+  if ( ds->xform_callback)
+    ds->xform_callback (false, ds->xform_callback_aux);
   free (ds);
 }
 

Index: data/procedure.h
===================================================================
RCS file: /sources/pspp/pspp/src/data/procedure.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- data/procedure.h    7 Jul 2007 06:14:09 -0000       1.16
+++ data/procedure.h    26 Jul 2007 02:02:23 -0000      1.17
@@ -51,12 +51,14 @@
 typedef void  replace_source_callback (struct casereader *);
 typedef void  replace_dictionary_callback (struct dictionary *);
 
+typedef void transformation_change_callback_func (bool non_empty, void *aux);
 
-struct dataset * create_dataset (replace_source_callback *,
-                                replace_dictionary_callback *);
-
+struct dataset * create_dataset (transformation_change_callback_func *, void 
*);
 void destroy_dataset (struct dataset *);
 
+void dataset_add_transform_change_callback (struct dataset *,
+                                           transformation_change_callback_func 
*, void *);
+
 void proc_discard_active_file (struct dataset *);
 void proc_set_active_file (struct dataset *,
                            struct casereader *, struct dictionary *);

Index: ui/gui/ChangeLog
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/ChangeLog,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -b -r1.72 -r1.73
--- ui/gui/ChangeLog    25 Jul 2007 01:33:02 -0000      1.72
+++ ui/gui/ChangeLog    26 Jul 2007 02:02:23 -0000      1.73
@@ -1,3 +1,11 @@
+2007-07-26  John Darrington <address@hidden>
+
+       * helper.c helper.h (execute_syntax): removed implicit EXECUTE at end 
+       of commands.
+
+       * data-editor.c data-editor.glade: Added "Run Pending Transformations" 
+       menuitem.
+
 2007-07-25  John Darrington <address@hidden>
 
        * customentry.c: Redraw button in insensitive state, if the widget's 

Index: ui/gui/data-editor.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/data-editor.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -b -r1.43 -r1.44
--- ui/gui/data-editor.c        24 Jul 2007 12:45:06 -0000      1.43
+++ ui/gui/data-editor.c        26 Jul 2007 02:02:23 -0000      1.44
@@ -26,6 +26,7 @@
 
 #include "helper.h"
 #include "about.h"
+#include <data/procedure.h>
 #include "psppire-dialog.h"
 #include "psppire-selector.h"
 #include "weight-cases-dialog.h"
@@ -119,6 +120,37 @@
 }
 
 
+
+/* Run the EXECUTE command. */
+static void
+execute (GtkMenuItem *mi, gpointer data)
+{
+  struct getl_interface *sss = create_syntax_string_source ("EXECUTE.");
+
+  execute_syntax (sss);
+}
+
+static void
+transformation_change_callback (bool transformations_pending,
+                               gpointer data)
+{
+  struct data_editor *de = data;
+  GtkWidget *menuitem =
+    get_widget_assert (de->xml, "transform_run-pending");
+  GtkWidget *status_label  =
+    get_widget_assert (de->xml, "case-counter-area");
+
+  gtk_widget_set_sensitive (menuitem, transformations_pending);
+
+
+  if ( transformations_pending)
+    gtk_label_set_text (GTK_LABEL (status_label),
+                       _("Transformations Pending"));
+  else
+    gtk_label_set_text (GTK_LABEL (status_label), "");
+}
+
+
 static void open_data_file (const gchar *, struct data_editor *);
 
 
@@ -184,6 +216,8 @@
   psppire_data_store_set_string (store, text, row, column);
 }
 
+extern struct dataset *the_dataset;
+
 /*
   Create a new data editor.
 */
@@ -203,6 +237,11 @@
 
   de->xml = XML_NEW ("data-editor.glade");
 
+
+  dataset_add_transform_change_callback (the_dataset,
+                                        transformation_change_callback,
+                                        de);
+
   var_sheet = GTK_SHEET (get_widget_assert (de->xml, "variable_sheet"));
   data_sheet = GTK_SHEET (get_widget_assert (de->xml, "data_sheet"));
 
@@ -614,6 +653,10 @@
                    "activate",
                    G_CALLBACK (file_quit), de);
 
+  g_signal_connect (get_widget_assert (de->xml, "transform_run-pending"),
+                   "activate",
+                   G_CALLBACK (execute), de);
+
 
   g_signal_connect (get_widget_assert (de->xml, "windows_minimise_all"),
                    "activate",

Index: ui/gui/data-editor.glade
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/data-editor.glade,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28
--- ui/gui/data-editor.glade    24 Jul 2007 06:24:01 -0000      1.27
+++ ui/gui/data-editor.glade    26 Jul 2007 02:02:23 -0000      1.28
@@ -399,6 +399,22 @@
                         <property name="use_underline">True</property>
                       </widget>
                     </child>
+                 <child>
+                   <widget class="GtkSeparatorMenuItem" id="separator7">
+                     <property name="visible">True</property>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkMenuItem" id="transform_run-pending">
+                     <property name="visible">True</property>
+                     <property name="sensitive">False</property>
+                     <property name="label" translatable="yes">_Run Pending 
Transforms</property>
+                     <property name="use_underline">True</property>
+                     <accelerator key="G" modifiers="GDK_CONTROL_MASK" 
signal="activate"/>
+                   </widget>
+                 </child>
+
                   </widget>
                 </child>
               </widget>
@@ -921,7 +937,7 @@
                     <child>
                       <widget class="GtkLabel" id="case-counter-area">
                         <property name="visible">True</property>
-                        <property name="width_chars">10</property>
+                        <property name="width_chars">25</property>
                         <property name="single_line_mode">True</property>
                       </widget>
                     </child>

Index: ui/gui/helper.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/helper.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- ui/gui/helper.c     18 Jul 2007 00:50:58 -0000      1.21
+++ ui/gui/helper.c     26 Jul 2007 02:02:23 -0000      1.22
@@ -164,17 +164,16 @@
 extern struct source_stream *the_source_stream;
 extern PsppireDataStore *the_data_store;
 
-gboolean
+void
 execute_syntax (struct getl_interface *sss)
 {
-  gboolean status;
   struct lexer *lexer;
 
   struct casereader *reader = psppire_data_store_get_reader (the_data_store);
 
   proc_set_active_file_data (the_dataset, reader);
 
-  g_return_val_if_fail (proc_has_active_file (the_dataset), FALSE);
+  g_return_if_fail (proc_has_active_file (the_dataset));
 
   lexer = lex_create (the_source_stream);
 
@@ -192,11 +191,6 @@
 
   lex_destroy (lexer);
 
-  /* GUI syntax needs this implicit EXECUTE command at the end of
-     every script.  Otherwise commands like GET could leave the GUI
-     without a datasheet. */
-  status = proc_execute (the_dataset);
-
   psppire_dict_replace_dictionary (the_data_store->dict,
                                   dataset_dict (the_dataset));
 
@@ -205,8 +199,6 @@
 
     psppire_data_store_set_case_file (the_data_store, pcf);
   }
-
-  return status;
 }
 
 

Index: ui/gui/helper.h
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/helper.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- ui/gui/helper.h     18 Jul 2007 00:50:59 -0000      1.15
+++ ui/gui/helper.h     26 Jul 2007 02:02:23 -0000      1.16
@@ -54,7 +54,7 @@
 void reference_manual (GtkMenuItem *, gpointer);
 
 struct getl_interface;
-gboolean execute_syntax (struct getl_interface *sss);
+void execute_syntax (struct getl_interface *sss);
 
 
 #define XML_NEW(FILE) \




reply via email to

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