X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-data-window.c;h=ad7e9250f7d404389aefaa0e79bf55e23d2f32d3;hb=e7913c62251710319b06c50702c5db9afb612be5;hp=438779675b7fe365bd4242021bf89b5e37392146;hpb=bcd0f2c9c85b91c02c4a42f5db6660a068586ca2;p=pspp diff --git a/src/ui/gui/psppire-data-window.c b/src/ui/gui/psppire-data-window.c index 438779675b..ad7e9250f7 100644 --- a/src/ui/gui/psppire-data-window.c +++ b/src/ui/gui/psppire-data-window.c @@ -101,10 +101,6 @@ struct session *the_session; struct ll_list all_data_windows = LL_INITIALIZER (all_data_windows); -static void psppire_data_window_class_init (PsppireDataWindowClass *class); -static void psppire_data_window_init (PsppireDataWindow *data_editor); - - static void psppire_data_window_iface_init (PsppireWindowIface *iface); static void psppire_data_window_dispose (GObject *object); @@ -118,45 +114,10 @@ static void psppire_data_window_get_property (GObject *object, GValue *value, GParamSpec *pspec); -GType -psppire_data_window_get_type (void) -{ - static GType psppire_data_window_type = 0; - - if (!psppire_data_window_type) - { - static const GTypeInfo psppire_data_window_info = - { - sizeof (PsppireDataWindowClass), - NULL, - NULL, - (GClassInitFunc)psppire_data_window_class_init, - (GClassFinalizeFunc) NULL, - NULL, - sizeof (PsppireDataWindow), - 0, - (GInstanceInitFunc) psppire_data_window_init, - }; - - static const GInterfaceInfo window_interface_info = - { - (GInterfaceInitFunc) psppire_data_window_iface_init, - NULL, - NULL - }; - - psppire_data_window_type = - g_type_register_static (PSPPIRE_TYPE_WINDOW, "PsppireDataWindow", - &psppire_data_window_info, 0); - - g_type_add_interface_static (psppire_data_window_type, - PSPPIRE_TYPE_WINDOW_MODEL, - &window_interface_info); - } - - return psppire_data_window_type; -} +G_DEFINE_TYPE_WITH_CODE (PsppireDataWindow, psppire_data_window, PSPPIRE_TYPE_WINDOW, + G_IMPLEMENT_INTERFACE (PSPPIRE_TYPE_WINDOW_MODEL, + psppire_data_window_iface_init)) static GObjectClass *parent_class ; @@ -253,7 +214,7 @@ on_split_change (PsppireDict *dict, gpointer data) { PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (data); - size_t n_split_vars = dict_get_split_cnt (dict->dict); + size_t n_split_vars = dict_get_n_splits (dict->dict); GtkWidget *split_status_area = get_widget_assert (de->builder, "split-file-status-area"); @@ -938,7 +899,7 @@ set_unsaved (gpointer w) static void enable_save (PsppireDataWindow *dw) { - gboolean enable = psppire_dict_get_var_cnt (dw->dict) > 0; + gboolean enable = psppire_dict_get_n_vars (dw->dict) > 0; GAction *save_as = g_action_map_lookup_action (G_ACTION_MAP (dw), "save-as"); GAction *save = g_action_map_lookup_action (G_ACTION_MAP (dw), "save"); @@ -1073,6 +1034,22 @@ on_cut (PsppireDataWindow *dw) SswSheet *sheet = SSW_SHEET (dw->data_editor->data_sheet); SswRange sel = *sheet->selection; + if (ssw_sheet_try_cut (sheet)) + return; + + if (sel.start_x > sel.end_x) + { + gint tmp = sel.start_x; + sel.start_x = sel.end_x; + sel.end_x = tmp; + } + if (sel.start_y > sel.end_y) + { + gint tmp = sel.start_y; + sel.start_y = sel.end_y; + sel.end_y = tmp; + } + GtkClipboard *clip = gtk_clipboard_get_for_display (gtk_widget_get_display (GTK_WIDGET (dw)), GDK_SELECTION_CLIPBOARD); @@ -1084,32 +1061,41 @@ on_cut (PsppireDataWindow *dw) for (x = sel.start_x ; x <= sel.end_x; ++x) { const struct variable * var = psppire_dict_get_variable (dict, x); + gboolean use_value_label = FALSE; + g_object_get (dw->data_editor, "value-labels", &use_value_label, NULL); gchar *s = psppire_data_store_get_string (dw->data_editor->data_store, - y, var, FALSE); + y, var, use_value_label); g_string_append (str, s); - g_string_append (str, "\t"); + if (x < sel.end_x) + g_string_append (str, "\t"); g_free (s); } - g_string_append (str, "\n"); + if (y < sel.end_y) + 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; + /* Now fill the selected area with SYSMIS or blanks */ for (x = sel.start_x ; x <= sel.end_x; ++x) { - const struct variable * var = psppire_dict_get_variable (dict, x); + const struct variable *var = psppire_dict_get_variable (dict, x); + int width = var_get_width (var); + union value sm ; + value_init (&sm, width); + if (var_is_numeric (var)) + sm.f = SYSMIS; + else + memset (sm.s, 0, width); for (y = sel.start_y ; y <= sel.end_y; ++y) { psppire_data_store_set_value (dw->data_editor->data_store, y, var, &sm); } + value_destroy (&sm, width); } - } } @@ -1665,14 +1651,14 @@ psppire_data_window_finish_init (PsppireDataWindow *de, GtkToolItem *ti = gtk_tool_button_new (NULL, "Open"); g_signal_connect_swapped (ti, "clicked", G_CALLBACK (psppire_window_open), de); gtk_toolbar_insert (GTK_TOOLBAR (hb), ti, idx++); - gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (ti), "psppire-file-open-data"); + gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (ti), "pspp-file-open-data"); } { GtkToolItem *ti = gtk_tool_button_new (NULL, "Save"); g_signal_connect_swapped (ti, "clicked", G_CALLBACK (psppire_window_save), de); gtk_toolbar_insert (GTK_TOOLBAR (hb), ti, idx++); - gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (ti), "psppire-file-save-data"); + gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (ti), "pspp-file-save-data"); } gtk_toolbar_insert (GTK_TOOLBAR (hb), gtk_separator_tool_item_new (), idx++); @@ -1686,7 +1672,7 @@ psppire_data_window_finish_init (PsppireDataWindow *de, G_CALLBACK (psppire_dialog_action_activate_null), a); gtk_toolbar_insert (GTK_TOOLBAR (hb), de->ti_jump_to_variable, idx++); - gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (de->ti_jump_to_variable), "psppire-edit-go-to-variable"); + gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (de->ti_jump_to_variable), "pspp-edit-go-to-variable"); gtk_widget_set_tooltip_text (GTK_WIDGET (de->ti_jump_to_variable), _("Jump to variable")); } @@ -1699,7 +1685,7 @@ psppire_data_window_finish_init (PsppireDataWindow *de, G_CALLBACK (g_action_activate_null), a); gtk_toolbar_insert (GTK_TOOLBAR (hb), de->ti_jump_to_case, idx++); - gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (de->ti_jump_to_case), "psppire-edit-go-to-case"); + gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (de->ti_jump_to_case), "pspp-edit-go-to-case"); gtk_widget_set_tooltip_text (GTK_WIDGET (de->ti_jump_to_case), _("Jump to a case in the data sheet")); } @@ -1713,7 +1699,7 @@ psppire_data_window_finish_init (PsppireDataWindow *de, gtk_toolbar_insert (GTK_TOOLBAR (hb), de->ti_find, idx++); - gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (de->ti_find), "psppire-edit-find"); + gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (de->ti_find), "pspp-edit-find"); gtk_widget_set_tooltip_text (GTK_WIDGET (de->ti_find), _("Search for values in the data")); } @@ -1725,7 +1711,7 @@ psppire_data_window_finish_init (PsppireDataWindow *de, G_CALLBACK (g_action_activate_null), a); gtk_toolbar_insert (GTK_TOOLBAR (hb), de->ti_insert_case, idx++); - gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (de->ti_insert_case), "psppire-edit-insert-case"); + gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (de->ti_insert_case), "pspp-edit-insert-case"); gtk_widget_set_tooltip_text (GTK_WIDGET (de->ti_insert_case), _("Create a new case at the current position")); } @@ -1737,7 +1723,7 @@ psppire_data_window_finish_init (PsppireDataWindow *de, G_CALLBACK (g_action_activate_null), a); gtk_toolbar_insert (GTK_TOOLBAR (hb), de->ti_insert_variable, idx++); - gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (de->ti_insert_variable), "psppire-edit-insert-variable"); + gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (de->ti_insert_variable), "pspp-edit-insert-variable"); gtk_widget_set_tooltip_text (GTK_WIDGET (de->ti_insert_variable), _("Create a new variable at the current position")); } @@ -1751,7 +1737,7 @@ psppire_data_window_finish_init (PsppireDataWindow *de, g_signal_connect_swapped (ti, "clicked", G_CALLBACK (psppire_dialog_action_activate_null), a); gtk_toolbar_insert (GTK_TOOLBAR (hb), ti, idx++); - gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (ti), "psppire-data-split-file"); + gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (ti), "pspp-data-split-file"); gtk_widget_set_tooltip_text (GTK_WIDGET (ti), _("Split the active dataset")); } @@ -1763,7 +1749,7 @@ psppire_data_window_finish_init (PsppireDataWindow *de, g_signal_connect_swapped (ti, "clicked", G_CALLBACK (psppire_dialog_action_activate_null), a); gtk_toolbar_insert (GTK_TOOLBAR (hb), ti, idx++); - gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (ti), "psppire-data-weight-cases"); + gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (ti), "pspp-data-weight-cases"); gtk_widget_set_tooltip_text (GTK_WIDGET (ti), _("Weight cases by variable")); } @@ -1774,7 +1760,7 @@ psppire_data_window_finish_init (PsppireDataWindow *de, g_signal_connect (de->ti_value_labels_button, "toggled", G_CALLBACK (on_labels_button_toggle), de); gtk_toolbar_insert (GTK_TOOLBAR (hb), de->ti_value_labels_button, idx++); - gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (de->ti_value_labels_button), "psppire-view-value-labels"); + gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (de->ti_value_labels_button), "pspp-view-value-labels"); gtk_widget_set_tooltip_text (GTK_WIDGET (de->ti_value_labels_button), _("Show/hide value labels")); } } @@ -1934,7 +1920,7 @@ psppire_data_window_new (struct dataset *ds) bool psppire_data_window_is_empty (PsppireDataWindow *dw) { - return psppire_dict_get_var_cnt (dw->dict) == 0; + return psppire_dict_get_n_vars (dw->dict) == 0; }