-
-
-static void
-psppire_data_editor_remove_split (PsppireDataEditor *de)
-{
- if ( !de->split ) return;
- de->split = FALSE;
-
- g_object_ref (de->sheet_bin[0]);
- gtk_container_remove (GTK_CONTAINER (de->paned), de->sheet_bin[0]);
-
- g_object_ref (de->paned);
- gtk_container_remove (GTK_CONTAINER (de->data_vbox), de->paned);
-
- gtk_box_pack_start (GTK_BOX (de->data_vbox), de->sheet_bin[0],
- TRUE, TRUE, 0);
-
- g_object_unref (de->sheet_bin[0]);
-
- g_object_set (de->sheet_bin[0], "vscrollbar-policy",
- GTK_POLICY_ALWAYS, NULL);
-
- g_object_set (de->sheet_bin[0], "hscrollbar-policy",
- GTK_POLICY_ALWAYS, NULL);
-}
-
-
-static void
-psppire_data_editor_set_split (PsppireDataEditor *de)
-{
- if ( de->split ) return;
- de->split = TRUE;
-
- g_object_ref (de->sheet_bin[0]);
- gtk_container_remove (GTK_CONTAINER (de->data_vbox), de->sheet_bin[0]);
-
- gtk_xpaned_pack_top_left (GTK_XPANED (de->paned), de->sheet_bin [0],
- TRUE, TRUE);
-
- gtk_box_pack_start (GTK_BOX (de->data_vbox), de->paned,
- TRUE, TRUE, 0);
-
- g_object_unref (de->paned);
-
- g_object_set (de->sheet_bin[0], "vscrollbar-policy",
- GTK_POLICY_NEVER, NULL);
-
- g_object_set (de->sheet_bin[0], "hscrollbar-policy",
- GTK_POLICY_NEVER, NULL);
-}
-
-void
-psppire_data_editor_split_window (PsppireDataEditor *de, gboolean split)
-{
- if (split )
- psppire_data_editor_set_split (de);
- else
- psppire_data_editor_remove_split (de);
-
- gtk_widget_show_all (de->data_vbox);
-}
-
-static void data_sheet_set_clip (GtkSheet *sheet);
-static void data_sheet_contents_received_callback (GtkClipboard *clipboard,
- GtkSelectionData *sd,
- gpointer data);
-
-
-void
-psppire_data_editor_clip_copy (PsppireDataEditor *de)
-{
- data_sheet_set_clip (GTK_SHEET (de->data_sheet[0]));
-}
-
-void
-psppire_data_editor_clip_paste (PsppireDataEditor *de)
-{
- GdkDisplay *display = gtk_widget_get_display ( GTK_WIDGET (de));
- GtkClipboard *clipboard =
- gtk_clipboard_get_for_display (display, GDK_SELECTION_CLIPBOARD);
-
- gtk_clipboard_request_contents (clipboard,
- gdk_atom_intern ("UTF8_STRING", TRUE),
- data_sheet_contents_received_callback,
- de);
-}
-
-
-
-void
-psppire_data_editor_clip_cut (PsppireDataEditor *de)
-{
- gint max_rows, max_columns;
- gint r;
- GtkSheetRange range;
- PsppireDataStore *ds = de->data_store;
-
- data_sheet_set_clip (GTK_SHEET (de->data_sheet[0]));
-
- /* Now blank all the cells */
- gtk_sheet_get_selected_range (GTK_SHEET (de->data_sheet[0]), &range);
-
- /* If nothing selected, then use active cell */
- if ( range.row0 < 0 || range.col0 < 0 )
- {
- gint row, col;
- gtk_sheet_get_active_cell (GTK_SHEET (de->data_sheet[0]), &row, &col);
-
- range.row0 = range.rowi = row;
- range.col0 = range.coli = col;
- }
-
- /* The sheet range can include cells that do not include data.
- Exclude them from the range. */
- max_rows = psppire_data_store_get_case_count (ds);
- if (range.rowi >= max_rows)
- {
- if (max_rows == 0)
- return;
- range.rowi = max_rows - 1;
- }
-
- max_columns = dict_get_var_cnt (ds->dict->dict);
- if (range.coli >= max_columns)
- {
- if (max_columns == 0)
- return;
- range.coli = max_columns - 1;
- }
-
- g_return_if_fail (range.rowi >= range.row0);
- g_return_if_fail (range.row0 >= 0);
- g_return_if_fail (range.coli >= range.col0);
- g_return_if_fail (range.col0 >= 0);
-
-
- for (r = range.row0; r <= range.rowi ; ++r )
- {
- gint c;
-
- for (c = range.col0 ; c <= range.coli; ++c)
- {
- psppire_data_store_set_string (ds, "", r, c);
- }
- }
-
- /* and remove the selection */
- gtk_sheet_unselect_range (GTK_SHEET (de->data_sheet[0]));
-}
-
-