Index: trunk/doc/TODO =================================================================== --- trunk/doc/TODO (revision 27287) +++ trunk/doc/TODO (revision 27288) @@ -22,7 +22,7 @@ - FEATURE: no-export attribute: cache a no-export attribute in a bitfield (e.g. flags like no-export for vector outputs, pixel outputs); exporter should set the bits in HID; core rendring should decide what to draw; use case: poly clearance to emulate keep-away on outline, and replace the old zero-width line trick [report: karl] - FEATURE: configure setting: library window filter shouldn't really filter if there's () in the string [report: pskibinski] - asm() dialog - - FEATURE: Add a button to clear the done status from a component. [report: Ade] + + FEATURE: Add a button to clear the done status from a component. [report: Ade] - FEATURE: Show the status message on a group when minimized to indicate whether the groups components are done, not done or partially done. [report: Ade] - FEATURE: If a component is out of view when selected then pan the view until it is visible. May need to zoom also if a group is selected. [report: Ade] - CAM: Index: trunk/src_plugins/asm/asm.c =================================================================== --- trunk/src_plugins/asm/asm.c (revision 27287) +++ trunk/src_plugins/asm/asm.c (revision 27288) @@ -418,8 +418,11 @@ static void done(void *hid_ctx, part_t *part, int done) { - part->done = 1; - pcb_dad_tree_modify_cell(&asm_ctx.dlg[asm_ctx.wtbl], part->row, 5, "yes"); + part->done = done; + if (done) + pcb_dad_tree_modify_cell(&asm_ctx.dlg[asm_ctx.wtbl], part->row, 5, "yes"); + else + pcb_dad_tree_modify_cell(&asm_ctx.dlg[asm_ctx.wtbl], part->row, 5, "-"); } static void asm_done_part(void *hid_ctx, void *caller_data, pcb_hid_attribute_t *attr) @@ -431,6 +434,15 @@ skip(hid_ctx, 0, row); } +static void asm_undo_part(void *hid_ctx, void *caller_data, pcb_hid_attribute_t *attr) +{ + pcb_hid_row_t *row = pcb_dad_tree_get_selected(&asm_ctx.dlg[asm_ctx.wtbl]); + if (*(int *)row->user_data) + return; + done(hid_ctx, row->user_data, 0); + skip(hid_ctx, 0, row); +} + static void asm_skip_part(void *hid_ctx, void *caller_data, pcb_hid_attribute_t *attr) { pcb_hid_row_t *row = pcb_dad_tree_get_selected(&asm_ctx.dlg[asm_ctx.wtbl]); @@ -551,6 +563,10 @@ asm_ctx.wdonep = PCB_DAD_CURRENT(asm_ctx.dlg); PCB_DAD_HELP(asm_ctx.dlg, "Mark current part done,\ncontinue with the next part"); PCB_DAD_CHANGE_CB(asm_ctx.dlg, asm_done_part); + PCB_DAD_BUTTON(asm_ctx.dlg, "undo part"); + asm_ctx.wdonep = PCB_DAD_CURRENT(asm_ctx.dlg); + PCB_DAD_HELP(asm_ctx.dlg, "Remove the done mark from the current part,\njump to the next part"); + PCB_DAD_CHANGE_CB(asm_ctx.dlg, asm_undo_part); PCB_DAD_BUTTON(asm_ctx.dlg, "done group"); asm_ctx.wdoneg = PCB_DAD_CURRENT(asm_ctx.dlg); PCB_DAD_HELP(asm_ctx.dlg, "Mark all parts in this group done,\ncontinue with the next group");