X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fweight-cases-dialog.c;h=3eb1808dc7087c49a50cfa852c12ef607ad714c5;hb=a10cebe053263d7e936b6533a3dbf5ac2f0586a1;hp=50294de7fb72e039d1eab73760c583378a9d86c5;hpb=9683d7528884fcb3c60705812de9f96889536388;p=pspp-builds.git diff --git a/src/ui/gui/weight-cases-dialog.c b/src/ui/gui/weight-cases-dialog.c index 50294de7..3eb1808d 100644 --- a/src/ui/gui/weight-cases-dialog.c +++ b/src/ui/gui/weight-cases-dialog.c @@ -17,111 +17,157 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - #include -#include "psppire-var-select.h" -#include -#include "helper.h" -#include - -#include "psppire-var-store.h" #include "weight-cases-dialog.h" - +#include "psppire-selector.h" #include "psppire-dialog.h" +#include "helper.h" +#include "data-editor.h" +#include "dict-display.h" +#include +#include "syntax-editor.h" + +#include +#include -#define _(msgid) gettext (msgid) -#define N_(msgid) msgid +/* FIXME: These shouldn't be here */ +#include +#include "psppire-var-store.h" static void -refresh_var_select (PsppireVarSelect *vs) +on_select (PsppireSelector *sel, gpointer data) { - struct variable *weight; - - psppire_var_select_deselect_all (vs); - - weight = psppire_dict_get_weight_variable (vs->dict); + GtkRadioButton *radiobutton2 = data; - if ( weight ) - psppire_var_select_set_variable (vs, weight); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiobutton2), TRUE); } - static void -on_refresh (GtkWidget *dialog, gpointer data) +on_deselect (PsppireSelector *sel, gpointer data) { - refresh_var_select (data); + GtkRadioButton *radiobutton1 = data; + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiobutton1), TRUE); } static void -on_radiobutton_toggle (GtkToggleButton *button, gpointer data) +on_toggle (GtkToggleButton *button, gpointer data) { - PsppireVarSelect *vs = data; - if ( gtk_toggle_button_get_active (button) ) - { - psppire_var_select_deselect_all (vs); - } + GtkEntry *entry = data; + if ( gtk_toggle_button_get_active (button)) + gtk_entry_set_text (entry, ""); } -/* Callback for when new variable is selected. - IDX is the dict index of the variable selected. - Updates the label and toggle buttons in the dialog box - to reflect this new selection. */ -static void -select_var_callback (PsppireVarSelect *vs, gint idx, gpointer data) -{ - GladeXML * xml = data; - GtkWidget *label = get_widget_assert (xml, "weight-status-label"); - GtkWidget *radiobutton2 = get_widget_assert (xml, "radiobutton2"); +static gchar * generate_syntax (PsppireDict *, GtkEntry *); - struct variable *var = psppire_dict_get_variable (vs->dict, idx); - gtk_label_set_text (GTK_LABEL (label), var_get_name(var)); +/* Pops up the Weight Cases dialog box */ +void +weight_cases_dialog (GObject *o, gpointer data) +{ + gint response; + struct data_editor *de = data; + PsppireDict *dict; + struct variable *var; - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiobutton2), TRUE); -} + GladeXML *xml = glade_xml_new (PKGDATADIR "/psppire.glade", + "weight-cases-dialog", NULL); + GtkWidget *dialog = get_widget_assert (xml, "weight-cases-dialog"); + GtkWidget *source = get_widget_assert (xml, "weight-cases-treeview"); + GtkWidget *entry = get_widget_assert (xml, "weight-cases-entry"); + GtkWidget *selector = get_widget_assert (xml, "weight-cases-selector"); + GtkWidget *radiobutton1 = get_widget_assert (xml, + "weight-cases-radiobutton1"); + GtkWidget *radiobutton2 = get_widget_assert (xml, "radiobutton2"); + GtkSheet *var_sheet = + GTK_SHEET (get_widget_assert (de->xml, "variable_sheet")); -static void -deselect_all (PsppireVarSelect *vs, gpointer data) -{ - GladeXML * xml = data; + PsppireVarStore *vs = PSPPIRE_VAR_STORE (gtk_sheet_get_model (var_sheet)); - GtkWidget *label = get_widget_assert (xml, "weight-status-label"); + dict = vs->dict; - GtkWidget *radiobutton1 = get_widget_assert (xml, "radiobutton1"); + g_signal_connect (radiobutton1, "toggled", G_CALLBACK (on_toggle), entry); + g_signal_connect (selector, "selected", G_CALLBACK (on_select), + radiobutton2); - gtk_label_set_text (GTK_LABEL (label), _("Do not weight cases")); + g_signal_connect (selector, "de-selected", G_CALLBACK (on_deselect), + radiobutton1); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiobutton1), TRUE); -} + attach_dictionary_to_treeview (GTK_TREE_VIEW (source), + dict, + GTK_SELECTION_SINGLE, + var_is_numeric + ); + psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector), + source, + entry, + insert_source_row_into_entry, + is_currently_in_entry + ); + var = dict_get_weight (dict->dict); + if ( ! var ) + gtk_entry_set_text (GTK_ENTRY (entry), ""); + else + gtk_entry_set_text (GTK_ENTRY (entry), var_get_name (var)); -PsppireDialog * -create_weight_dialog (PsppireVarSelect *select, GladeXML *xml) -{ - GtkWidget *dialog = get_widget_assert (xml, "weight-cases-dialog"); - GtkWidget *radiobutton1 = get_widget_assert (xml, "radiobutton1"); + g_signal_emit_by_name (entry, "activate"); + + response = psppire_dialog_run (PSPPIRE_DIALOG (dialog)); + + g_object_unref (xml); + + switch (response) + { + case GTK_RESPONSE_OK: + { + gchar *syntax = generate_syntax (dict, GTK_ENTRY (entry)); + struct getl_interface *sss = create_syntax_string_source (syntax); + execute_syntax (sss); + + g_free (syntax); + } + break; + case PSPPIRE_RESPONSE_PASTE: + { + gchar *syntax = generate_syntax (dict, GTK_ENTRY (entry)); + + struct syntax_editor *se = + (struct syntax_editor *) window_create (WINDOW_SYNTAX, NULL); + + gtk_text_buffer_insert_at_cursor (se->buffer, syntax, -1); + + g_free (syntax); + } + break; + default: + break; + } +} - g_signal_connect (dialog, "refresh", G_CALLBACK (on_refresh), select); - g_signal_connect (select, "variable-selected", - G_CALLBACK (select_var_callback), xml); +static gchar * +generate_syntax (PsppireDict *dict, GtkEntry *entry) +{ + gchar *syntax; - g_signal_connect (select, "deselect-all", - G_CALLBACK (deselect_all), xml); + const gchar *text = gtk_entry_get_text (entry); - g_signal_connect (radiobutton1, "toggled", - G_CALLBACK (on_radiobutton_toggle), - select); + struct variable *var = psppire_dict_lookup_var (dict, text); - refresh_var_select (select); + if ( var == NULL) + syntax = g_strdup ("WEIGHT OFF."); + else + syntax = g_strdup_printf ("WEIGHT BY %s.\n", + var_get_name (var)); - return PSPPIRE_DIALOG (dialog); + return syntax; }