[Top][All Lists]
[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) \
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pspp-cvs] pspp/src data/ChangeLog data/procedure.c data/p...,
John Darrington <=