X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Ffind-dialog.c;h=0f856f94629d29c58383d9a1fc3d078015b47bf4;hb=220a0c409390225346a8072917073e25a971e624;hp=07b73fe84c93d6cdb9e52f51c60a694f4ba0b0dd;hpb=c81ed3d3c60ca7d576ef9d3d9c9d6863d6f11bf5;p=pspp diff --git a/src/ui/gui/find-dialog.c b/src/ui/gui/find-dialog.c index 07b73fe84c..0f856f9462 100644 --- a/src/ui/gui/find-dialog.c +++ b/src/ui/gui/find-dialog.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2007, 2009 Free Software Foundation + Copyright (C) 2007, 2009, 2011, 2012 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 @@ -23,6 +23,7 @@ which match particular strings */ #include "find-dialog.h" #include "psppire-selector.h" #include "psppire-dialog.h" +#include "builder-wrapper.h" #include "helper.h" #include "psppire-data-window.h" #include "dict-display.h" @@ -34,6 +35,7 @@ which match particular strings */ #include #include #include +#include #include #include @@ -183,10 +185,8 @@ value_labels_toggled (GtkToggleButton *tb, gpointer data) /* Pops up the Find dialog box */ void -find_dialog (GObject *o, gpointer data) +find_dialog (PsppireDataWindow *de) { - PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (data); - struct find_dialog fd; GtkWidget *dialog ; @@ -207,7 +207,7 @@ find_dialog (GObject *o, gpointer data) buttonbox = get_widget_assert (fd.xml, "find-buttonbox"); - gtk_box_pack_start_defaults (GTK_BOX (buttonbox), find_button); + psppire_box_pack_start_defaults (GTK_BOX (buttonbox), find_button); gtk_box_reorder_child (GTK_BOX (buttonbox), find_button, 0); dialog = get_widget_assert (fd.xml, "find-dialog"); @@ -246,10 +246,6 @@ find_dialog (GObject *o, gpointer data) "selection-mode", GTK_SELECTION_SINGLE, NULL); - psppire_selector_set_select_func (PSPPIRE_SELECTOR (selector), - insert_source_row_into_entry, - NULL - ); psppire_selector_set_filter_func (PSPPIRE_SELECTOR (selector), is_currently_in_entry); @@ -428,7 +424,6 @@ struct comparator { const struct variable *var; enum string_cmp_flags flags; - const PsppireDict *dict; bool (*compare) (const struct comparator *, const union value *); @@ -503,7 +498,7 @@ string_value_compare (const struct comparator *cmptr, g_return_val_if_fail (width > 0, false); assert ( ! (cmptr->flags & STR_CMP_LABELS)); - text = value_to_text (*val, cmptr->dict, *var_get_write_format (cmptr->var)); + text = value_to_text (*val, cmptr->var); if ( cmptr->flags & STR_CMP_SUBSTR) found = (NULL != g_strstr_len (text, width, ssc->pattern)); @@ -532,7 +527,7 @@ regexp_value_compare (const struct comparator *cmptr, g_return_val_if_fail (width > 0, false); - text = value_to_text (*val, cmptr->dict, *var_get_write_format (cmptr->var)); + text = value_to_text (*val, cmptr->var); /* We must remove trailing whitespace, otherwise $ will not match where one would expect */ g_strchomp (text); @@ -570,7 +565,8 @@ regexp_label_compare (const struct comparator *cmptr, static void regexp_destroy (struct comparator *cmptr) { - struct regexp_comparator *rec = (struct regexp_comparator *) cmptr; + struct regexp_comparator *rec + = UP_CAST (cmptr, struct regexp_comparator, parent); regfree (&rec->re); } @@ -578,39 +574,37 @@ regexp_destroy (struct comparator *cmptr) static void cmptr_value_destroy (struct comparator *cmptr) { - struct value_comparator *vc = (struct value_comparator *) cmptr; + struct value_comparator *vc + = UP_CAST (cmptr, struct value_comparator, parent); value_destroy (&vc->pattern, var_get_width (cmptr->var)); } static struct comparator * -value_comparator_create (const struct variable *var, const PsppireDict *dict, const char *target) +value_comparator_create (const struct variable *var, const char *target) { struct value_comparator *vc = xzalloc (sizeof (*vc)); - struct comparator *cmptr = (struct comparator *) vc; + struct comparator *cmptr = &vc->parent; cmptr->flags = 0; cmptr->var = var; cmptr->compare = value_compare ; cmptr->destroy = cmptr_value_destroy; - cmptr->dict = dict; - text_to_value (target, dict, var, &vc->pattern); + text_to_value (target, var, &vc->pattern); return cmptr; } static struct comparator * -string_comparator_create (const struct variable *var, const PsppireDict *dict, - const char *target, +string_comparator_create (const struct variable *var, const char *target, enum string_cmp_flags flags) { struct string_comparator *ssc = xzalloc (sizeof (*ssc)); - struct comparator *cmptr = (struct comparator *) ssc; + struct comparator *cmptr = &ssc->parent; cmptr->flags = flags; cmptr->var = var; - cmptr->dict = dict; if ( flags & STR_CMP_LABELS) cmptr->compare = string_label_compare; @@ -624,16 +618,15 @@ string_comparator_create (const struct variable *var, const PsppireDict *dict, static struct comparator * -regexp_comparator_create (const struct variable *var, const PsppireDict *dict, const char *target, +regexp_comparator_create (const struct variable *var, const char *target, enum string_cmp_flags flags) { int code; struct regexp_comparator *rec = xzalloc (sizeof (*rec)); - struct comparator *cmptr = (struct comparator *) rec; + struct comparator *cmptr = &rec->parent; cmptr->flags = flags; cmptr->var = var; - cmptr->dict = dict; cmptr->compare = (flags & STR_CMP_LABELS) ? regexp_label_compare : regexp_value_compare ; @@ -683,16 +676,16 @@ comparator_destroy (struct comparator *cmptr) static struct comparator * -comparator_factory (const struct variable *var, const PsppireDict *dict, const char *str, +comparator_factory (const struct variable *var, const char *str, enum string_cmp_flags flags) { if ( flags & STR_CMP_REGEXP ) - return regexp_comparator_create (var, dict, str, flags); + return regexp_comparator_create (var, str, flags); if ( flags & (STR_CMP_SUBSTR | STR_CMP_LABELS) ) - return string_comparator_create (var, dict, str, flags); + return string_comparator_create (var, str, flags); - return value_comparator_create (var, dict, str); + return value_comparator_create (var, str); } @@ -738,7 +731,7 @@ find_value (const struct find_dialog *fd, casenumber current_row, casenumber i; const struct casenum_iterator *ip = get_iteration_params (fd); struct comparator *cmptr = - comparator_factory (var, fd->dict, target_string, flags); + comparator_factory (var, target_string, flags); value_init (&val, width); if ( ! cmptr)