/** * random_cor_tool_ok_clicked_cb: * @button: * @state: * * Retrieve the information from the dialog and call the appropriate tool. * Note that we assume that the ok_button is only active if the entry fields * contain sensible data. **/ static void random_cor_tool_ok_clicked_cb (GtkWidget *button, RandomCorToolState *state) { data_analysis_output_t *dao; tools_data_random_cor_t *data; gint err; data = g_new0 (tools_data_random_cor_t, 1); dao = parse_output ((GnmGenericToolState *)state, NULL); err = entry_to_int (GTK_ENTRY (state->count_entry), &data->count, FALSE); data->matrix = gnm_expr_entry_parse_as_value (GNM_EXPR_ENTRY (state->base.input_entry), state->base.sheet); data->variables = data->matrix->v_range.cell.b.row - data->matrix->v_range.cell.a.row + 1; data->matrix_type = gnm_gui_group_value (state->base.gui, matrix_group); if (!cmd_analysis_tool (GNM_WBC (state->base.wbcg), state->base.sheet, dao, data, tool_random_cor_engine, TRUE) && (button == state->base.ok_button)) gtk_widget_destroy (state->base.dialog); }
static void autosave_set_sensitivity (G_GNUC_UNUSED GtkWidget *widget, autosave_t *state) { gboolean active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (state->autosave_on_off)); gint minutes; gboolean minutes_err = entry_to_int (GTK_ENTRY (state->minutes_entry), &minutes, FALSE); gtk_widget_set_sensitive (state->minutes_entry, active); gtk_widget_set_sensitive (state->prompt_cb, active); gtk_widget_set_sensitive (state->ok_button, !active || (!minutes_err && minutes > 0)); }
/** * random_cor_tool_update_sensitivity_cb: * @dummy: * @state: * * Update the dialog widgets sensitivity if the only items of interest * are the standard input (one range) and output items. **/ static void random_cor_tool_update_sensitivity_cb (G_GNUC_UNUSED GtkWidget *dummy, RandomCorToolState *state) { GnmValue *input_range; gint height, width, count; input_range = gnm_expr_entry_parse_as_value (GNM_EXPR_ENTRY (state->base.input_entry), state->base.sheet); if (input_range == NULL) { gtk_label_set_text (GTK_LABEL (state->base.warning), _("The matrix range is not valid.")); gtk_widget_set_sensitive (state->base.ok_button, FALSE); return; } height = input_range->v_range.cell.b.row - input_range->v_range.cell.a.row; width = input_range->v_range.cell.b.col - input_range->v_range.cell.a.col; value_release (input_range); if (height != width || height == 0) { gtk_label_set_text (GTK_LABEL (state->base.warning), _("The matrix must be symmetric positive-definite.")); gtk_widget_set_sensitive (state->base.ok_button, FALSE); return; } if (!gnm_dao_is_ready (GNM_DAO (state->base.gdao))) { gtk_label_set_text (GTK_LABEL (state->base.warning), _("The output specification " "is invalid.")); gtk_widget_set_sensitive (state->base.ok_button, FALSE); return; } if (entry_to_int (GTK_ENTRY (state->count_entry), &count, FALSE) != 0 || count <= 0) { gtk_label_set_text (GTK_LABEL (state->base.warning), _("The number of random numbers requested is invalid.")); gtk_widget_set_sensitive (state->base.ok_button, FALSE); return; } gtk_label_set_text (GTK_LABEL (state->base.warning), ""); gtk_widget_set_sensitive (state->base.ok_button, TRUE); }
static void cb_autosave_ok (G_GNUC_UNUSED GtkWidget *button, autosave_t *state) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (state->autosave_on_off))) { gboolean prompt = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (state->prompt_cb)); int minutes, secs; gboolean minutes_err = entry_to_int (GTK_ENTRY (state->minutes_entry), &minutes, TRUE); g_return_if_fail (!minutes_err); /* Why is ok active? */ secs = 60 * MIN (minutes, G_MAXINT / 60); g_object_set (state->wbcg, "autosave-time", secs, "autosave-prompt", prompt, NULL); } else { g_object_set (state->wbcg, "autosave-time", 0, NULL); } gtk_widget_destroy (state->dialog); }