[gnumeric] solver: fix criticals.
- From: Morten Welinder <mortenw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnumeric] solver: fix criticals.
- Date: Fri, 30 Oct 2009 23:46:11 +0000 (UTC)
commit 605b271dbd8e952b501edba38f27766098feb470
Author: Morten Welinder <terra gnome org>
Date: Fri Oct 30 19:45:51 2009 -0400
solver: fix criticals.
src/dialogs/ChangeLog | 5 +++++
src/dialogs/dialog-solver.c | 40 +++++++++++++++++++++++++++++-----------
2 files changed, 34 insertions(+), 11 deletions(-)
---
diff --git a/src/dialogs/ChangeLog b/src/dialogs/ChangeLog
index 837e930..a42b67a 100644
--- a/src/dialogs/ChangeLog
+++ b/src/dialogs/ChangeLog
@@ -1,3 +1,8 @@
+2009-10-30 Morten Welinder <terra gnome org>
+
+ * dialog-solver.c (constraint_select_click): Fix criticals on
+ invalid constraints.
+
2009-10-23 Morten Welinder <terra gnome org>
* solver.glade: fix radiobutton group problem.
diff --git a/src/dialogs/dialog-solver.c b/src/dialogs/dialog-solver.c
index 404085d..c14f94a 100644
--- a/src/dialogs/dialog-solver.c
+++ b/src/dialogs/dialog-solver.c
@@ -35,6 +35,7 @@
#include <value.h>
#include <cell.h>
#include <sheet.h>
+#include <expr.h>
#include <wbc-gtk.h>
#include <workbook.h>
#include <parse-util.h>
@@ -158,11 +159,11 @@ dialog_set_sec_button_sensitivity (G_GNUC_UNUSED GtkWidget *dummy,
static void
constraint_select_click (GtkTreeSelection *Selection,
- SolverState *state)
+ SolverState * state)
{
GtkTreeModel *store;
GtkTreeIter iter;
- GnmRange range;
+ SolverConstraint const *c;
if (gtk_tree_selection_get_selected (Selection, &store, &iter))
gtk_tree_model_get (store, &iter, 1, &state->constr, -1);
@@ -172,18 +173,35 @@ constraint_select_click (GtkTreeSelection *Selection,
if (state->constr == NULL)
return; /* Fail? */
-
- range_init_value (&range, state->constr->lhs);
- gnm_expr_entry_load_from_range (state->lhs.entry, state->sheet,&range);
-
- if (gnm_solver_constraint_has_rhs (state->constr)) {
- range_init_value (&range, state->constr->rhs);
- gnm_expr_entry_load_from_range (state->rhs.entry,
- state->sheet, &range);
+ c = state->constr;
+
+ if (c->lhs) {
+ GnmExprTop const *texpr =
+ gnm_expr_top_new_constant (value_dup (c->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, "");
+
+ if (c->rhs && gnm_solver_constraint_has_rhs (c)) {
+ GnmExprTop const *texpr =
+ gnm_expr_top_new_constant (value_dup (c->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, state->constr->type);
+ gtk_combo_box_set_active (state->type_combo, c->type);
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]