r5516 - trunk/eda/fped

werner at docs.openmoko.org werner at docs.openmoko.org
Fri Aug 21 21:50:45 CEST 2009


Author: werner
Date: 2009-08-21 21:50:45 +0200 (Fri, 21 Aug 2009)
New Revision: 5516

Modified:
   trunk/eda/fped/delete.c
   trunk/eda/fped/gui_style.c
Log:
When deleting frame "foo" in root->foo->bar and then linking bar from root,
bar didn't automatically become active, which was rather confusing. We now
also try harder to keep a frame active. 

- when deleting a frame, also reset all outbound active references
- when removing the active frame reference, search for a suitable replacement
  instead of just setting it to NULL
- gui_style.c: made inactive frames a little more visible



Modified: trunk/eda/fped/delete.c
===================================================================
--- trunk/eda/fped/delete.c	2009-08-21 19:19:33 UTC (rev 5515)
+++ trunk/eda/fped/delete.c	2009-08-21 19:50:45 UTC (rev 5516)
@@ -74,6 +74,9 @@
 static void do_delete_obj(struct obj *obj);
 
 
+/* ----- helper functions -------------------------------------------------- */
+
+
 static struct deletion *new_deletion(enum del_type type)
 {
 	struct deletion *del;
@@ -87,6 +90,19 @@
 }
 
 
+static void reset_active_ref(struct frame *ref)
+{
+	const struct frame *frame;
+	struct obj *obj = NULL;
+
+	for (frame = frames; frame; frame = frame->next)
+		for (obj = frame->objs; obj; obj = obj->next)
+			if (obj->type == ot_frame && obj->u.frame.ref == ref)
+				break;
+	ref->active_ref = obj;
+}
+
+
 /* ----- vectors ----------------------------------------------------------- */
 
 
@@ -189,7 +205,7 @@
 	switch (obj->type) {
 	case ot_frame:
 		if (obj->u.frame.ref->active_ref == obj)
-			obj->u.frame.ref->active_ref = NULL;
+			reset_active_ref(obj->u.frame.ref);
 		break;
 	case ot_pad:
 		free(obj->u.pad.name);
@@ -232,7 +248,7 @@
 	del->u.obj.ref = obj;
 	del->u.obj.prev = prev;
 	if (obj->type == ot_frame && obj->u.frame.ref->active_ref == obj)
-		obj->u.frame.ref->active_ref = NULL;
+		reset_active_ref(obj->u.frame.ref);
 }
 
 
@@ -502,6 +518,10 @@
 			if (obj->type == ot_frame)
 				if (obj->u.frame.ref == ref)
 					do_delete_obj(obj);
+	for (obj = ref->objs; obj; obj = obj->next)
+		if (obj->type == ot_frame)
+			if (obj->u.frame.ref->active_ref == obj)
+				reset_active_ref(obj->u.frame.ref);
 }
 
 

Modified: trunk/eda/fped/gui_style.c
===================================================================
--- trunk/eda/fped/gui_style.c	2009-08-21 19:19:33 UTC (rev 5515)
+++ trunk/eda/fped/gui_style.c	2009-08-21 19:50:45 UTC (rev 5516)
@@ -65,7 +65,7 @@
 	style(gc_pad,	"#400000", "#ff0000", "#ffff80");
 	style(gc_ptext,	"#404040", "#ffffff", "#ffffff");
 	style(gc_meas,	"#280040", "#ff00ff", "#ffff80");
-	style(gc_frame,	"#004000", "#009000", "#ffff80");
+	style(gc_frame,	"#005000", "#009000", "#ffff80");
 
 	gc_active_frame = gc("#00ff00", 2);
 //	gc_highlight = gc("#ff8020", 2);




More information about the commitlog mailing list