From 2680a3ae85ffb2c15d2a81e48f1904e029170222 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Sun, 24 Dec 2006 23:50:59 +0000 Subject: [PATCH] Fixed bug in value labels dialog box --- src/ui/gui/ChangeLog | 5 +++ src/ui/gui/val-labs-dialog.c | 87 +++++++++++++++++++++++++++++++----- src/ui/gui/val-labs-dialog.h | 36 ++------------- src/ui/gui/var-sheet.c | 2 +- 4 files changed, 85 insertions(+), 45 deletions(-) diff --git a/src/ui/gui/ChangeLog b/src/ui/gui/ChangeLog index 70931061..6aabf006 100644 --- a/src/ui/gui/ChangeLog +++ b/src/ui/gui/ChangeLog @@ -1,3 +1,8 @@ +Mon Dec 25 08:49:57 WST 2006 John Darrington + + * var-sheet.c val-labs-dialog.c val-labs-dialog.h: Fixed bug in value + labels dialog box. + Sun Dec 17 08:26:10 WST 2006 John Darrington * syntax-editor-source.c syntax-editor-source.h syntax-editor.h: diff --git a/src/ui/gui/val-labs-dialog.c b/src/ui/gui/val-labs-dialog.c index 3918f2f2..3d7ccef1 100644 --- a/src/ui/gui/val-labs-dialog.c +++ b/src/ui/gui/val-labs-dialog.c @@ -29,6 +29,34 @@ #include "val-labs-dialog.h" #include + +struct val_labs_dialog +{ + GtkWidget *window; + + /* The variable to be updated */ + struct variable *pv; + + /* Local copy of labels */ + struct val_labs *labs; + + /* Actions */ + GtkWidget *add_button; + GtkWidget *remove_button; + GtkWidget *change_button; + + /* Entry Boxes */ + GtkWidget *value_entry; + GtkWidget *label_entry; + + /* Signal handler ids */ + gint change_handler_id; + gint value_handler_id; + + GtkWidget *treeview; +}; + + /* This callback occurs when the text in the label entry box is changed */ static void @@ -152,23 +180,50 @@ val_labs_ok (GtkWidget *w, gpointer data) dialog->labs = 0; + gtk_widget_hide (dialog->window); + return FALSE; } +/* Callback for when the Value Labels dialog is closed using + the Cancel button.*/ +static void +val_labs_cancel (struct val_labs_dialog *dialog) +{ + val_labs_destroy (dialog->labs); + + dialog->labs = 0; + + gtk_widget_hide (dialog->window); +} + + /* Callback for when the Value Labels dialog is closed using the Cancel button.*/ static gint -val_labs_cancel (GtkWidget *w, gpointer data) +on_cancel (GtkWidget *w, gpointer data) { struct val_labs_dialog *dialog = data; - val_labs_destroy (dialog->labs); - dialog->labs = 0; + val_labs_cancel (dialog); return FALSE; } +/* Callback for when the Value Labels dialog is closed using + the window delete button.*/ +static gint +on_delete (GtkWidget *w, GdkEvent *e, gpointer data) +{ + struct val_labs_dialog *dialog = data; + + val_labs_cancel (dialog); + + return TRUE; +} + + /* Return the value-label pair currently selected in the dialog box */ static struct val_lab * get_selected_tuple (struct val_labs_dialog *dialog) @@ -324,7 +379,6 @@ val_labs_dialog_create (GladeXML *xml) (GTK_WINDOW (dialog->window), GTK_WINDOW (get_widget_assert (xml, "data_editor"))); - dialog->ok = get_widget_assert (xml, "val_labs_ok"); dialog->add_button = get_widget_assert (xml, "val_labs_add"); dialog->remove_button = get_widget_assert (xml, "val_labs_remove"); dialog->change_button = get_widget_assert (xml, "val_labs_change"); @@ -345,7 +399,14 @@ val_labs_dialog_create (GladeXML *xml) g_signal_connect (GTK_OBJECT (get_widget_assert (xml, "val_labs_cancel")), "clicked", - GTK_SIGNAL_FUNC (val_labs_cancel), dialog); + GTK_SIGNAL_FUNC (on_cancel), dialog); + + g_signal_connect (GTK_OBJECT (dialog->window), "delete-event", + GTK_SIGNAL_FUNC (on_delete), dialog); + + g_signal_connect (GTK_OBJECT (get_widget_assert (xml, "val_labs_ok")), + "clicked", + GTK_SIGNAL_FUNC (val_labs_ok), dialog); dialog->change_handler_id = g_signal_connect (GTK_OBJECT (dialog->label_entry), @@ -362,19 +423,12 @@ val_labs_dialog_create (GladeXML *xml) GTK_SIGNAL_FUNC (on_change), dialog); - g_signal_connect (GTK_OBJECT (get_widget_assert (xml, "val_labs_ok")), - "clicked", - GTK_SIGNAL_FUNC (val_labs_ok), dialog); - - g_signal_connect (GTK_OBJECT (dialog->treeview), "cursor-changed", GTK_SIGNAL_FUNC (on_select_row), dialog); - g_signal_connect (GTK_OBJECT (dialog->remove_button), "clicked", GTK_SIGNAL_FUNC (on_remove), dialog); - g_signal_connect (GTK_OBJECT (dialog->add_button), "clicked", GTK_SIGNAL_FUNC (on_add), dialog); @@ -384,6 +438,15 @@ val_labs_dialog_create (GladeXML *xml) } +void +val_labs_dialog_set_target_variable (struct val_labs_dialog *dialog, + struct variable *var) +{ + dialog->pv = var; +} + + + /* Populate the components of the dialog box, from the 'labs' member variable */ static void diff --git a/src/ui/gui/val-labs-dialog.h b/src/ui/gui/val-labs-dialog.h index c28bb694..e11b4330 100644 --- a/src/ui/gui/val-labs-dialog.h +++ b/src/ui/gui/val-labs-dialog.h @@ -33,40 +33,12 @@ struct val_labs; -struct val_labs_dialog -{ - GtkWidget *window; +struct val_labs_dialog * val_labs_dialog_create (GladeXML *); - /* The variable to be updated */ - struct variable *pv; - - /* Local copy of labels */ - struct val_labs *labs; - - /* Actions */ - GtkWidget *ok; - GtkWidget *add_button; - GtkWidget *remove_button; - GtkWidget *change_button; - - /* Entry Boxes */ - GtkWidget *value_entry; - GtkWidget *label_entry; - - /* Signal handler ids */ - gint change_handler_id; - gint value_handler_id; - - GtkWidget *treeview; -}; - - - - -struct val_labs_dialog * val_labs_dialog_create (GladeXML *xml); - -void val_labs_dialog_show (struct val_labs_dialog *dialog); +void val_labs_dialog_show (struct val_labs_dialog *); +void val_labs_dialog_set_target_variable (struct val_labs_dialog *, + struct variable *); #endif diff --git a/src/ui/gui/var-sheet.c b/src/ui/gui/var-sheet.c index bb7a0a60..4ca2cf29 100644 --- a/src/ui/gui/var-sheet.c +++ b/src/ui/gui/var-sheet.c @@ -287,7 +287,7 @@ var_sheet_cell_entry_enter (GtkSheet * sheet, gint row, gint column, if (!val_labs_dialog ) val_labs_dialog = val_labs_dialog_create (xml); - val_labs_dialog->pv = pv; + val_labs_dialog_set_target_variable (val_labs_dialog, pv); g_signal_connect_swapped (GTK_OBJECT (customEntry), "clicked", -- 2.30.2