void workbook_style_test (Workbook *wb) { GSList *sheets; g_return_if_fail (wb != NULL); sheets = workbook_sheets (wb); while (sheets) { Sheet *sheet = sheets->data; fprintf (stderr, "Style lookups on '%s'\n", sheet->name_unquoted); sheet_styles_dump (sheet); #ifdef RUN_THRASH_SCROLL zero_stats (); thrash_scroll (sheet); dump_stats ("Scroll"); #endif zero_stats (); thrash_insert (sheet); dump_stats ("Insert"); sheets = g_slist_remove (sheets, sheet); sheet_flag_recompute_spans (sheet); } workbook_recalc (wb); workbook_calc_spans (wb, GNM_SPANCALC_RENDER); }
static void cb_dialog_cancel_clicked (G_GNUC_UNUSED GtkWidget *button, GoalSeekState *state) { state->cancelled = TRUE; if ((state->old_cell != NULL) && (state->old_value != NULL)) { sheet_cell_set_value (state->old_cell, state->old_value); workbook_recalc (state->wb); state->old_value = NULL; } gtk_widget_destroy (state->dialog); }
/** * gnm_app_recalc: * * Recalculate everything dirty in all workbooks that have automatic * recalc turned on. **/ void gnm_app_recalc (void) { GList *l; g_return_if_fail (app != NULL); gnm_app_recalc_start (); for (l = app->workbook_list; l; l = l->next) { Workbook *wb = l->data; if (workbook_get_recalcmode (wb)) workbook_recalc (wb); } gnm_app_recalc_finish (); }
/** Recompute each sheet in a workbook and all cells in each of these sheets. */ USER_OBJECT_ RGnumeric_recalcWorkbook(USER_OBJECT_ workbookRef, USER_OBJECT_ all) { Workbook *book; USER_OBJECT_ ans; book = RGnumeric_resolveWorkbookReference(workbookRef); if(LOGICAL_DATA(all)[0]) workbook_recalc_all(book); else workbook_recalc(book); ans = NEW_LOGICAL(1); LOGICAL_DATA(ans)[0] = TRUE; return(ans); }
static GoalSeekStatus goal_seek_eval (gnm_float x, gnm_float *y, void *vevaldata) { GoalEvalData const *evaldata = vevaldata; GnmValue *v = value_new_float (x); if (evaldata->update_ui) { sheet_cell_set_value (evaldata->xcell, v); } else { gnm_cell_set_value (evaldata->xcell, v); cell_queue_recalc (evaldata->xcell); } workbook_recalc (evaldata->state->wb); if (evaldata->ycell->value) { *y = value_get_as_float (evaldata->ycell->value) - evaldata->ytarget; if (gnm_finite (*y)) return GOAL_SEEK_OK; } return GOAL_SEEK_ERROR; }
/** * cb_dialog_apply_clicked: * @button: * @state: * * Close (destroy) the dialog **/ static void cb_dialog_apply_clicked (G_GNUC_UNUSED GtkWidget *button, GoalSeekState *state) { char *status_str; GoalSeekStatus status; GnmValue *target; GnmRangeRef const *r; GOFormat *format; if (state->warning_dialog != NULL) gtk_widget_destroy (state->warning_dialog); /* set up source */ target = gnm_expr_entry_parse_as_value (state->set_cell_entry, state->sheet); if (target == NULL) { go_gtk_notice_nonmodal_dialog (GTK_WINDOW(state->dialog), &(state->warning_dialog), GTK_MESSAGE_ERROR, _("You should introduce a valid cell " "name in 'Set Cell:'!")); gnm_expr_entry_grab_focus (state->set_cell_entry, TRUE); return; } r = &target->v_range.cell; state->set_cell = sheet_cell_get (r->a.sheet, r->a.col, r->a.row); value_release (target); if (state->set_cell == NULL || !gnm_cell_has_expr (state->set_cell)) { go_gtk_notice_nonmodal_dialog (GTK_WINDOW(state->dialog), &(state->warning_dialog), GTK_MESSAGE_ERROR, _("The cell named in 'Set Cell:' " "must contain a formula!")); gnm_expr_entry_grab_focus (state->set_cell_entry, TRUE); return; } /* set up source */ target = gnm_expr_entry_parse_as_value (state->change_cell_entry, state->sheet); if (target == NULL) { go_gtk_notice_nonmodal_dialog (GTK_WINDOW(state->dialog), &(state->warning_dialog), GTK_MESSAGE_ERROR, _("You should introduce a valid cell " "name in 'By Changing Cell:'!")); gnm_expr_entry_grab_focus (state->change_cell_entry, TRUE); return; } r = &target->v_range.cell; state->change_cell = sheet_cell_fetch (r->a.sheet, r->a.col, r->a.row); value_release (target); if (gnm_cell_has_expr (state->change_cell)) { go_gtk_notice_nonmodal_dialog (GTK_WINDOW(state->dialog), &(state->warning_dialog), GTK_MESSAGE_ERROR, _("The cell named in 'By changing cell' " "must not contain a formula.")); gnm_expr_entry_grab_focus (state->change_cell_entry, TRUE); return; } format = gnm_style_get_format (gnm_cell_get_style (state->set_cell)); if (entry_to_float_with_format (GTK_ENTRY(state->to_value_entry), &state->target_value, TRUE, format)){ go_gtk_notice_nonmodal_dialog (GTK_WINDOW(state->dialog), &(state->warning_dialog), GTK_MESSAGE_ERROR, _("The value given in 'To Value:' " "is not valid.")); focus_on_entry (GTK_ENTRY(state->to_value_entry)); return; } format = gnm_style_get_format (gnm_cell_get_style (state->change_cell)); if (entry_to_float_with_format (GTK_ENTRY(state->at_least_entry), &state->xmin, TRUE, format)) { state->xmin = -max_range_val; gtk_entry_set_text (GTK_ENTRY (state->at_least_entry), ""); } if (entry_to_float_with_format (GTK_ENTRY(state->at_most_entry), &state->xmax, TRUE, format)) { state->xmax = +max_range_val; gtk_entry_set_text (GTK_ENTRY (state->at_most_entry), ""); } if ((state->old_cell != NULL) && (state->old_value != NULL)) { sheet_cell_set_value (state->old_cell, state->old_value); workbook_recalc (state->wb); state->old_value = NULL; } state->old_cell = state->change_cell; state->old_value = value_dup (state->change_cell->value); status = gnumeric_goal_seek (state); switch (status) { case GOAL_SEEK_OK: { const char *actual_str; const char *solution_str; GOFormat *format = go_format_general (); GnmValue *error_value = value_new_float (state->target_value - value_get_as_float (state->set_cell->value)); char *target_str = format_value (format, error_value, NULL, -1, workbook_date_conv (state->wb)); gtk_label_set_text (GTK_LABEL (state->target_value_label), target_str); g_free (target_str); value_release (error_value); status_str = g_strdup_printf (_("Goal seeking with cell %s found a solution."), cell_name (state->set_cell)); gtk_label_set_text (GTK_LABEL (state->result_label), status_str); g_free (status_str); /* FIXME? Do a format? */ actual_str = state->set_cell->value ? value_peek_string (state->set_cell->value) : ""; gtk_label_set_text (GTK_LABEL (state->current_value_label), actual_str); solution_str = state->change_cell->value ? value_peek_string (state->change_cell->value) : ""; gtk_label_set_text (GTK_LABEL (state->solution_label), solution_str); break; } default: status_str = g_strdup_printf (_("Goal seeking with cell %s did not find a solution."), cell_name (state->set_cell)); gtk_label_set_text (GTK_LABEL (state->result_label), status_str); g_free (status_str); gtk_label_set_text (GTK_LABEL (state->current_value_label), ""); gtk_label_set_text (GTK_LABEL (state->solution_label), ""); gtk_label_set_text (GTK_LABEL (state->target_value_label), ""); break; } state->cancelled = FALSE; gtk_widget_show (state->result_table); return; }