Loading common/class_undoredo_container.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ ITEM_PICKER::ITEM_PICKER( EDA_BaseStruct* aItem, UndoRedoOpType aUndoRedoStatus m_UndoRedoStatus = aUndoRedoStatus; m_PickedItem = aItem; m_PickedItemType = TYPE_NOT_INIT; m_PickerFlags = 0; m_Link = NULL; } Loading Loading @@ -216,6 +217,18 @@ UndoRedoOpType PICKED_ITEMS_LIST::GetPickedItemStatus( unsigned int aIdx ) return UR_UNSPECIFIED; } /** function GetPickerFlags * return the value of the picker flag * @param aIdx = index of the picker in the picked list * @return the value stored in the picker, if the picker exists, or 0 if does not exist */ int PICKED_ITEMS_LIST::GetPickerFlags( unsigned aIdx ) { if( aIdx < m_ItemsList.size() ) return m_ItemsList[aIdx].m_PickerFlags; else return 0; } /** function SetPickedItem * @param aItem = a pointer to the item to pick Loading Loading @@ -289,6 +302,22 @@ bool PICKED_ITEMS_LIST::SetPickedItemStatus( UndoRedoOpType aStatus, unsigned aI else return false; } /** function SetPickerFlags * Set the flags of the picker (usually to the picked item m_Flags value) * @param aFlags = the value to save in picker * @param aIdx = index of the picker in the picked list * @return true if the picker exists, or false if does not exist */ bool PICKED_ITEMS_LIST::SetPickerFlags( int aFlags, unsigned aIdx ) { if( aIdx < m_ItemsList.size() ) { m_ItemsList[aIdx].m_PickerFlags = aFlags; return true; } else return false; } /** function RemovePicker Loading eeschema/block.cpp +16 −19 Original line number Diff line number Diff line Loading @@ -241,7 +241,6 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC ) case BLOCK_DRAG: /* Drag */ BreakSegmentOnJunction( (SCH_SCREEN*) GetScreen() ); case BLOCK_MOVE: /* Move */ case BLOCK_COPY: /* Copy */ PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() ); Loading Loading @@ -584,7 +583,6 @@ static void CollectStructsToDrag( SCH_SCREEN* screen ) { SCH_ITEM* Struct; EDA_DrawLineStruct* SegmStruct; int ox, oy, fx, fy; PICKED_ITEMS_LIST* pickedlist = &screen->m_BlockLocate.m_ItemsSelection; Loading @@ -609,7 +607,7 @@ static void CollectStructsToDrag( SCH_SCREEN* screen ) { for( unsigned ii = 0; ii < pickedlist->GetCount(); ii++ ) { Struct = (SCH_ITEM*)(SCH_ITEM*) pickedlist->GetPickedItem( ii ); Struct = (SCH_ITEM*) pickedlist->GetPickedItem( ii ); Struct->m_Flags = SELECTED; } } Loading @@ -617,16 +615,6 @@ static void CollectStructsToDrag( SCH_SCREEN* screen ) if( screen->m_BlockLocate.m_Command != BLOCK_DRAG ) return; ox = screen->m_BlockLocate.GetX(); oy = screen->m_BlockLocate.GetY(); fx = screen->m_BlockLocate.GetRight(); fy = screen->m_BlockLocate.GetBottom(); if( fx < ox ) EXCHG( fx, ox ); if( fy < oy ) EXCHG( fy, oy ); /* Suppression du deplacement des extremites de segments hors cadre * de selection */ Loading @@ -636,13 +624,15 @@ static void CollectStructsToDrag( SCH_SCREEN* screen ) if( Struct->Type() == DRAW_SEGMENT_STRUCT_TYPE ) { SegmStruct = (EDA_DrawLineStruct*) Struct; if( (SegmStruct->m_Start.x < ox) || (SegmStruct->m_Start.x > fx) || (SegmStruct->m_Start.y < oy) || (SegmStruct->m_Start.y > fy) ) if( ! screen->m_BlockLocate.Inside(SegmStruct->m_Start) ) SegmStruct->m_Flags |= STARTPOINT; if( (SegmStruct->m_End.x < ox) || (SegmStruct->m_End.x > fx) || (SegmStruct->m_End.y < oy) || (SegmStruct->m_End.y > fy) ) if( ! screen->m_BlockLocate.Inside(SegmStruct->m_End) ) SegmStruct->m_Flags |= ENDPOINT; // Save m_Flags for Undo/redo drag operations: pickedlist->SetPickerFlags(SegmStruct->m_Flags, ii); } } Loading @@ -660,7 +650,7 @@ static void CollectStructsToDrag( SCH_SCREEN* screen ) DrawItem = GetNextPinPosition( (SCH_COMPONENT*) Struct, pos ); while( DrawItem ) { if( (pos.x < ox) || (pos.x > fx) || (pos.y < oy) || (pos.y > fy) ) if( ! screen->m_BlockLocate.Inside(pos) ) { // This pin is outside area, // but because it it the pin of a selected component Loading Loading @@ -724,6 +714,9 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ) if( STRUCT->m_End == position ) STRUCT->m_Flags &= ~ENDPOINT; // Save m_Flags for Undo/redo drag operations: pickedlist->SetPickerFlags(STRUCT->m_Flags, ii); break; default: Loading Loading @@ -768,12 +761,16 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ) { Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT; Struct->m_Flags &= ~STARTPOINT; // Save m_Flags for Undo/redo drag operations: picker.m_PickerFlags= Struct->m_Flags; pickedlist->PushItem( picker ); } else if( STRUCT->m_End == position ) { Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT; Struct->m_Flags &= ~ENDPOINT; // Save m_Flags for Undo/redo drag operations: picker.m_PickerFlags= Struct->m_Flags; pickedlist->PushItem( picker ); } break; Loading eeschema/schematic_undo_redo.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -223,7 +223,10 @@ void WinEDA_SchematicFrame::SaveCopyInUndoList( SCH_ITEM* aItem, ITEM_PICKER itemWrapper( aItem, aCommandType ); if( aItem ) { itemWrapper.m_PickedItemType = aItem->Type(); itemWrapper.m_PickerFlags = aItem->m_Flags; } switch( aCommandType ) { Loading Loading @@ -368,7 +371,9 @@ void WinEDA_SchematicFrame::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bo break; case UR_MOVED: item->m_Flags = aList->GetPickerFlags(ii); item->Move( aRedoCommand ? aList->m_TransformPoint : - aList->m_TransformPoint ); item->m_Flags = 0; break; case UR_MIRRORED_Y: Loading include/class_undoredo_container.h +17 −1 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ public: */ KICAD_T m_PickedItemType; /* type of schematic or board item that is concerned */ int m_PickerFlags; /* a copy of m_Flags member. usefull in mode/drag undo/redo commands */ EDA_BaseStruct* m_Link; /* Pointer on an other item. Used in undo redo command * used when a duplicate exists i.e. when an item is modified, * and the copy of initial item exists (the duplicate) Loading Loading @@ -174,6 +175,13 @@ public: */ UndoRedoOpType GetPickedItemStatus( unsigned int aIdx ); /** function GetPickerFlags * return the value of the picker flag * @param aIdx = index of the picker in the picked list * @return the value stored in the picker, if the picker exists, or 0 if does not exist */ int GetPickerFlags( unsigned aIdx ); /** function SetPickedItem * @param aItem = a pointer to the item to pick * @param aIdx = index of the picker in the picked list Loading @@ -198,13 +206,21 @@ public: bool SetPickedItemLink( EDA_BaseStruct* aLink, unsigned aIdx ); /** function SetPickedItemStatus * Set the the type of undo/redo operation for a given picked item * Set the type of undo/redo operation for a given picked item * @param aStatus = the type of undo/redo operation associated to the picked item * @param aIdx = index of the picker in the picked list * @return true if the picker exists, or false if does not exist */ bool SetPickedItemStatus( UndoRedoOpType aStatus, unsigned aIdx ); /** function SetPickerFlags * Set the flags of the picker (usually to the picked item m_Flags value) * @param aFlags = the value to save in picker * @param aIdx = index of the picker in the picked list * @return true if the picker exists, or false if does not exist */ bool SetPickerFlags( int aFlags, unsigned aIdx ); /** function RemovePicker * remove one entry (one picker) from the list of picked items * @param aIdx = index of the picker in the picked list Loading Loading
common/class_undoredo_container.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ ITEM_PICKER::ITEM_PICKER( EDA_BaseStruct* aItem, UndoRedoOpType aUndoRedoStatus m_UndoRedoStatus = aUndoRedoStatus; m_PickedItem = aItem; m_PickedItemType = TYPE_NOT_INIT; m_PickerFlags = 0; m_Link = NULL; } Loading Loading @@ -216,6 +217,18 @@ UndoRedoOpType PICKED_ITEMS_LIST::GetPickedItemStatus( unsigned int aIdx ) return UR_UNSPECIFIED; } /** function GetPickerFlags * return the value of the picker flag * @param aIdx = index of the picker in the picked list * @return the value stored in the picker, if the picker exists, or 0 if does not exist */ int PICKED_ITEMS_LIST::GetPickerFlags( unsigned aIdx ) { if( aIdx < m_ItemsList.size() ) return m_ItemsList[aIdx].m_PickerFlags; else return 0; } /** function SetPickedItem * @param aItem = a pointer to the item to pick Loading Loading @@ -289,6 +302,22 @@ bool PICKED_ITEMS_LIST::SetPickedItemStatus( UndoRedoOpType aStatus, unsigned aI else return false; } /** function SetPickerFlags * Set the flags of the picker (usually to the picked item m_Flags value) * @param aFlags = the value to save in picker * @param aIdx = index of the picker in the picked list * @return true if the picker exists, or false if does not exist */ bool PICKED_ITEMS_LIST::SetPickerFlags( int aFlags, unsigned aIdx ) { if( aIdx < m_ItemsList.size() ) { m_ItemsList[aIdx].m_PickerFlags = aFlags; return true; } else return false; } /** function RemovePicker Loading
eeschema/block.cpp +16 −19 Original line number Diff line number Diff line Loading @@ -241,7 +241,6 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC ) case BLOCK_DRAG: /* Drag */ BreakSegmentOnJunction( (SCH_SCREEN*) GetScreen() ); case BLOCK_MOVE: /* Move */ case BLOCK_COPY: /* Copy */ PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() ); Loading Loading @@ -584,7 +583,6 @@ static void CollectStructsToDrag( SCH_SCREEN* screen ) { SCH_ITEM* Struct; EDA_DrawLineStruct* SegmStruct; int ox, oy, fx, fy; PICKED_ITEMS_LIST* pickedlist = &screen->m_BlockLocate.m_ItemsSelection; Loading @@ -609,7 +607,7 @@ static void CollectStructsToDrag( SCH_SCREEN* screen ) { for( unsigned ii = 0; ii < pickedlist->GetCount(); ii++ ) { Struct = (SCH_ITEM*)(SCH_ITEM*) pickedlist->GetPickedItem( ii ); Struct = (SCH_ITEM*) pickedlist->GetPickedItem( ii ); Struct->m_Flags = SELECTED; } } Loading @@ -617,16 +615,6 @@ static void CollectStructsToDrag( SCH_SCREEN* screen ) if( screen->m_BlockLocate.m_Command != BLOCK_DRAG ) return; ox = screen->m_BlockLocate.GetX(); oy = screen->m_BlockLocate.GetY(); fx = screen->m_BlockLocate.GetRight(); fy = screen->m_BlockLocate.GetBottom(); if( fx < ox ) EXCHG( fx, ox ); if( fy < oy ) EXCHG( fy, oy ); /* Suppression du deplacement des extremites de segments hors cadre * de selection */ Loading @@ -636,13 +624,15 @@ static void CollectStructsToDrag( SCH_SCREEN* screen ) if( Struct->Type() == DRAW_SEGMENT_STRUCT_TYPE ) { SegmStruct = (EDA_DrawLineStruct*) Struct; if( (SegmStruct->m_Start.x < ox) || (SegmStruct->m_Start.x > fx) || (SegmStruct->m_Start.y < oy) || (SegmStruct->m_Start.y > fy) ) if( ! screen->m_BlockLocate.Inside(SegmStruct->m_Start) ) SegmStruct->m_Flags |= STARTPOINT; if( (SegmStruct->m_End.x < ox) || (SegmStruct->m_End.x > fx) || (SegmStruct->m_End.y < oy) || (SegmStruct->m_End.y > fy) ) if( ! screen->m_BlockLocate.Inside(SegmStruct->m_End) ) SegmStruct->m_Flags |= ENDPOINT; // Save m_Flags for Undo/redo drag operations: pickedlist->SetPickerFlags(SegmStruct->m_Flags, ii); } } Loading @@ -660,7 +650,7 @@ static void CollectStructsToDrag( SCH_SCREEN* screen ) DrawItem = GetNextPinPosition( (SCH_COMPONENT*) Struct, pos ); while( DrawItem ) { if( (pos.x < ox) || (pos.x > fx) || (pos.y < oy) || (pos.y > fy) ) if( ! screen->m_BlockLocate.Inside(pos) ) { // This pin is outside area, // but because it it the pin of a selected component Loading Loading @@ -724,6 +714,9 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ) if( STRUCT->m_End == position ) STRUCT->m_Flags &= ~ENDPOINT; // Save m_Flags for Undo/redo drag operations: pickedlist->SetPickerFlags(STRUCT->m_Flags, ii); break; default: Loading Loading @@ -768,12 +761,16 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ) { Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT; Struct->m_Flags &= ~STARTPOINT; // Save m_Flags for Undo/redo drag operations: picker.m_PickerFlags= Struct->m_Flags; pickedlist->PushItem( picker ); } else if( STRUCT->m_End == position ) { Struct->m_Flags = SELECTED | ENDPOINT | STARTPOINT; Struct->m_Flags &= ~ENDPOINT; // Save m_Flags for Undo/redo drag operations: picker.m_PickerFlags= Struct->m_Flags; pickedlist->PushItem( picker ); } break; Loading
eeschema/schematic_undo_redo.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -223,7 +223,10 @@ void WinEDA_SchematicFrame::SaveCopyInUndoList( SCH_ITEM* aItem, ITEM_PICKER itemWrapper( aItem, aCommandType ); if( aItem ) { itemWrapper.m_PickedItemType = aItem->Type(); itemWrapper.m_PickerFlags = aItem->m_Flags; } switch( aCommandType ) { Loading Loading @@ -368,7 +371,9 @@ void WinEDA_SchematicFrame::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bo break; case UR_MOVED: item->m_Flags = aList->GetPickerFlags(ii); item->Move( aRedoCommand ? aList->m_TransformPoint : - aList->m_TransformPoint ); item->m_Flags = 0; break; case UR_MIRRORED_Y: Loading
include/class_undoredo_container.h +17 −1 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ public: */ KICAD_T m_PickedItemType; /* type of schematic or board item that is concerned */ int m_PickerFlags; /* a copy of m_Flags member. usefull in mode/drag undo/redo commands */ EDA_BaseStruct* m_Link; /* Pointer on an other item. Used in undo redo command * used when a duplicate exists i.e. when an item is modified, * and the copy of initial item exists (the duplicate) Loading Loading @@ -174,6 +175,13 @@ public: */ UndoRedoOpType GetPickedItemStatus( unsigned int aIdx ); /** function GetPickerFlags * return the value of the picker flag * @param aIdx = index of the picker in the picked list * @return the value stored in the picker, if the picker exists, or 0 if does not exist */ int GetPickerFlags( unsigned aIdx ); /** function SetPickedItem * @param aItem = a pointer to the item to pick * @param aIdx = index of the picker in the picked list Loading @@ -198,13 +206,21 @@ public: bool SetPickedItemLink( EDA_BaseStruct* aLink, unsigned aIdx ); /** function SetPickedItemStatus * Set the the type of undo/redo operation for a given picked item * Set the type of undo/redo operation for a given picked item * @param aStatus = the type of undo/redo operation associated to the picked item * @param aIdx = index of the picker in the picked list * @return true if the picker exists, or false if does not exist */ bool SetPickedItemStatus( UndoRedoOpType aStatus, unsigned aIdx ); /** function SetPickerFlags * Set the flags of the picker (usually to the picked item m_Flags value) * @param aFlags = the value to save in picker * @param aIdx = index of the picker in the picked list * @return true if the picker exists, or false if does not exist */ bool SetPickerFlags( int aFlags, unsigned aIdx ); /** function RemovePicker * remove one entry (one picker) from the list of picked items * @param aIdx = index of the picker in the picked list Loading