static void constraint_select_click (GtkTreeSelection *Selection, SolverState * state) { GtkTreeModel *store; GtkTreeIter iter; GnmSolverConstraint const *c; GnmValue const *lhs, *rhs; if (gtk_tree_selection_get_selected (Selection, &store, &iter)) gtk_tree_model_get (store, &iter, 1, &state->constr, -1); else state->constr = NULL; dialog_set_sec_button_sensitivity (NULL, state); if (state->constr == NULL) return; /* Fail? */ c = state->constr; lhs = gnm_solver_constraint_get_lhs (c); if (lhs) { GnmExprTop const *texpr = gnm_expr_top_new_constant (value_dup (lhs)); GnmParsePos pp; gnm_expr_entry_load_from_expr (state->lhs.entry, texpr, parse_pos_init_sheet (&pp, state->sheet)); gnm_expr_top_unref (texpr); } else gnm_expr_entry_load_from_text (state->lhs.entry, ""); rhs = gnm_solver_constraint_get_rhs (c); if (rhs && gnm_solver_constraint_has_rhs (c)) { GnmExprTop const *texpr = gnm_expr_top_new_constant (value_dup (rhs)); GnmParsePos pp; gnm_expr_entry_load_from_expr (state->rhs.entry, texpr, parse_pos_init_sheet (&pp, state->sheet)); gnm_expr_top_unref (texpr); } else gnm_expr_entry_load_from_text (state->rhs.entry, ""); gtk_combo_box_set_active (state->type_combo, c->type); }
static GnmExprEntry * init_entry (GnmDialogSOList *state, GtkBuilder *gui, int col, int row, GnmExprTop const *texpr) { GnmExprEntry *gee = gnm_expr_entry_new (state->wbcg, TRUE); GtkWidget *w = GTK_WIDGET (gee); GtkGrid *grid = GTK_GRID (gtk_builder_get_object (gui, "main-grid")); Sheet *sheet = sheet_object_get_sheet (state->so); GnmParsePos pp; g_return_val_if_fail (w != NULL, NULL); gtk_grid_attach (grid, w, col, row, 1, 1); gnm_expr_entry_set_flags (gee, GNM_EE_FORCE_ABS_REF | GNM_EE_SHEET_OPTIONAL | GNM_EE_SINGLE_RANGE, GNM_EE_MASK); parse_pos_init_sheet (&pp, sheet); gnm_expr_entry_load_from_expr (gee, texpr, &pp); return gee; }