X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fgui%2Fpsppire-dialog-action-var-info.c;h=9c7d4fd3e2b374d6632408aa42362afecf115977;hb=bcbd6d906bd2e5f6ae72c5bdaa6900735f51c4e3;hp=5b60814186151549fc10cecf23f0a6cfe49c9fa4;hpb=e2da62d735c597afeef2e0e9b36e5a4a83d7da94;p=pspp diff --git a/src/ui/gui/psppire-dialog-action-var-info.c b/src/ui/gui/psppire-dialog-action-var-info.c index 5b60814186..9c7d4fd3e2 100644 --- a/src/ui/gui/psppire-dialog-action-var-info.c +++ b/src/ui/gui/psppire-dialog-action-var-info.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2007, 2009, 2010, 2011, 2012, 2013 Free Software Foundation + Copyright (C) 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2016 Free Software Foundation This program is free software: you can redistribute it and/or modify @@ -26,11 +26,14 @@ #include "data/value-labels.h" #include "data/variable.h" #include "libpspp/i18n.h" +#include "output/driver.h" #include "ui/gui/builder-wrapper.h" +#include "ui/gui/executor.h" #include "ui/gui/helper.h" #include "ui/gui/psppire-data-window.h" #include "ui/gui/psppire-dialog.h" #include "ui/gui/psppire-dictview.h" +#include "ui/gui/psppire-output-view.h" #include "ui/gui/var-display.h" static void psppire_dialog_action_var_info_init (PsppireDialogActionVarInfo *act); @@ -42,21 +45,6 @@ G_DEFINE_TYPE (PsppireDialogActionVarInfo, psppire_dialog_action_var_info, PSPPI #define _(msgid) gettext (msgid) #define N_(msgid) msgid - -static const gchar none[] = N_("None"); - - -static const gchar * -label_to_string (const struct variable *var) -{ - const char *label = var_get_label (var); - - if (NULL == label) return g_strdup (none); - - return label; -} - - static gboolean treeview_item_selected (gpointer data) { @@ -64,12 +52,11 @@ treeview_item_selected (gpointer data) GtkTreeView *tv = GTK_TREE_VIEW (pda->source); GtkTreeSelection *selection = gtk_tree_view_get_selection (tv); - return gtk_tree_selection_count_selected_rows (selection) > 0; + return gtk_tree_selection_count_selected_rows (selection) >= 1; } static gchar * -generate_syntax (PsppireDialogAction *act) - +generate_syntax__ (const PsppireDialogAction *act, const char *prefix) { struct variable **vars; size_t n_vars; @@ -81,7 +68,7 @@ generate_syntax (PsppireDialogAction *act) psppire_dict_view_get_selected_variables (PSPPIRE_DICT_VIEW (act->source), &vars, &n_vars); - s = g_string_new (""); + s = g_string_new (prefix); line_len = 0; for (i = 0; i < n_vars; i++) { @@ -113,92 +100,45 @@ generate_syntax (PsppireDialogAction *act) return str; } -static void -populate_text_var (GString *gstring, const struct variable *var) +static gchar * +generate_syntax (const PsppireDialogAction *act) { - gchar *text = NULL; - - g_string_append (gstring, var_get_name (var)); - g_string_append (gstring, "\n"); - - - g_string_append_printf (gstring, _("Label: %s\n"), label_to_string (var)); - { - const struct fmt_spec *fmt = var_get_print_format (var); - char buffer[FMT_STRING_LEN_MAX + 1]; - - fmt_to_string (fmt, buffer); - /* No conversion necessary. buffer will always be ascii */ - g_string_append_printf (gstring, _("Type: %s\n"), buffer); - } - - text = missing_values_to_string (var, NULL); - g_string_append_printf (gstring, _("Missing Values: %s\n"), - text); - g_free (text); - - g_string_append_printf (gstring, _("Measurement Level: %s\n"), - measure_to_string (var_get_measure (var))); - - - /* Value Labels */ - if ( var_has_value_labels (var)) - { - const struct val_labs *vls = var_get_value_labels (var); - const struct val_lab **labels; - size_t n_labels; - size_t i; - - g_string_append (gstring, "\n"); - g_string_append (gstring, _("Value Labels:\n")); - - labels = val_labs_sorted (vls); - n_labels = val_labs_count (vls); - for (i = 0; i < n_labels; i++) - { - const struct val_lab *vl = labels[i]; - gchar *const vstr = value_to_text (vl->value, var); - - g_string_append_printf (gstring, _("%s %s\n"), - vstr, val_lab_get_escaped_label (vl)); - - g_free (vstr); - } - free (labels); - } + return generate_syntax__ (act, ""); } + static void -populate_text (GtkTreeSelection *selection, gpointer data) +populate_output (GtkTreeSelection *selection, gpointer data) { + PsppireDialogActionVarInfo *act = data; GtkTreeView *treeview = gtk_tree_selection_get_tree_view (selection); - GString *gstring; PsppireDict *dict; size_t n_vars; - size_t i; - GtkTextBuffer *textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data)); struct variable **vars; g_object_get (treeview, "model", &dict, NULL); - gstring = g_string_sized_new (200); - psppire_dict_view_get_selected_variables (PSPPIRE_DICT_VIEW (treeview), &vars, &n_vars); - for (i = 0; i < n_vars; i++) + + if (n_vars > 0) { - if (i > 0) - g_string_append_c (gstring, '\n'); - populate_text_var (gstring, vars[i]); - } - g_free (vars); + PsppireDataWindow *dw; - gtk_text_buffer_set_text (textbuffer, gstring->str, gstring->len); + g_object_get (act, "top-level", &dw, NULL); - g_string_free (gstring, TRUE); + psppire_output_view_clear (act->output); + + output_engine_push (); + psppire_output_view_register_driver (act->output); + g_free (execute_syntax_string ( + dw, generate_syntax__ (&act->parent, + "DISPLAY DICTIONARY /VARIABLES="))); + output_engine_pop (); + } } @@ -225,13 +165,17 @@ jump_to (PsppireDialog *d, gint response, gpointer data) g_free (vars); } -static void -psppire_dialog_action_var_info_activate (GtkAction *a) +static GtkBuilder * +psppire_dialog_action_var_info_activate (PsppireDialogAction *a, GVariant *param) { PsppireDialogAction *pda = PSPPIRE_DIALOG_ACTION (a); + PsppireDialogActionVarInfo *act = PSPPIRE_DIALOG_ACTION_VAR_INFO (pda); + + GtkBuilder *xml = builder_new ( "variable-info.ui"); - GtkBuilder *xml = builder_new ("variable-info.ui"); - GtkWidget *textview = get_widget_assert (xml, "textview1"); + act->output = + psppire_output_view_new (GTK_LAYOUT (get_widget_assert (xml, "layout1")), + NULL); pda->dialog = get_widget_assert (xml, "variable-info-dialog"); pda->source = get_widget_assert (xml, "treeview2"); @@ -241,9 +185,8 @@ psppire_dialog_action_var_info_activate (GtkAction *a) NULL); g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (pda->source)), - "changed", G_CALLBACK (populate_text), - textview); - + "changed", G_CALLBACK (populate_output), + act); g_signal_connect (pda->dialog, "response", G_CALLBACK (jump_to), pda); @@ -251,18 +194,13 @@ psppire_dialog_action_var_info_activate (GtkAction *a) psppire_dialog_action_set_valid_predicate (pda, treeview_item_selected); - g_object_unref (xml); - - if (PSPPIRE_DIALOG_ACTION_CLASS (psppire_dialog_action_var_info_parent_class)->activate) - PSPPIRE_DIALOG_ACTION_CLASS (psppire_dialog_action_var_info_parent_class)->activate (pda); + return xml; } static void psppire_dialog_action_var_info_class_init (PsppireDialogActionVarInfoClass *class) { - GtkActionClass *action_class = GTK_ACTION_CLASS (class); - - action_class->activate = psppire_dialog_action_var_info_activate; + PSPPIRE_DIALOG_ACTION_CLASS (class)->initial_activate = psppire_dialog_action_var_info_activate; PSPPIRE_DIALOG_ACTION_CLASS (class)->generate_syntax = generate_syntax; }