Merge remote-tracking branch 'origin/master' into sheet
authorJohn Darrington <john@darrington.wattle.id.au>
Tue, 9 Aug 2016 23:03:58 +0000 (01:03 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 9 Aug 2016 23:03:58 +0000 (01:03 +0200)
1  2 
src/ui/gui/psppire-data-window.c

index 698641e40c27753ff4f766aa2cce6a109e1775fe,1cccc20ea0a8d7d0247a892ad19e72a0d0022888..a97fd4e436e2520103cd5c8f47271a0f94da202d
@@@ -36,6 -36,8 +36,6 @@@
  #include "ui/gui/psppire-encoding-selector.h"
  #include "ui/gui/psppire-syntax-window.h"
  #include "ui/gui/psppire-window.h"
 -#include "ui/gui/psppire-data-sheet.h"
 -#include "ui/gui/psppire-var-sheet.h"
  #include "ui/gui/windows-menu.h"
  #include "ui/gui/goto-case-dialog.h"
  #include "ui/gui/psppire.h"
@@@ -45,8 -47,6 +45,8 @@@
  #include "gl/c-strcasestr.h"
  #include "gl/xvasprintf.h"
  
 +#include "ui/gui/efficient-sheet/jmd-sheet.h"
 +
  #include "find-dialog.h"
  #include "psppire-dialog-action-1sks.h"
  #include "psppire-dialog-action-aggregate.h"
@@@ -788,7 -788,9 +788,9 @@@ fonts_activate (PsppireDataWindow  *de
    GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (de));
    GtkWidget *dialog =  gtk_font_chooser_dialog_new (NULL, GTK_WINDOW (toplevel));
    GtkStyleContext *style = gtk_widget_get_style_context (GTK_WIDGET(de->data_editor));
-   const PangoFontDescription *current_font = gtk_style_context_get_font (style, GTK_STATE_FLAG_NORMAL);
+   const PangoFontDescription *current_font ;
+   
+   gtk_style_context_get (style, GTK_STATE_FLAG_NORMAL, "font", &current_font, NULL);
  
    gtk_font_chooser_set_font_desc (GTK_FONT_CHOOSER (dialog), current_font);
  
@@@ -1066,80 -1068,19 +1068,80 @@@ on_cut (PsppireDataWindow *dw
    int p = gtk_notebook_get_current_page (GTK_NOTEBOOK (dw->data_editor));
    if (p == 0)
      {
 -      PsppireDataSheet *ds = psppire_data_editor_get_active_data_sheet (dw->data_editor);
 -      psppire_data_sheet_edit_cut (ds);
 +      PsppireDict *dict = NULL;
 +      g_object_get (dw->data_editor, "dictionary", &dict, NULL);
 +      
 +      gint x, y;
 +      JmdSheet *sheet = JMD_SHEET (dw->data_editor->data_sheet);
 +      JmdRange sel = *sheet->selection;
 +
 +      GtkClipboard *clip =
 +      gtk_clipboard_get_for_display (gtk_widget_get_display (GTK_WIDGET (dw)),
 +                                     GDK_SELECTION_CLIPBOARD);
 +
 +      /* Save the selected area to a string */
 +      GString *str = g_string_new ("");
 +      for (y = sel.start_y ; y <= sel.end_y; ++y)
 +      {
 +        for (x = sel.start_x ; x <= sel.end_x; ++x)
 +          {
 +            const struct variable * var = psppire_dict_get_variable (dict, x);
 +            gchar *s = psppire_data_store_get_string (dw->data_editor->data_store,
 +                                                        y, var, FALSE);
 +            g_string_append (str, s);
 +            g_string_append (str, "\t");
 +            g_free (s);
 +          }
 +        g_string_append (str, "\n");
 +      }
 +      
 +      gtk_clipboard_set_text (clip, str->str, str->len);
 +      g_string_free (str, TRUE);
 +
 +      /* Now fill the selected area with SYSMIS */
 +      union value sm ;
 +      sm.f = SYSMIS;
 +      for (x = sel.start_x ; x <= sel.end_x; ++x)
 +      {
 +        const struct variable * var = psppire_dict_get_variable (dict, x);
 +        for (y = sel.start_y ; y <= sel.end_y; ++y)
 +          {
 +            psppire_data_store_set_value (dw->data_editor->data_store,
 +                                          y,
 +                                          var, &sm);
 +          }
 +      }
 +
      }
  }
  
 +
 +
  static void
  on_copy (PsppireDataWindow *dw)
  {
    int p = gtk_notebook_get_current_page (GTK_NOTEBOOK (dw->data_editor));
    if (p == 0)
      {
 -      PsppireDataSheet *ds = psppire_data_editor_get_active_data_sheet (dw->data_editor);
 -      psppire_data_sheet_edit_copy (ds);
 +      GtkClipboard *clip =
 +      gtk_clipboard_get_for_display (gtk_widget_get_display (GTK_WIDGET (dw)),
 +                                 GDK_SELECTION_CLIPBOARD);
 +
 +      jmd_sheet_set_clip (JMD_SHEET (dw->data_editor->data_sheet), clip);
 +    }
 +}
 +
 +
 +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]));
      }
  }
  
@@@ -1149,11 -1090,8 +1151,11 @@@ on_paste (PsppireDataWindow *dw
    int p = gtk_notebook_get_current_page (GTK_NOTEBOOK (dw->data_editor));
    if (p == 0)
      {
 -      PsppireDataSheet *ds = psppire_data_editor_get_active_data_sheet (dw->data_editor);
 -      psppire_data_sheet_edit_paste (ds);
 +      GtkClipboard *clip =
 +      gtk_clipboard_get_for_display (gtk_widget_get_display (GTK_WIDGET (dw)),
 +                                 GDK_SELECTION_CLIPBOARD);
 +
 +      gtk_clipboard_request_targets (clip, trf, dw);
      }
  }
  
  static void
  on_clear_cases (PsppireDataWindow *dw)
  {
 +#if SHEET_MERGE
    int p = gtk_notebook_get_current_page (GTK_NOTEBOOK (dw->data_editor));
    if (p == 0)
      {
        PsppireDataSheet *ds = psppire_data_editor_get_active_data_sheet (dw->data_editor);
        psppire_data_sheet_edit_clear_cases (ds);
      }
 +#endif
  }
  
  static void
  on_clear_variables (PsppireDataWindow *dw)
  {
 +#if SHEET_MERGE
    int p = gtk_notebook_get_current_page (GTK_NOTEBOOK (dw->data_editor));
    if (p == 0)
      {
      {
        psppire_var_sheet_clear_variables (PSPPIRE_VAR_SHEET (dw->data_editor->var_sheet));
      }
 +#endif
  }
  
  
 +
  static void
  insert_variable (PsppireDataWindow *dw)
  {
 +#if SHEET_MERGE
    int p = gtk_notebook_get_current_page (GTK_NOTEBOOK (dw->data_editor));
    if (p == 0)
      {
      {
        psppire_var_sheet_insert_variable (PSPPIRE_VAR_SHEET (dw->data_editor->var_sheet));
      }
 +#endif
  }
  
  
 +
  static void
  insert_case_at_row (PsppireDataWindow *dw)
  {
 +#if SHEET_MERGE
    PsppireDataSheet *ds = psppire_data_editor_get_active_data_sheet (dw->data_editor);
  
    psppire_data_sheet_insert_case (ds);
 +#endif
  }
  
 +
 +
  static void
  goto_case (PsppireDataWindow *dw)
  {
 +#if SHEET_MERGE
    PsppireDataSheet *ds = psppire_data_editor_get_active_data_sheet (dw->data_editor);
  
    goto_case_dialog (ds);
 +#endif
  }
  
  
 -
  static GtkWidget *
  create_file_menu (PsppireDataWindow *dw)
  {
    return menuitem;
  }
  
 +
  static GtkWidget *
  create_edit_menu (PsppireDataWindow *dw)
  {
    return menuitem;
  }
  
 -
  static void
  psppire_data_window_finish_init (PsppireDataWindow *de,
                                   struct dataset *ds)
                    G_CALLBACK (on_split_change),
                    de);
  
 -  g_signal_connect_swapped (de->dict, "backend-changed",
 +  g_signal_connect_swapped (de->dict, "changed",
                              G_CALLBACK (enable_save), de);
    g_signal_connect_swapped (de->dict, "variable-inserted",
                              G_CALLBACK (enable_save), de);
    ll_push_head (&all_data_windows, &de->ll);
  }
  
 +
  static void
  psppire_data_window_dispose (GObject *object)
  {
@@@ -1919,7 -1843,6 +1921,7 @@@ psppire_data_window_get_property (GObje
  }
  
  
 +
  GtkWidget*
  psppire_data_window_new (struct dataset *ds)
  {
    return dw;
  }
  
 +
 +
  bool
  psppire_data_window_is_empty (PsppireDataWindow *dw)
  {
    return psppire_dict_get_var_cnt (dw->dict) == 0;
  }
  
 +
  static void
  psppire_data_window_iface_init (PsppireWindowIface *iface)
  {
  
  \f
  
 +
  PsppireDataWindow *
  psppire_default_data_window (void)
  {
    return ll_data (ll_head (&all_data_windows), PsppireDataWindow, ll);
  }
  
 +
 +
  void
  psppire_data_window_set_default (PsppireDataWindow *pdw)
  {
@@@ -1997,8 -1914,6 +1999,8 @@@ psppire_data_window_undefault (PsppireD
    ll_push_tail (&all_data_windows, &pdw->ll);
  }
  
 +
 +
  PsppireDataWindow *
  psppire_data_window_for_dataset (struct dataset *ds)
  {
    return NULL;
  }
  
 +#if SHEET_MERGE
 +
  PsppireDataWindow *
  psppire_data_window_for_data_store (PsppireDataStore *data_store)
  {
    return NULL;
  }
  
 +#endif
 +
  GtkWindow *
  create_data_window (void)
  {
    return GTK_WINDOW (w);
  }
  
 +
 +
  void
  open_data_window (PsppireWindow *victim, const char *file_name,
                    const char *encoding, gpointer hint)