I would like to solve once and for all the problem of GAL view/ratsnest not being occasionally updated.
I am still getting related bug reports, as there are just many places in the source code that need to have "item->ViewUpdate(); ratsnest->Update(item)" added. 1. Replace UR_MODEDIT with UR_CHANGED, to avoid repeating if(IsType(FRAME_PCB)) and stop treating modules in a special way. Make UR_CHANGED create a MODULE copy? 2. Include OnModify() in SaveCopyInUndoList(), as it is called every time anyway. 3. Add an Observer interface, so other objects interested in model changes (e.g. VIEW & RATSNEST) might be notified, when there is an undo buffer entry created/restored. Observers would have to register themselves to EDA_DRAW_FRAME, as registering to every single BOARD_ITEM does not make sense. Notification type can be described with UNDO_REDO_T enum. 4. It would be also required to notify observers when there is no undo buffer entry created (e.g. mass track removal, SPECCTRA import), so they have a chance to react properly. 5. During certain operations (e.g. replacing a footprint), it is necessary to notify observer twice: when the old BOARD_ITEM is removed and when the new is added. Otherwise observers will keep stale pointers. A few more steps to make code more generic: 1. Create BOARD_ITEM_CONTAINER class as a common base class for BOARD & MODULE. class BOARD_ITEM_CONTAINER { Add(BOARD_ITEM*); Remove/Delete(BOARD_ITEM*); Remove/DeleteType(KICAD_T); Count(KICAD_T); }; 2. Add BOARD_ITEM_CONTAINER* PCB_BASE_FRAME::GetModel() 3. Unify undo buffer code, so items are added to/removed (UR_NEW, UR_DELETED) from the current BOARD_ITEM_CONTAINER. 4. Get rid of UR_MOVED/UR_ROTATED, etc. and store an item copy instead. Regards, Orson
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : kicad-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp