static GnmValue * dialog_goto_get_val (GotoState *state) { char const *text = gtk_entry_get_text (state->goto_text); Sheet *sheet = wb_control_cur_sheet (WORKBOOK_CONTROL (state->wbcg)); GnmValue *val = value_new_cellrange_str (sheet, text); if (val == NULL) { GnmParsePos pp; GnmNamedExpr *nexpr = expr_name_lookup (parse_pos_init_sheet (&pp, sheet), text); if (nexpr != NULL && !expr_name_is_placeholder (nexpr)) { val = gnm_expr_top_get_range (nexpr->texpr); } } return val; }
static void cb_merge_merge_clicked (G_GNUC_UNUSED GtkWidget *ignore, MergeState *state) { GtkTreeIter this_iter; gint n = 0; char *data_string = NULL, *field_string = NULL; GSList *data_list = NULL, *field_list = NULL; GnmValue *v_zone; gint field_problems = 0; gint min_length = gnm_sheet_get_max_rows (state->sheet); gint max_length = 0; v_zone = gnm_expr_entry_parse_as_value (state->zone, state->sheet); g_return_if_fail (v_zone != NULL); while (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (state->model), &this_iter, NULL, n)) { GnmValue *v_data, *v_field; gtk_tree_model_get (GTK_TREE_MODEL (state->model), &this_iter, DATA_RANGE, &data_string, FIELD_LOCATION, &field_string, -1); v_data = value_new_cellrange_str (state->sheet, data_string); v_field = value_new_cellrange_str (state->sheet, field_string); g_free (data_string); g_free (field_string); g_return_if_fail (v_data != NULL && v_field != NULL); if (!global_range_contained (state->sheet, v_field, v_zone)) field_problems++; data_list = g_slist_prepend (data_list, v_data); field_list = g_slist_prepend (field_list, v_field); n++; } if (field_problems > 0) { char *text; if (field_problems == 1) text = g_strdup (_("One field is not part of the merge zone!")); else text = g_strdup_printf (_("%i fields are not part of the merge zone!"), field_problems); go_gtk_notice_nonmodal_dialog ((GtkWindow *) state->dialog, &(state->warning_dialog), GTK_MESSAGE_ERROR, "%s", text); g_free (text); value_release (v_zone); range_list_destroy (data_list); range_list_destroy (field_list); return; } g_slist_foreach (data_list, cb_merge_find_shortest_column, &min_length); g_slist_foreach (data_list, cb_merge_find_longest_column, &max_length); if (min_length < max_length) { char *text = g_strdup_printf (_("The data columns range in length from " "%i to %i. Shall we trim the lengths to " "%i and proceed?"), min_length, max_length, min_length); if (go_gtk_query_yes_no (GTK_WINDOW (state->dialog), TRUE, "%s", text)) { g_slist_foreach (data_list, cb_merge_trim_data, &min_length); g_free (text); } else { g_free (text); value_release (v_zone); range_list_destroy (data_list); range_list_destroy (field_list); return; } } if (!cmd_merge_data (WORKBOOK_CONTROL (state->wbcg), state->sheet, v_zone, field_list, data_list)) gtk_widget_destroy (state->dialog); }