Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 28830) +++ trunk/src/buffer.c (revision 28831) @@ -698,7 +698,7 @@ if (nline != NULL) { if (keep_id) { pcb_obj_change_id((pcb_any_obj_t *)nline, line->ID); - pcb_extobj_edit_geo((pcb_any_obj_t *)nline); + pcb_extobj_float_geo((pcb_any_obj_t *)nline); } changed = 1; } @@ -710,7 +710,7 @@ if (narc != NULL) { if (keep_id) { pcb_obj_change_id((pcb_any_obj_t *)narc, arc->ID); - pcb_extobj_edit_geo((pcb_any_obj_t *)narc); + pcb_extobj_float_geo((pcb_any_obj_t *)narc); } changed = 1; } @@ -722,7 +722,7 @@ if (ntext != NULL) { if (keep_id) { pcb_obj_change_id((pcb_any_obj_t *)ntext, text->ID); - pcb_extobj_edit_geo((pcb_any_obj_t *)ntext); + pcb_extobj_float_geo((pcb_any_obj_t *)ntext); } changed = 1; } @@ -734,7 +734,7 @@ if (npoly != NULL) { if (keep_id) { pcb_obj_change_id((pcb_any_obj_t *)npoly, polygon->ID); - pcb_extobj_edit_geo((pcb_any_obj_t *)npoly); + pcb_extobj_float_geo((pcb_any_obj_t *)npoly); } changed = 1; } @@ -755,7 +755,7 @@ if (nsubc != NULL) { if (keep_id) { pcb_obj_change_id((pcb_any_obj_t *)nsubc, subc->ID); - pcb_extobj_edit_geo((pcb_any_obj_t *)nsubc); + pcb_extobj_float_geo((pcb_any_obj_t *)nsubc); } changed = 1; } @@ -786,7 +786,7 @@ if (nps != NULL) { if (keep_id) { pcb_obj_change_id((pcb_any_obj_t *)nps, padstack->ID); - pcb_extobj_edit_geo((pcb_any_obj_t *)nps); + pcb_extobj_float_geo((pcb_any_obj_t *)nps); } changed = 1; } Index: trunk/src/extobj.c =================================================================== --- trunk/src/extobj.c (revision 28830) +++ trunk/src/extobj.c (revision 28831) @@ -156,8 +156,8 @@ sprintf(tmp, "%ld", edit_obj->ID); pcb_attribute_put(&sc->Attributes, "extobj::editobj", tmp); - pcb_extobj_edit_pre(edit_obj); - pcb_extobj_edit_geo(edit_obj); + pcb_extobj_float_pre(edit_obj); + pcb_extobj_float_geo(edit_obj); } void pcb_extobj_del_pre(pcb_subc_t *sc) Index: trunk/src/extobj.h =================================================================== --- trunk/src/extobj.h (revision 28830) +++ trunk/src/extobj.h (revision 28831) @@ -158,55 +158,6 @@ return pcb_extobj_get(*sc); } -/* Calls edit_pre() and returns edit_obj if it is really the edit object of - a known extended object */ -PCB_INLINE pcb_any_obj_t *pcb_extobj_edit_pre(pcb_any_obj_t *edit_obj) -{ - int flt; - pcb_subc_t *sc; - pcb_extobj_t *eo = pcb_extobj_edit_common_(edit_obj, &sc, &flt); - - if (eo == NULL) - return NULL; - - if (flt) { /* editing a subc part floater */ - if ((eo->float_pre != NULL) && !edit_obj->extobj_editing) { - edit_obj->extobj_editing = 1; - eo->float_pre(sc, edit_obj); - } - } - else { /* editing the edit-object */ - if ((eo->edit_pre != NULL) && !edit_obj->extobj_editing) { - edit_obj->extobj_editing = 1; - eo->edit_pre(sc, edit_obj); - } - } - return edit_obj; -} - -PCB_INLINE void pcb_extobj_edit_geo(pcb_any_obj_t *edit_obj) -{ - int flt; - pcb_subc_t *sc; - pcb_extobj_t *eo = pcb_extobj_edit_common_(edit_obj, &sc, &flt); - - if (eo == NULL) - return; - - if (flt) { /* editing a subc part floater */ - if ((eo->float_geo != NULL) && edit_obj->extobj_editing) { - edit_obj->extobj_editing = 0; - eo->float_geo(sc, edit_obj); - } - } - else { /* editing the edit-object */ - if ((eo->edit_pre != NULL) && edit_obj->extobj_editing) { - eo->edit_geo(sc, edit_obj); - edit_obj->extobj_editing = 0; - } - } -} - PCB_INLINE void pcb_extobj_chg_attr(pcb_any_obj_t *obj, const char *key, const char *value) { pcb_subc_t *subc; @@ -249,4 +200,46 @@ eo->float_new(subc, flt); } +PCB_INLINE pcb_any_obj_t *pcb_extobj_float_pre(pcb_any_obj_t *flt) +{ + pcb_subc_t *subc; + pcb_extobj_t *eo; + + if (!PCB_FLAG_TEST(PCB_FLAG_FLOATER, flt)) + return NULL; + + subc = pcb_obj_parent_subc(flt); + if (subc == NULL) + return NULL; + + eo = pcb_extobj_get(subc); + + if ((eo != NULL) && (eo->float_pre != NULL)) { + eo->float_pre(subc, flt); + return flt; + } + + return NULL; +} + +PCB_INLINE void pcb_extobj_float_geo(pcb_any_obj_t *flt) +{ + pcb_subc_t *subc; + pcb_extobj_t *eo; + + if (!PCB_FLAG_TEST(PCB_FLAG_FLOATER, flt)) + return NULL; + + subc = pcb_obj_parent_subc(flt); + if (subc == NULL) + return NULL; + + eo = pcb_extobj_get(subc); + + if ((eo != NULL) && (eo->float_geo != NULL)) + return eo->float_geo(subc, flt); + + return NULL; +} + #endif Index: trunk/src/operation.c =================================================================== --- trunk/src/operation.c (revision 28830) +++ trunk/src/operation.c (revision 28831) @@ -44,7 +44,7 @@ { pcb_any_obj_t *res = NULL, *exto; - exto = pcb_extobj_edit_pre(Ptr2); + exto = pcb_extobj_float_pre(Ptr2); if (F->common_pre != NULL) F->common_pre(ctx, Ptr2, Ptr3); @@ -105,7 +105,7 @@ F->common_post(ctx, Ptr2, Ptr3); if (exto != NULL) - pcb_extobj_edit_geo(exto); + pcb_extobj_float_geo(exto); return res; } @@ -137,11 +137,11 @@ pcb_undo_add_obj_to_flag(line); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, line); } - exto = pcb_extobj_edit_pre((pcb_any_obj_t *)line); + exto = pcb_extobj_float_pre((pcb_any_obj_t *)line); if (F->common_pre != NULL) F->common_pre(ctx, (pcb_any_obj_t *)line, NULL); F->Line(ctx, layer, line); if (F->common_post != NULL) F->common_post(ctx, (pcb_any_obj_t *)line, NULL); - if (exto != NULL) pcb_extobj_edit_geo(exto); + if (exto != NULL) pcb_extobj_float_geo(exto); changed = pcb_true; } PCB_ENDALL_LOOP; @@ -159,11 +159,11 @@ pcb_undo_add_obj_to_flag(arc); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, arc); } - exto = pcb_extobj_edit_pre((pcb_any_obj_t *)arc); + exto = pcb_extobj_float_pre((pcb_any_obj_t *)arc); if (F->common_pre != NULL) F->common_pre(ctx, (pcb_any_obj_t *)arc, NULL); F->Arc(ctx, layer, arc); if (F->common_post != NULL) F->common_post(ctx, (pcb_any_obj_t *)arc, NULL); - if (exto != NULL) pcb_extobj_edit_geo(exto); + if (exto != NULL) pcb_extobj_float_geo(exto); changed = pcb_true; } PCB_ENDALL_LOOP; @@ -181,11 +181,11 @@ pcb_undo_add_obj_to_flag(text); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, text); } - exto = pcb_extobj_edit_pre((pcb_any_obj_t *)text); + exto = pcb_extobj_float_pre((pcb_any_obj_t *)text); if (F->common_pre != NULL) F->common_pre(ctx, (pcb_any_obj_t *)text, NULL); F->Text(ctx, layer, text); if (F->common_post != NULL) F->common_post(ctx, (pcb_any_obj_t *)text, NULL); - if (exto != NULL) pcb_extobj_edit_geo(exto); + if (exto != NULL) pcb_extobj_float_geo(exto); changed = pcb_true; } PCB_ENDALL_LOOP; @@ -203,11 +203,11 @@ pcb_undo_add_obj_to_flag(polygon); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, polygon); } - exto = pcb_extobj_edit_pre((pcb_any_obj_t *)polygon); + exto = pcb_extobj_float_pre((pcb_any_obj_t *)polygon); if (F->common_pre != NULL) F->common_pre(ctx, (pcb_any_obj_t *)polygon, NULL); F->Polygon(ctx, layer, polygon); if (F->common_post != NULL) F->common_post(ctx, (pcb_any_obj_t *)polygon, NULL); - if (exto != NULL) pcb_extobj_edit_geo(exto); + if (exto != NULL) pcb_extobj_float_geo(exto); changed = pcb_true; } PCB_ENDALL_LOOP; @@ -223,11 +223,11 @@ pcb_undo_add_obj_to_flag(subc); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, subc); } - exto = pcb_extobj_edit_pre((pcb_any_obj_t *)subc); + exto = pcb_extobj_float_pre((pcb_any_obj_t *)subc); if (F->common_pre != NULL) F->common_pre(ctx, (pcb_any_obj_t *)subc, NULL); F->subc(ctx, subc); if (F->common_post != NULL) F->common_post(ctx, (pcb_any_obj_t *)subc, NULL); - if (exto != NULL) pcb_extobj_edit_geo(exto); + if (exto != NULL) pcb_extobj_float_geo(exto); changed = pcb_true; } else if ((pcb->loose_subc) || (type & PCB_OBJ_SUBC_PART)) { @@ -250,11 +250,11 @@ pcb_undo_add_obj_to_flag(padstack); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, padstack); } - exto = pcb_extobj_edit_pre((pcb_any_obj_t *)padstack); + exto = pcb_extobj_float_pre((pcb_any_obj_t *)padstack); if (F->common_pre != NULL) F->common_pre(ctx, (pcb_any_obj_t *)padstack, NULL); F->padstack(ctx, padstack); if (F->common_post != NULL) F->common_post(ctx, (pcb_any_obj_t *)padstack, NULL); - if (exto != NULL) pcb_extobj_edit_geo(exto); + if (exto != NULL) pcb_extobj_float_geo(exto); changed = pcb_true; } PCB_END_LOOP; Index: trunk/src/route.c =================================================================== --- trunk/src/route.c (revision 28830) +++ trunk/src/route.c (revision 28831) @@ -465,7 +465,7 @@ pcb_undo_add_obj_to_move(PCB_OBJ_LINE_POINT, apply_to_line_layer, apply_to_line, &apply_to_line->Point2, p_obj->point2.X - apply_to_line->Point2.X, p_obj->point2.Y - apply_to_line->Point2.Y); /* Move the existing line point/s */ - exto = pcb_extobj_edit_pre((pcb_any_obj_t *)apply_to_line); + exto = pcb_extobj_float_pre((pcb_any_obj_t *)apply_to_line); pcb_line_invalidate_erase(apply_to_line); pcb_r_delete_entry(apply_to_line_layer->line_tree, (pcb_box_t *) apply_to_line); pcb_poly_restore_to_poly(PCB->Data, PCB_OBJ_LINE, apply_to_line_layer, apply_to_line); @@ -479,7 +479,7 @@ pcb_line_invalidate_draw(layer, apply_to_line); apply_to_line_layer = layer; if (exto != NULL) - pcb_extobj_edit_geo(exto); + pcb_extobj_float_geo(exto); /* The existing line has been used so forget about it. */ apply_to_line = NULL; @@ -596,7 +596,7 @@ if (changes > 0) { /* Modify the existing arc */ - exto = pcb_extobj_edit_pre((pcb_any_obj_t *)apply_to_arc); + exto = pcb_extobj_float_pre((pcb_any_obj_t *)apply_to_arc); pcb_arc_invalidate_erase(apply_to_arc); pcb_r_delete_entry(apply_to_arc_layer->arc_tree, (pcb_box_t *) apply_to_arc); @@ -615,7 +615,7 @@ pcb_arc_invalidate_draw(layer, apply_to_arc); apply_to_arc_layer = layer; if (exto != NULL) - pcb_extobj_edit_geo(exto); + pcb_extobj_float_geo(exto); } /* The existing arc has been used so forget about it. */ Index: trunk/src/tool_arrow.c =================================================================== --- trunk/src/tool_arrow.c (revision 28830) +++ trunk/src/tool_arrow.c (revision 28831) @@ -128,7 +128,7 @@ } if (pcb_crosshair.extobj_edit != NULL) { - pcb_extobj_edit_geo(pcb_crosshair.extobj_edit); + pcb_extobj_float_geo(pcb_crosshair.extobj_edit); pcb_gui->invalidate_all(pcb_gui); } } @@ -159,7 +159,7 @@ pcb_tool_note.ptr3 = ptr3; pcb_crosshair.AttachedObject.tx = pcb_tool_note.X; pcb_crosshair.AttachedObject.ty = pcb_tool_note.Y; - pcb_crosshair.extobj_edit = pcb_extobj_edit_pre(ptr2); + pcb_crosshair.extobj_edit = pcb_extobj_float_pre(ptr2); } if (!pcb_tool_note.Moving && (type & (PCB_SELECT_TYPES | PCB_LOOSE_SUBC(PCB))) && PCB_FLAG_TEST(PCB_FLAG_SELECTED, (pcb_any_obj_t *) ptr2)) { pcb_tool_note.Moving = pcb_true; @@ -166,7 +166,7 @@ /* remember where the user clicked to start this op */ pcb_crosshair.AttachedObject.tx = pcb_crosshair.AttachedObject.X = pcb_tool_note.X; pcb_crosshair.AttachedObject.ty = pcb_crosshair.AttachedObject.Y = pcb_tool_note.Y; - pcb_crosshair.extobj_edit = pcb_extobj_edit_pre(ptr2); + pcb_crosshair.extobj_edit = pcb_extobj_float_pre(ptr2); } if ((pcb_tool_note.Hit && pcb_tool_note.Moving) || type == PCB_OBJ_VOID) return; Index: trunk/src/tool_move.c =================================================================== --- trunk/src/tool_move.c (revision 28830) +++ trunk/src/tool_move.c (revision 28831) @@ -83,7 +83,7 @@ dy = pcb_crosshair.AttachedObject.ty - pcb_crosshair.AttachedObject.Y; if ((dx != 0) || (dy != 0)) { pcb_any_obj_t *newo = pcb_move_obj_and_rubberband(pcb_crosshair.AttachedObject.Type, pcb_crosshair.AttachedObject.Ptr1, pcb_crosshair.AttachedObject.Ptr2, pcb_crosshair.AttachedObject.Ptr3, dx, dy); - pcb_extobj_edit_geo(newo); + pcb_extobj_float_geo(newo); if (!pcb_marked.user_placed) pcb_crosshair_set_local_ref(0, 0, pcb_false); pcb_subc_as_board_update(PCB); @@ -90,7 +90,7 @@ pcb_board_set_changed_flag(pcb_true); } else if (pcb_crosshair.extobj_edit != NULL) - pcb_extobj_edit_geo(pcb_crosshair.extobj_edit); + pcb_extobj_float_geo(pcb_crosshair.extobj_edit); /* reset identifiers */ pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; Index: trunk/src/undo_old.c =================================================================== --- trunk/src/undo_old.c (revision 28830) +++ trunk/src/undo_old.c (revision 28831) @@ -557,10 +557,8 @@ { /* if extended object's edit-obj is restored, make sure the corresponding subc is updated */ pcb_any_obj_t *o = ptr2; - if (o->type != PCB_OBJ_SUBC) { - pcb_extobj_edit_pre(o); - pcb_extobj_edit_geo(o); - } + pcb_extobj_float_pre(o); + pcb_extobj_float_geo(o); } if (pcb_brave & PCB_BRAVE_CLIPBATCH) Index: trunk/src_plugins/exto_std/dimension.c =================================================================== --- trunk/src_plugins/exto_std/dimension.c (revision 28830) +++ trunk/src_plugins/exto_std/dimension.c (revision 28831) @@ -237,27 +237,14 @@ return edit; } - - -static void pcb_dimension_edit_pre(pcb_subc_t *subc, pcb_any_obj_t *edit_obj) +static void pcb_dimension_float_pre(pcb_subc_t *subc, pcb_any_obj_t *edit_obj) { - pcb_trace("dim: edit pre %ld %ld\n", subc->ID, edit_obj->ID); dimension_clear(subc); } -static void pcb_dimension_edit_geo(pcb_subc_t *subc, pcb_any_obj_t *edit_obj) -{ - pcb_trace("dim: edit geo %ld %ld\n", subc->ID, edit_obj->ID); - dimension_gen(subc, edit_obj); -} -static void pcb_dimension_float_pre(pcb_subc_t *subc, pcb_any_obj_t *floater) +static void pcb_dimension_dimline_geo(pcb_subc_t *subc, pcb_any_obj_t *floater) { - pcb_trace("dim: float pre %ld %ld\n", subc->ID, floater->ID); -} - -static void pcb_dimension_float_geo(pcb_subc_t *subc, pcb_any_obj_t *floater) -{ dimension *dim; pcb_any_obj_t *edit_obj; pcb_line_t *fline = floater, bline; @@ -301,6 +288,13 @@ dimension_gen(subc, edit_obj); } +static void pcb_dimension_float_geo(pcb_subc_t *subc, pcb_any_obj_t *edit_obj) +{ +/* TODO: call this when role is not "edit" */ +/* pcb_dimension_dimline_geo(subc, edit_obj)*/ + dimension_gen(subc, edit_obj); +} + static void pcb_dimension_float_new(pcb_subc_t *subc, pcb_any_obj_t *floater) { pcb_trace("dim: float new %ld %ld\n", subc->ID, floater->ID); @@ -321,8 +315,8 @@ "dimension", pcb_dimension_draw_mark, pcb_dimension_get_edit_obj, - pcb_dimension_edit_pre, - pcb_dimension_edit_geo, + NULL, + NULL, pcb_dimension_float_pre, pcb_dimension_float_geo, pcb_dimension_float_new, Index: trunk/src_plugins/exto_std/line_of_vias.c =================================================================== --- trunk/src_plugins/exto_std/line_of_vias.c (revision 28830) +++ trunk/src_plugins/exto_std/line_of_vias.c (revision 28831) @@ -174,13 +174,13 @@ -static void pcb_line_of_vias_edit_pre(pcb_subc_t *subc, pcb_any_obj_t *edit_obj) +static void pcb_line_of_vias_float_pre(pcb_subc_t *subc, pcb_any_obj_t *edit_obj) { pcb_trace("LoV: edit pre %ld %ld\n", subc->ID, edit_obj->ID); line_of_vias_clear(subc); } -static void pcb_line_of_vias_edit_geo(pcb_subc_t *subc, pcb_any_obj_t *edit_obj) +static void pcb_line_of_vias_float_geo(pcb_subc_t *subc, pcb_any_obj_t *edit_obj) { pcb_trace("LoV: edit geo %ld %ld\n", subc->ID, edit_obj->ID); line_of_vias_gen(subc, edit_obj); @@ -210,10 +210,10 @@ "line-of-vias", pcb_line_of_vias_draw_mark, pcb_line_of_vias_get_edit_obj, - pcb_line_of_vias_edit_pre, - pcb_line_of_vias_edit_geo, - NULL, /* float_pre */ - NULL, /* float_geo */ + NULL, + NULL, + pcb_line_of_vias_float_pre, + pcb_line_of_vias_float_geo, pcb_line_of_vias_float_new, pcb_line_of_vias_chg_attr, pcb_line_of_vias_del_pre