Complete Eeschema unified move code.
* Schematic fields now use unified move code. * Move the unified move code into file schedit.cpp * Remove old schematic field move code.
This commit is contained in:
parent
7bbe2f784e
commit
609abb2f0c
|
@ -461,73 +461,6 @@ void SCH_EDIT_FRAME::DeleteCurrentSegment( wxDC* DC )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void moveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition, bool aErase )
|
|
||||||
{
|
|
||||||
SCH_SCREEN* screen = (SCH_SCREEN*) aPanel->GetScreen();
|
|
||||||
SCH_ITEM* item = screen->GetCurItem();
|
|
||||||
|
|
||||||
wxCHECK_RET( (item != NULL), wxT( "Cannot move invalid schematic item." ) );
|
|
||||||
|
|
||||||
// Erase the current item at its current position.
|
|
||||||
if( aErase )
|
|
||||||
item->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode );
|
|
||||||
|
|
||||||
item->SetPosition( screen->GetCrossHairPosition() );
|
|
||||||
|
|
||||||
// Draw the item item at it's new position.
|
|
||||||
item->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void abortMoveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC )
|
|
||||||
{
|
|
||||||
SCH_SCREEN* screen = (SCH_SCREEN*) aPanel->GetScreen();
|
|
||||||
SCH_ITEM* item = screen->GetCurItem();
|
|
||||||
SCH_EDIT_FRAME* parent = ( SCH_EDIT_FRAME* ) aPanel->GetParent();
|
|
||||||
|
|
||||||
parent->SetRepeatItem( NULL );
|
|
||||||
screen->SetCurItem( NULL );
|
|
||||||
|
|
||||||
if( item == NULL ) /* no current item */
|
|
||||||
return;
|
|
||||||
|
|
||||||
if( item->IsNew() )
|
|
||||||
{
|
|
||||||
delete item;
|
|
||||||
item = NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SCH_ITEM* oldItem = parent->GetUndoItem();
|
|
||||||
|
|
||||||
SCH_ITEM* currentItem;
|
|
||||||
|
|
||||||
// Items that are children of other objects are undone by swapping the contents
|
|
||||||
// of the parent items.
|
|
||||||
if( item->Type() == SCH_SHEET_PIN_T )
|
|
||||||
{
|
|
||||||
currentItem = (SCH_ITEM*) item->GetParent();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
currentItem = item;
|
|
||||||
}
|
|
||||||
|
|
||||||
screen->SetCurItem( currentItem );
|
|
||||||
|
|
||||||
wxCHECK_RET( oldItem != NULL && currentItem->Type() == oldItem->Type(),
|
|
||||||
wxT( "Cannot restore undefined or bad last schematic item." ) );
|
|
||||||
|
|
||||||
// Never delete existing item, because it can be referenced by an undo/redo command
|
|
||||||
// Just restore its data
|
|
||||||
currentItem->SwapData( oldItem );
|
|
||||||
currentItem->ClearFlags();
|
|
||||||
}
|
|
||||||
|
|
||||||
aPanel->Refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Routine to create new connection struct.
|
/* Routine to create new connection struct.
|
||||||
*/
|
*/
|
||||||
SCH_JUNCTION* SCH_EDIT_FRAME::AddJunction( wxDC* aDC, const wxPoint& aPosition,
|
SCH_JUNCTION* SCH_EDIT_FRAME::AddJunction( wxDC* aDC, const wxPoint& aPosition,
|
||||||
|
@ -552,37 +485,6 @@ SCH_JUNCTION* SCH_EDIT_FRAME::AddJunction( wxDC* aDC, const wxPoint& aPosition,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_EDIT_FRAME::MoveItem( SCH_ITEM* aItem, wxDC* aDC )
|
|
||||||
{
|
|
||||||
wxCHECK_RET( aItem != NULL, wxT( "Cannot move invalid schematic item" ) );
|
|
||||||
|
|
||||||
m_itemToRepeat = NULL;
|
|
||||||
|
|
||||||
if( !aItem->IsNew() )
|
|
||||||
{
|
|
||||||
if( (aItem->Type() == SCH_SHEET_PIN_T) )
|
|
||||||
SetUndoItem( (SCH_ITEM*) aItem->GetParent() );
|
|
||||||
else
|
|
||||||
SetUndoItem( aItem );
|
|
||||||
}
|
|
||||||
|
|
||||||
aItem->SetFlags( IS_MOVED );
|
|
||||||
|
|
||||||
DrawPanel->CrossHairOff( aDC );
|
|
||||||
|
|
||||||
if( (aItem->Type() != SCH_SHEET_PIN_T) )
|
|
||||||
GetScreen()->SetCrossHairPosition( aItem->GetPosition() );
|
|
||||||
|
|
||||||
DrawPanel->MoveCursorToCrossHair();
|
|
||||||
|
|
||||||
OnModify();
|
|
||||||
DrawPanel->SetMouseCapture( moveItem, abortMoveItem );
|
|
||||||
GetScreen()->SetCurItem( aItem );
|
|
||||||
moveItem( DrawPanel, aDC, wxDefaultPosition, true );
|
|
||||||
DrawPanel->CrossHairOn( aDC );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SCH_NO_CONNECT* SCH_EDIT_FRAME::AddNoConnect( wxDC* aDC, const wxPoint& aPosition )
|
SCH_NO_CONNECT* SCH_EDIT_FRAME::AddNoConnect( wxDC* aDC, const wxPoint& aPosition )
|
||||||
{
|
{
|
||||||
SCH_NO_CONNECT* NewNoConnect;
|
SCH_NO_CONNECT* NewNoConnect;
|
||||||
|
|
|
@ -40,69 +40,6 @@
|
||||||
#include "sch_component.h"
|
#include "sch_component.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Move standard text field. This routine is normally attached to the cursor.
|
|
||||||
*/
|
|
||||||
static void moveField( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition, bool aErase )
|
|
||||||
{
|
|
||||||
SCH_SCREEN* screen = (SCH_SCREEN*) aPanel->GetScreen();
|
|
||||||
SCH_FIELD* currentField = (SCH_FIELD*)screen->GetCurItem();
|
|
||||||
|
|
||||||
if( (currentField == NULL) || (currentField->Type() != SCH_FIELD_T) )
|
|
||||||
return;
|
|
||||||
|
|
||||||
if( aErase )
|
|
||||||
{
|
|
||||||
currentField->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode );
|
|
||||||
}
|
|
||||||
|
|
||||||
currentField->SetPosition( screen->GetCrossHairPosition() );
|
|
||||||
|
|
||||||
currentField->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void abortMoveField( EDA_DRAW_PANEL* aPanel, wxDC* aDC )
|
|
||||||
{
|
|
||||||
SCH_EDIT_FRAME* frame = (SCH_EDIT_FRAME*) aPanel->GetParent();
|
|
||||||
SCH_SCREEN* screen = (SCH_SCREEN*) aPanel->GetScreen();
|
|
||||||
SCH_FIELD* currentField = (SCH_FIELD*) screen->GetCurItem();
|
|
||||||
|
|
||||||
if( currentField )
|
|
||||||
{
|
|
||||||
currentField->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode );
|
|
||||||
currentField->ClearFlags();
|
|
||||||
currentField->m_Pos = frame->m_OldPos;
|
|
||||||
currentField->Draw( aPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE );
|
|
||||||
}
|
|
||||||
|
|
||||||
screen->SetCurItem( NULL );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SCH_EDIT_FRAME::MoveField( SCH_FIELD* aField, wxDC* aDC )
|
|
||||||
{
|
|
||||||
wxCHECK_RET( aField && (aField->Type() == SCH_FIELD_T) && !aField->GetText().IsEmpty(),
|
|
||||||
wxT( "Cannot move invalid component field." ) );
|
|
||||||
|
|
||||||
SCH_COMPONENT* comp = (SCH_COMPONENT*) aField->GetParent();
|
|
||||||
|
|
||||||
GetScreen()->SetCurItem( aField );
|
|
||||||
SetUndoItem( comp );
|
|
||||||
|
|
||||||
DrawPanel->CrossHairOff( aDC );
|
|
||||||
GetScreen()->SetCrossHairPosition( aField->GetPosition() );
|
|
||||||
DrawPanel->MoveCursorToCrossHair();
|
|
||||||
|
|
||||||
m_OldPos = aField->m_Pos;
|
|
||||||
|
|
||||||
DrawPanel->SetMouseCapture( moveField, abortMoveField );
|
|
||||||
aField->SetFlags( IS_MOVED );
|
|
||||||
|
|
||||||
DrawPanel->CrossHairOn( aDC );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SCH_EDIT_FRAME::EditComponentFieldText( SCH_FIELD* aField, wxDC* aDC )
|
void SCH_EDIT_FRAME::EditComponentFieldText( SCH_FIELD* aField, wxDC* aDC )
|
||||||
{
|
{
|
||||||
wxCHECK_RET( aField != NULL && aField->Type() == SCH_FIELD_T,
|
wxCHECK_RET( aField != NULL && aField->Type() == SCH_FIELD_T,
|
||||||
|
|
|
@ -493,8 +493,6 @@ void SCH_EDIT_FRAME::OnMoveItem( wxCommandEvent& aEvent )
|
||||||
SCH_SCREEN* screen = GetScreen();
|
SCH_SCREEN* screen = GetScreen();
|
||||||
SCH_ITEM* item = screen->GetCurItem();
|
SCH_ITEM* item = screen->GetCurItem();
|
||||||
|
|
||||||
wxLogDebug( wxT( "Command member m_commandInt = %d." ), aEvent.GetInt() );
|
|
||||||
|
|
||||||
if( item == NULL )
|
if( item == NULL )
|
||||||
{
|
{
|
||||||
// If we didn't get here by a hot key, then something has gone wrong.
|
// If we didn't get here by a hot key, then something has gone wrong.
|
||||||
|
@ -532,6 +530,7 @@ void SCH_EDIT_FRAME::OnMoveItem( wxCommandEvent& aEvent )
|
||||||
case SCH_TEXT_T:
|
case SCH_TEXT_T:
|
||||||
case SCH_COMPONENT_T:
|
case SCH_COMPONENT_T:
|
||||||
case SCH_SHEET_PIN_T:
|
case SCH_SHEET_PIN_T:
|
||||||
|
case SCH_FIELD_T:
|
||||||
MoveItem( item, &dc );
|
MoveItem( item, &dc );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -543,10 +542,6 @@ void SCH_EDIT_FRAME::OnMoveItem( wxCommandEvent& aEvent )
|
||||||
StartMoveSheet( (SCH_SHEET*) item, &dc );
|
StartMoveSheet( (SCH_SHEET*) item, &dc );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCH_FIELD_T:
|
|
||||||
MoveField( (SCH_FIELD*) item, &dc );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SCH_MARKER_T:
|
case SCH_MARKER_T:
|
||||||
default:
|
default:
|
||||||
wxFAIL_MSG( wxString::Format( wxT( "Cannot move item type %s" ),
|
wxFAIL_MSG( wxString::Format( wxT( "Cannot move item type %s" ),
|
||||||
|
@ -721,3 +716,99 @@ bool SCH_EDIT_FRAME::DeleteItemAtCrossHair( wxDC* DC )
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void moveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition, bool aErase )
|
||||||
|
{
|
||||||
|
SCH_SCREEN* screen = (SCH_SCREEN*) aPanel->GetScreen();
|
||||||
|
SCH_ITEM* item = screen->GetCurItem();
|
||||||
|
|
||||||
|
wxCHECK_RET( (item != NULL), wxT( "Cannot move invalid schematic item." ) );
|
||||||
|
|
||||||
|
// Erase the current item at its current position.
|
||||||
|
if( aErase )
|
||||||
|
item->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode );
|
||||||
|
|
||||||
|
item->SetPosition( screen->GetCrossHairPosition() );
|
||||||
|
|
||||||
|
// Draw the item item at it's new position.
|
||||||
|
item->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void abortMoveItem( EDA_DRAW_PANEL* aPanel, wxDC* aDC )
|
||||||
|
{
|
||||||
|
SCH_SCREEN* screen = (SCH_SCREEN*) aPanel->GetScreen();
|
||||||
|
SCH_ITEM* item = screen->GetCurItem();
|
||||||
|
SCH_EDIT_FRAME* parent = ( SCH_EDIT_FRAME* ) aPanel->GetParent();
|
||||||
|
|
||||||
|
parent->SetRepeatItem( NULL );
|
||||||
|
screen->SetCurItem( NULL );
|
||||||
|
|
||||||
|
if( item == NULL ) /* no current item */
|
||||||
|
return;
|
||||||
|
|
||||||
|
if( item->IsNew() )
|
||||||
|
{
|
||||||
|
delete item;
|
||||||
|
item = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SCH_ITEM* oldItem = parent->GetUndoItem();
|
||||||
|
|
||||||
|
SCH_ITEM* currentItem;
|
||||||
|
|
||||||
|
// Items that are children of other objects are undone by swapping the contents
|
||||||
|
// of the parent items.
|
||||||
|
if( (item->Type() == SCH_SHEET_PIN_T) || (item->Type() == SCH_FIELD_T) )
|
||||||
|
{
|
||||||
|
currentItem = (SCH_ITEM*) item->GetParent();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentItem = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxCHECK_RET( oldItem != NULL && currentItem->Type() == oldItem->Type(),
|
||||||
|
wxT( "Cannot restore undefined or bad last schematic item." ) );
|
||||||
|
|
||||||
|
// Never delete existing item, because it can be referenced by an undo/redo command
|
||||||
|
// Just restore its data
|
||||||
|
currentItem->SwapData( oldItem );
|
||||||
|
item->ClearFlags();
|
||||||
|
}
|
||||||
|
|
||||||
|
aPanel->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SCH_EDIT_FRAME::MoveItem( SCH_ITEM* aItem, wxDC* aDC )
|
||||||
|
{
|
||||||
|
wxCHECK_RET( aItem != NULL, wxT( "Cannot move invalid schematic item" ) );
|
||||||
|
|
||||||
|
m_itemToRepeat = NULL;
|
||||||
|
|
||||||
|
if( !aItem->IsNew() )
|
||||||
|
{
|
||||||
|
if( (aItem->Type() == SCH_SHEET_PIN_T) || (aItem->Type() == SCH_FIELD_T) )
|
||||||
|
SetUndoItem( (SCH_ITEM*) aItem->GetParent() );
|
||||||
|
else
|
||||||
|
SetUndoItem( aItem );
|
||||||
|
}
|
||||||
|
|
||||||
|
aItem->SetFlags( IS_MOVED );
|
||||||
|
|
||||||
|
DrawPanel->CrossHairOff( aDC );
|
||||||
|
|
||||||
|
if( aItem->Type() != SCH_SHEET_PIN_T )
|
||||||
|
GetScreen()->SetCrossHairPosition( aItem->GetPosition() );
|
||||||
|
|
||||||
|
DrawPanel->MoveCursorToCrossHair();
|
||||||
|
|
||||||
|
OnModify();
|
||||||
|
DrawPanel->SetMouseCapture( moveItem, abortMoveItem );
|
||||||
|
GetScreen()->SetCurItem( aItem );
|
||||||
|
moveItem( DrawPanel, aDC, wxDefaultPosition, true );
|
||||||
|
DrawPanel->CrossHairOn( aDC );
|
||||||
|
}
|
||||||
|
|
|
@ -836,7 +836,6 @@ private:
|
||||||
void ConvertPart( SCH_COMPONENT* DrawComponent, wxDC* DC );
|
void ConvertPart( SCH_COMPONENT* DrawComponent, wxDC* DC );
|
||||||
void SetInitCmp( SCH_COMPONENT* DrawComponent, wxDC* DC );
|
void SetInitCmp( SCH_COMPONENT* DrawComponent, wxDC* DC );
|
||||||
|
|
||||||
void MoveField( SCH_FIELD* aField, wxDC* aDC );
|
|
||||||
void EditComponentFieldText( SCH_FIELD* aField, wxDC* aDC );
|
void EditComponentFieldText( SCH_FIELD* aField, wxDC* aDC );
|
||||||
void RotateField( SCH_FIELD* aField, wxDC* aDC );
|
void RotateField( SCH_FIELD* aField, wxDC* aDC );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue