@ -400,6 +400,11 @@ void CopyMarkedItems( MODULE* module, wxPoint offset )
if ( module = = NULL )
return ;
// Reference and value cannot be copied, they are unique.
// Ensure they are not selected
module - > Reference ( ) . ClearFlags ( ) ;
module - > Value ( ) . ClearFlags ( ) ;
for ( D_PAD * pad = module - > Pads ( ) ; pad ; pad = pad - > Next ( ) )
{
if ( ! pad - > IsSelected ( ) )
@ -440,6 +445,12 @@ void MoveMarkedItems( MODULE* module, wxPoint offset )
if ( module = = NULL )
return ;
if ( module - > Reference ( ) . IsSelected ( ) )
module - > Reference ( ) . MoveTransformWithModule ( offset ) ;
if ( module - > Value ( ) . IsSelected ( ) )
module - > Value ( ) . MoveTransformWithModule ( offset ) ;
D_PAD * pad = module - > Pads ( ) ;
for ( ; pad ! = NULL ; pad = pad - > Next ( ) )
@ -461,7 +472,7 @@ void MoveMarkedItems( MODULE* module, wxPoint offset )
switch ( item - > Type ( ) )
{
case PCB_MODULE_TEXT_T :
static_cast < TEXTE_MODULE * > ( item ) - > Move ( offset ) ;
static_cast < TEXTE_MODULE * > ( item ) - > MoveTransformWithModule ( offset ) ;
break ;
case PCB_MODULE_EDGE_T :
@ -477,9 +488,9 @@ void MoveMarkedItems( MODULE* module, wxPoint offset )
default :
;
}
item - > ClearFlags ( ) ;
}
ClearMarkItems ( module ) ;
}
@ -518,6 +529,9 @@ void DeleteMarkedItems( MODULE* module )
item - > DeleteStructure ( ) ;
}
// Ref and value can be flagged, but cannot be deleted
ClearMarkItems ( module ) ;
}
@ -534,6 +548,12 @@ void MirrorMarkedItems( MODULE* module, wxPoint offset, bool force_all )
if ( module = = NULL )
return ;
if ( module - > Reference ( ) . IsSelected ( ) | | force_all )
module - > Reference ( ) . MirrorTransformWithModule ( offset . x ) ;
if ( module - > Value ( ) . IsSelected ( ) | | force_all )
module - > Value ( ) . MirrorTransformWithModule ( offset . x ) ;
for ( D_PAD * pad = module - > Pads ( ) ; pad ; pad = pad - > Next ( ) )
{
// Skip pads not selected, i.e. not inside the block to mirror:
@ -584,15 +604,15 @@ void MirrorMarkedItems( MODULE* module, wxPoint offset, bool force_all )
break ;
case PCB_MODULE_TEXT_T :
static_cast < TEXTE_MODULE * > ( item ) - > MirrorWithModule ( offset . x ) ;
static_cast < TEXTE_MODULE * > ( item ) - > MirrorTransform WithModule ( offset . x ) ;
break ;
default :
break ;
}
item - > ClearFlags ( ) ;
}
ClearMarkItems ( module ) ;
}
@ -607,6 +627,12 @@ void RotateMarkedItems( MODULE* module, wxPoint offset, bool force_all )
if ( module = = NULL )
return ;
if ( module - > Reference ( ) . IsSelected ( ) | | force_all )
module - > Reference ( ) . RotateTransformWithModule ( offset , 900 ) ;
if ( module - > Value ( ) . IsSelected ( ) | | force_all )
module - > Value ( ) . RotateTransformWithModule ( offset , 900 ) ;
for ( D_PAD * pad = module - > Pads ( ) ; pad ; pad = pad - > Next ( ) )
{
if ( ! pad - > IsSelected ( ) & & ! force_all )
@ -622,7 +648,7 @@ void RotateMarkedItems( MODULE* module, wxPoint offset, bool force_all )
for ( EDA_ITEM * item = module - > GraphicalItems ( ) ; item ; item = item - > Next ( ) )
{
if ( ! item - > IsSelected ( ) & & ! force_all )
if ( ! item - > IsSelected ( ) & & ! force_all )
continue ;
switch ( item - > Type ( ) )
@ -644,26 +670,27 @@ void RotateMarkedItems( MODULE* module, wxPoint offset, bool force_all )
break ;
case PCB_MODULE_TEXT_T :
static_cast < TEXTE_MODULE * > ( item ) - > RotateWithModule ( wxPoint ( 0 , 0 ) , 900 ) ;
static_cast < TEXTE_MODULE * > ( item ) - > RotateTransform WithModule ( offset , 900 ) ;
break ;
default :
break ;
}
item - > ClearFlags ( ) ;
}
ClearMarkItems ( module ) ;
}
void ClearMarkItems ( MODULE * module )
{
EDA_ITEM * item ;
if ( module = = NULL )
return ;
item = module - > GraphicalItems ( ) ;
module - > Reference ( ) . ClearFlags ( ) ;
module - > Value ( ) . ClearFlags ( ) ;
EDA_ITEM * item = module - > GraphicalItems ( ) ;
for ( ; item ! = NULL ; item = item - > Next ( ) )
{
@ -692,6 +719,24 @@ int MarkItemsInBloc( MODULE* module, EDA_RECT& Rect )
if ( module = = NULL )
return 0 ;
ClearMarkItems ( module ) ; // Just in case ...
pos = module - > Reference ( ) . GetTextPosition ( ) ;
if ( Rect . Contains ( pos ) )
{
module - > Reference ( ) . SetFlags ( SELECTED ) ;
ItemsCount + + ;
}
pos = module - > Value ( ) . GetTextPosition ( ) ;
if ( Rect . Contains ( pos ) )
{
module - > Value ( ) . SetFlags ( SELECTED ) ;
ItemsCount + + ;
}
pad = module - > Pads ( ) ;
for ( ; pad ! = NULL ; pad = pad - > Next ( ) )