Loading pcbnew/automove.cpp +18 −0 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include "class_board.h" #include "class_board.h" #include "class_module.h" #include "class_module.h" extern BOARD_ITEM* DuplicateStruct( BOARD_ITEM* aItem ); typedef enum { typedef enum { FIXE_MODULE, FIXE_MODULE, Loading Loading @@ -184,6 +185,11 @@ void PCB_EDIT_FRAME::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb ) int pas_grille = (int) GetScreen()->GetGridSize().x; int pas_grille = (int) GetScreen()->GetGridSize().x; double surface; double surface; // Undo: init list PICKED_ITEMS_LIST newList; newList.m_Status = UR_CHANGED; ITEM_PICKER picker( NULL, UR_CHANGED ); if( GetBoard()->m_Modules == NULL ) if( GetBoard()->m_Modules == NULL ) { { DisplayError( this, _( "No modules found!" ) ); DisplayError( this, _( "No modules found!" ) ); Loading Loading @@ -264,6 +270,10 @@ void PCB_EDIT_FRAME::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb ) continue; continue; } } // Undo: add copy of old Module to undo picker.m_Link = DuplicateStruct( Module ); picker.m_PickedItemType = Module->Type(); if( current.x > (Xsize_allowed + start.x) ) if( current.x > (Xsize_allowed + start.x) ) { { current.x = start.x; current.x = start.x; Loading @@ -278,9 +288,17 @@ void PCB_EDIT_FRAME::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb ) PlaceModule( Module, NULL, true ); PlaceModule( Module, NULL, true ); // Undo: add new Module to undo picker.m_PickedItem = Module; newList.PushItem( picker ); current.x += Module->m_BoundaryBox.GetWidth() + pas_grille; current.x += Module->m_BoundaryBox.GetWidth() + pas_grille; } } // Undo: commit if( newList.GetCount() ) SaveCopyInUndoList( newList, UR_CHANGED ); DrawPanel->Refresh(); DrawPanel->Refresh(); } } Loading pcbnew/autoplac.cpp +35 −0 Original line number Original line Diff line number Diff line Loading @@ -109,6 +109,11 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) float Pas; float Pas; int lay_tmp_TOP, lay_tmp_BOTTOM; int lay_tmp_TOP, lay_tmp_BOTTOM; // Undo: init list PICKED_ITEMS_LIST newList; newList.m_Status = UR_CHANGED; ITEM_PICKER picker( NULL, UR_CHANGED ); if( GetBoard()->m_Modules == NULL ) if( GetBoard()->m_Modules == NULL ) return; return; Loading Loading @@ -175,7 +180,14 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) { { case PLACE_1_MODULE: case PLACE_1_MODULE: if( ThisModule == Module ) if( ThisModule == Module ) { // Module will be placed, add to undo. picker.m_PickedItem = ThisModule; picker.m_PickedItemType = ThisModule->Type(); newList.PushItem( picker ); Module->m_ModuleStatus |= MODULE_to_PLACE; Module->m_ModuleStatus |= MODULE_to_PLACE; } break; break; Loading @@ -186,7 +198,14 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) break; break; if( !bbbox.Contains( Module->m_Pos ) ) if( !bbbox.Contains( Module->m_Pos ) ) { // Module will be placed, add to undo. picker.m_PickedItem = Module; picker.m_PickedItemType = Module->Type(); newList.PushItem( picker ); Module->m_ModuleStatus |= MODULE_to_PLACE; Module->m_ModuleStatus |= MODULE_to_PLACE; } break; break; Loading @@ -196,6 +215,11 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) if( Module->m_ModuleStatus & MODULE_is_LOCKED ) if( Module->m_ModuleStatus & MODULE_is_LOCKED ) break; break; // Module will be placed, add to undo. picker.m_PickedItem = Module; picker.m_PickedItemType = Module->Type(); newList.PushItem( picker ); Module->m_ModuleStatus |= MODULE_to_PLACE; Module->m_ModuleStatus |= MODULE_to_PLACE; break; break; Loading @@ -207,7 +231,14 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) } } if( !(Module->m_ModuleStatus & MODULE_is_PLACED) ) if( !(Module->m_ModuleStatus & MODULE_is_PLACED) ) { // Module will be placed, add to undo. picker.m_PickedItem = Module; picker.m_PickedItemType = Module->Type(); newList.PushItem( picker ); Module->m_ModuleStatus |= MODULE_to_PLACE; Module->m_ModuleStatus |= MODULE_to_PLACE; } break; break; } } Loading @@ -224,6 +255,10 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) } } } } // Undo: commit if( newList.GetCount() ) SaveCopyInUndoList( newList, UR_CHANGED ); activ = 0; activ = 0; Pas = 100.0; Pas = 100.0; Loading pcbnew/solve.cpp +10 −0 Original line number Original line Diff line number Diff line Loading @@ -79,6 +79,8 @@ static RATSNEST_ITEM* pt_cur_ch; static int Ncurrent; /* measures of progress */ static int Ncurrent; /* measures of progress */ static int s_Clearance; // Clearance value used in autorouter static int s_Clearance; // Clearance value used in autorouter static PICKED_ITEMS_LIST s_ItemsListPicker; #define NOSUCCESS 0 #define NOSUCCESS 0 #define STOP_FROM_ESC -1 #define STOP_FROM_ESC -1 Loading Loading @@ -272,6 +274,9 @@ int PCB_EDIT_FRAME::Solve( wxDC* DC, int two_sides ) Ncurrent = 0; Ncurrent = 0; // Prepare the undo command info s_ItemsListPicker.ClearListAndDeleteItems(); // Should not be necessary, but... /* go until no more work to do */ /* go until no more work to do */ GetWork( &row_source, &col_source, ¤t_net_code, GetWork( &row_source, &col_source, ¤t_net_code, &row_target, &col_target, &pt_cur_ch ); // First net to route. &row_target, &col_target, &pt_cur_ch ); // First net to route. Loading Loading @@ -375,6 +380,9 @@ int PCB_EDIT_FRAME::Solve( wxDC* DC, int two_sides ) DrawPanel->m_AbortEnable = false; DrawPanel->m_AbortEnable = false; SaveCopyInUndoList( s_ItemsListPicker, UR_UNSPECIFIED ); s_ItemsListPicker.ClearItemsList(); // s_ItemsListPicker is no more owner of picked items return SUCCESS; return SUCCESS; } } Loading Loading @@ -1323,6 +1331,8 @@ static void AddNewTrace( PCB_EDIT_FRAME* pcbframe, wxDC* DC ) while( ( track = g_CurrentTrackList.PopFront() ) != NULL ) while( ( track = g_CurrentTrackList.PopFront() ) != NULL ) { { ITEM_PICKER picker( track, UR_NEW ); s_ItemsListPicker.PushItem( picker ); pcbframe->GetBoard()->m_Track.Insert( track, insertBeforeMe ); pcbframe->GetBoard()->m_Track.Insert( track, insertBeforeMe ); } } Loading Loading
pcbnew/automove.cpp +18 −0 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include "class_board.h" #include "class_board.h" #include "class_module.h" #include "class_module.h" extern BOARD_ITEM* DuplicateStruct( BOARD_ITEM* aItem ); typedef enum { typedef enum { FIXE_MODULE, FIXE_MODULE, Loading Loading @@ -184,6 +185,11 @@ void PCB_EDIT_FRAME::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb ) int pas_grille = (int) GetScreen()->GetGridSize().x; int pas_grille = (int) GetScreen()->GetGridSize().x; double surface; double surface; // Undo: init list PICKED_ITEMS_LIST newList; newList.m_Status = UR_CHANGED; ITEM_PICKER picker( NULL, UR_CHANGED ); if( GetBoard()->m_Modules == NULL ) if( GetBoard()->m_Modules == NULL ) { { DisplayError( this, _( "No modules found!" ) ); DisplayError( this, _( "No modules found!" ) ); Loading Loading @@ -264,6 +270,10 @@ void PCB_EDIT_FRAME::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb ) continue; continue; } } // Undo: add copy of old Module to undo picker.m_Link = DuplicateStruct( Module ); picker.m_PickedItemType = Module->Type(); if( current.x > (Xsize_allowed + start.x) ) if( current.x > (Xsize_allowed + start.x) ) { { current.x = start.x; current.x = start.x; Loading @@ -278,9 +288,17 @@ void PCB_EDIT_FRAME::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb ) PlaceModule( Module, NULL, true ); PlaceModule( Module, NULL, true ); // Undo: add new Module to undo picker.m_PickedItem = Module; newList.PushItem( picker ); current.x += Module->m_BoundaryBox.GetWidth() + pas_grille; current.x += Module->m_BoundaryBox.GetWidth() + pas_grille; } } // Undo: commit if( newList.GetCount() ) SaveCopyInUndoList( newList, UR_CHANGED ); DrawPanel->Refresh(); DrawPanel->Refresh(); } } Loading
pcbnew/autoplac.cpp +35 −0 Original line number Original line Diff line number Diff line Loading @@ -109,6 +109,11 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) float Pas; float Pas; int lay_tmp_TOP, lay_tmp_BOTTOM; int lay_tmp_TOP, lay_tmp_BOTTOM; // Undo: init list PICKED_ITEMS_LIST newList; newList.m_Status = UR_CHANGED; ITEM_PICKER picker( NULL, UR_CHANGED ); if( GetBoard()->m_Modules == NULL ) if( GetBoard()->m_Modules == NULL ) return; return; Loading Loading @@ -175,7 +180,14 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) { { case PLACE_1_MODULE: case PLACE_1_MODULE: if( ThisModule == Module ) if( ThisModule == Module ) { // Module will be placed, add to undo. picker.m_PickedItem = ThisModule; picker.m_PickedItemType = ThisModule->Type(); newList.PushItem( picker ); Module->m_ModuleStatus |= MODULE_to_PLACE; Module->m_ModuleStatus |= MODULE_to_PLACE; } break; break; Loading @@ -186,7 +198,14 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) break; break; if( !bbbox.Contains( Module->m_Pos ) ) if( !bbbox.Contains( Module->m_Pos ) ) { // Module will be placed, add to undo. picker.m_PickedItem = Module; picker.m_PickedItemType = Module->Type(); newList.PushItem( picker ); Module->m_ModuleStatus |= MODULE_to_PLACE; Module->m_ModuleStatus |= MODULE_to_PLACE; } break; break; Loading @@ -196,6 +215,11 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) if( Module->m_ModuleStatus & MODULE_is_LOCKED ) if( Module->m_ModuleStatus & MODULE_is_LOCKED ) break; break; // Module will be placed, add to undo. picker.m_PickedItem = Module; picker.m_PickedItemType = Module->Type(); newList.PushItem( picker ); Module->m_ModuleStatus |= MODULE_to_PLACE; Module->m_ModuleStatus |= MODULE_to_PLACE; break; break; Loading @@ -207,7 +231,14 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) } } if( !(Module->m_ModuleStatus & MODULE_is_PLACED) ) if( !(Module->m_ModuleStatus & MODULE_is_PLACED) ) { // Module will be placed, add to undo. picker.m_PickedItem = Module; picker.m_PickedItemType = Module->Type(); newList.PushItem( picker ); Module->m_ModuleStatus |= MODULE_to_PLACE; Module->m_ModuleStatus |= MODULE_to_PLACE; } break; break; } } Loading @@ -224,6 +255,10 @@ void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) } } } } // Undo: commit if( newList.GetCount() ) SaveCopyInUndoList( newList, UR_CHANGED ); activ = 0; activ = 0; Pas = 100.0; Pas = 100.0; Loading
pcbnew/solve.cpp +10 −0 Original line number Original line Diff line number Diff line Loading @@ -79,6 +79,8 @@ static RATSNEST_ITEM* pt_cur_ch; static int Ncurrent; /* measures of progress */ static int Ncurrent; /* measures of progress */ static int s_Clearance; // Clearance value used in autorouter static int s_Clearance; // Clearance value used in autorouter static PICKED_ITEMS_LIST s_ItemsListPicker; #define NOSUCCESS 0 #define NOSUCCESS 0 #define STOP_FROM_ESC -1 #define STOP_FROM_ESC -1 Loading Loading @@ -272,6 +274,9 @@ int PCB_EDIT_FRAME::Solve( wxDC* DC, int two_sides ) Ncurrent = 0; Ncurrent = 0; // Prepare the undo command info s_ItemsListPicker.ClearListAndDeleteItems(); // Should not be necessary, but... /* go until no more work to do */ /* go until no more work to do */ GetWork( &row_source, &col_source, ¤t_net_code, GetWork( &row_source, &col_source, ¤t_net_code, &row_target, &col_target, &pt_cur_ch ); // First net to route. &row_target, &col_target, &pt_cur_ch ); // First net to route. Loading Loading @@ -375,6 +380,9 @@ int PCB_EDIT_FRAME::Solve( wxDC* DC, int two_sides ) DrawPanel->m_AbortEnable = false; DrawPanel->m_AbortEnable = false; SaveCopyInUndoList( s_ItemsListPicker, UR_UNSPECIFIED ); s_ItemsListPicker.ClearItemsList(); // s_ItemsListPicker is no more owner of picked items return SUCCESS; return SUCCESS; } } Loading Loading @@ -1323,6 +1331,8 @@ static void AddNewTrace( PCB_EDIT_FRAME* pcbframe, wxDC* DC ) while( ( track = g_CurrentTrackList.PopFront() ) != NULL ) while( ( track = g_CurrentTrackList.PopFront() ) != NULL ) { { ITEM_PICKER picker( track, UR_NEW ); s_ItemsListPicker.PushItem( picker ); pcbframe->GetBoard()->m_Track.Insert( track, insertBeforeMe ); pcbframe->GetBoard()->m_Track.Insert( track, insertBeforeMe ); } } Loading