/** * advanced_filter_ok_clicked_cb: * @button: * @state: * * Retrieve the information from the dialog and call the advanced_filter. * Note that we assume that the ok_button is only active if the entry fields * contain sensible data. **/ static void advanced_filter_ok_clicked_cb (G_GNUC_UNUSED GtkWidget *button, AdvancedFilterState *state) { data_analysis_output_t dao; GnmValue *input; GnmValue *criteria; char *text; GtkWidget *w; int err = 0; gboolean unique; input = gnm_expr_entry_parse_as_value ( GNM_EXPR_ENTRY (state->input_entry), state->sheet); criteria = gnm_expr_entry_parse_as_value (state->input_entry_2, state->sheet); parse_output ((GenericToolState *) state, &dao); w = glade_xml_get_widget (state->gui, "unique-button"); unique = (1 == gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w))); err = advanced_filter (WORKBOOK_CONTROL (state->wbcg), &dao, input, criteria, unique); value_release (input); value_release (criteria); switch (err) { case OK: gtk_widget_destroy (state->dialog); break; case ERR_INVALID_FIELD: error_in_entry ((GenericToolState *) state, GTK_WIDGET (state->input_entry_2), _("The given criteria are invalid.")); break; case NO_RECORDS_FOUND: go_gtk_notice_nonmodal_dialog ((GtkWindow *) state->dialog, &(state->warning_dialog), GTK_MESSAGE_INFO, _("No matching records were found.")); break; default: text = g_strdup_printf (_("An unexpected error has occurred: " "%d."), err); error_in_entry ((GenericToolState *) state, GTK_WIDGET (state->input_entry), text); g_free (text); break; } return; }
/** * advanced_filter_ok_clicked_cb: * @button: * @state: * * Retrieve the information from the dialog and call the advanced_filter. * Note that we assume that the ok_button is only active if the entry fields * contain sensible data. **/ static void advanced_filter_ok_clicked_cb (G_GNUC_UNUSED GtkWidget *button, AdvancedFilterState *state) { data_analysis_output_t *dao; GnmValue *input; GnmValue *criteria; char *text; GtkWidget *w; int err = 0; gboolean unique; input = gnm_expr_entry_parse_as_value ( GNM_EXPR_ENTRY (state->input_entry), state->sheet); criteria = gnm_expr_entry_parse_as_value (state->input_entry_2, state->sheet); dao = parse_output ((GenericToolState *) state, NULL); w = go_gtk_builder_get_widget (state->gui, "unique-button"); unique = (1 == gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w))); if (dao->type == InPlaceOutput) err = advanced_filter (WORKBOOK_CONTROL (state->wbcg), dao, input, criteria, unique); else { analysis_tools_data_advanced_filter_t * data = g_new0 (analysis_tools_data_advanced_filter_t, 1); data->base.wbc = WORKBOOK_CONTROL (state->wbcg); data->base.range_1 = input; data->base.range_2 = criteria; data->unique_only_flag = unique; if (cmd_analysis_tool (WORKBOOK_CONTROL (state->wbcg), state->sheet, dao, data, analysis_tool_advanced_filter_engine, FALSE)) { err = data->base.err; g_free (data); } else err = analysis_tools_noerr; } if (dao->type == InPlaceOutput || err != analysis_tools_noerr) { value_release (input); value_release (criteria); g_free (dao); } switch (err) { case analysis_tools_noerr: gtk_widget_destroy (state->dialog); break; case analysis_tools_invalid_field: error_in_entry ((GenericToolState *) state, GTK_WIDGET (state->input_entry_2), _("The given criteria are invalid.")); break; case analysis_tools_no_records_found: go_gtk_notice_nonmodal_dialog ((GtkWindow *) state->dialog, &(state->warning_dialog), GTK_MESSAGE_INFO, _("No matching records were found.")); break; default: text = g_strdup_printf (_("An unexpected error has occurred: " "%d."), err); error_in_entry ((GenericToolState *) state, GTK_WIDGET (state->input_entry), text); g_free (text); break; } return; }