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