Less nagging. (If we need a field name, then create one.)
Also cleans up empty fields when exiting the dialog.
This commit is contained in:
parent
befd836ab4
commit
9d457dc0ab
|
@ -502,6 +502,20 @@ bool DIALOG_LABEL_PROPERTIES::TransferDataFromWindow()
|
||||||
else
|
else
|
||||||
doAutoplace = true;
|
doAutoplace = true;
|
||||||
|
|
||||||
|
for( int ii = m_fields->GetNumberRows() - 1; ii >= 0; ii-- )
|
||||||
|
{
|
||||||
|
SCH_FIELD& field = m_fields->at( ii );
|
||||||
|
const wxString& fieldName = field.GetCanonicalName();
|
||||||
|
const wxString& fieldText = field.GetText();
|
||||||
|
|
||||||
|
if( fieldName.IsEmpty() && fieldText.IsEmpty() )
|
||||||
|
m_fields->erase( m_fields->begin() + ii );
|
||||||
|
else if( fieldName == wxT( "Netclass" ) && fieldText.IsEmpty() )
|
||||||
|
m_fields->erase( m_fields->begin() + ii );
|
||||||
|
else if( fieldName.IsEmpty() )
|
||||||
|
field.SetName( _( "untitled" ) );
|
||||||
|
}
|
||||||
|
|
||||||
m_currentLabel->SetFields( *m_fields );
|
m_currentLabel->SetFields( *m_fields );
|
||||||
|
|
||||||
if( m_shapeSizer->AreAnyItemsShown() )
|
if( m_shapeSizer->AreAnyItemsShown() )
|
||||||
|
|
|
@ -302,7 +302,7 @@ bool DIALOG_LIB_SYMBOL_PROPERTIES::Validate()
|
||||||
LIB_FIELD& field = m_fields->at( ii );
|
LIB_FIELD& field = m_fields->at( ii );
|
||||||
wxString fieldName = field.GetName( false );
|
wxString fieldName = field.GetName( false );
|
||||||
|
|
||||||
if( fieldName.IsEmpty() )
|
if( fieldName.IsEmpty() && !field.GetText().IsEmpty() )
|
||||||
{
|
{
|
||||||
if( m_NoteBook->GetSelection() != 0 )
|
if( m_NoteBook->GetSelection() != 0 )
|
||||||
m_NoteBook->SetSelection( 0 );
|
m_NoteBook->SetSelection( 0 );
|
||||||
|
@ -393,6 +393,17 @@ bool DIALOG_LIB_SYMBOL_PROPERTIES::TransferDataFromWindow()
|
||||||
m_fields->at( ii ).SetId( ii );
|
m_fields->at( ii ).SetId( ii );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for( int ii = m_fields->GetNumberRows() - 1; ii >= MANDATORY_FIELDS; ii-- )
|
||||||
|
{
|
||||||
|
LIB_FIELD& field = m_fields->at( ii );
|
||||||
|
const wxString& fieldName = field.GetCanonicalName();
|
||||||
|
|
||||||
|
if( fieldName.IsEmpty() && field.GetText().IsEmpty() )
|
||||||
|
m_fields->erase( m_fields->begin() + ii );
|
||||||
|
else if( fieldName.IsEmpty() )
|
||||||
|
field.SetName( _( "untitled" ) );
|
||||||
|
}
|
||||||
|
|
||||||
m_libEntry->SetFields( *m_fields );
|
m_libEntry->SetFields( *m_fields );
|
||||||
|
|
||||||
// Update the parent for inherited symbols
|
// Update the parent for inherited symbols
|
||||||
|
|
|
@ -368,6 +368,17 @@ bool DIALOG_SHEET_PROPERTIES::TransferDataFromWindow()
|
||||||
if( positioningChanged( m_fields, m_sheet->GetFields() ) )
|
if( positioningChanged( m_fields, m_sheet->GetFields() ) )
|
||||||
m_sheet->ClearFieldsAutoplaced();
|
m_sheet->ClearFieldsAutoplaced();
|
||||||
|
|
||||||
|
for( int ii = m_fields->GetNumberRows() - 1; ii >= SHEET_MANDATORY_FIELDS; ii-- )
|
||||||
|
{
|
||||||
|
SCH_FIELD& field = m_fields->at( ii );
|
||||||
|
const wxString& fieldName = field.GetCanonicalName();
|
||||||
|
|
||||||
|
if( fieldName.IsEmpty() && field.GetText().IsEmpty() )
|
||||||
|
m_fields->erase( m_fields->begin() + ii );
|
||||||
|
else if( fieldName.IsEmpty() )
|
||||||
|
field.SetName( _( "untitled" ) );
|
||||||
|
}
|
||||||
|
|
||||||
m_sheet->SetFields( *m_fields );
|
m_sheet->SetFields( *m_fields );
|
||||||
|
|
||||||
m_sheet->SetBorderWidth( m_borderWidth.GetValue() );
|
m_sheet->SetBorderWidth( m_borderWidth.GetValue() );
|
||||||
|
|
|
@ -769,8 +769,18 @@ bool DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow()
|
||||||
|
|
||||||
fields.clear();
|
fields.clear();
|
||||||
|
|
||||||
for( size_t i = 0; i < m_fields->size(); ++i )
|
for( size_t ii = 0; ii < m_fields->size(); ++ii )
|
||||||
fields.push_back( m_fields->at( i ) );
|
{
|
||||||
|
SCH_FIELD& field = m_fields->at( ii );
|
||||||
|
const wxString& fieldName = field.GetCanonicalName();
|
||||||
|
|
||||||
|
if( fieldName.IsEmpty() && field.GetText().IsEmpty() )
|
||||||
|
continue;
|
||||||
|
else if( fieldName.IsEmpty() )
|
||||||
|
field.SetName( _( "untitled" ) );
|
||||||
|
|
||||||
|
fields.push_back( field );
|
||||||
|
}
|
||||||
|
|
||||||
// Reference has a specific initialization, depending on the current active sheet
|
// Reference has a specific initialization, depending on the current active sheet
|
||||||
// because for a given symbol, in a complex hierarchy, there are more than one
|
// because for a given symbol, in a complex hierarchy, there are more than one
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2016 Wayne Stambaugh, stambaughw@gmail.com
|
* Copyright (C) 2016 Wayne Stambaugh, stambaughw@gmail.com
|
||||||
* Copyright (C) 2016-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2016-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -60,8 +60,7 @@ SCH_FIELD_VALIDATOR::SCH_FIELD_VALIDATOR( bool aIsLibEditor, int aFieldId, wxSt
|
||||||
// The reference, sheetname and sheetfilename fields cannot be empty.
|
// The reference, sheetname and sheetfilename fields cannot be empty.
|
||||||
if( aFieldId == REFERENCE_FIELD
|
if( aFieldId == REFERENCE_FIELD
|
||||||
|| aFieldId == SHEETNAME_V
|
|| aFieldId == SHEETNAME_V
|
||||||
|| aFieldId == SHEETFILENAME_V
|
|| aFieldId == SHEETFILENAME_V )
|
||||||
|| aFieldId == FIELD_NAME )
|
|
||||||
{
|
{
|
||||||
style |= wxFILTER_EMPTY;
|
style |= wxFILTER_EMPTY;
|
||||||
}
|
}
|
||||||
|
@ -91,54 +90,12 @@ bool SCH_FIELD_VALIDATOR::Validate( wxWindow* aParent )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
wxString val( text->GetValue() );
|
wxString val( text->GetValue() );
|
||||||
|
|
||||||
// The format of the error message for not allowed chars
|
|
||||||
wxString fieldCharError;
|
|
||||||
|
|
||||||
switch( m_fieldId )
|
|
||||||
{
|
|
||||||
case REFERENCE_FIELD:
|
|
||||||
fieldCharError = _( "The reference designator cannot contain %s character(s)." );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case VALUE_FIELD:
|
|
||||||
fieldCharError = _( "The value field cannot contain %s character(s)." );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FOOTPRINT_FIELD:
|
|
||||||
fieldCharError = _( "The footprint field cannot contain %s character(s)." );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATASHEET_FIELD:
|
|
||||||
fieldCharError = _( "The datasheet field cannot contain %s character(s)." );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SHEETNAME_V:
|
|
||||||
fieldCharError = _( "The sheet name cannot contain %s character(s)." );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SHEETFILENAME_V:
|
|
||||||
fieldCharError = _( "The sheet filename cannot contain %s character(s)." );
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
fieldCharError = _( "The field cannot contain %s character(s)." );
|
|
||||||
break;
|
|
||||||
};
|
|
||||||
|
|
||||||
wxString msg;
|
wxString msg;
|
||||||
|
|
||||||
// We can only do some kinds of validation once the input is complete, so
|
|
||||||
// check for them here:
|
|
||||||
if( HasFlag( wxFILTER_EMPTY ) && val.empty() )
|
if( HasFlag( wxFILTER_EMPTY ) && val.empty() )
|
||||||
{
|
|
||||||
// Some fields cannot have an empty value, and user fields require a name:
|
|
||||||
if( m_fieldId == FIELD_NAME )
|
|
||||||
msg.Printf( _( "The name of the field cannot be empty." ) );
|
|
||||||
else // the FIELD_VALUE id or REFERENCE_FIELD or VALUE_FIELD
|
|
||||||
msg.Printf( _( "The value of the field cannot be empty." ) );
|
msg.Printf( _( "The value of the field cannot be empty." ) );
|
||||||
}
|
|
||||||
else if( HasFlag( wxFILTER_EXCLUDE_CHAR_LIST ) && ContainsExcludedCharacters( val ) )
|
if( HasFlag( wxFILTER_EXCLUDE_CHAR_LIST ) && ContainsExcludedCharacters( val ) )
|
||||||
{
|
{
|
||||||
wxArrayString badCharsFound;
|
wxArrayString badCharsFound;
|
||||||
|
|
||||||
|
@ -200,7 +157,36 @@ bool SCH_FIELD_VALIDATOR::Validate( wxWindow* aParent )
|
||||||
badChars += badCharsFound.Item( i );
|
badChars += badCharsFound.Item( i );
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.Printf( fieldCharError, badChars );
|
switch( m_fieldId )
|
||||||
|
{
|
||||||
|
case REFERENCE_FIELD:
|
||||||
|
msg.Printf( _( "The reference designator cannot contain %s character(s)." ), badChars );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VALUE_FIELD:
|
||||||
|
msg.Printf( _( "The value field cannot contain %s character(s)." ), badChars );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FOOTPRINT_FIELD:
|
||||||
|
msg.Printf( _( "The footprint field cannot contain %s character(s)." ), badChars );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATASHEET_FIELD:
|
||||||
|
msg.Printf( _( "The datasheet field cannot contain %s character(s)." ), badChars );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHEETNAME_V:
|
||||||
|
msg.Printf( _( "The sheet name cannot contain %s character(s)." ), badChars );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHEETFILENAME_V:
|
||||||
|
msg.Printf( _( "The sheet filename cannot contain %s character(s)." ), badChars );
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
msg.Printf( _( "The field cannot contain %s character(s)." ), badChars );
|
||||||
|
break;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
else if( m_fieldId == REFERENCE_FIELD && val.Contains( wxT( "${" ) ) )
|
else if( m_fieldId == REFERENCE_FIELD && val.Contains( wxT( "${" ) ) )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue