From 637919a69973c5abae14013e60de5487bcceb6d3 Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Wed, 9 Jul 2014 14:01:06 +0200 Subject: [PATCH] Added support for pads, texts and graphics removal in module editor (GAL). --- pcbnew/moduleframe.cpp | 3 +++ pcbnew/tools/edit_tool.cpp | 35 ++++++++++++++++++++++++++++++++--- pcbnew/tools/edit_tool.h | 14 ++++++++++++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/pcbnew/moduleframe.cpp b/pcbnew/moduleframe.cpp index 2fa40ac774..53c4e89fc6 100644 --- a/pcbnew/moduleframe.cpp +++ b/pcbnew/moduleframe.cpp @@ -278,8 +278,11 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) : m_toolManager->RegisterTool( new DRAWING_TOOL ); m_toolManager->RegisterTool( new POINT_EDITOR ); m_toolManager->RegisterTool( new PCBNEW_CONTROL ); + m_toolManager->GetTool()->EditModules( true ); + m_toolManager->GetTool()->EditModules( true ); m_toolManager->GetTool()->EditModules( true ); + m_toolManager->ResetTools( TOOL_BASE::RUN ); m_toolManager->InvokeTool( "pcbnew.InteractiveSelection" ); diff --git a/pcbnew/tools/edit_tool.cpp b/pcbnew/tools/edit_tool.cpp index 1db8267981..e4667867c3 100644 --- a/pcbnew/tools/edit_tool.cpp +++ b/pcbnew/tools/edit_tool.cpp @@ -40,7 +40,7 @@ #include "edit_tool.h" EDIT_TOOL::EDIT_TOOL() : - TOOL_INTERACTIVE( "pcbnew.InteractiveEdit" ), m_selectionTool( NULL ) + TOOL_INTERACTIVE( "pcbnew.InteractiveEdit" ), m_selectionTool( NULL ), m_editModules( false ) { } @@ -448,11 +448,40 @@ void EDIT_TOOL::remove( BOARD_ITEM* aItem ) } break; - // These are not supposed to be removed - case PCB_PAD_T: + // Default removal procedure case PCB_MODULE_TEXT_T: + { + if( m_editModules ) + { + TEXTE_MODULE* text = static_cast( aItem ); + + switch( text->GetType() ) + { + case TEXTE_MODULE::TEXT_is_REFERENCE: + DisplayError( getEditFrame(), _( "Cannot delete REFERENCE!" ) ); + return; + + case TEXTE_MODULE::TEXT_is_VALUE: + DisplayError( getEditFrame(), _( "Cannot delete VALUE!" ) ); + return; + } + } + } + /* no break */ + + case PCB_PAD_T: case PCB_MODULE_EDGE_T: + if( m_editModules ) + { + MODULE* module = static_cast( aItem->GetParent() ); + module->SetLastEditTime(); + + board->m_Status_Pcb = 0; // it is done in the legacy view + aItem->DeleteStructure(); + } + return; + break; case PCB_LINE_T: // a segment not on copper layers case PCB_TEXT_T: // a text on a layer diff --git a/pcbnew/tools/edit_tool.h b/pcbnew/tools/edit_tool.h index 207e446493..068727ad4d 100644 --- a/pcbnew/tools/edit_tool.h +++ b/pcbnew/tools/edit_tool.h @@ -91,6 +91,17 @@ public: */ int Remove( TOOL_EVENT& aEvent ); + /** + * Function EditModules() + * Toggles edit module mode. When enabled, one may select parts of modules individually + * (graphics, pads, etc.), so they can be modified. + * @param aEnabled decides if the mode should be enabled. + */ + void EditModules( bool aEnabled ) + { + m_editModules = aEnabled; + } + private: ///> Selection tool used for obtaining selected items SELECTION_TOOL* m_selectionTool; @@ -105,6 +116,9 @@ private: ///> of edit reference point). VECTOR2I m_cursor; + /// Edit module mode flag + bool m_editModules; + ///> Removes and frees a single BOARD_ITEM. void remove( BOARD_ITEM* aItem );