Commit daceb2e0 authored by charras's avatar charras
Browse files

Rework on undo/redo and block functions

parent 8ec8cf3f
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -12,7 +12,6 @@ set(COMMON_SRCS
    basicframe.cpp
    bezier_curves.cpp
    block_commande.cpp
    class_drawpickedstruct.cpp
    class_marker_base.cpp
    class_undoredo_container.cpp
    common.cpp
+0 −1
Original line number Diff line number Diff line
@@ -11,7 +11,6 @@
#include "common.h"
#include "macros.h"
#include "base_struct.h"
#include "class_drawpickedstruct.h"
#include "class_base_screen.h"
#include "class_drawpanel.h"
#include "confirm.h"

common/class_drawpickedstruct.cpp

deleted100644 → 0
+0 −81
Original line number Diff line number Diff line
/****************************************************/
/*	class_drawpickedstruct.cpp */
/****************************************************/

#include "fctsys.h"
#include "common.h"
#include "class_drawpickedstruct.h"


/* This class has only one useful member: .m_PickedStruct, used as a link.
 *  It does not describe really an item.
 *  It is used to create a linked list of selected items (in block selection).
 *  Each DrawPickedStruct item has is member: .m_PickedStruct pointing the
 *  real selected item
 */

/*******************************************************************/
DrawPickedStruct::DrawPickedStruct( EDA_BaseStruct* pickedstruct ) :
    EDA_BaseStruct( NULL, DRAW_PICK_ITEM_STRUCT_TYPE )
/*******************************************************************/
{
    m_PickedStruct = pickedstruct;
}


DrawPickedStruct::~DrawPickedStruct()
{
}

#if defined(DEBUG)
void DrawPickedStruct::Show( int nestLevel, std::ostream& os )
{
    NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() << "/>\n";
}
#endif


EDA_Rect DrawPickedStruct::GetBoundingBox()
{
    if( m_PickedStruct )
        return m_PickedStruct->GetBoundingBox();
    else
    {
        return EDA_Rect();      // empty rectangle
    }
}


EDA_Rect DrawPickedStruct::GetBoundingBoxUnion()
{
    EDA_Rect          ret;
    EDA_BaseStruct*   item;
    DrawPickedStruct* cur = this;

    while( cur && (item = cur->m_PickedStruct) != NULL )
    {
        ret.Merge( item->GetBoundingBox() );

        cur = cur->Next();
    }

    return ret;
}


/*********************************************/
void DrawPickedStruct::DeleteWrapperList()
/*********************************************/

/* Delete this item all the items of the linked list
 *  Free the wrapper, but DOES NOT delete the picked items linked by .m_PickedStruct
 */
{
    DrawPickedStruct* wrapp_struct, * next_struct;

    for( wrapp_struct = Next(); wrapp_struct != NULL; wrapp_struct = next_struct )
    {
        next_struct = wrapp_struct->Next();
        delete wrapp_struct;
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ set(EESCHEMA_SRCS
    class_pin.cpp
    class_sch_cmp_field.cpp
    class_schematic_items.cpp
    class_screen.cpp
    class_sch_screen.cpp
    class_text-label.cpp
    classes_body_items.cpp
    cleanup.cpp
+6 −61
Original line number Diff line number Diff line
@@ -10,7 +10,6 @@
#include "class_drawpanel.h"
#include "confirm.h"
#include "block_commande.h"
#include "class_drawpickedstruct.h"

#include "program.h"
#include "libcmp.h"
@@ -22,10 +21,10 @@
/* Variables Locales */

/* Fonctions exportees */
void               DeleteItemsInList( WinEDA_DrawPanel*  panel,
                                             PICKED_ITEMS_LIST& aItemsList );

/* Fonctions Locales */
static void               DeleteItemsInList( WinEDA_DrawPanel*  panel,
                                             PICKED_ITEMS_LIST& aItemsList );
static void               PlaceItemsInList( SCH_SCREEN* aScreen, PICKED_ITEMS_LIST& aItemsList );
static void               MoveListOfItems( SCH_SCREEN* aScreen, PICKED_ITEMS_LIST& aItemsList );
static void               CopyItemsInList( SCH_SCREEN* screen, PICKED_ITEMS_LIST& aItemsList );
@@ -247,7 +246,7 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC )

        case BLOCK_MOVE:    /* Move */
        case BLOCK_COPY:    /* Copy */
            PickStruct( GetScreen()->m_BlockLocate, GetScreen() );
            PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() );

        case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/
            if( block->GetCount() )
@@ -268,7 +267,7 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC )
            break;

        case BLOCK_DELETE: /* Delete */
            PickStruct( GetScreen()->m_BlockLocate, GetScreen() );
            PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() );
            DrawAndSizingBlockOutlines( DrawPanel, DC, FALSE );
            if( block->GetCount() )
            {
@@ -282,7 +281,7 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC )
            break;

        case BLOCK_SAVE: /* Save */
            PickStruct( GetScreen()->m_BlockLocate, GetScreen() );
            PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() );
            DrawAndSizingBlockOutlines( DrawPanel, DC, FALSE );
            if( block->GetCount() )
            {
@@ -380,7 +379,7 @@ void WinEDA_SchematicFrame::HandleBlockEndByPopUp( int Command, wxDC* DC )

        BreakSegmentOnJunction( GetScreen() );

        PickStruct( GetScreen()->m_BlockLocate, GetScreen() );
        PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() );
        if( block->GetCount() )
        {
            ii = 1;
@@ -677,9 +676,6 @@ void MirrorOneStruct( SCH_ITEM* DrawStruct, wxPoint& Center )
        MirrorYPoint( DrawSheetLabel->m_Pos, Center );
        break;

    case DRAW_PICK_ITEM_STRUCT_TYPE:
        break;

    default:
        break;
    }
@@ -730,7 +726,6 @@ void CopyItemsInList( SCH_SCREEN* screen, PICKED_ITEMS_LIST& aItemsList )
            case TYPE_SCH_GLOBALLABEL:
            case TYPE_SCH_HIERLABEL:
            case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
            case DRAW_PICK_ITEM_STRUCT_TYPE:
            case DRAW_MARKER_STRUCT_TYPE:
            case DRAW_NOCONNECT_STRUCT_TYPE:
            default:
@@ -786,25 +781,6 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, SCH_ITEM* DrawStruct )
        return;
    }

    if( DrawStruct->Type() == DRAW_PICK_ITEM_STRUCT_TYPE )
    {
        // Unlink all picked structs from current EEDrawList

        for( DrawPickedStruct* cur = (DrawPickedStruct*) DrawStruct;
            cur;
            cur = cur->Next() )
        {
            SCH_ITEM* item = (SCH_ITEM*) cur->m_PickedStruct;
            screen->RemoveFromDrawList( item );
            panel->PostDirtyRect( item->GetBoundingBox() );
            item->SetNext( 0 );
            item->SetBack( 0 );
            item->m_Flags = IS_DELETED;
        }

        // Removed items are put onto the Undo list
        frame->SaveCopyInUndoList( DrawStruct, IS_DELETED );
    }
    else    /* structure classique */
    {
        screen->RemoveFromDrawList( DrawStruct );
@@ -1065,9 +1041,6 @@ void MoveOneStruct( SCH_ITEM* DrawStruct, const wxPoint& move_vector )
        DrawSheetLabel->m_Pos += move_vector;
        break;

    case DRAW_PICK_ITEM_STRUCT_TYPE:
        break;

    default:
        break;
    }
@@ -1140,27 +1113,6 @@ SCH_ITEM* DuplicateStruct( SCH_ITEM* DrawStruct )
        NewDrawStruct = ( (DrawSheetStruct*) DrawStruct )->GenCopy();
        break;

    case DRAW_PICK_ITEM_STRUCT_TYPE:
    {
        DrawPickedStruct* NewPickedItem, * PickedList = NULL,
        * LastPickedItem = NULL;
        PickedList = (DrawPickedStruct*) DrawStruct;
        while( PickedList )
        {
            NewPickedItem = new DrawPickedStruct();
            if( NewDrawStruct == NULL )
                NewDrawStruct = (SCH_ITEM*) NewPickedItem;
            if( LastPickedItem )
                LastPickedItem->SetNext( NewPickedItem );
            LastPickedItem = NewPickedItem;
            NewPickedItem->m_PickedStruct =
                DuplicateStruct( (SCH_ITEM*) PickedList->m_PickedStruct );
            PickedList = PickedList->Next();
        }

        break;
    }

    case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
    case DRAW_PART_TEXT_STRUCT_TYPE:
    case SCREEN_STRUCT_TYPE:
@@ -1417,17 +1369,10 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
            break;

        case TYPE_SCH_COMPONENT:
            break;

        case DRAW_SHEET_STRUCT_TYPE:
            break;

        case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
            break;

        case DRAW_PICK_ITEM_STRUCT_TYPE:
            break;

        case DRAW_MARKER_STRUCT_TYPE:
                #undef STRUCT
                #define STRUCT ( (MARKER_SCH*) Struct )
Loading