Move paste related code from PsppireDataWindow to PsppireDataEditor
authorJohn Darrington <john@darrington.wattle.id.au>
Fri, 7 Apr 2017 07:36:54 +0000 (09:36 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Fri, 7 Apr 2017 09:52:43 +0000 (11:52 +0200)
src/ui/gui/psppire-data-editor.c
src/ui/gui/psppire-data-editor.h
src/ui/gui/psppire-data-window.c

index eb2e8eb4f99b1f8a5aa65cd258af20e5434ffbe8..2546c8e7a980b9aff761c3b6161b7efe0fbeb7da 100644 (file)
@@ -1119,3 +1119,29 @@ psppire_data_editor_goto_variable (PsppireDataEditor *de, gint dict_index)
        break;
     }
 }
+
+/* Set the datum at COL, ROW, to that contained in VALUE.
+ */
+static void
+store_set_datum (GtkTreeModel *model, gint col, gint row,
+                        const GValue *value)
+{
+  PsppireDataStore *store = PSPPIRE_DATA_STORE (model);
+  GVariant *v = g_value_get_variant (value);
+  union value uv;
+  value_variant_get (&uv, v);
+  const struct variable *var = psppire_dict_get_variable (store->dict, col);
+  psppire_data_store_set_value (store, row, var, &uv);
+  value_destroy_from_variant (&uv, v);
+}
+
+void
+psppire_data_editor_paste (PsppireDataEditor *de)
+{
+  JmdSheet *sheet = JMD_SHEET (de->data_sheet);
+  GtkClipboard *clip =
+    gtk_clipboard_get_for_display (gtk_widget_get_display (GTK_WIDGET (sheet)),
+                                  GDK_SELECTION_CLIPBOARD);
+
+  jmd_sheet_paste (sheet, clip, store_set_datum);
+}
index 490c8d56d37e8c533e0e7696252953b86118bd86..37deec0626cc355cd7aba9c2129fcbbabbf97dcd 100644 (file)
@@ -110,8 +110,7 @@ struct _PsppireDataSheet *psppire_data_editor_get_active_data_sheet (PsppireData
 
 enum {PSPPIRE_DATA_EDITOR_DATA_VIEW = 0, PSPPIRE_DATA_EDITOR_VARIABLE_VIEW};
 
-
-
+void psppire_data_editor_paste (PsppireDataEditor *de);
 
 G_END_DECLS
 
index 37ff6bc7d7bed7c2bec0091aecd41272d016ff47..091af6503ec9fcfa202e0f63a86908562c6631d8 100644 (file)
@@ -1118,8 +1118,6 @@ on_cut (PsppireDataWindow *dw)
     }
 }
 
-
-
 static void
 on_copy (PsppireDataWindow *dw)
 {
@@ -1134,35 +1132,16 @@ on_copy (PsppireDataWindow *dw)
     }
 }
 
-
-static void
-trf (GtkClipboard *clip,
-         GdkAtom *atoms,
-         gint n_atoms,
-         gpointer data)
-{
-  int i;
-  for (i = 0; i < n_atoms; ++i)
-    {
-      g_print ("%s\n", gdk_atom_name (atoms[i]));
-    }
-}
-
 static void
 on_paste (PsppireDataWindow *dw)
 {
   int p = gtk_notebook_get_current_page (GTK_NOTEBOOK (dw->data_editor));
   if (p == PSPPIRE_DATA_EDITOR_DATA_VIEW)
     {
-      GtkClipboard *clip =
-       gtk_clipboard_get_for_display (gtk_widget_get_display (GTK_WIDGET (dw)),
-                                  GDK_SELECTION_CLIPBOARD);
-
-      gtk_clipboard_request_targets (clip, trf, dw);
+      psppire_data_editor_paste (dw->data_editor);
     }
 }
 
-
 static void
 on_clear_cases (PsppireDataWindow *dw)
 {
@@ -1192,8 +1171,6 @@ on_clear_variables (PsppireDataWindow *dw)
     }
 }
 
-
-
 static void
 insert_variable (PsppireDataWindow *dw)
 {
@@ -1212,8 +1189,6 @@ insert_variable (PsppireDataWindow *dw)
     }
 }
 
-
-
 static void
 insert_case_at_row (PsppireDataWindow *dw)
 {
@@ -1222,7 +1197,6 @@ insert_case_at_row (PsppireDataWindow *dw)
   psppire_data_editor_insert_new_case_at_posn (de, range->start_y);
 }
 
-
 static void
 goto_case (PsppireDataWindow *dw)
 {
@@ -1234,7 +1208,6 @@ goto_case (PsppireDataWindow *dw)
     }
 }
 
-
 static GtkWidget *
 create_file_menu (PsppireDataWindow *dw)
 {