Loading pcbnew/tools/module_tools.cpp +31 −37 Original line number Diff line number Diff line Loading @@ -210,22 +210,20 @@ int MODULE_TOOLS::CopyItems( TOOL_EVENT& aEvent ) Activate(); KIGFX::VIEW_CONTROLS* controls = getViewControls(); controls->SetSnapping( true ); controls->ShowCursor( true ); controls->SetAutoPan( true ); m_controls->SetSnapping( true ); m_controls->ShowCursor( true ); m_controls->SetAutoPan( true ); PCB_BASE_FRAME* frame = getEditFrame<PCB_BASE_FRAME>(); frame->DisplayToolMsg( _( "Select reference point" ) ); m_frame->DisplayToolMsg( _( "Select reference point" ) ); bool cancelled = false; VECTOR2I cursorPos = getViewControls()->GetCursorPosition(); VECTOR2I cursorPos = m_controls->GetCursorPosition(); while( OPT_TOOL_EVENT evt = Wait() ) { if( evt->IsMotion() ) { cursorPos = getViewControls()->GetCursorPosition(); cursorPos = m_controls->GetCursorPosition(); } else if( evt->IsClick( BUT_LEFT ) ) { Loading @@ -243,7 +241,7 @@ int MODULE_TOOLS::CopyItems( TOOL_EVENT& aEvent ) PCB_IO io( CTL_FOR_CLIPBOARD ); // Create a temporary module that contains selected items to ease serialization MODULE module( getModel<BOARD>() ); MODULE module( m_board ); for( int i = 0; i < selection.Size(); ++i ) { Loading @@ -257,7 +255,7 @@ int MODULE_TOOLS::CopyItems( TOOL_EVENT& aEvent ) } // Set the new relative internal local coordinates of copied items MODULE* editedModule = getModel<BOARD>()->m_Modules; MODULE* editedModule = m_board->m_Modules; wxPoint moveVector = module.GetPosition() + editedModule->GetPosition() - wxPoint( cursorPos.x, cursorPos.y ); module.MoveAnchorPosition( moveVector ); Loading @@ -267,10 +265,10 @@ int MODULE_TOOLS::CopyItems( TOOL_EVENT& aEvent ) m_toolMgr->SaveClipboard( data ); } frame->DisplayToolMsg( wxString::Format( _( "Copied %d item(s)" ), selection.Size() ) ); controls->SetSnapping( false ); controls->ShowCursor( false ); controls->SetAutoPan( false ); m_frame->DisplayToolMsg( wxString::Format( _( "Copied %d item(s)" ), selection.Size() ) ); m_controls->SetSnapping( false ); m_controls->ShowCursor( false ); m_controls->SetAutoPan( false ); setTransitions(); Loading @@ -282,7 +280,7 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) { // Parse clipboard PCB_IO io( CTL_FOR_CLIPBOARD ); MODULE* currentModule = getModel<BOARD>()->m_Modules; MODULE* currentModule = m_board->m_Modules; MODULE* pastedModule = NULL; try Loading @@ -300,31 +298,27 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) } // Placement tool part KIGFX::VIEW* view = getView(); KIGFX::VIEW_CONTROLS* controls = getViewControls(); BOARD* board = getModel<BOARD>(); PCB_EDIT_FRAME* frame = getEditFrame<PCB_EDIT_FRAME>(); VECTOR2I cursorPos = getViewControls()->GetCursorPosition(); VECTOR2I cursorPos = m_controls->GetCursorPosition(); // Add a VIEW_GROUP that serves as a preview for the new item KIGFX::VIEW_GROUP preview( view ); pastedModule->SetParent( board ); KIGFX::VIEW_GROUP preview( m_view ); pastedModule->SetParent( m_board ); pastedModule->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) ); pastedModule->RunOnChildren( boost::bind( &KIGFX::VIEW_GROUP::Add, boost::ref( preview ), _1 ) ); preview.Add( pastedModule ); view->Add( &preview ); m_view->Add( &preview ); m_toolMgr->RunAction( COMMON_ACTIONS::selectionClear ); controls->ShowCursor( true ); controls->SetSnapping( true ); controls->SetAutoPan( true ); m_controls->ShowCursor( true ); m_controls->SetSnapping( true ); m_controls->SetAutoPan( true ); Activate(); // Main loop: keep receiving events while( OPT_TOOL_EVENT evt = Wait() ) { cursorPos = controls->GetCursorPosition(); cursorPos = m_controls->GetCursorPosition(); if( evt->IsMotion() ) { Loading @@ -336,7 +330,7 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) { if( evt->IsAction( &COMMON_ACTIONS::rotate ) ) { pastedModule->Rotate( pastedModule->GetPosition(), frame->GetRotationAngle() ); pastedModule->Rotate( pastedModule->GetPosition(), m_frame->GetRotationAngle() ); preview.ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY ); } else if( evt->IsAction( &COMMON_ACTIONS::flip ) ) Loading @@ -353,10 +347,10 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) else if( evt->IsClick( BUT_LEFT ) ) { frame->OnModify(); frame->SaveCopyInUndoList( currentModule, UR_MODEDIT ); m_frame->OnModify(); m_frame->SaveCopyInUndoList( currentModule, UR_MODEDIT ); board->m_Status_Pcb = 0; // I have no clue why, but it is done in the legacy view m_board->m_Status_Pcb = 0; // I have no clue why, but it is done in the legacy view currentModule->SetLastEditTime(); // MODULE::RunOnChildren is infeasible here: we need to create copies of items, do not Loading @@ -368,7 +362,7 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) currentModule->Add( clone ); clone->SetLocalCoord(); view->Add( clone ); m_view->Add( clone ); } for( BOARD_ITEM* drawing = pastedModule->GraphicalItems(); Loading @@ -393,7 +387,7 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) edge->SetLocalCoord(); } view->Add( clone ); m_view->Add( clone ); } preview.Clear(); Loading @@ -403,10 +397,10 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) } delete pastedModule; controls->ShowCursor( false ); controls->SetSnapping( false ); controls->SetAutoPan( false ); view->Remove( &preview ); m_controls->ShowCursor( false ); m_controls->SetSnapping( false ); m_controls->SetAutoPan( false ); m_view->Remove( &preview ); setTransitions(); Loading Loading
pcbnew/tools/module_tools.cpp +31 −37 Original line number Diff line number Diff line Loading @@ -210,22 +210,20 @@ int MODULE_TOOLS::CopyItems( TOOL_EVENT& aEvent ) Activate(); KIGFX::VIEW_CONTROLS* controls = getViewControls(); controls->SetSnapping( true ); controls->ShowCursor( true ); controls->SetAutoPan( true ); m_controls->SetSnapping( true ); m_controls->ShowCursor( true ); m_controls->SetAutoPan( true ); PCB_BASE_FRAME* frame = getEditFrame<PCB_BASE_FRAME>(); frame->DisplayToolMsg( _( "Select reference point" ) ); m_frame->DisplayToolMsg( _( "Select reference point" ) ); bool cancelled = false; VECTOR2I cursorPos = getViewControls()->GetCursorPosition(); VECTOR2I cursorPos = m_controls->GetCursorPosition(); while( OPT_TOOL_EVENT evt = Wait() ) { if( evt->IsMotion() ) { cursorPos = getViewControls()->GetCursorPosition(); cursorPos = m_controls->GetCursorPosition(); } else if( evt->IsClick( BUT_LEFT ) ) { Loading @@ -243,7 +241,7 @@ int MODULE_TOOLS::CopyItems( TOOL_EVENT& aEvent ) PCB_IO io( CTL_FOR_CLIPBOARD ); // Create a temporary module that contains selected items to ease serialization MODULE module( getModel<BOARD>() ); MODULE module( m_board ); for( int i = 0; i < selection.Size(); ++i ) { Loading @@ -257,7 +255,7 @@ int MODULE_TOOLS::CopyItems( TOOL_EVENT& aEvent ) } // Set the new relative internal local coordinates of copied items MODULE* editedModule = getModel<BOARD>()->m_Modules; MODULE* editedModule = m_board->m_Modules; wxPoint moveVector = module.GetPosition() + editedModule->GetPosition() - wxPoint( cursorPos.x, cursorPos.y ); module.MoveAnchorPosition( moveVector ); Loading @@ -267,10 +265,10 @@ int MODULE_TOOLS::CopyItems( TOOL_EVENT& aEvent ) m_toolMgr->SaveClipboard( data ); } frame->DisplayToolMsg( wxString::Format( _( "Copied %d item(s)" ), selection.Size() ) ); controls->SetSnapping( false ); controls->ShowCursor( false ); controls->SetAutoPan( false ); m_frame->DisplayToolMsg( wxString::Format( _( "Copied %d item(s)" ), selection.Size() ) ); m_controls->SetSnapping( false ); m_controls->ShowCursor( false ); m_controls->SetAutoPan( false ); setTransitions(); Loading @@ -282,7 +280,7 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) { // Parse clipboard PCB_IO io( CTL_FOR_CLIPBOARD ); MODULE* currentModule = getModel<BOARD>()->m_Modules; MODULE* currentModule = m_board->m_Modules; MODULE* pastedModule = NULL; try Loading @@ -300,31 +298,27 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) } // Placement tool part KIGFX::VIEW* view = getView(); KIGFX::VIEW_CONTROLS* controls = getViewControls(); BOARD* board = getModel<BOARD>(); PCB_EDIT_FRAME* frame = getEditFrame<PCB_EDIT_FRAME>(); VECTOR2I cursorPos = getViewControls()->GetCursorPosition(); VECTOR2I cursorPos = m_controls->GetCursorPosition(); // Add a VIEW_GROUP that serves as a preview for the new item KIGFX::VIEW_GROUP preview( view ); pastedModule->SetParent( board ); KIGFX::VIEW_GROUP preview( m_view ); pastedModule->SetParent( m_board ); pastedModule->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) ); pastedModule->RunOnChildren( boost::bind( &KIGFX::VIEW_GROUP::Add, boost::ref( preview ), _1 ) ); preview.Add( pastedModule ); view->Add( &preview ); m_view->Add( &preview ); m_toolMgr->RunAction( COMMON_ACTIONS::selectionClear ); controls->ShowCursor( true ); controls->SetSnapping( true ); controls->SetAutoPan( true ); m_controls->ShowCursor( true ); m_controls->SetSnapping( true ); m_controls->SetAutoPan( true ); Activate(); // Main loop: keep receiving events while( OPT_TOOL_EVENT evt = Wait() ) { cursorPos = controls->GetCursorPosition(); cursorPos = m_controls->GetCursorPosition(); if( evt->IsMotion() ) { Loading @@ -336,7 +330,7 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) { if( evt->IsAction( &COMMON_ACTIONS::rotate ) ) { pastedModule->Rotate( pastedModule->GetPosition(), frame->GetRotationAngle() ); pastedModule->Rotate( pastedModule->GetPosition(), m_frame->GetRotationAngle() ); preview.ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY ); } else if( evt->IsAction( &COMMON_ACTIONS::flip ) ) Loading @@ -353,10 +347,10 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) else if( evt->IsClick( BUT_LEFT ) ) { frame->OnModify(); frame->SaveCopyInUndoList( currentModule, UR_MODEDIT ); m_frame->OnModify(); m_frame->SaveCopyInUndoList( currentModule, UR_MODEDIT ); board->m_Status_Pcb = 0; // I have no clue why, but it is done in the legacy view m_board->m_Status_Pcb = 0; // I have no clue why, but it is done in the legacy view currentModule->SetLastEditTime(); // MODULE::RunOnChildren is infeasible here: we need to create copies of items, do not Loading @@ -368,7 +362,7 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) currentModule->Add( clone ); clone->SetLocalCoord(); view->Add( clone ); m_view->Add( clone ); } for( BOARD_ITEM* drawing = pastedModule->GraphicalItems(); Loading @@ -393,7 +387,7 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) edge->SetLocalCoord(); } view->Add( clone ); m_view->Add( clone ); } preview.Clear(); Loading @@ -403,10 +397,10 @@ int MODULE_TOOLS::PasteItems( TOOL_EVENT& aEvent ) } delete pastedModule; controls->ShowCursor( false ); controls->SetSnapping( false ); controls->SetAutoPan( false ); view->Remove( &preview ); m_controls->ShowCursor( false ); m_controls->SetSnapping( false ); m_controls->SetAutoPan( false ); m_view->Remove( &preview ); setTransitions(); Loading