Don't assume GetFlags() != 0 means it's being edited.
It could just mean it's selected, highlighted or brightened. Fixes: lp:1794624 * https://bugs.launchpad.net/kicad/+bug/1794624
This commit is contained in:
parent
e3f12ec0d9
commit
f56ea6bf3c
|
@ -194,9 +194,12 @@ void SCH_EDIT_FRAME::EditImage( SCH_BITMAP* aItem )
|
||||||
|
|
||||||
// save old image in undo list if not already in edit
|
// save old image in undo list if not already in edit
|
||||||
// or the image to be edited is part of a block
|
// or the image to be edited is part of a block
|
||||||
if( aItem->GetFlags() == 0 ||
|
int mask = EDA_ITEM_ALL_FLAGS - ( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
||||||
GetScreen()->m_BlockLocate.GetState() != STATE_NO_BLOCK )
|
if( ( aItem->GetFlags() & mask ) == 0
|
||||||
|
|| GetScreen()->m_BlockLocate.GetState() != STATE_NO_BLOCK )
|
||||||
|
{
|
||||||
SaveCopyInUndoList( aItem, UR_CHANGED );
|
SaveCopyInUndoList( aItem, UR_CHANGED );
|
||||||
|
}
|
||||||
|
|
||||||
dlg.TransfertToImage( aItem->GetImage() );
|
dlg.TransfertToImage( aItem->GetImage() );
|
||||||
OnModify();
|
OnModify();
|
||||||
|
|
|
@ -54,7 +54,8 @@ void SCH_EDIT_FRAME::EditComponentFieldText( SCH_FIELD* aField )
|
||||||
wxT( "Invalid schematic field parent item." ) );
|
wxT( "Invalid schematic field parent item." ) );
|
||||||
|
|
||||||
// Save old component in undo list if not already in edit, or moving.
|
// Save old component in undo list if not already in edit, or moving.
|
||||||
if( aField->GetFlags() == 0 )
|
int mask = EDA_ITEM_ALL_FLAGS - ( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
||||||
|
if( ( aField->GetFlags() & mask ) == 0 ) // i.e. not edited, or moved
|
||||||
SaveCopyInUndoList( component, UR_CHANGED );
|
SaveCopyInUndoList( component, UR_CHANGED );
|
||||||
|
|
||||||
// Don't use GetText() here. If the field is the reference designator and it's parent
|
// Don't use GetText() here. If the field is the reference designator and it's parent
|
||||||
|
@ -100,7 +101,8 @@ void SCH_EDIT_FRAME::RotateField( SCH_FIELD* aField )
|
||||||
SCH_COMPONENT* component = (SCH_COMPONENT*) aField->GetParent();
|
SCH_COMPONENT* component = (SCH_COMPONENT*) aField->GetParent();
|
||||||
|
|
||||||
// Save old component in undo list if not already in edit, or moving.
|
// Save old component in undo list if not already in edit, or moving.
|
||||||
if( aField->GetFlags() == 0 )
|
int mask = EDA_ITEM_ALL_FLAGS - ( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
||||||
|
if( ( aField->GetFlags() & mask ) == 0 )
|
||||||
SaveCopyInUndoList( component, UR_CHANGED );
|
SaveCopyInUndoList( component, UR_CHANGED );
|
||||||
|
|
||||||
if( aField->GetTextAngle() == TEXT_ANGLE_HORIZ )
|
if( aField->GetTextAngle() == TEXT_ANGLE_HORIZ )
|
||||||
|
|
|
@ -772,8 +772,9 @@ bool DIALOG_FOOTPRINT_BOARD_EDITOR::TransferDataFromWindow()
|
||||||
|
|
||||||
m_CurrentModule->CalculateBoundingBox();
|
m_CurrentModule->CalculateBoundingBox();
|
||||||
|
|
||||||
// This is a simple edition, we must create an undo entry
|
// This is a simple edit, we must create an undo entry
|
||||||
if( m_CurrentModule->GetFlags() == 0 )
|
int mask = EDA_ITEM_ALL_FLAGS - ( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
||||||
|
if( ( m_CurrentModule->GetFlags() & mask ) == 0 ) // i.e. not edited, or moved
|
||||||
commit.Push( _( "Modify module properties" ) );
|
commit.Push( _( "Modify module properties" ) );
|
||||||
|
|
||||||
SetReturnCode( PRM_EDITOR_EDIT_OK );
|
SetReturnCode( PRM_EDITOR_EDIT_OK );
|
||||||
|
|
|
@ -249,7 +249,8 @@ void PCB_EDIT_FRAME::Rotate_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC )
|
||||||
TextePcb->Draw( m_canvas, DC, GR_XOR );
|
TextePcb->Draw( m_canvas, DC, GR_XOR );
|
||||||
SetMsgPanel( TextePcb );
|
SetMsgPanel( TextePcb );
|
||||||
|
|
||||||
if( TextePcb->GetFlags() == 0 ) // i.e. not edited, or moved
|
int mask = EDA_ITEM_ALL_FLAGS - ( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
||||||
|
if( ( TextePcb->GetFlags() & mask ) == 0 ) // i.e. not edited, or moved
|
||||||
SaveCopyInUndoList( TextePcb, UR_ROTATED, TextePcb->GetTextPos() );
|
SaveCopyInUndoList( TextePcb, UR_ROTATED, TextePcb->GetTextPos() );
|
||||||
else // set flag edit, to show it was a complex command
|
else // set flag edit, to show it was a complex command
|
||||||
TextePcb->SetFlags( IN_EDIT );
|
TextePcb->SetFlags( IN_EDIT );
|
||||||
|
@ -273,7 +274,8 @@ void PCB_EDIT_FRAME::FlipTextePcb( TEXTE_PCB* aTextePcb, wxDC* aDC )
|
||||||
aTextePcb->Draw( m_canvas, aDC, GR_XOR );
|
aTextePcb->Draw( m_canvas, aDC, GR_XOR );
|
||||||
SetMsgPanel( aTextePcb );
|
SetMsgPanel( aTextePcb );
|
||||||
|
|
||||||
if( aTextePcb->GetFlags() == 0 ) // i.e. not edited, or moved
|
int mask = EDA_ITEM_ALL_FLAGS - ( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
||||||
|
if( ( aTextePcb->GetFlags() & mask ) == 0 ) // i.e. not edited, or moved
|
||||||
SaveCopyInUndoList( aTextePcb, UR_FLIPPED, aTextePcb->GetTextPos() );
|
SaveCopyInUndoList( aTextePcb, UR_FLIPPED, aTextePcb->GetTextPos() );
|
||||||
else // set edit flag, for the current command
|
else // set edit flag, for the current command
|
||||||
aTextePcb->SetFlags( IN_EDIT );
|
aTextePcb->SetFlags( IN_EDIT );
|
||||||
|
|
|
@ -112,28 +112,23 @@ static void Move_Segment( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPos
|
||||||
|
|
||||||
void PCB_EDIT_FRAME::Delete_Segment_Edge( DRAWSEGMENT* Segment, wxDC* DC )
|
void PCB_EDIT_FRAME::Delete_Segment_Edge( DRAWSEGMENT* Segment, wxDC* DC )
|
||||||
{
|
{
|
||||||
EDA_ITEM* PtStruct;
|
|
||||||
auto displ_opts = (PCB_DISPLAY_OPTIONS*)GetDisplayOptions();
|
auto displ_opts = (PCB_DISPLAY_OPTIONS*)GetDisplayOptions();
|
||||||
bool tmp = displ_opts->m_DisplayDrawItemsFill;
|
bool tmp = displ_opts->m_DisplayDrawItemsFill;
|
||||||
|
|
||||||
if( Segment == NULL )
|
if( Segment == NULL )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
int mask = EDA_ITEM_ALL_FLAGS - ( SELECTED | HIGHLIGHTED | BRIGHTENED );
|
||||||
if( Segment->IsNew() ) // Trace in progress.
|
if( Segment->IsNew() ) // Trace in progress.
|
||||||
{
|
{
|
||||||
// Delete current segment.
|
// Delete current segment.
|
||||||
displ_opts->m_DisplayDrawItemsFill = SKETCH;
|
displ_opts->m_DisplayDrawItemsFill = SKETCH;
|
||||||
Segment->Draw( m_canvas, DC, GR_XOR );
|
Segment->Draw( m_canvas, DC, GR_XOR );
|
||||||
PtStruct = Segment->Back();
|
Segment->DeleteStructure();
|
||||||
Segment ->DeleteStructure();
|
|
||||||
|
|
||||||
if( PtStruct && (PtStruct->Type() == PCB_LINE_T ) )
|
|
||||||
Segment = (DRAWSEGMENT*) PtStruct;
|
|
||||||
|
|
||||||
displ_opts->m_DisplayDrawItemsFill = tmp;
|
displ_opts->m_DisplayDrawItemsFill = tmp;
|
||||||
SetCurItem( NULL );
|
SetCurItem( NULL );
|
||||||
}
|
}
|
||||||
else if( Segment->GetFlags() == 0 )
|
else if( ( Segment->GetFlags() & mask ) == 0 ) // i.e. not edited, or moved
|
||||||
{
|
{
|
||||||
Segment->Draw( m_canvas, DC, GR_XOR );
|
Segment->Draw( m_canvas, DC, GR_XOR );
|
||||||
Segment->ClearFlags();
|
Segment->ClearFlags();
|
||||||
|
|
Loading…
Reference in New Issue