Rework on undo/redo and block functions
This commit is contained in:
parent
8ec8cf3f43
commit
daceb2e019
|
@ -12,7 +12,6 @@ set(COMMON_SRCS
|
||||||
basicframe.cpp
|
basicframe.cpp
|
||||||
bezier_curves.cpp
|
bezier_curves.cpp
|
||||||
block_commande.cpp
|
block_commande.cpp
|
||||||
class_drawpickedstruct.cpp
|
|
||||||
class_marker_base.cpp
|
class_marker_base.cpp
|
||||||
class_undoredo_container.cpp
|
class_undoredo_container.cpp
|
||||||
common.cpp
|
common.cpp
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
#include "base_struct.h"
|
#include "base_struct.h"
|
||||||
#include "class_drawpickedstruct.h"
|
|
||||||
#include "class_base_screen.h"
|
#include "class_base_screen.h"
|
||||||
#include "class_drawpanel.h"
|
#include "class_drawpanel.h"
|
||||||
#include "confirm.h"
|
#include "confirm.h"
|
||||||
|
|
|
@ -1,81 +0,0 @@
|
||||||
/****************************************************/
|
|
||||||
/* 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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -27,7 +27,7 @@ set(EESCHEMA_SRCS
|
||||||
class_pin.cpp
|
class_pin.cpp
|
||||||
class_sch_cmp_field.cpp
|
class_sch_cmp_field.cpp
|
||||||
class_schematic_items.cpp
|
class_schematic_items.cpp
|
||||||
class_screen.cpp
|
class_sch_screen.cpp
|
||||||
class_text-label.cpp
|
class_text-label.cpp
|
||||||
classes_body_items.cpp
|
classes_body_items.cpp
|
||||||
cleanup.cpp
|
cleanup.cpp
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
#include "class_drawpanel.h"
|
#include "class_drawpanel.h"
|
||||||
#include "confirm.h"
|
#include "confirm.h"
|
||||||
#include "block_commande.h"
|
#include "block_commande.h"
|
||||||
#include "class_drawpickedstruct.h"
|
|
||||||
|
|
||||||
#include "program.h"
|
#include "program.h"
|
||||||
#include "libcmp.h"
|
#include "libcmp.h"
|
||||||
|
@ -22,10 +21,10 @@
|
||||||
/* Variables Locales */
|
/* Variables Locales */
|
||||||
|
|
||||||
/* Fonctions exportees */
|
/* Fonctions exportees */
|
||||||
|
void DeleteItemsInList( WinEDA_DrawPanel* panel,
|
||||||
|
PICKED_ITEMS_LIST& aItemsList );
|
||||||
|
|
||||||
/* Fonctions Locales */
|
/* Fonctions Locales */
|
||||||
static void DeleteItemsInList( WinEDA_DrawPanel* panel,
|
|
||||||
PICKED_ITEMS_LIST& aItemsList );
|
|
||||||
static void PlaceItemsInList( SCH_SCREEN* aScreen, 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 MoveListOfItems( SCH_SCREEN* aScreen, PICKED_ITEMS_LIST& aItemsList );
|
||||||
static void CopyItemsInList( SCH_SCREEN* screen, 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_MOVE: /* Move */
|
||||||
case BLOCK_COPY: /* Copy */
|
case BLOCK_COPY: /* Copy */
|
||||||
PickStruct( GetScreen()->m_BlockLocate, GetScreen() );
|
PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() );
|
||||||
|
|
||||||
case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/
|
case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/
|
||||||
if( block->GetCount() )
|
if( block->GetCount() )
|
||||||
|
@ -268,7 +267,7 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BLOCK_DELETE: /* Delete */
|
case BLOCK_DELETE: /* Delete */
|
||||||
PickStruct( GetScreen()->m_BlockLocate, GetScreen() );
|
PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() );
|
||||||
DrawAndSizingBlockOutlines( DrawPanel, DC, FALSE );
|
DrawAndSizingBlockOutlines( DrawPanel, DC, FALSE );
|
||||||
if( block->GetCount() )
|
if( block->GetCount() )
|
||||||
{
|
{
|
||||||
|
@ -282,7 +281,7 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BLOCK_SAVE: /* Save */
|
case BLOCK_SAVE: /* Save */
|
||||||
PickStruct( GetScreen()->m_BlockLocate, GetScreen() );
|
PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() );
|
||||||
DrawAndSizingBlockOutlines( DrawPanel, DC, FALSE );
|
DrawAndSizingBlockOutlines( DrawPanel, DC, FALSE );
|
||||||
if( block->GetCount() )
|
if( block->GetCount() )
|
||||||
{
|
{
|
||||||
|
@ -380,7 +379,7 @@ void WinEDA_SchematicFrame::HandleBlockEndByPopUp( int Command, wxDC* DC )
|
||||||
|
|
||||||
BreakSegmentOnJunction( GetScreen() );
|
BreakSegmentOnJunction( GetScreen() );
|
||||||
|
|
||||||
PickStruct( GetScreen()->m_BlockLocate, GetScreen() );
|
PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() );
|
||||||
if( block->GetCount() )
|
if( block->GetCount() )
|
||||||
{
|
{
|
||||||
ii = 1;
|
ii = 1;
|
||||||
|
@ -677,9 +676,6 @@ void MirrorOneStruct( SCH_ITEM* DrawStruct, wxPoint& Center )
|
||||||
MirrorYPoint( DrawSheetLabel->m_Pos, Center );
|
MirrorYPoint( DrawSheetLabel->m_Pos, Center );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRAW_PICK_ITEM_STRUCT_TYPE:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -730,7 +726,6 @@ void CopyItemsInList( SCH_SCREEN* screen, PICKED_ITEMS_LIST& aItemsList )
|
||||||
case TYPE_SCH_GLOBALLABEL:
|
case TYPE_SCH_GLOBALLABEL:
|
||||||
case TYPE_SCH_HIERLABEL:
|
case TYPE_SCH_HIERLABEL:
|
||||||
case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
|
case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
|
||||||
case DRAW_PICK_ITEM_STRUCT_TYPE:
|
|
||||||
case DRAW_MARKER_STRUCT_TYPE:
|
case DRAW_MARKER_STRUCT_TYPE:
|
||||||
case DRAW_NOCONNECT_STRUCT_TYPE:
|
case DRAW_NOCONNECT_STRUCT_TYPE:
|
||||||
default:
|
default:
|
||||||
|
@ -786,25 +781,6 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, SCH_ITEM* DrawStruct )
|
||||||
return;
|
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 */
|
else /* structure classique */
|
||||||
{
|
{
|
||||||
screen->RemoveFromDrawList( DrawStruct );
|
screen->RemoveFromDrawList( DrawStruct );
|
||||||
|
@ -1065,9 +1041,6 @@ void MoveOneStruct( SCH_ITEM* DrawStruct, const wxPoint& move_vector )
|
||||||
DrawSheetLabel->m_Pos += move_vector;
|
DrawSheetLabel->m_Pos += move_vector;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRAW_PICK_ITEM_STRUCT_TYPE:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1140,27 +1113,6 @@ SCH_ITEM* DuplicateStruct( SCH_ITEM* DrawStruct )
|
||||||
NewDrawStruct = ( (DrawSheetStruct*) DrawStruct )->GenCopy();
|
NewDrawStruct = ( (DrawSheetStruct*) DrawStruct )->GenCopy();
|
||||||
break;
|
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_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
|
||||||
case DRAW_PART_TEXT_STRUCT_TYPE:
|
case DRAW_PART_TEXT_STRUCT_TYPE:
|
||||||
case SCREEN_STRUCT_TYPE:
|
case SCREEN_STRUCT_TYPE:
|
||||||
|
@ -1417,17 +1369,10 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_SCH_COMPONENT:
|
case TYPE_SCH_COMPONENT:
|
||||||
break;
|
|
||||||
|
|
||||||
case DRAW_SHEET_STRUCT_TYPE:
|
case DRAW_SHEET_STRUCT_TYPE:
|
||||||
break;
|
|
||||||
|
|
||||||
case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
|
case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRAW_PICK_ITEM_STRUCT_TYPE:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DRAW_MARKER_STRUCT_TYPE:
|
case DRAW_MARKER_STRUCT_TYPE:
|
||||||
#undef STRUCT
|
#undef STRUCT
|
||||||
#define STRUCT ( (MARKER_SCH*) Struct )
|
#define STRUCT ( (MARKER_SCH*) Struct )
|
||||||
|
|
|
@ -32,7 +32,6 @@ void SetaParent( EDA_BaseStruct* Struct, BASE_SCREEN* Screen )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
|
case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
|
||||||
case DRAW_PICK_ITEM_STRUCT_TYPE:
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
|
@ -7,7 +7,6 @@
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "trigo.h"
|
#include "trigo.h"
|
||||||
#include "confirm.h"
|
#include "confirm.h"
|
||||||
#include "class_drawpickedstruct.h"
|
|
||||||
#include "program.h"
|
#include "program.h"
|
||||||
#include "libcmp.h"
|
#include "libcmp.h"
|
||||||
#include "general.h"
|
#include "general.h"
|
||||||
|
@ -115,7 +114,6 @@ void BreakSegmentOnJunction( SCH_SCREEN* Screen )
|
||||||
case TYPE_SCH_GLOBALLABEL:
|
case TYPE_SCH_GLOBALLABEL:
|
||||||
case TYPE_SCH_HIERLABEL:
|
case TYPE_SCH_HIERLABEL:
|
||||||
case TYPE_SCH_COMPONENT:
|
case TYPE_SCH_COMPONENT:
|
||||||
case DRAW_PICK_ITEM_STRUCT_TYPE:
|
|
||||||
case DRAW_POLYLINE_STRUCT_TYPE:
|
case DRAW_POLYLINE_STRUCT_TYPE:
|
||||||
case DRAW_MARKER_STRUCT_TYPE:
|
case DRAW_MARKER_STRUCT_TYPE:
|
||||||
case TYPE_SCH_TEXT:
|
case TYPE_SCH_TEXT:
|
||||||
|
@ -131,78 +129,48 @@ void BreakSegmentOnJunction( SCH_SCREEN* Screen )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************/
|
/* Break a segment ( BUS, WIRE ) int 2 segments at location aBreakpoint,
|
||||||
DrawPickedStruct* BreakSegment( SCH_SCREEN* screen,
|
* if aBreakpoint in on segment segment
|
||||||
wxPoint breakpoint, bool PutInUndoList )
|
* ( excluding ends)
|
||||||
/*********************************************************/
|
* fill aPicklist with modified items if non null
|
||||||
|
|
||||||
/* Coupe un segment ( BUS, WIRE ) en 2 au point breakpoint,
|
|
||||||
* - si ce point est sur le segment
|
|
||||||
* - extremites non comprises
|
|
||||||
* If PutInUndoList == TRUE, create a list of modifictions, for undo command
|
|
||||||
*/
|
*/
|
||||||
|
void BreakSegment(SCH_SCREEN * aScreen, wxPoint aBreakpoint,
|
||||||
|
PICKED_ITEMS_LIST * aPicklist)
|
||||||
{
|
{
|
||||||
EDA_BaseStruct* DrawList;
|
|
||||||
EDA_DrawLineStruct* segment, * NewSegment;
|
EDA_DrawLineStruct* segment, * NewSegment;
|
||||||
DrawPickedStruct* List = NULL;
|
for( SCH_ITEM* DrawList = aScreen->EEDrawList;DrawList; DrawList = DrawList->Next() )
|
||||||
|
{
|
||||||
|
if( DrawList->Type() != DRAW_SEGMENT_STRUCT_TYPE )
|
||||||
|
continue;
|
||||||
|
|
||||||
DrawList = screen->EEDrawList;
|
|
||||||
while( DrawList )
|
|
||||||
{
|
|
||||||
switch( DrawList->Type() )
|
|
||||||
{
|
|
||||||
case DRAW_SEGMENT_STRUCT_TYPE:
|
|
||||||
segment = (EDA_DrawLineStruct*) DrawList;
|
segment = (EDA_DrawLineStruct*) DrawList;
|
||||||
|
|
||||||
if( !TestSegmentHit( breakpoint, segment->m_Start, segment->m_End, 0 ) )
|
if( !TestSegmentHit( aBreakpoint, segment->m_Start, segment->m_End, 0 ) )
|
||||||
break;
|
continue;
|
||||||
|
|
||||||
/* Segment connecte: doit etre coupe en 2 si px,py n'est
|
/* Segment connecte: doit etre coupe en 2 si px,py n'est
|
||||||
* pas une extremite */
|
* pas une extremite */
|
||||||
if( (segment->m_Start == breakpoint) || (segment->m_End == breakpoint ) )
|
if( (segment->m_Start == aBreakpoint) || (segment->m_End == aBreakpoint ) )
|
||||||
break;
|
continue;
|
||||||
/* Ici il faut couper le segment en 2 */
|
/* Ici il faut couper le segment en 2 */
|
||||||
if( PutInUndoList ) // First: put copy of the old segment in undo list
|
if( aPicklist ) // First: put copy of the old segment in undo list
|
||||||
{
|
{
|
||||||
DrawPickedStruct* wrapper = new DrawPickedStruct();
|
ITEM_PICKER picker((SCH_ITEM*) segment->GenCopy(), IS_CHANGED);
|
||||||
|
picker.m_Link = segment;
|
||||||
wrapper->m_Flags = IS_CHANGED;
|
aPicklist->PushItem(picker);
|
||||||
wrapper->m_PickedStruct = segment->GenCopy();
|
|
||||||
wrapper->m_Image = segment;
|
|
||||||
wrapper->m_PickedStruct->m_Image = segment;
|
|
||||||
wrapper->SetNext( List );
|
|
||||||
List = wrapper;
|
|
||||||
}
|
}
|
||||||
NewSegment = segment->GenCopy();
|
NewSegment = segment->GenCopy();
|
||||||
NewSegment->m_Start = breakpoint;
|
NewSegment->m_Start = aBreakpoint;
|
||||||
segment->m_End = NewSegment->m_Start;
|
segment->m_End = NewSegment->m_Start;
|
||||||
NewSegment->SetNext( segment->Next() );
|
NewSegment->SetNext( segment->Next() );
|
||||||
segment->SetNext( NewSegment );
|
segment->SetNext( NewSegment );
|
||||||
DrawList = NewSegment;
|
DrawList = NewSegment;
|
||||||
if( PutInUndoList )
|
if( aPicklist )
|
||||||
{
|
{
|
||||||
DrawPickedStruct* wrapper = new DrawPickedStruct();
|
ITEM_PICKER picker(NewSegment, IS_NEW);
|
||||||
|
aPicklist->PushItem(picker);
|
||||||
wrapper->m_Flags = IS_NEW;
|
|
||||||
wrapper->m_Image = NewSegment;
|
|
||||||
wrapper->SetNext( List );
|
|
||||||
List = wrapper;
|
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case DRAW_JUNCTION_STRUCT_TYPE:
|
|
||||||
case DRAW_BUSENTRY_STRUCT_TYPE:
|
|
||||||
case DRAW_POLYLINE_STRUCT_TYPE:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawList = DrawList->Next();
|
|
||||||
}
|
|
||||||
|
|
||||||
return List;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
#include "fctsys.h"
|
#include "fctsys.h"
|
||||||
#include "gr_basic.h"
|
#include "gr_basic.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "class_drawpickedstruct.h"
|
|
||||||
|
|
||||||
#include "program.h"
|
#include "program.h"
|
||||||
#include "libcmp.h"
|
#include "libcmp.h"
|
||||||
|
@ -13,6 +12,10 @@
|
||||||
#include "protos.h"
|
#include "protos.h"
|
||||||
#include "class_marker_sch.h"
|
#include "class_marker_sch.h"
|
||||||
|
|
||||||
|
// Imported function:
|
||||||
|
void DeleteItemsInList( WinEDA_DrawPanel* panel,
|
||||||
|
PICKED_ITEMS_LIST& aItemsList );
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************************/
|
/********************************************************************************/
|
||||||
static int CountConnectedItems( WinEDA_SchematicFrame* frame,
|
static int CountConnectedItems( WinEDA_SchematicFrame* frame,
|
||||||
|
@ -115,7 +118,7 @@ static bool MarkConnected( WinEDA_SchematicFrame* frame, SCH_ITEM* ListStruct,
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************************/
|
/********************************************************************************/
|
||||||
void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnection )
|
void WinEDA_SchematicFrame::DeleteConnection( bool DeleteFullConnection )
|
||||||
/********************************************************************************/
|
/********************************************************************************/
|
||||||
|
|
||||||
/* Delete a connection, i.e wires or bus connected
|
/* Delete a connection, i.e wires or bus connected
|
||||||
|
@ -124,20 +127,21 @@ void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnectio
|
||||||
{
|
{
|
||||||
wxPoint refpos = GetScreen()->m_Curseur;
|
wxPoint refpos = GetScreen()->m_Curseur;
|
||||||
SCH_ITEM* DelStruct;
|
SCH_ITEM* DelStruct;
|
||||||
DrawPickedStruct* PickedItem, * PickedList = NULL;
|
PICKED_ITEMS_LIST pickList;
|
||||||
|
|
||||||
/* Clear .m_Flags member for all items */
|
/* Clear .m_Flags member for all items */
|
||||||
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Next() )
|
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Next() )
|
||||||
DelStruct->m_Flags = 0;
|
DelStruct->m_Flags = 0;
|
||||||
|
|
||||||
BreakSegmentOnJunction( (SCH_SCREEN*) GetScreen() );
|
BreakSegmentOnJunction( (SCH_SCREEN*) GetScreen() );
|
||||||
DelStruct = GetScreen()->EEDrawList;
|
|
||||||
|
|
||||||
/* Locate all the wires, bus or junction under the mouse cursor, and put them in a list
|
/* Locate all the wires, bus or junction under the mouse cursor, and put them in a list
|
||||||
* of items to delete
|
* of items to delete
|
||||||
*/
|
*/
|
||||||
|
ITEM_PICKER picker(NULL, IS_DELETED);
|
||||||
SCH_SCREEN* screen = (SCH_SCREEN*) GetScreen();
|
SCH_SCREEN* screen = (SCH_SCREEN*) GetScreen();
|
||||||
SCH_ITEM* savedEEDrawList = screen->EEDrawList;
|
SCH_ITEM* savedEEDrawList = screen->EEDrawList; // Save the list entry point of this screen
|
||||||
|
DelStruct = GetScreen()->EEDrawList;
|
||||||
while( DelStruct
|
while( DelStruct
|
||||||
&& ( DelStruct = PickStruct( screen->m_Curseur,
|
&& ( DelStruct = PickStruct( screen->m_Curseur,
|
||||||
screen, JUNCTIONITEM | WIREITEM | BUSITEM ) ) != NULL )
|
screen, JUNCTIONITEM | WIREITEM | BUSITEM ) ) != NULL )
|
||||||
|
@ -145,10 +149,9 @@ void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnectio
|
||||||
DelStruct->m_Flags = SELECTEDNODE | STRUCT_DELETED;
|
DelStruct->m_Flags = SELECTEDNODE | STRUCT_DELETED;
|
||||||
|
|
||||||
/* Put this structure in the picked list: */
|
/* Put this structure in the picked list: */
|
||||||
PickedItem = new DrawPickedStruct( DelStruct );
|
picker.m_Item = DelStruct;
|
||||||
|
pickList.PushItem(picker);
|
||||||
|
|
||||||
PickedItem->SetNext( PickedList );
|
|
||||||
PickedList = PickedItem;
|
|
||||||
DelStruct = DelStruct->Next();
|
DelStruct = DelStruct->Next();
|
||||||
screen->EEDrawList = DelStruct;
|
screen->EEDrawList = DelStruct;
|
||||||
}
|
}
|
||||||
|
@ -234,10 +237,9 @@ void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnectio
|
||||||
{
|
{
|
||||||
DelStruct->m_Flags |= STRUCT_DELETED;
|
DelStruct->m_Flags |= STRUCT_DELETED;
|
||||||
/* Put this structure in the picked list: */
|
/* Put this structure in the picked list: */
|
||||||
PickedItem = new DrawPickedStruct( DelStruct );
|
picker.m_Item = DelStruct;
|
||||||
|
pickList.PushItem(picker);
|
||||||
|
|
||||||
PickedItem->SetNext( PickedList );
|
|
||||||
PickedList = PickedItem;
|
|
||||||
DelStruct = GetScreen()->EEDrawList;
|
DelStruct = GetScreen()->EEDrawList;
|
||||||
}
|
}
|
||||||
#undef SEGM
|
#undef SEGM
|
||||||
|
@ -262,10 +264,8 @@ void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnectio
|
||||||
DelStruct->m_Flags |= STRUCT_DELETED;
|
DelStruct->m_Flags |= STRUCT_DELETED;
|
||||||
|
|
||||||
/* Put this structure in the picked list: */
|
/* Put this structure in the picked list: */
|
||||||
PickedItem = new DrawPickedStruct( DelStruct );
|
picker.m_Item = DelStruct;
|
||||||
|
pickList.PushItem(picker);
|
||||||
PickedItem->SetNext( PickedList );
|
|
||||||
PickedList = PickedItem;
|
|
||||||
}
|
}
|
||||||
#undef JUNCTION
|
#undef JUNCTION
|
||||||
}
|
}
|
||||||
|
@ -290,10 +290,8 @@ void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnectio
|
||||||
DelStruct->m_Flags |= STRUCT_DELETED;
|
DelStruct->m_Flags |= STRUCT_DELETED;
|
||||||
|
|
||||||
/* Put this structure in the picked list: */
|
/* Put this structure in the picked list: */
|
||||||
PickedItem = new DrawPickedStruct( DelStruct );
|
picker.m_Item = DelStruct;
|
||||||
|
pickList.PushItem(picker);
|
||||||
PickedItem->SetNext( PickedList );
|
|
||||||
PickedList = PickedItem;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,9 +301,9 @@ void WinEDA_SchematicFrame::DeleteConnection( wxDC* DC, bool DeleteFullConnectio
|
||||||
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Next() )
|
for( DelStruct = GetScreen()->EEDrawList; DelStruct != NULL; DelStruct = DelStruct->Next() )
|
||||||
DelStruct->m_Flags = 0;
|
DelStruct->m_Flags = 0;
|
||||||
|
|
||||||
if( PickedList )
|
if( pickList.GetCount() )
|
||||||
{
|
{
|
||||||
DeleteStruct( DrawPanel, DC, (SCH_ITEM*) PickedList );
|
DeleteItemsInList( DrawPanel, pickList );
|
||||||
GetScreen()->SetModify();
|
GetScreen()->SetModify();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -381,7 +379,6 @@ void EraseStruct( SCH_ITEM* DrawStruct, SCH_SCREEN* Screen )
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
EDA_BaseStruct* DrawList;
|
EDA_BaseStruct* DrawList;
|
||||||
DrawPickedStruct* PickedList = NULL;
|
|
||||||
Hierarchical_PIN_Sheet_Struct* SheetLabel, * NextLabel;
|
Hierarchical_PIN_Sheet_Struct* SheetLabel, * NextLabel;
|
||||||
|
|
||||||
if( DrawStruct == NULL )
|
if( DrawStruct == NULL )
|
||||||
|
@ -394,16 +391,14 @@ void EraseStruct( SCH_ITEM* DrawStruct, SCH_SCREEN* Screen )
|
||||||
|
|
||||||
if( DrawStruct->Type() == DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE )
|
if( DrawStruct->Type() == DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE )
|
||||||
{
|
{
|
||||||
/* Cette stucture est rattachee a une feuille, et n'est pas
|
//this structure is attached to a sheet , which we must find.
|
||||||
* accessible par la liste globale directement */
|
|
||||||
//this structure has a sheet attached, which we must find.
|
|
||||||
DrawList = Screen->EEDrawList;
|
DrawList = Screen->EEDrawList;
|
||||||
for( ; DrawList != NULL; DrawList = DrawList->Next() )
|
for( ; DrawList != NULL; DrawList = DrawList->Next() )
|
||||||
{
|
{
|
||||||
if( DrawList->Type() != DRAW_SHEET_STRUCT_TYPE )
|
if( DrawList->Type() != DRAW_SHEET_STRUCT_TYPE )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Examen de la Sheet */
|
/* See if our item is in this Sheet */
|
||||||
SheetLabel = ( (DrawSheetStruct*) DrawList )->m_Label;
|
SheetLabel = ( (DrawSheetStruct*) DrawList )->m_Label;
|
||||||
if( SheetLabel == NULL )
|
if( SheetLabel == NULL )
|
||||||
continue;
|
continue;
|
||||||
|
@ -431,37 +426,9 @@ void EraseStruct( SCH_ITEM* DrawStruct, SCH_SCREEN* Screen )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( DrawStruct->Type() == DRAW_PICK_ITEM_STRUCT_TYPE )
|
|
||||||
{
|
|
||||||
PickedList = (DrawPickedStruct*) DrawStruct;
|
|
||||||
while( PickedList )
|
|
||||||
{
|
|
||||||
if( PickedList->m_PickedStruct == Screen->EEDrawList )
|
|
||||||
{
|
|
||||||
Screen->EEDrawList = Screen->EEDrawList->Next();
|
|
||||||
SAFE_DELETE( DrawStruct );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DrawList = Screen->EEDrawList;
|
|
||||||
while( DrawList && DrawList->Next() )
|
|
||||||
{
|
|
||||||
if( DrawList->Next() == PickedList->m_PickedStruct )
|
|
||||||
{
|
|
||||||
DrawList->SetNext( DrawList->Next()->Next() );
|
|
||||||
SAFE_DELETE( DrawStruct );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DrawList = DrawList->Next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PickedList = (DrawPickedStruct*) PickedList->Next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // structure usuelle */
|
else // structure usuelle */
|
||||||
{
|
{
|
||||||
if( DrawStruct == Screen->EEDrawList )
|
if( DrawStruct == Screen->EEDrawList )
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
#include "gr_basic.h"
|
#include "gr_basic.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "class_drawpanel.h"
|
#include "class_drawpanel.h"
|
||||||
#include "class_drawpickedstruct.h"
|
|
||||||
#include "appl_wxstruct.h"
|
#include "appl_wxstruct.h"
|
||||||
|
|
||||||
#include "program.h"
|
#include "program.h"
|
||||||
|
@ -127,32 +126,18 @@ void WinEDA_DrawPanel::PrintPage( wxDC* DC, bool Print_Sheet_Ref,
|
||||||
* If the list is of DrawPickStruct types then the picked item are drawn. *
|
* If the list is of DrawPickStruct types then the picked item are drawn. *
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
void RedrawStructList( WinEDA_DrawPanel* panel, wxDC* DC,
|
void RedrawStructList( WinEDA_DrawPanel* panel, wxDC* DC,
|
||||||
SCH_ITEM* Structs, int DrawMode, int Color )
|
SCH_ITEM* Structlist, int DrawMode, int Color )
|
||||||
{
|
{
|
||||||
while( Structs )
|
while( Structlist )
|
||||||
{
|
{
|
||||||
if( Structs->Type() == DRAW_PICK_ITEM_STRUCT_TYPE )
|
if( !(Structlist->m_Flags & IS_MOVED) )
|
||||||
{
|
|
||||||
SCH_ITEM* item =
|
|
||||||
(SCH_ITEM*) ( (DrawPickedStruct*) Structs )->m_PickedStruct;
|
|
||||||
|
|
||||||
// uncomment line below when there is a virtual EDA_BaseStruct::GetBoundingBox()
|
|
||||||
// if( panel->m_ClipBox.Intersects( item->GetBoundingBox() ) )
|
|
||||||
{
|
|
||||||
RedrawOneStruct( panel, DC, item, DrawMode, Color );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if( !(Structs->m_Flags & IS_MOVED) )
|
|
||||||
{
|
{
|
||||||
// uncomment line below when there is a virtual EDA_BaseStruct::GetBoundingBox()
|
// uncomment line below when there is a virtual EDA_BaseStruct::GetBoundingBox()
|
||||||
// if( panel->m_ClipBox.Intersects( Structs->GetBoundingBox() ) )
|
// if( panel->m_ClipBox.Intersects( Structs->GetBoundingBox() ) )
|
||||||
RedrawOneStruct( panel, DC, Structs, DrawMode, Color );
|
RedrawOneStruct( panel, DC, Structlist, DrawMode, Color );
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Structs = Structs->Next();
|
Structlist = Structlist->Next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
#include "general.h"
|
#include "general.h"
|
||||||
#include "trigo.h"
|
#include "trigo.h"
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
#include "class_drawpickedstruct.h"
|
|
||||||
#include "class_marker_sch.h"
|
#include "class_marker_sch.h"
|
||||||
|
|
||||||
#include "protos.h"
|
#include "protos.h"
|
||||||
|
@ -118,9 +117,6 @@ SCH_ITEM* PickStruct( const wxPoint& refpos, BASE_SCREEN* screen, int SearchMask
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************/
|
|
||||||
int PickStruct( BLOCK_SELECTOR& aBlock, BASE_SCREEN* aScreen )
|
|
||||||
/************************************************************************/
|
|
||||||
|
|
||||||
/** Function PickStruct
|
/** Function PickStruct
|
||||||
* Search items in a block
|
* Search items in a block
|
||||||
|
@ -128,6 +124,7 @@ int PickStruct( BLOCK_SELECTOR& aBlock, BASE_SCREEN* aScreen )
|
||||||
* @param aBlock a BLOCK_SELECTOR that gives the search area boundary
|
* @param aBlock a BLOCK_SELECTOR that gives the search area boundary
|
||||||
* list of items is stored in aBlock
|
* list of items is stored in aBlock
|
||||||
*/
|
*/
|
||||||
|
int PickItemsInBlock( BLOCK_SELECTOR& aBlock, BASE_SCREEN* aScreen )
|
||||||
{
|
{
|
||||||
int x, y, OrigX, OrigY;
|
int x, y, OrigX, OrigY;
|
||||||
int itemcount = 0;
|
int itemcount = 0;
|
||||||
|
@ -355,13 +352,10 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRAW_PICK_ITEM_STRUCT_TYPE:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
wxString msg;
|
wxString msg;
|
||||||
msg.Printf( wxT( "SnapPoint2() error: unexpected strct type %d (" ), DrawList->Type() );
|
msg.Printf( wxT( "SnapPoint2() error: unexpected struct type %d (" ), DrawList->Type() );
|
||||||
msg << DrawList->GetClass() << wxT( ")" );
|
msg << DrawList->GetClass() << wxT( ")" );
|
||||||
DisplayError( NULL, msg );
|
DisplayError( NULL, msg );
|
||||||
break;
|
break;
|
||||||
|
@ -540,9 +534,6 @@ bool DrawStructInBox( int x1, int y1, int x2, int y2, SCH_ITEM* DrawStruct )
|
||||||
case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
|
case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRAW_PICK_ITEM_STRUCT_TYPE:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
msg.Printf(
|
msg.Printf(
|
||||||
wxT( "DrawStructInBox() Err: unexpected StructType %d (" ),
|
wxT( "DrawStructInBox() Err: unexpected StructType %d (" ),
|
||||||
|
|
|
@ -533,7 +533,6 @@ static void ListeObjetConnection( DrawSheetPath* sheetlist,
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRAW_PICK_ITEM_STRUCT_TYPE:
|
|
||||||
case DRAW_POLYLINE_STRUCT_TYPE:
|
case DRAW_POLYLINE_STRUCT_TYPE:
|
||||||
case DRAW_BUSENTRY_STRUCT_TYPE:
|
case DRAW_BUSENTRY_STRUCT_TYPE:
|
||||||
case DRAW_MARKER_STRUCT_TYPE:
|
case DRAW_MARKER_STRUCT_TYPE:
|
||||||
|
|
|
@ -55,7 +55,6 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case SCREEN_STRUCT_TYPE:
|
case SCREEN_STRUCT_TYPE:
|
||||||
case DRAW_PICK_ITEM_STRUCT_TYPE:
|
|
||||||
DisplayError( this,
|
DisplayError( this,
|
||||||
wxT( "OnLeftClick err: unexpected type for Place" ) );
|
wxT( "OnLeftClick err: unexpected type for Place" ) );
|
||||||
DrawStruct->m_Flags = 0;
|
DrawStruct->m_Flags = 0;
|
||||||
|
|
|
@ -750,9 +750,6 @@ void PlotDrawlist( Plotter* plotter, SCH_ITEM* aDrawlist )
|
||||||
PlotLibPart( plotter, DrawLibItem );
|
PlotLibPart( plotter, DrawLibItem );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRAW_PICK_ITEM_STRUCT_TYPE:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DRAW_POLYLINE_STRUCT_TYPE:
|
case DRAW_POLYLINE_STRUCT_TYPE:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -109,10 +109,10 @@ LibDrawPin* LocatePinByNumber( const wxString & ePin_Number,
|
||||||
SCH_COMPONENT * LocateSmallestComponent( SCH_SCREEN * Screen );
|
SCH_COMPONENT * LocateSmallestComponent( SCH_SCREEN * Screen );
|
||||||
/* Recherche du plus petit (en surface) composant pointe par la souris */
|
/* Recherche du plus petit (en surface) composant pointe par la souris */
|
||||||
|
|
||||||
int PickStruct(BLOCK_SELECTOR& aBlock, BASE_SCREEN* screen );
|
int PickItemsInBlock(BLOCK_SELECTOR& aBlock, BASE_SCREEN* screen );
|
||||||
SCH_ITEM * PickStruct(const wxPoint & refpos, BASE_SCREEN* screen, int SearchMask);
|
|
||||||
/* 2 functions PickStruct:
|
/* function PickStruct:
|
||||||
Search in block, or Search at location pos
|
Search at location pos
|
||||||
|
|
||||||
SearchMask = (bitwise OR):
|
SearchMask = (bitwise OR):
|
||||||
LIBITEM
|
LIBITEM
|
||||||
|
@ -145,6 +145,7 @@ SCH_ITEM * PickStruct(const wxPoint & refpos, BASE_SCREEN* screen, int SearchMas
|
||||||
Positon search:
|
Positon search:
|
||||||
pointeur sur la structure.
|
pointeur sur la structure.
|
||||||
Si pas de structures selectionnees: retourne NULL */
|
Si pas de structures selectionnees: retourne NULL */
|
||||||
|
SCH_ITEM * PickStruct(const wxPoint & refpos, BASE_SCREEN* screen, int SearchMask);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -325,11 +326,14 @@ void SchematicCleanUp(SCH_SCREEN * screen, wxDC * DC);
|
||||||
void BreakSegmentOnJunction( SCH_SCREEN * Screen );
|
void BreakSegmentOnJunction( SCH_SCREEN * Screen );
|
||||||
/* Routine creant des debuts / fin de segment (BUS ou WIRES) sur les jonctions
|
/* Routine creant des debuts / fin de segment (BUS ou WIRES) sur les jonctions
|
||||||
et les raccords */
|
et les raccords */
|
||||||
DrawPickedStruct * BreakSegment(SCH_SCREEN * screen, wxPoint breakpoint,
|
|
||||||
bool PutInUndoList = FALSE);
|
/* Break a segment ( BUS, WIRE ) int 2 segments at location aBreakpoint,
|
||||||
/* Coupe un segment ( BUS, WIRE ) en 2 au point breakpoint,
|
* if aBreakpoint in on segment segment
|
||||||
- si ce point est sur le segment
|
* ( excluding ends)
|
||||||
- extremites non comprises */
|
* fill aPicklist with modified items if non null
|
||||||
|
*/
|
||||||
|
void BreakSegment(SCH_SCREEN * aScreen, wxPoint aBreakpoint,
|
||||||
|
PICKED_ITEMS_LIST * aPicklist = NULL);
|
||||||
|
|
||||||
/**************/
|
/**************/
|
||||||
/* EECLASS.CPP */
|
/* EECLASS.CPP */
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#include "class_drawpanel.h"
|
#include "class_drawpanel.h"
|
||||||
#include "confirm.h"
|
#include "confirm.h"
|
||||||
#include "eda_doc.h"
|
#include "eda_doc.h"
|
||||||
#include "class_drawpickedstruct.h"
|
|
||||||
#include "class_marker_sch.h"
|
#include "class_marker_sch.h"
|
||||||
|
|
||||||
#include "program.h"
|
#include "program.h"
|
||||||
|
@ -329,20 +328,20 @@ void WinEDA_SchematicFrame::Process_Special_Functions( wxCommandEvent& event )
|
||||||
case ID_POPUP_SCH_DELETE_NODE:
|
case ID_POPUP_SCH_DELETE_NODE:
|
||||||
case ID_POPUP_SCH_DELETE_CONNECTION:
|
case ID_POPUP_SCH_DELETE_CONNECTION:
|
||||||
DrawPanel->MouseToCursorSchema();
|
DrawPanel->MouseToCursorSchema();
|
||||||
DeleteConnection( &dc,
|
DeleteConnection( id == ID_POPUP_SCH_DELETE_CONNECTION ? TRUE : FALSE );
|
||||||
id == ID_POPUP_SCH_DELETE_CONNECTION ? TRUE : FALSE );
|
|
||||||
screen->SetCurItem( NULL );
|
screen->SetCurItem( NULL );
|
||||||
g_ItemToRepeat = NULL;
|
g_ItemToRepeat = NULL;
|
||||||
TestDanglingEnds( screen->EEDrawList, &dc );
|
TestDanglingEnds( screen->EEDrawList, &dc );
|
||||||
|
DrawPanel->Refresh();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_POPUP_SCH_BREAK_WIRE:
|
case ID_POPUP_SCH_BREAK_WIRE:
|
||||||
{
|
{
|
||||||
DrawPickedStruct* ListForUndo;
|
|
||||||
DrawPanel->MouseToCursorSchema();
|
DrawPanel->MouseToCursorSchema();
|
||||||
ListForUndo = BreakSegment( screen, screen->m_Curseur, TRUE );
|
PICKED_ITEMS_LIST picklistForUndo;
|
||||||
if( ListForUndo )
|
BreakSegment( screen, screen->m_Curseur, &picklistForUndo );
|
||||||
SaveCopyInUndoList( (SCH_ITEM*) ListForUndo, IS_NEW | IS_CHANGED );
|
if( picklistForUndo.GetCount() )
|
||||||
|
SaveCopyInUndoList( picklistForUndo, IS_NEW | IS_CHANGED );
|
||||||
TestDanglingEnds( screen->EEDrawList, &dc );
|
TestDanglingEnds( screen->EEDrawList, &dc );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
#include "fctsys.h"
|
#include "fctsys.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "confirm.h"
|
#include "confirm.h"
|
||||||
#include "class_drawpickedstruct.h"
|
|
||||||
|
|
||||||
#include "program.h"
|
#include "program.h"
|
||||||
#include "libcmp.h"
|
#include "libcmp.h"
|
||||||
|
@ -173,8 +172,8 @@ void SwapData( EDA_BaseStruct* aItem, EDA_BaseStruct* aImage )
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
void WinEDA_SchematicFrame::SaveCopyInUndoList( SCH_ITEM* ItemToCopy,
|
void WinEDA_SchematicFrame::SaveCopyInUndoList( SCH_ITEM* aItemToCopy,
|
||||||
int flag_type_command )
|
int aCommandType )
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
|
|
||||||
/** function SaveCopyInUndoList
|
/** function SaveCopyInUndoList
|
||||||
|
@ -201,110 +200,33 @@ void WinEDA_SchematicFrame::SaveCopyInUndoList( SCH_ITEM* ItemToCopy,
|
||||||
SCH_ITEM* CopyOfItem;
|
SCH_ITEM* CopyOfItem;
|
||||||
PICKED_ITEMS_LIST* commandToUndo = new PICKED_ITEMS_LIST();
|
PICKED_ITEMS_LIST* commandToUndo = new PICKED_ITEMS_LIST();
|
||||||
|
|
||||||
commandToUndo->m_UndoRedoType = flag_type_command;
|
commandToUndo->m_UndoRedoType = aCommandType;
|
||||||
ITEM_PICKER itemWrapper( ItemToCopy, flag_type_command );
|
ITEM_PICKER itemWrapper( aItemToCopy, aCommandType );
|
||||||
|
|
||||||
if( ItemToCopy )
|
switch( aCommandType )
|
||||||
{
|
|
||||||
switch( flag_type_command )
|
|
||||||
{
|
{
|
||||||
case IS_CHANGED: /* Create a copy of schematic */
|
case IS_CHANGED: /* Create a copy of schematic */
|
||||||
if( ItemToCopy->Type() == DRAW_PICK_ITEM_STRUCT_TYPE )
|
CopyOfItem = DuplicateStruct( aItemToCopy );
|
||||||
{
|
|
||||||
DrawPickedStruct* PickedList = (DrawPickedStruct*) ItemToCopy;
|
|
||||||
while( PickedList )
|
|
||||||
{
|
|
||||||
CopyOfItem = DuplicateStruct( (SCH_ITEM*) PickedList->m_PickedStruct );
|
|
||||||
CopyOfItem->m_Flags = flag_type_command;
|
|
||||||
itemWrapper.m_Item = CopyOfItem;
|
itemWrapper.m_Item = CopyOfItem;
|
||||||
itemWrapper.m_Link = (SCH_ITEM*) PickedList->m_PickedStruct;
|
itemWrapper.m_Link = aItemToCopy;
|
||||||
commandToUndo->PushItem( itemWrapper );
|
commandToUndo->PushItem( itemWrapper );
|
||||||
PickedList = PickedList->Next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CopyOfItem = DuplicateStruct( ItemToCopy );
|
|
||||||
itemWrapper.m_Item = CopyOfItem;
|
|
||||||
itemWrapper.m_Link = ItemToCopy;
|
|
||||||
commandToUndo->PushItem( itemWrapper );
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IS_NEW:
|
case IS_NEW:
|
||||||
if( ItemToCopy->Type() == DRAW_PICK_ITEM_STRUCT_TYPE )
|
|
||||||
{
|
|
||||||
DrawPickedStruct* PickedList = (DrawPickedStruct*) ItemToCopy;
|
|
||||||
while( PickedList )
|
|
||||||
{
|
|
||||||
CopyOfItem = (SCH_ITEM*) PickedList->m_PickedStruct;
|
|
||||||
PickedList->m_PickedStruct = NULL;
|
|
||||||
PickedList->m_Flags = flag_type_command;
|
|
||||||
PickedList = PickedList->Next();
|
|
||||||
itemWrapper.m_Item = CopyOfItem;
|
|
||||||
commandToUndo->PushItem( itemWrapper );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
commandToUndo->PushItem( itemWrapper );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IS_NEW | IS_CHANGED: // when more than one item, some are new, some are changed
|
|
||||||
if( ItemToCopy->Type() == DRAW_PICK_ITEM_STRUCT_TYPE )
|
|
||||||
{
|
|
||||||
DrawPickedStruct* PickedList = (DrawPickedStruct*) ItemToCopy;
|
|
||||||
while( PickedList )
|
|
||||||
{
|
|
||||||
CopyOfItem = (SCH_ITEM*) PickedList->m_PickedStruct;
|
|
||||||
PickedList->m_PickedStruct = NULL;
|
|
||||||
PickedList = PickedList->Next();
|
|
||||||
itemWrapper.m_Item = CopyOfItem;
|
|
||||||
itemWrapper.m_UndoRedoStatus = PickedList->m_Flags;
|
|
||||||
commandToUndo->PushItem( itemWrapper );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
commandToUndo->PushItem( itemWrapper );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IS_WIRE_IMAGE:
|
case IS_WIRE_IMAGE:
|
||||||
commandToUndo->PushItem( itemWrapper );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IS_DELETED:
|
case IS_DELETED:
|
||||||
ItemToCopy->m_Flags = flag_type_command;
|
|
||||||
if( ItemToCopy->Type() == DRAW_PICK_ITEM_STRUCT_TYPE )
|
|
||||||
{
|
|
||||||
DrawPickedStruct* PickedList = (DrawPickedStruct*) ItemToCopy;
|
|
||||||
while( PickedList )
|
|
||||||
{
|
|
||||||
CopyOfItem = (SCH_ITEM*) PickedList->m_PickedStruct;
|
|
||||||
CopyOfItem->m_Flags = flag_type_command;
|
|
||||||
PickedList->m_Flags = flag_type_command;
|
|
||||||
PickedList = PickedList->Next();
|
|
||||||
itemWrapper.m_Item = CopyOfItem;
|
|
||||||
commandToUndo->PushItem( itemWrapper );
|
commandToUndo->PushItem( itemWrapper );
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
commandToUndo->PushItem( itemWrapper );
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
wxString msg;
|
wxString msg;
|
||||||
msg.Printf( wxT( "SaveCopyInUndoList() error (unknown code %X)" ), flag_type_command );
|
msg.Printf( wxT( "SaveCopyInUndoList() error (unknown code %X)" ), aCommandType );
|
||||||
DisplayError( this, msg );
|
DisplayError( this, msg );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
/* Save the copy in undo list */
|
/* Save the copy in undo list */
|
||||||
GetScreen()->PushCommandToUndoList( commandToUndo );
|
GetScreen()->PushCommandToUndoList( commandToUndo );
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,6 @@ enum KICAD_T {
|
||||||
TYPE_SCH_GLOBALLABEL,
|
TYPE_SCH_GLOBALLABEL,
|
||||||
TYPE_SCH_HIERLABEL,
|
TYPE_SCH_HIERLABEL,
|
||||||
TYPE_SCH_COMPONENT,
|
TYPE_SCH_COMPONENT,
|
||||||
DRAW_PICK_ITEM_STRUCT_TYPE,
|
|
||||||
DRAW_SEGMENT_STRUCT_TYPE,
|
DRAW_SEGMENT_STRUCT_TYPE,
|
||||||
DRAW_BUSENTRY_STRUCT_TYPE,
|
DRAW_BUSENTRY_STRUCT_TYPE,
|
||||||
DRAW_SHEET_STRUCT_TYPE,
|
DRAW_SHEET_STRUCT_TYPE,
|
||||||
|
|
|
@ -1,73 +0,0 @@
|
||||||
/*****************************************************************************/
|
|
||||||
/* sch_item_struct.h : Basic classes for most eeschema items descriptions */
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef __CLASS_DRAWPICKEDSTRUCT_H__
|
|
||||||
#define __CLASS_DRAWPICKEDSTRUCT_H__
|
|
||||||
|
|
||||||
|
|
||||||
#include "base_struct.h"
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class DrawPickedStruct
|
|
||||||
* holds structures picked by pick events (like block selection).
|
|
||||||
* This class has only one useful member: .m_PickedStruct, used as a link.
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
class DrawPickedStruct : public EDA_BaseStruct
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
EDA_BaseStruct * m_PickedStruct;
|
|
||||||
|
|
||||||
public:
|
|
||||||
DrawPickedStruct( EDA_BaseStruct * pickedstruct = NULL );
|
|
||||||
~DrawPickedStruct();
|
|
||||||
void Place( WinEDA_DrawFrame* frame, wxDC* DC ) { };
|
|
||||||
void DeleteWrapperList();
|
|
||||||
|
|
||||||
DrawPickedStruct* Next() { return (DrawPickedStruct*) Pnext; }
|
|
||||||
|
|
||||||
EDA_Rect GetBoundingBox();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetBoundingBoxUnion
|
|
||||||
* returns the union of all the BoundingBox rectangles of all held items
|
|
||||||
* in the picklist whose list head is this DrawPickedStruct.
|
|
||||||
* @return EDA_Rect - The combined, composite, bounding box.
|
|
||||||
*/
|
|
||||||
EDA_Rect GetBoundingBoxUnion();
|
|
||||||
|
|
||||||
wxString GetClass() const { return wxT( "DrawPickedStruct" ); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function Draw
|
|
||||||
* Do nothing, needed for SCH_ITEM compat.
|
|
||||||
*/
|
|
||||||
void Draw( WinEDA_DrawPanel* panel,
|
|
||||||
wxDC* DC,
|
|
||||||
const wxPoint& offset,
|
|
||||||
int draw_mode,
|
|
||||||
int Color = -1 )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function Save
|
|
||||||
* Do nothing, needed for SCH_ITEM compat.
|
|
||||||
* @param aFile The FILE to write to.
|
|
||||||
* @return bool - true if success writing else false.
|
|
||||||
*/
|
|
||||||
bool Save( FILE* aFile ) const
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(DEBUG)
|
|
||||||
void Show( int nestLevel, std::ostream& os );
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* __CLASS_DRAWPICKEDSTRUCT_H__ */
|
|
|
@ -300,7 +300,7 @@ private:
|
||||||
void BeginSegment( wxDC* DC, int type );
|
void BeginSegment( wxDC* DC, int type );
|
||||||
void EndSegment( wxDC* DC );
|
void EndSegment( wxDC* DC );
|
||||||
void DeleteCurrentSegment( wxDC* DC );
|
void DeleteCurrentSegment( wxDC* DC );
|
||||||
void DeleteConnection( wxDC* DC, bool DeleteFullConnection );
|
void DeleteConnection( bool DeleteFullConnection );
|
||||||
|
|
||||||
// graphic lines
|
// graphic lines
|
||||||
void Delete_Segment_Edge( DRAWSEGMENT* Segment, wxDC* DC );
|
void Delete_Segment_Edge( DRAWSEGMENT* Segment, wxDC* DC );
|
||||||
|
|
Loading…
Reference in New Issue