Added support for pads, texts and graphics removal in module editor (GAL).

This commit is contained in:
Maciej Suminski 2014-07-09 14:01:06 +02:00
parent 5dc1f92608
commit 637919a699
3 changed files with 49 additions and 3 deletions

View File

@ -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<SELECTION_TOOL>()->EditModules( true );
m_toolManager->GetTool<EDIT_TOOL>()->EditModules( true );
m_toolManager->GetTool<DRAWING_TOOL>()->EditModules( true );
m_toolManager->ResetTools( TOOL_BASE::RUN );
m_toolManager->InvokeTool( "pcbnew.InteractiveSelection" );

View File

@ -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<TEXTE_MODULE*>( aItem );
switch( text->GetType() )
{
case TEXTE_MODULE::TEXT_is_REFERENCE:
DisplayError( getEditFrame<PCB_BASE_FRAME>(), _( "Cannot delete REFERENCE!" ) );
return;
case TEXTE_MODULE::TEXT_is_VALUE:
DisplayError( getEditFrame<PCB_BASE_FRAME>(), _( "Cannot delete VALUE!" ) );
return;
}
}
}
/* no break */
case PCB_PAD_T:
case PCB_MODULE_EDGE_T:
if( m_editModules )
{
MODULE* module = static_cast<MODULE*>( 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

View File

@ -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 );