static GODataCache * gdcs_allocate (GODataCacheSource const *src) { GnmDataCacheSource *gdcs = (GnmDataCacheSource *)src; GODataCache *res; g_return_val_if_fail (gdcs->src_sheet != NULL, NULL); if (NULL != gdcs->src_name) { GnmParsePos pp; GnmEvalPos ep; GnmNamedExpr *nexpr = expr_name_lookup ( parse_pos_init_sheet (&pp, gdcs->src_sheet), gdcs->src_name->str); if (NULL != nexpr) { GnmValue *v = expr_name_eval (nexpr, eval_pos_init_sheet (&ep, gdcs->src_sheet), GNM_EXPR_EVAL_PERMIT_NON_SCALAR | GNM_EXPR_EVAL_PERMIT_EMPTY); if (NULL != v) { value_release (v); } } } res = g_object_new (GO_DATA_CACHE_TYPE, NULL); return res; }
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); }