X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-data-window.c;h=5a00a64a8a3c1aab1cbde668ab2687cc29046e3c;hb=refs%2Fbuilds%2F20140215033017%2Fpspp;hp=7979257b5d3339788199f5f4e9201c8e862f86e7;hpb=731134f6eec60db6615fbb2a0e36323588422df3;p=pspp diff --git a/src/ui/gui/psppire-data-window.c b/src/ui/gui/psppire-data-window.c index 7979257b5d..5a00a64a8a 100644 --- a/src/ui/gui/psppire-data-window.c +++ b/src/ui/gui/psppire-data-window.c @@ -33,8 +33,6 @@ #include "ui/gui/help-menu.h" #include "ui/gui/helper.h" #include "ui/gui/helper.h" -#include "ui/gui/npar-two-sample-related.h" -#include "ui/gui/oneway-anova-dialog.h" #include "ui/gui/psppire-data-window.h" #include "ui/gui/psppire-dialog-action.h" #include "ui/gui/psppire-syntax-window.h" @@ -43,7 +41,6 @@ #include "ui/gui/recode-dialog.h" #include "ui/gui/select-cases-dialog.h" #include "ui/gui/split-file-dialog.h" -#include "ui/gui/t-test-paired-samples.h" #include "ui/gui/text-data-import-dialog.h" #include "ui/gui/weight-cases-dialog.h" #include "ui/syntax-gen.h" @@ -305,18 +302,25 @@ dump_rm (GtkRecentManager *rm) } #endif +static gboolean +has_suffix (const gchar *name, const gchar *suffix) +{ + size_t name_len = strlen (name); + size_t suffix_len = strlen (suffix); + return (name_len > suffix_len + && !c_strcasecmp (&name[name_len - suffix_len], suffix)); +} + static gboolean name_has_por_suffix (const gchar *name) { - size_t length = strlen (name); - return length > 4 && !c_strcasecmp (&name[length - 4], ".por"); + return has_suffix (name, ".por"); } static gboolean name_has_sav_suffix (const gchar *name) { - size_t length = strlen (name); - return length > 4 && !c_strcasecmp (&name[length - 4], ".sav"); + return has_suffix (name, ".sav") || has_suffix (name, ".zsav"); } /* Returns true if NAME has a suffix which might denote a PSPP file */ @@ -371,6 +375,17 @@ load_file (PsppireWindow *de, const gchar *file_name, gpointer syn) return ok; } +static const char * +psppire_data_window_format_to_string (enum PsppireDataWindowFormat format) +{ + if (format == PSPPIRE_DATA_WINDOW_SAV) + return ".sav"; + else if (format == PSPPIRE_DATA_WINDOW_ZSAV) + return ".zsav"; + else + return ".por"; +} + /* Save DE to file */ static void save_file (PsppireWindow *w) @@ -387,12 +402,7 @@ save_file (PsppireWindow *w) fnx = g_string_new (file_name); if ( ! name_has_suffix (fnx->str)) - { - if ( de->save_as_portable) - g_string_append (fnx, ".por"); - else - g_string_append (fnx, ".sav"); - } + g_string_append (fnx, psppire_data_window_format_to_string (de->format)); ds_init_empty (&filename); @@ -403,9 +413,13 @@ save_file (PsppireWindow *w) syntax_gen_string (&filename, ss_cstr (utf8_file_name)); g_free (utf8_file_name); - syntax = g_strdup_printf ("%s OUTFILE=%s.", - de->save_as_portable ? "EXPORT" : "SAVE", - ds_cstr (&filename)); + if (de->format == PSPPIRE_DATA_WINDOW_SAV) + syntax = g_strdup_printf ("SAVE OUTFILE=%s.", ds_cstr (&filename)); + else if (de->format == PSPPIRE_DATA_WINDOW_ZSAV) + syntax = g_strdup_printf ("SAVE /ZCOMPRESSED /OUTFILE=%s.", + ds_cstr (&filename)); + else + syntax = g_strdup_printf ("EXPORT OUTFILE=%s.", ds_cstr (&filename)); ds_destroy (&filename); @@ -453,9 +467,11 @@ sysfile_info (PsppireDataWindow *de) static void data_pick_filename (PsppireWindow *window) { + GtkListStore *list_store; + GtkWidget *combo_box; + PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (window); - GtkFileFilter *filter = gtk_file_filter_new (); - GtkWidget *button_sys; + GtkFileFilter *filter; GtkWidget *dialog = gtk_file_chooser_dialog_new (_("Save"), GTK_WINDOW (de), @@ -466,10 +482,16 @@ data_pick_filename (PsppireWindow *window) g_object_set (dialog, "local-only", FALSE, NULL); + filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("System Files (*.sav)")); gtk_file_filter_add_mime_type (filter, "application/x-spss-sav"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); + filter = gtk_file_filter_new (); + gtk_file_filter_set_name (filter, _("Compressed System Files (*.zsav)")); + gtk_file_filter_add_pattern (filter, "*.zsav"); + gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); + filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("Portable Files (*.por) ")); gtk_file_filter_add_mime_type (filter, "application/x-spss-por"); @@ -479,24 +501,49 @@ data_pick_filename (PsppireWindow *window) gtk_file_filter_set_name (filter, _("All Files")); gtk_file_filter_add_pattern (filter, "*"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); + gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter); { - GtkWidget *button_por; - GtkWidget *vbox = gtk_vbox_new (TRUE, 5); - button_sys = - gtk_radio_button_new_with_label (NULL, _("System File")); - - button_por = - gtk_radio_button_new_with_label - (gtk_radio_button_get_group (GTK_RADIO_BUTTON(button_sys)), - _("Portable File")); - - psppire_box_pack_start_defaults (GTK_BOX (vbox), button_sys); - psppire_box_pack_start_defaults (GTK_BOX (vbox), button_por); - - gtk_widget_show_all (vbox); - - gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(dialog), vbox); + GtkCellRenderer *cell; + GtkWidget *label; + GtkTreeIter iter; + GtkWidget *hbox; + + list_store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING); + combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL (list_store)); + + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, + 0, PSPPIRE_DATA_WINDOW_SAV, + 1, _("System File"), + -1); + gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo_box), &iter); + + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, + 0, PSPPIRE_DATA_WINDOW_ZSAV, + 1, _("Compressed System File"), + -1); + + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, + 0, PSPPIRE_DATA_WINDOW_POR, + 1, _("Portable File"), + -1); + + label = gtk_label_new (_("Format:")); + + cell = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell, FALSE); + gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo_box), cell, + "text", 1); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), combo_box, FALSE, FALSE, 0); + gtk_widget_show_all (hbox); + + gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (dialog), hbox); } gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), @@ -512,16 +559,18 @@ data_pick_filename (PsppireWindow *window) gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)) ); - de->save_as_portable = - ! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button_sys)); + GtkTreeIter iter; + int format; + + gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo_box), &iter); + gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter, + 0, &format, + -1); + de->format = format; if ( ! name_has_suffix (filename->str)) - { - if ( de->save_as_portable) - g_string_append (filename, ".por"); - else - g_string_append (filename, ".sav"); - } + g_string_append (filename, + psppire_data_window_format_to_string (format)); psppire_window_set_filename (PSPPIRE_WINDOW (de), filename->str); @@ -635,14 +684,10 @@ static void fonts_activate (PsppireDataWindow *de) { GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (de)); - PangoFontDescription *current_font; - gchar *font_name; - GtkWidget *dialog = - gtk_font_selection_dialog_new (_("Font Selection")); - - - current_font = GTK_WIDGET(de->data_editor)->style->font_desc; - font_name = pango_font_description_to_string (current_font); + GtkWidget *dialog = gtk_font_selection_dialog_new (_("Font Selection")); + GtkStyle *style = gtk_widget_get_style (GTK_WIDGET(de->data_editor)); + PangoFontDescription *current_font = style->font_desc; + gchar *font_name = pango_font_description_to_string (current_font); gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG (dialog), font_name); @@ -857,12 +902,14 @@ enable_save (PsppireDataWindow *dw) static void psppire_data_window_init (PsppireDataWindow *de) { + GtkWidget *w ; de->builder = builder_new ("data-editor.ui"); de->ui_manager = GTK_UI_MANAGER (get_object_assert (de->builder, "uimanager1", GTK_TYPE_UI_MANAGER)); - PSPPIRE_WINDOW (de)->menu = - GTK_MENU_SHELL (gtk_ui_manager_get_widget (de->ui_manager, "/ui/menubar/windows/windows_minimise_all")->parent); + w = gtk_ui_manager_get_widget (de->ui_manager, "/ui/menubar/windows/windows_minimise_all"); + + PSPPIRE_WINDOW (de)->menu = GTK_MENU_SHELL (gtk_widget_get_parent (w)); de->uim = NULL; de->merge_id = 0; @@ -957,12 +1004,9 @@ psppire_data_window_finish_init (PsppireDataWindow *de, connect_action (de, "transform_autorecode", G_CALLBACK (autorecode_dialog)); connect_action (de, "data_split-file", G_CALLBACK (split_file_dialog)); connect_action (de, "data_weight-cases", G_CALLBACK (weight_cases_dialog)); - connect_action (de, "oneway-anova", G_CALLBACK (oneway_anova_dialog)); - connect_action (de, "paired-t-test", G_CALLBACK (t_test_paired_samples_dialog)); connect_action (de, "utilities_comments", G_CALLBACK (comments_dialog)); connect_action (de, "transform_recode-same", G_CALLBACK (recode_same_dialog)); connect_action (de, "transform_recode-different", G_CALLBACK (recode_different_dialog)); - connect_action (de, "two-related-samples", G_CALLBACK (two_related_dialog)); { GtkWidget *recent_data =