Loading pcbnew/tools/edit_tool.cpp +10 −8 Original line number Diff line number Diff line Loading @@ -229,8 +229,6 @@ int EDIT_TOOL::Properties( TOOL_EVENT& aEvent ) // Check if user wants to edit pad or module properties if( item->Type() == PCB_MODULE_T ) { item->ClearFlags(); // Necessary for having an undo entry for( D_PAD* pad = static_cast<MODULE*>( item )->Pads(); pad; pad = pad->Next() ) { if( pad->ViewBBox().Contains( getViewControls()->GetCursorPosition() ) ) Loading @@ -244,6 +242,11 @@ int EDIT_TOOL::Properties( TOOL_EVENT& aEvent ) std::vector<PICKED_ITEMS_LIST*>& undoList = editFrame->GetScreen()->m_UndoList.m_CommandsList; // Some of properties dialogs alter pointers, so we should deselect them m_toolMgr->RunAction( COMMON_ACTIONS::selectionClear ); STATUS_FLAGS flags = item->GetFlags(); item->ClearFlags(); // It is necessary to determine if anything has changed PICKED_ITEMS_LIST* lastChange = undoList.empty() ? NULL : undoList.back(); Loading @@ -254,17 +257,15 @@ int EDIT_TOOL::Properties( TOOL_EVENT& aEvent ) if( lastChange != currentChange ) // Something has changed { // Some of properties dialogs alter pointers, so we should deselect them m_toolMgr->RunAction( COMMON_ACTIONS::selectionClear ); processChanges( currentChange ); // Seems unnecessary, as the items are removed/added to the board // updateRatsnest( true ); // getModel<BOARD>( PCB_T )->GetRatsnest()->Recalculate(); updateRatsnest( true ); getModel<BOARD>( PCB_T )->GetRatsnest()->Recalculate(); m_toolMgr->RunAction( COMMON_ACTIONS::pointEditorUpdate ); } item->SetFlags( flags ); } if( unselect ) Loading Loading @@ -554,6 +555,7 @@ void EDIT_TOOL::processChanges( const PICKED_ITEMS_LIST* aList ) getView(), _1 ) ); getView()->Add( updItem ); updItem->ViewUpdate(); break; default: Loading pcbnew/xchgmod.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <fctsys.h> #include <class_drawpanel.h> #include <class_draw_panel_gal.h> #include <confirm.h> #include <kicad_string.h> #include <wxPcbStruct.h> Loading @@ -44,6 +45,8 @@ #include <dialog_exchange_modules_base.h> #include <wildcards_and_files_ext.h> #include <boost/bind.hpp> static bool RecreateCmpFile( BOARD * aBrd, const wxString& aFullCmpFileName ); class DIALOG_EXCHANGE_MODULE : public DIALOG_EXCHANGE_MODULE_BASE Loading Loading @@ -470,9 +473,21 @@ void PCB_EDIT_FRAME::Exchange_Module( MODULE* aOldModule, ITEM_PICKER picker_new( aNewModule, UR_NEW ); aUndoPickList->PushItem( picker_old ); aUndoPickList->PushItem( picker_new ); if( IsGalCanvasActive() ) { KIGFX::VIEW* view = GetGalCanvas()->GetView(); aOldModule->RunOnChildren( boost::bind( &KIGFX::VIEW::Remove, view, _1 ) ); view->Remove( aOldModule ); aNewModule->RunOnChildren( boost::bind( &KIGFX::VIEW::Add, view, _1 ) ); view->Add( aNewModule ); } } else { GetGalCanvas()->GetView()->Remove( aOldModule ); aOldModule->DeleteStructure(); } Loading Loading
pcbnew/tools/edit_tool.cpp +10 −8 Original line number Diff line number Diff line Loading @@ -229,8 +229,6 @@ int EDIT_TOOL::Properties( TOOL_EVENT& aEvent ) // Check if user wants to edit pad or module properties if( item->Type() == PCB_MODULE_T ) { item->ClearFlags(); // Necessary for having an undo entry for( D_PAD* pad = static_cast<MODULE*>( item )->Pads(); pad; pad = pad->Next() ) { if( pad->ViewBBox().Contains( getViewControls()->GetCursorPosition() ) ) Loading @@ -244,6 +242,11 @@ int EDIT_TOOL::Properties( TOOL_EVENT& aEvent ) std::vector<PICKED_ITEMS_LIST*>& undoList = editFrame->GetScreen()->m_UndoList.m_CommandsList; // Some of properties dialogs alter pointers, so we should deselect them m_toolMgr->RunAction( COMMON_ACTIONS::selectionClear ); STATUS_FLAGS flags = item->GetFlags(); item->ClearFlags(); // It is necessary to determine if anything has changed PICKED_ITEMS_LIST* lastChange = undoList.empty() ? NULL : undoList.back(); Loading @@ -254,17 +257,15 @@ int EDIT_TOOL::Properties( TOOL_EVENT& aEvent ) if( lastChange != currentChange ) // Something has changed { // Some of properties dialogs alter pointers, so we should deselect them m_toolMgr->RunAction( COMMON_ACTIONS::selectionClear ); processChanges( currentChange ); // Seems unnecessary, as the items are removed/added to the board // updateRatsnest( true ); // getModel<BOARD>( PCB_T )->GetRatsnest()->Recalculate(); updateRatsnest( true ); getModel<BOARD>( PCB_T )->GetRatsnest()->Recalculate(); m_toolMgr->RunAction( COMMON_ACTIONS::pointEditorUpdate ); } item->SetFlags( flags ); } if( unselect ) Loading Loading @@ -554,6 +555,7 @@ void EDIT_TOOL::processChanges( const PICKED_ITEMS_LIST* aList ) getView(), _1 ) ); getView()->Add( updItem ); updItem->ViewUpdate(); break; default: Loading
pcbnew/xchgmod.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <fctsys.h> #include <class_drawpanel.h> #include <class_draw_panel_gal.h> #include <confirm.h> #include <kicad_string.h> #include <wxPcbStruct.h> Loading @@ -44,6 +45,8 @@ #include <dialog_exchange_modules_base.h> #include <wildcards_and_files_ext.h> #include <boost/bind.hpp> static bool RecreateCmpFile( BOARD * aBrd, const wxString& aFullCmpFileName ); class DIALOG_EXCHANGE_MODULE : public DIALOG_EXCHANGE_MODULE_BASE Loading Loading @@ -470,9 +473,21 @@ void PCB_EDIT_FRAME::Exchange_Module( MODULE* aOldModule, ITEM_PICKER picker_new( aNewModule, UR_NEW ); aUndoPickList->PushItem( picker_old ); aUndoPickList->PushItem( picker_new ); if( IsGalCanvasActive() ) { KIGFX::VIEW* view = GetGalCanvas()->GetView(); aOldModule->RunOnChildren( boost::bind( &KIGFX::VIEW::Remove, view, _1 ) ); view->Remove( aOldModule ); aNewModule->RunOnChildren( boost::bind( &KIGFX::VIEW::Add, view, _1 ) ); view->Add( aNewModule ); } } else { GetGalCanvas()->GetView()->Remove( aOldModule ); aOldModule->DeleteStructure(); } Loading