(Re)enabled cell reference entry and datum entry widgets.
authorJohn Darrington <john@darrington.wattle.id.au>
Fri, 29 Jun 2007 05:14:32 +0000 (05:14 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Fri, 29 Jun 2007 05:14:32 +0000 (05:14 +0000)
src/ui/gui/ChangeLog
src/ui/gui/data-editor.c
src/ui/gui/data-editor.glade
src/ui/gui/psppire-data-store.c
src/ui/gui/psppire-data-store.h

index cb2cae257eb96ed0fb1e8bac33a51299af8e33e9..c3b28138eaba2faab054abd14e99f010ff14ab8f 100644 (file)
@@ -1,3 +1,9 @@
+2007-06-29  John Darrington <john@darrington.wattle.id.au>
+
+       * data-editor.c data-editor.glade psppire-data-store.c 
+       psppire-data-store.h: Enabled cell reference entry and datum 
+       entry widgets.
+
 2007-06-29  John Darrington <john@darrington.wattle.id.au>
 
        * data-editor.c data-sheet.c: Moved update_cell_ref_entry from 
index 2f15096c3f274cf8140457c139ba9cfe2f0b95be..a8b3d5e3549fd4555ea42390b603c9fde03c5e70 100644 (file)
@@ -171,7 +171,22 @@ on_recent_files_select (GtkMenuShell *menushell,   gpointer user_data)
 
 #endif
 
+static void
+datum_entry_activate (GtkEntry *entry, gpointer data)
+{
+  gint row, column;
+  GtkSheet *data_sheet = GTK_SHEET (data);
+  PsppireDataStore *store = PSPPIRE_DATA_STORE (gtk_sheet_get_model (data_sheet));
+
+  const char *text = gtk_entry_get_text (entry);
 
+  gtk_sheet_get_active_cell (data_sheet, &row, &column);
+
+  if ( row == -1 || column == -1)
+    return;
+
+  psppire_data_store_set_string (store, text, row, column);
+}
 
 /*
   Create a new data editor.
@@ -184,6 +199,7 @@ new_data_editor (void)
   GtkSheet *var_sheet ;
   GtkSheet *data_sheet ;
   PsppireVarStore *vs;
+  GtkWidget *datum_entry;
 
   de = g_malloc0 (sizeof (*de));
 
@@ -202,6 +218,12 @@ new_data_editor (void)
                    G_CALLBACK (update_data_ref_entry),
                    de->xml);
 
+  datum_entry = get_widget_assert (de->xml, "datum_entry");
+
+  g_signal_connect (G_OBJECT (datum_entry), "activate",
+                   G_CALLBACK (datum_entry_activate),
+                   data_sheet);
+
   g_signal_connect (vs->dict, "weight-changed",
                    G_CALLBACK (on_weight_change),
                    de);
@@ -302,9 +324,6 @@ new_data_editor (void)
                            de->action_data_open);
 
 
-
-
-
 #if RECENT_LISTS_AVAILABLE
   {
     GtkRecentManager *rm = gtk_recent_manager_get_default ();
@@ -1247,34 +1266,47 @@ update_data_ref_entry (const GtkSheet *sheet, gint row, gint col, gpointer data)
 {
   GladeXML *data_editor_xml = data;
 
-  /* The entry where the reference to the current cell is displayed */
-  GtkEntry *cell_ref_entry;
-
   PsppireDataStore *data_store = PSPPIRE_DATA_STORE (gtk_sheet_get_model (sheet));
 
   g_return_val_if_fail (data_editor_xml, FALSE);
 
   if (data_store)
     {
-      const struct variable *pv =
+      const struct variable *var =
        psppire_dict_get_variable (data_store->dict, col);
 
-      gchar *text ;
-      gchar *s ;
+      {
+       /* The entry where the reference to the current cell is displayed */
+       GtkEntry *cell_ref_entry =
+         GTK_ENTRY (get_widget_assert (data_editor_xml,
+                                       "cell_ref_entry"));
 
-      text = g_strdup_printf ("%d: %s", row,
-                            pv ? var_get_name (pv) : "");
+       gchar *text = g_strdup_printf ("%d: %s", row,
+                                      var ? var_get_name (var) : "");
 
-      cell_ref_entry = GTK_ENTRY (get_widget_assert (data_editor_xml,
-                                                  "cell_ref_entry"));
+       gchar *s = pspp_locale_to_utf8 (text, -1, 0);
 
-      s = pspp_locale_to_utf8 (text, -1, 0);
+       g_free (text);
 
-      g_free (text);
+       gtk_entry_set_text (cell_ref_entry, s);
 
-      gtk_entry_set_text (cell_ref_entry, s);
+       g_free (s);
+      }
 
-      g_free (s);
+      {
+       GtkEntry *datum_entry =
+         GTK_ENTRY (get_widget_assert (data_editor_xml,
+                                       "datum_entry"));
+
+       gchar *text =
+         psppire_data_store_get_string (data_store, row,
+                                        var_get_dict_index(var));
+       g_strchug (text);
+
+       gtk_entry_set_text (datum_entry, text);
+
+       free (text);
+      }
     }
 
   return FALSE;
index 63ddf452f462662425830df6969c8d1c84806071..afdfe004ee9f25b6c0cbbbcf3a20f4a83eb9f1d9 100644 (file)
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkEntry" id="entry4">
+                      <widget class="GtkEntry" id="datum_entry">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                       </widget>
index c7d94cee81dc66270f74ea61176da0b7f96cdb3e..af205ccde2c8613c6653ccfe61449b5b459435c2 100644 (file)
@@ -58,11 +58,6 @@ static void psppire_data_store_sheet_row_init (GSheetRowIface *iface);
 
 static void psppire_data_store_finalize        (GObject           *object);
 
-static gchar *psppire_data_store_get_string (const GSheetModel *sheet_model, gint row, gint column);
-
-static gboolean psppire_data_store_set_string (GSheetModel *model,
-                                         const gchar *text, gint row, gint column);
-
 static gboolean psppire_data_store_clear_datum (GSheetModel *model,
                                          gint row, gint column);
 
@@ -199,13 +194,32 @@ psppire_data_store_get_font_desc (const GSheetModel *model,
   return store->font_desc;
 }
 
+static inline gchar *
+psppire_data_store_get_string_wrapper (const GSheetModel *model, gint row,
+                                      gint column)
+{
+  return psppire_data_store_get_string (PSPPIRE_DATA_STORE (model), row, column);
+}
+
+
+static inline gboolean
+psppire_data_store_set_string_wrapper (GSheetModel *model,
+                                      const gchar *text,
+                                      gint row, gint column)
+{
+  return psppire_data_store_set_string (PSPPIRE_DATA_STORE (model), text,
+                                       row, column);
+}
+
+
+
 
 static void
 psppire_data_store_sheet_model_init (GSheetModelIface *iface)
 {
   iface->free_strings = TRUE;
-  iface->get_string = psppire_data_store_get_string;
-  iface->set_string = psppire_data_store_set_string;
+  iface->get_string = psppire_data_store_get_string_wrapper;
+  iface->set_string = psppire_data_store_set_string_wrapper;
   iface->clear_datum = psppire_data_store_clear_datum;
   iface->is_editable = NULL;
   iface->is_visible = NULL;
@@ -480,8 +494,8 @@ psppire_data_store_insert_new_case (PsppireDataStore *ds, gint posn)
 }
 
 
-static gchar *
-psppire_data_store_get_string (const GSheetModel *model, gint row, gint column)
+gchar *
+psppire_data_store_get_string (PsppireDataStore *store, gint row, gint column)
 {
   gint idx;
   char *text;
@@ -489,7 +503,6 @@ psppire_data_store_get_string (const GSheetModel *model, gint row, gint column)
   const struct variable *pv ;
   union value *v ;
   GString *s;
-  PsppireDataStore *store = PSPPIRE_DATA_STORE (model);
 
   g_return_val_if_fail (store->dict, NULL);
   g_return_val_if_fail (store->case_file, NULL);
@@ -575,12 +588,10 @@ psppire_data_store_clear_datum (GSheetModel *model,
    to ROW, COL with  the value TEXT.
    Returns true if anything was updated, false otherwise.
 */
-static gboolean
-psppire_data_store_set_string (GSheetModel *model,
-                         const gchar *text, gint row, gint col)
+gboolean
+psppire_data_store_set_string (PsppireDataStore *store,
+                              const gchar *text, gint row, gint col)
 {
-  PsppireDataStore *store = PSPPIRE_DATA_STORE (model);
-
   const struct variable *pv = psppire_dict_get_variable (store->dict, col);
   g_return_val_if_fail (pv, FALSE);
 
index 7e2067fdd7135ea2b3246e7346e94ac65272aeb2..7f03246afad6d5738226b8236152a68b6b84302a 100644 (file)
@@ -108,7 +108,12 @@ gboolean psppire_data_store_insert_new_case (PsppireDataStore *ds, gint posn);
 
 struct casereader * psppire_data_store_get_reader (PsppireDataStore *ds);
 
+gchar * psppire_data_store_get_string (PsppireDataStore *ds,
+                                      gint row, gint column);
 
+gboolean psppire_data_store_set_string (PsppireDataStore *ds,
+                                       const gchar *text,
+                                       gint row, gint column);
 
 #ifdef __cplusplus
 }