Commit 637919a6 authored by Maciej Suminski's avatar Maciej Suminski
Browse files

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

parent 5dc1f926
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -278,8 +278,11 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
        m_toolManager->RegisterTool( new DRAWING_TOOL );
        m_toolManager->RegisterTool( new DRAWING_TOOL );
        m_toolManager->RegisterTool( new POINT_EDITOR );
        m_toolManager->RegisterTool( new POINT_EDITOR );
        m_toolManager->RegisterTool( new PCBNEW_CONTROL );
        m_toolManager->RegisterTool( new PCBNEW_CONTROL );

        m_toolManager->GetTool<SELECTION_TOOL>()->EditModules( true );
        m_toolManager->GetTool<SELECTION_TOOL>()->EditModules( true );
        m_toolManager->GetTool<EDIT_TOOL>()->EditModules( true );
        m_toolManager->GetTool<DRAWING_TOOL>()->EditModules( true );
        m_toolManager->GetTool<DRAWING_TOOL>()->EditModules( true );

        m_toolManager->ResetTools( TOOL_BASE::RUN );
        m_toolManager->ResetTools( TOOL_BASE::RUN );
        m_toolManager->InvokeTool( "pcbnew.InteractiveSelection" );
        m_toolManager->InvokeTool( "pcbnew.InteractiveSelection" );


+32 −3
Original line number Original line Diff line number Diff line
@@ -40,7 +40,7 @@
#include "edit_tool.h"
#include "edit_tool.h"


EDIT_TOOL::EDIT_TOOL() :
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;
    break;


    // These are not supposed to be removed
    // Default removal procedure
    case PCB_PAD_T:
    case PCB_MODULE_TEXT_T:
    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:
    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;
        return;
        break;


    case PCB_LINE_T:                // a segment not on copper layers
    case PCB_LINE_T:                // a segment not on copper layers
    case PCB_TEXT_T:                // a text on a layer
    case PCB_TEXT_T:                // a text on a layer
+14 −0
Original line number Original line Diff line number Diff line
@@ -91,6 +91,17 @@ public:
     */
     */
    int Remove( TOOL_EVENT& aEvent );
    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:
private:
    ///> Selection tool used for obtaining selected items
    ///> Selection tool used for obtaining selected items
    SELECTION_TOOL* m_selectionTool;
    SELECTION_TOOL* m_selectionTool;
@@ -105,6 +116,9 @@ private:
    ///> of edit reference point).
    ///> of edit reference point).
    VECTOR2I m_cursor;
    VECTOR2I m_cursor;


    /// Edit module mode flag
    bool m_editModules;

    ///> Removes and frees a single BOARD_ITEM.
    ///> Removes and frees a single BOARD_ITEM.
    void remove( BOARD_ITEM* aItem );
    void remove( BOARD_ITEM* aItem );