From a84eb76b976646ae9b0315ae6b856bf0f71da567 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Sat, 7 Jul 2007 09:23:52 +0000 Subject: [PATCH] Implemented "type & label" subdialog on compute. --- src/ui/gui/compute-dialog.c | 63 +++++++- src/ui/gui/psppire-buttonbox.c | 8 + src/ui/gui/psppire.glade | 269 +++++++++++++++++++++++++++++++++ 3 files changed, 332 insertions(+), 8 deletions(-) diff --git a/src/ui/gui/compute-dialog.c b/src/ui/gui/compute-dialog.c index 522ca6c3..843a2524 100644 --- a/src/ui/gui/compute-dialog.c +++ b/src/ui/gui/compute-dialog.c @@ -51,7 +51,7 @@ struct compute_dialog static void -on_target_change (GObject *obj, const struct compute_dialog *cd) +on_target_change (GObject *obj, struct compute_dialog *cd) { GtkWidget *target = get_widget_assert (cd->xml, "compute-entry1"); GtkWidget *type_and_label = get_widget_assert (cd->xml, "compute-button1"); @@ -151,9 +151,19 @@ generate_syntax (const struct compute_dialog *cd) { gchar *text; GString *string ; + const gchar *target_name ; + const gchar *expression; + const gchar *label; GtkTextIter start, end; - GtkWidget *target = get_widget_assert (cd->xml, "compute-entry1"); + GtkWidget *target = get_widget_assert (cd->xml, "compute-entry1"); GtkWidget *syntax_area = get_widget_assert (cd->xml, "compute-textview1"); + GtkWidget *string_toggle = get_widget_assert (cd->xml, "radio-button-string"); + GtkWidget *user_label_toggle = + get_widget_assert (cd->xml, "radio-button-user-label"); + GtkWidget *width_entry = get_widget_assert (cd->xml, "type-and-label-width"); + GtkWidget *label_entry = get_widget_assert (cd->xml, + "type-and-label-label-entry"); + GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (syntax_area)); @@ -161,17 +171,34 @@ generate_syntax (const struct compute_dialog *cd) gtk_text_buffer_get_start_iter (buffer, &start); gtk_text_buffer_get_end_iter (buffer, &end); + target_name = gtk_entry_get_text (GTK_ENTRY (target)); - string = g_string_new ("COMPUTE "); + expression = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); - g_string_append (string, gtk_entry_get_text (GTK_ENTRY (target))); + string = g_string_sized_new (64); - g_string_append (string, " = "); + if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (string_toggle))) + { + const char *w = gtk_entry_get_text (GTK_ENTRY(width_entry)); + g_string_append_printf (string, "STRING %s (a%s).\n", target_name, w); + } + else + g_string_append_printf (string, "NUMERIC %s.\n", target_name); - g_string_append (string, - gtk_text_buffer_get_text (buffer, &start, &end, FALSE)); + if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (user_label_toggle))) + label = gtk_entry_get_text (GTK_ENTRY (label_entry)); + else + label = expression; - g_string_append (string, "."); + if ( strlen (label) > 0 ) + g_string_append_printf (string, "VARIABLE LABEL %s '%s'.\n", + target_name, + label); + + g_string_append_printf (string, "COMPUTE %s = %s.", + target_name, + expression + ); text = string->str; @@ -180,6 +207,20 @@ generate_syntax (const struct compute_dialog *cd) return text; } +static void +run_type_label_dialog (GtkButton *b, gpointer data) +{ + struct compute_dialog *cd = data; + gint response; + + GtkWidget *subdialog = get_widget_assert (cd->xml, "type-and-label-dialog"); + GtkWidget *dialog = get_widget_assert (cd->xml, "compute-variable-dialog"); + + gtk_window_set_transient_for (GTK_WINDOW (subdialog), GTK_WINDOW (dialog)); + + response = psppire_dialog_run (PSPPIRE_DIALOG (subdialog)); +} + /* Pops up the Compute dialog box */ void @@ -202,6 +243,7 @@ compute_dialog (GObject *o, gpointer data) GtkWidget *syntax_area = get_widget_assert (xml, "compute-textview1"); GtkWidget *var_selector = get_widget_assert (xml, "compute-selector1"); GtkWidget *func_selector = get_widget_assert (xml, "compute-selector2"); + GtkWidget *type_and_label = get_widget_assert (xml, "compute-button1"); GtkSheet *var_sheet = GTK_SHEET (get_widget_assert (de->xml, "variable_sheet")); @@ -244,6 +286,11 @@ compute_dialog (GObject *o, gpointer data) G_CALLBACK (erase), xml); + g_signal_connect (type_and_label, "clicked", + G_CALLBACK (run_type_label_dialog), &scd); + + + response = psppire_dialog_run (PSPPIRE_DIALOG (dialog)); diff --git a/src/ui/gui/psppire-buttonbox.c b/src/ui/gui/psppire-buttonbox.c index b36f8d50..e4ee7885 100644 --- a/src/ui/gui/psppire-buttonbox.c +++ b/src/ui/gui/psppire-buttonbox.c @@ -183,6 +183,12 @@ close_dialog (GtkWidget *w, gpointer data) close_and_respond (w, GTK_RESPONSE_CLOSE); } +static void +continue_button_clicked (GtkWidget *w, gpointer data) +{ + close_and_respond (w, PSPPIRE_RESPONSE_CONTINUE); +} + static void ok_button_clicked (GtkWidget *w, gpointer data) @@ -243,6 +249,8 @@ psppire_button_box_init (PsppireButtonBox *bb) gtk_box_pack_start_defaults (GTK_BOX (bb), bb->button[PSPPIRE_BUTTON_CONTINUE]); + g_signal_connect (bb->button[PSPPIRE_BUTTON_CONTINUE], "clicked", + G_CALLBACK (continue_button_clicked), NULL); g_object_set (bb->button[PSPPIRE_BUTTON_CONTINUE], "no-show-all", TRUE, NULL); diff --git a/src/ui/gui/psppire.glade b/src/ui/gui/psppire.glade index 5f466d8a..abe19f41 100644 --- a/src/ui/gui/psppire.glade +++ b/src/ui/gui/psppire.glade @@ -1797,4 +1797,273 @@ + + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Compute Variable: Type and Label + True + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 2 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + 0 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 12 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + 2 + 2 + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + + + + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + radio-button-user-label + + + 1 + 2 + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Label: + + + False + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + GTK_PACK_END + 1 + + + + + 1 + 2 + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + Use expression as label + + + 1 + 2 + 1 + 2 + + + + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Label + True + + + label_item + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + 0 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 12 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + 2 + 2 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + Numeric + + + 1 + 2 + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + radio-button-string + + + + + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + + + 1 + 2 + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + String + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Width + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 8 1 32767 1 10 10 + + + 1 + + + + + 1 + + + + + 1 + 2 + 1 + 2 + GTK_FILL + + + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Type + True + + + label_item + + + + + 1 + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + PSPPIRE_BUTTON_CONTINUE_MASK | PSPPIRE_BUTTON_CANCEL_MASK | PSPPIRE_BUTTON_HELP_MASK + + + False + False + GTK_PACK_END + 1 + + + + + -- 2.30.2