r5432 - trunk/eda/fped

werner at docs.openmoko.org werner at docs.openmoko.org
Thu Aug 13 11:30:17 CEST 2009


Author: werner
Date: 2009-08-13 11:30:16 +0200 (Thu, 13 Aug 2009)
New Revision: 5432

Modified:
   trunk/eda/fped/gui_canvas.c
   trunk/eda/fped/gui_frame.c
   trunk/eda/fped/gui_style.h
   trunk/eda/fped/gui_tool.c
   trunk/eda/fped/gui_util.c
   trunk/eda/fped/gui_util.h
   trunk/eda/fped/meas.c
   trunk/eda/fped/obj.c
   trunk/eda/fped/obj.h
Log:
- added the usual COLOR_ prefix also to TOOL_SELECTED/TOOL_UNSELECTED
- instantiate_meas if a mesurements has no samples, do the next one, don't stop
  completely
- when instantiation fails, the corresponding vector, object, or loop is now
  marked red in the variables/items list.



Modified: trunk/eda/fped/gui_canvas.c
===================================================================
--- trunk/eda/fped/gui_canvas.c	2009-08-13 00:33:49 UTC (rev 5431)
+++ trunk/eda/fped/gui_canvas.c	2009-08-13 09:30:16 UTC (rev 5432)
@@ -111,7 +111,7 @@
 	aw = draw_ctx.widget->allocation.width;
 	ah = draw_ctx.widget->allocation.height;
 	gdk_draw_rectangle(draw_ctx.widget->window,
-	    instantiation_ok ? gc_bg : gc_bg_error, TRUE, 0, 0, aw, ah);
+	    instantiation_error ? gc_bg_error : gc_bg, TRUE, 0, 0, aw, ah);
 
 	inst_draw();
 	if (highlight)

Modified: trunk/eda/fped/gui_frame.c
===================================================================
--- trunk/eda/fped/gui_frame.c	2009-08-13 00:33:49 UTC (rev 5431)
+++ trunk/eda/fped/gui_frame.c	2009-08-13 09:30:16 UTC (rev 5432)
@@ -852,6 +852,8 @@
 	field = label_in_box_new(loop->var.name);
 	gtk_box_pack_start(GTK_BOX(hbox), box_of_label(field), FALSE, FALSE, 0);
 	label_in_box_bg(field, COLOR_VAR_PASSIVE);
+	if (instantiation_error == loop)
+		label_in_box_fg(field, COLOR_ITEM_ERROR);
 	g_signal_connect(G_OBJECT(box_of_label(field)),
 	    "button_press_event",
 	    G_CALLBACK(loop_var_select_event), loop);
@@ -1037,6 +1039,9 @@
 			s = print_obj(item->obj, item->vec);
 			item->obj->list_widget = item_label(tab, s, 1, n,
 			    item_select_obj, item->obj);
+			if (item->obj == instantiation_error)
+				label_in_box_fg(item->obj->list_widget,
+				    COLOR_ITEM_ERROR);
 		} else {
 			s = print_label(item->vec);
 			t = stralloc_printf("%s: ", s);
@@ -1046,6 +1051,9 @@
 			s = print_vec(item->vec);
 			item->vec->list_widget = item_label(tab, s, 1, n,
 			    item_select_vec, item->vec);
+			if (item->vec == instantiation_error)
+				label_in_box_fg(item->vec->list_widget,
+				    COLOR_ITEM_ERROR);
 		}
 		n++;
         }
@@ -1083,6 +1091,8 @@
 		s = print_meas(obj);
 		obj->list_widget = item_label(tab, s, 0, n,
 		    item_select_obj, obj);
+		if (obj == instantiation_error)
+			label_in_box_fg(obj->list_widget, COLOR_ITEM_ERROR);
 		n++;
         }
 

Modified: trunk/eda/fped/gui_style.h
===================================================================
--- trunk/eda/fped/gui_style.h	2009-08-13 00:33:49 UTC (rev 5431)
+++ trunk/eda/fped/gui_style.h	2009-08-13 09:30:16 UTC (rev 5432)
@@ -83,11 +83,12 @@
 
 #define	COLOR_VAR_TABLE_SEP	"black"
 
-#define	TOOL_UNSELECTED		"#dcdad5"
-#define	TOOL_SELECTED		"red"
+#define	COLOR_TOOL_UNSELECTED	"#dcdad5"
+#define	COLOR_TOOL_SELECTED	"red"
 
 #define	COLOR_ITEM_NORMAL	"#dcdad5"
 #define	COLOR_ITEM_SELECTED	COLOR_FRAME_SELECTED
+#define	COLOR_ITEM_ERROR	"red"
 
 
 /* ----- canvas drawing styles --------------------------------------------- */

Modified: trunk/eda/fped/gui_tool.c
===================================================================
--- trunk/eda/fped/gui_tool.c	2009-08-13 00:33:49 UTC (rev 5431)
+++ trunk/eda/fped/gui_tool.c	2009-08-13 09:30:16 UTC (rev 5432)
@@ -926,11 +926,11 @@
 	if (active_tool) {
 		if (active_ops && active_ops->tool_deselected)
 			active_ops->tool_deselected();
-		col = get_color(TOOL_UNSELECTED);
+		col = get_color(COLOR_TOOL_UNSELECTED);
 		gtk_widget_modify_bg(active_tool, GTK_STATE_NORMAL, &col);
 		active_tool = NULL;
 	}
-	col = get_color(TOOL_SELECTED);
+	col = get_color(COLOR_TOOL_SELECTED);
 	gtk_widget_modify_bg(evbox, GTK_STATE_NORMAL, &col);
 	active_tool = evbox;
 	active_ops = ops;

Modified: trunk/eda/fped/gui_util.c
===================================================================
--- trunk/eda/fped/gui_util.c	2009-08-13 00:33:49 UTC (rev 5431)
+++ trunk/eda/fped/gui_util.c	2009-08-13 09:30:16 UTC (rev 5432)
@@ -151,6 +151,14 @@
 }
 
 
+void label_in_box_fg(GtkWidget *label, const char *color)
+{
+	GdkColor col = get_color(color);
+
+	gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &col);
+}
+
+
 void label_in_box_bg(GtkWidget *label, const char *color)
 {
 	GtkWidget *box;

Modified: trunk/eda/fped/gui_util.h
===================================================================
--- trunk/eda/fped/gui_util.h	2009-08-13 00:33:49 UTC (rev 5431)
+++ trunk/eda/fped/gui_util.h	2009-08-13 09:30:16 UTC (rev 5432)
@@ -54,6 +54,7 @@
 
 GtkWidget *label_in_box_new(const char *s);
 GtkWidget *box_of_label(GtkWidget *label);
+void label_in_box_fg(GtkWidget *box, const char *color);
 void label_in_box_bg(GtkWidget *box, const char *color);
 
 GtkWidget *make_image(GdkDrawable *drawable, char **xpm);

Modified: trunk/eda/fped/meas.c
===================================================================
--- trunk/eda/fped/meas.c	2009-08-13 00:33:49 UTC (rev 5431)
+++ trunk/eda/fped/meas.c	2009-08-13 09:30:16 UTC (rev 5432)
@@ -232,7 +232,7 @@
 			continue;
 		meas = &obj->u.meas;
 		if (!obj->base->samples || !meas->high->samples)
-			return 1;
+			continue;
 
 		lt = lt_op[meas->type];
 		a0 = meas_find_min(lt, obj->base->samples);
@@ -245,8 +245,10 @@
 			offset.n = 0;
 		else {
 			offset = eval_unit(meas->offset, root_frame);
-			if (is_undef(offset))
+			if (is_undef(offset)) {
+				instantiation_error = obj;
 				return 0;
+			}
 		}
 		inst_meas(obj,
 		    meas->inverted ? b0 : a0, meas->inverted ? a0 : b0,

Modified: trunk/eda/fped/obj.c
===================================================================
--- trunk/eda/fped/obj.c	2009-08-13 00:33:49 UTC (rev 5431)
+++ trunk/eda/fped/obj.c	2009-08-13 09:30:16 UTC (rev 5432)
@@ -32,7 +32,7 @@
 struct frame *frames = NULL;
 struct frame *root_frame = NULL;
 struct frame *active_frame = NULL;
-int instantiation_ok;
+void *instantiation_error = NULL;
 
 
 static int generate_frame(struct frame *frame, struct coord base,
@@ -71,19 +71,23 @@
 	for (vec = frame->vecs; vec; vec = vec->next) {
 		x = eval_unit(vec->x, frame);
 		if (is_undef(x))
-			return 0;
+			goto error;
 		y = eval_unit(vec->y, frame);
 		if (is_undef(y))
-			return 0;
+			goto error;
 		vec_base = vec->base ? vec->base->pos : base;
 		vec->pos = vec_base;
 		vec->pos.x += x.n;
 		vec->pos.y += y.n;
 		if (!inst_vec(vec, vec_base))
-			return 0;
+			goto error;
 		meas_post(vec, vec->pos);
 	}
 	return 1;
+
+error:
+	instantiation_error = vec;
+	return 0;
 }
 
 
@@ -106,43 +110,43 @@
 			width = eval_unit_default(obj->u.line.width, frame,
 			    DEFAULT_SILK_WIDTH);
 			if (is_undef(width))
-				return 0;
+				goto error;
 			if (!inst_line(obj, obj->base ? obj->base->pos : base,
 			    obj->u.line.other ? obj->u.line.other->pos : base,
 			    width.n))
-				return 0;
+				goto error;
 			break;
 		case ot_rect:
 			width = eval_unit_default(obj->u.rect.width, frame,
 			    DEFAULT_SILK_WIDTH);
 			if (is_undef(width))
-				return 0;
+				goto error;
 			if (!inst_rect(obj, obj->base ? obj->base->pos : base,
 			    obj->u.rect.other ? obj->u.rect.other->pos : base,
 			    width.n))
-				return 0;
+				goto error;
 			break;
 		case ot_pad:
 			name = expand(obj->u.pad.name, frame);
 			if (!name)
-				return 0;
+				goto error;
 			ok = inst_pad(obj, name,
 			    obj->base ? obj->base->pos : base,
 			    obj->u.pad.other ? obj->u.pad.other->pos : base);
 			free(name);
 			if (!ok)
-				return 0;
+				goto error;
 			break;
 		case ot_arc:
 			width = eval_unit_default(obj->u.arc.width, frame,
 			    DEFAULT_SILK_WIDTH);
 			if (is_undef(width))
-				return 0;
+				goto error;
 			if (!inst_arc(obj, obj->base ? obj->base->pos : base,
 			    obj->u.arc.start ? obj->u.arc.start->pos : base,
 			    obj->u.arc.end ? obj->u.arc.end->pos : base,
 			    width.n))
-				return 0;
+				goto error;
 			break;
 		case ot_meas:
 			break;
@@ -150,6 +154,10 @@
 			abort();
 		}
 	return 1;
+
+error:
+	instantiation_error = obj;
+	return 0;
 }
 
 
@@ -175,22 +183,26 @@
 	from = eval_num(loop->from.expr, frame);
 	if (is_undef(from)) {
 		fail_expr(loop->from.expr);
+		instantiation_error = loop;
 		return 0;
 	}
 	if (!is_dimensionless(from)) {
 		fail("incompatible type for start value");
 		fail_expr(loop->from.expr);
+		instantiation_error = loop;
 		return 0;
 	}
 
 	to = eval_num(loop->to.expr, frame);
 	if (is_undef(to)) {
 		fail_expr(loop->to.expr);
+		instantiation_error = loop;
 		return 0;
 	}
 	if (!is_dimensionless(to)) {
 		fail("incompatible type for end value");
 		fail_expr(loop->to.expr);
+		instantiation_error = loop;
 		return 0;
 	}
 
@@ -203,6 +215,7 @@
 		if (n >= MAX_ITERATIONS) {
 			fail("%s: too many iterations (%d)", loop->var.name,
 			    MAX_ITERATIONS);
+			instantiation_error = loop;
 			goto fail;
 		}
 		if (!run_loops(frame, loop->next, base,
@@ -259,6 +272,7 @@
 
 	inst_start();
 	meas_start();
+	instantiation_error = NULL;
 	ok = generate_frame(root_frame, zero, NULL, NULL, 1);
 	if (ok)
 		ok = instantiate_meas();
@@ -266,6 +280,5 @@
 		inst_commit();
 	else
 		inst_revert();
-	instantiation_ok = ok;
 	return ok;
 }

Modified: trunk/eda/fped/obj.h
===================================================================
--- trunk/eda/fped/obj.h	2009-08-13 00:33:49 UTC (rev 5431)
+++ trunk/eda/fped/obj.h	2009-08-13 09:30:16 UTC (rev 5432)
@@ -183,7 +183,7 @@
 extern struct frame *frames;
 extern struct frame *root_frame;
 extern struct frame *active_frame;
-extern int instantiation_ok;
+extern void *instantiation_error;
 
 
 int instantiate(void);




More information about the commitlog mailing list