/* PSPPIRE - a graphical user interface for PSPP. Copyright (C) 2013 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 the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "psppire-dialog-action-flip.h" #include "psppire-var-view.h" #include "psppire-dialog.h" #include "builder-wrapper.h" static void psppire_dialog_action_flip_init (PsppireDialogActionFlip *act); static void psppire_dialog_action_flip_class_init (PsppireDialogActionFlipClass *class); G_DEFINE_TYPE (PsppireDialogActionFlip, psppire_dialog_action_flip, PSPPIRE_TYPE_DIALOG_ACTION); /* FLIP /VARIABLES=var_list /NEWNAMES=var_name. */ static char * generate_syntax (const PsppireDialogAction *act) { const gchar *text; PsppireDialogActionFlip *rd = PSPPIRE_DIALOG_ACTION_FLIP (act); GString *string = g_string_new ("FLIP"); gchar *syntax ; g_string_append (string, " /VARIABLES = "); psppire_var_view_append_names (PSPPIRE_VAR_VIEW (rd->dest), 0, string); text = gtk_entry_get_text (GTK_ENTRY (rd->entry)); if (text) g_string_append_printf (string, " /NEWNAME = %s", text); g_string_append (string, ".\n"); syntax = string->str; g_string_free (string, FALSE); return syntax; } static gboolean dialog_state_valid (gpointer a) { PsppireDialogActionFlip *act = PSPPIRE_DIALOG_ACTION_FLIP (a); GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (act->dest)); gint n_rows = gtk_tree_model_iter_n_children (model, NULL); if (n_rows == 0) return FALSE; if (0 == strcmp ("", gtk_entry_get_text (GTK_ENTRY (act->entry)))) return FALSE; return TRUE; } static void refresh (PsppireDialogAction *rd_) { PsppireDialogActionFlip *rd = PSPPIRE_DIALOG_ACTION_FLIP (rd_); GtkTreeModel *dmodel = gtk_tree_view_get_model (GTK_TREE_VIEW (rd->dest)); gtk_list_store_clear (GTK_LIST_STORE (dmodel)); gtk_entry_set_text (GTK_ENTRY (rd->entry), ""); } static GtkBuilder * psppire_dialog_action_flip_activate (PsppireDialogAction *a, GVariant *param) { PsppireDialogAction *pda = PSPPIRE_DIALOG_ACTION (a); PsppireDialogActionFlip *act = PSPPIRE_DIALOG_ACTION_FLIP (a); GtkBuilder *xml = builder_new ("transpose.ui"); pda->dialog = get_widget_assert (xml, "transpose-dialog"); pda->source = get_widget_assert (xml, "source-treeview"); act->dest = get_widget_assert (xml, "variables-treeview"); act->entry = get_widget_assert (xml, "new-name-entry"); psppire_dialog_action_set_valid_predicate (pda, dialog_state_valid); psppire_dialog_action_set_refresh (pda, refresh); return xml; } static void psppire_dialog_action_flip_class_init (PsppireDialogActionFlipClass *class) { PSPPIRE_DIALOG_ACTION_CLASS (class)->initial_activate = psppire_dialog_action_flip_activate; PSPPIRE_DIALOG_ACTION_CLASS (class)->generate_syntax = generate_syntax; } static void psppire_dialog_action_flip_init (PsppireDialogActionFlip *act) { }