Eeschema: Make auto-decrementing net labels stop at zero
CHANGED: If you set the auto-increment value to a negative number, created a net label and hit the insert key, when the name got below zero, the net labels tried to go negative but created bad labels instead. Now the code caps decrementing at zero, warns users when it has happened, and explains why. Fixes https://gitlab.com/kicad/code/kicad/issues/6537
This commit is contained in:
parent
2f3ca60c5e
commit
821128cb8e
|
@ -51,15 +51,18 @@
|
||||||
using KIGFX::SCH_RENDER_SETTINGS;
|
using KIGFX::SCH_RENDER_SETTINGS;
|
||||||
|
|
||||||
|
|
||||||
void IncrementLabelMember( wxString& name, int aIncrement )
|
bool IncrementLabelMember( wxString& name, int aIncrement )
|
||||||
{
|
{
|
||||||
int ii, nn;
|
int ii, nn;
|
||||||
long number = 0;
|
long number = 0;
|
||||||
|
|
||||||
ii = name.Len() - 1; nn = 0;
|
ii = name.Len() - 1;
|
||||||
|
nn = 0;
|
||||||
|
|
||||||
|
// No number found, but simply repeating the same label is valid
|
||||||
|
|
||||||
if( !wxIsdigit( name.GetChar( ii ) ) )
|
if( !wxIsdigit( name.GetChar( ii ) ) )
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
while( ii >= 0 && wxIsdigit( name.GetChar( ii ) ) )
|
while( ii >= 0 && wxIsdigit( name.GetChar( ii ) ) )
|
||||||
{
|
{
|
||||||
|
@ -67,14 +70,23 @@ void IncrementLabelMember( wxString& name, int aIncrement )
|
||||||
nn++;
|
nn++;
|
||||||
}
|
}
|
||||||
|
|
||||||
ii++; /* digits are starting at ii position */
|
ii++; /* digits are starting at ii position */
|
||||||
wxString litt_number = name.Right( nn );
|
wxString litt_number = name.Right( nn );
|
||||||
|
|
||||||
if( litt_number.ToLong( &number ) )
|
if( litt_number.ToLong( &number ) )
|
||||||
{
|
{
|
||||||
number += aIncrement;
|
number += aIncrement;
|
||||||
name.Remove( ii ); name << number;
|
|
||||||
|
// Don't let result go below zero
|
||||||
|
|
||||||
|
if( number > -1 )
|
||||||
|
{
|
||||||
|
name.Remove( ii );
|
||||||
|
name << number;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -149,11 +161,15 @@ EDA_ITEM* SCH_TEXT::Clone() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_TEXT::IncrementLabel( int aIncrement )
|
bool SCH_TEXT::IncrementLabel( int aIncrement )
|
||||||
{
|
{
|
||||||
wxString text = GetText();
|
wxString text = GetText();
|
||||||
IncrementLabelMember( text, aIncrement );
|
bool ReturnVal = IncrementLabelMember( text, aIncrement );
|
||||||
SetText(text );
|
|
||||||
|
if( ReturnVal )
|
||||||
|
SetText( text );
|
||||||
|
|
||||||
|
return ReturnVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -221,7 +221,7 @@ public:
|
||||||
*
|
*
|
||||||
* @param aIncrement = the increment value to add to the number ending the text.
|
* @param aIncrement = the increment value to add to the number ending the text.
|
||||||
*/
|
*/
|
||||||
void IncrementLabel( int aIncrement );
|
bool IncrementLabel( int aIncrement );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a spin or rotation angle, along with specific horizontal and vertical justification
|
* Set a spin or rotation angle, along with specific horizontal and vertical justification
|
||||||
|
|
|
@ -80,7 +80,7 @@ static int GetLastPinNumSize()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extern void IncrementLabelMember( wxString& name, int aIncrement );
|
extern bool IncrementLabelMember( wxString& name, int aIncrement );
|
||||||
|
|
||||||
|
|
||||||
LIB_PIN_TOOL::LIB_PIN_TOOL() :
|
LIB_PIN_TOOL::LIB_PIN_TOOL() :
|
||||||
|
|
|
@ -904,7 +904,11 @@ int SCH_EDIT_TOOL::RepeatDrawItem( const TOOL_EVENT& aEvent )
|
||||||
if( dynamic_cast<SCH_TEXT*>( newItem ) )
|
if( dynamic_cast<SCH_TEXT*>( newItem ) )
|
||||||
{
|
{
|
||||||
SCH_TEXT* text = static_cast<SCH_TEXT*>( newItem );
|
SCH_TEXT* text = static_cast<SCH_TEXT*>( newItem );
|
||||||
text->IncrementLabel( cfg->m_Drawing.repeat_label_increment );
|
|
||||||
|
// If incrementing tries to go below zero, tell user why the value is repeated
|
||||||
|
|
||||||
|
if( !text->IncrementLabel( cfg->m_Drawing.repeat_label_increment ) )
|
||||||
|
m_frame->ShowInfoBarMsg( _( "Label value cannot go below zero" ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
newItem->Move( wxPoint( Mils2iu( cfg->m_Drawing.default_repeat_offset_x ),
|
newItem->Move( wxPoint( Mils2iu( cfg->m_Drawing.default_repeat_offset_x ),
|
||||||
|
|
Loading…
Reference in New Issue