void ms_container_finalize (MSContainer *container) { int i; g_return_if_fail (container != NULL); if (container->free_blips && container->blips != NULL) { for (i = container->blips->len; i-- > 0 ; ) { MSEscherBlip *blip = g_ptr_array_index (container->blips, i); if (blip != NULL) ms_escher_blip_free (blip); } g_ptr_array_free (container->blips, TRUE); container->blips = NULL; } if (container->obj_queue != NULL) { GSList *ptr; for (ptr = container->obj_queue; ptr != NULL; ptr = ptr->next) ms_obj_delete (ptr->data); g_slist_free (container->obj_queue); container->obj_queue = NULL; } if (container->v7.externsheets != NULL) { g_ptr_array_free (container->v7.externsheets, TRUE); container->v7.externsheets = NULL; } if (container->v7.externnames != NULL) { for (i = container->v7.externnames->len; i-- > 0 ; ) if (g_ptr_array_index (container->v7.externnames, i) != NULL) { GnmNamedExpr *nexpr = g_ptr_array_index (container->v7.externnames, i); if (nexpr != NULL) { /* NAME placeholders need removal, EXTERNNAME placeholders * will no be active */ if (expr_name_is_active (nexpr) && expr_name_is_placeholder (nexpr) && /* FIXME: Why do we need this? */ nexpr->ref_count == 2) expr_name_remove (nexpr); expr_name_unref (nexpr); } } g_ptr_array_free (container->v7.externnames, TRUE); container->v7.externnames = NULL; } }
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; }
/* * This is called when something is entered in the location entry. * We either go there (if the text refers to a cell by address or * name), or we try to define a name for the selection. */ gboolean wb_control_parse_and_jump (WorkbookControl *wbc, char const *text) { Sheet *sheet = wb_control_cur_sheet (wbc); GnmParsePos pp; GnmEvalPos ep; GnmValue *target; GnmRangeRef range; SheetView *sv; if (text == NULL || *text == '\0') return FALSE; sv = wb_control_cur_sheet_view (wbc); parse_pos_init_editpos (&pp, sv); target = value_new_cellrange_parsepos_str (&pp, text, GNM_EXPR_PARSE_DEFAULT); if (target == NULL) { /* Not an address; is it a name? */ GnmParsePos pp; GnmNamedExpr *nexpr = expr_name_lookup ( parse_pos_init_sheet (&pp, sheet), text); /* If no name, or just a placeholder exists create a name */ if (nexpr == NULL || expr_name_is_placeholder (nexpr)) { wb_create_name (wbc, text, &pp); return FALSE; } else { target = gnm_expr_top_get_range (nexpr->texpr); if (target == NULL) { go_cmd_context_error_invalid (GO_CMD_CONTEXT (wbc), _("Address"), text); return FALSE; } } } eval_pos_init_editpos (&ep, sv); gnm_cellref_make_abs (&range.a, &target->v_range.cell.a, &ep); gnm_cellref_make_abs (&range.b, &target->v_range.cell.b, &ep); value_release (target); return wb_control_jump (wbc, sheet, &range); }
static void cb_load_names (G_GNUC_UNUSED gpointer key, GnmNamedExpr *nexpr, LoadNames *user) { GtkTreeIter iter; gboolean is_address = gnm_expr_top_is_rangeref (nexpr->texpr); if (expr_name_is_placeholder (nexpr)) return; if (is_address) { gtk_tree_store_append (user->state->model, &iter, &user->iter); gtk_tree_store_set (user->state->model, &iter, ITEM_NAME, expr_name_name (nexpr), SHEET_POINTER, nexpr->pos.sheet, EXPRESSION, nexpr, -1); } }