From: John Darrington Date: Sun, 28 Mar 2021 16:39:44 +0000 (+0200) Subject: Output Window: Fix sensitivity of Save button. Also add option for png and svg files. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=315df2dd99add185d4ff8f289d82a559f4f8472b Output Window: Fix sensitivity of Save button. Also add option for png and svg files. src/ui/gui/psppire-output-window.c (on_combo_change): Simplify logic and use correct limit for number of filename extentions. --- diff --git a/src/ui/gui/psppire-output-window.c b/src/ui/gui/psppire-output-window.c index 99688e97e2..7a60cce356 100644 --- a/src/ui/gui/psppire-output-window.c +++ b/src/ui/gui/psppire-output-window.c @@ -1,5 +1,6 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016 Free Software Foundation + Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016, + 2021 Free Software Foundation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -228,11 +229,11 @@ enum FT_ASCII, FT_PS, FT_CSV, + FT_PNG, + FT_SVG, n_FT }; -#define N_EXTENSIONS (n_FT - 1) - static const struct file_types ft[n_FT] = { {N_("Infer file type from extension"), NULL}, {N_("SPSS Viewer (*.spv)"), ".spv"}, @@ -242,7 +243,9 @@ static const struct file_types ft[n_FT] = { {N_("Text (*.txt)"), ".txt"}, {N_("Text [plain] (*.txt)"), ".txt"}, {N_("PostScript (*.ps)"), ".ps"}, - {N_("Comma-Separated Values (*.csv)"), ".csv"} + {N_("Comma-Separated Values (*.csv)"), ".csv"}, + {N_("Portable Network Graphics (*.png)"), ".png"}, + {N_("Scalable Vector Graphics (*.svg)"), ".svg"} }; @@ -252,23 +255,15 @@ on_combo_change (GtkFileChooser *chooser) gboolean sensitive = FALSE; GtkWidget *combo = gtk_file_chooser_get_extra_widget (chooser); - int x = 0; + int file_type = FT_AUTO; gchar *fn = gtk_file_chooser_get_filename (chooser); if (combo && gtk_widget_get_realized (combo)) - x = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); + file_type = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); - if (fn == NULL) - { - sensitive = FALSE; - } - else + if (fn != NULL && file_type == FT_AUTO) { - gint i; - if (x != 0) - sensitive = TRUE; - - for (i = 1 ; i < N_EXTENSIONS ; ++i) + for (gint i = 1 ; i < n_FT ; ++i) { if (g_str_has_suffix (fn, ft[i].ext)) { @@ -277,6 +272,8 @@ on_combo_change (GtkFileChooser *chooser) } } } + else + sensitive = (fn != NULL); g_free (fn); @@ -284,37 +281,6 @@ on_combo_change (GtkFileChooser *chooser) } -static void -on_file_chooser_change (GObject *w, GParamSpec *pspec, gpointer data) -{ - - GtkFileChooser *chooser = data; - const gchar *name = g_param_spec_get_name (pspec); - - if (! gtk_widget_get_realized (GTK_WIDGET (chooser))) - return; - - /* Ignore this one. It causes recursion. */ - if (0 == strcmp ("tooltip-text", name)) - return; - - on_combo_change (chooser); -} - - -/* Recursively descend all the children of W, connecting - to their "notify" signal */ -static void -iterate_widgets (GtkWidget *w, gpointer data) -{ - if (GTK_IS_CONTAINER (w)) - gtk_container_forall (GTK_CONTAINER (w), iterate_widgets, data); - else - g_signal_connect (w, "notify", G_CALLBACK (on_file_chooser_change), data); -} - - - static GtkListStore * create_file_type_list (void) { @@ -373,11 +339,7 @@ psppire_output_window_export (PsppireOutputWindow *window) gtk_file_chooser_set_extra_widget (chooser, combo); - /* This kludge is necessary because there is no signal to tell us - when the candidate filename of a GtkFileChooser has changed */ - gtk_container_forall (GTK_CONTAINER (dialog), iterate_widgets, dialog); - - + g_signal_connect (chooser, "selection-changed", G_CALLBACK (on_combo_change), NULL); gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); response = gtk_dialog_run (GTK_DIALOG (dialog)); @@ -396,7 +358,7 @@ psppire_output_window_export (PsppireOutputWindow *window) search for the respective type in the list. (It's a O(n) search, but fortunately n is small). */ gint i; - for (i = 1 ; i < N_EXTENSIONS ; ++i) + for (i = 1 ; i < n_FT ; ++i) { if (g_str_has_suffix (filename, ft[i].ext)) { @@ -440,6 +402,12 @@ psppire_output_window_export (PsppireOutputWindow *window) case FT_CSV: export_output (window, &options, "csv"); break; + case FT_PNG: + export_output (window, &options, "png"); + break; + case FT_SVG: + export_output (window, &options, "svg"); + break; case FT_TXT: string_map_insert (&options, "box", "unicode");