Improve symbol library messages.
Includes both error messages and ERC messages. Fixes https://gitlab.com/kicad/code/kicad/issues/6302
This commit is contained in:
parent
01f6c90fac
commit
5d400a9e11
|
@ -57,11 +57,10 @@ bool DIALOG_GLOBAL_SYM_LIB_TABLE_CONFIG::TransferDataFromWindow()
|
||||||
}
|
}
|
||||||
catch( const IO_ERROR& ioe )
|
catch( const IO_ERROR& ioe )
|
||||||
{
|
{
|
||||||
DisplayError( this,
|
DisplayError( this, wxString::Format( _( "Error occurred writing empty symbol library "
|
||||||
wxString::Format( _( "Error occurred writing empty symbol library table "
|
"table.\n\n%s" ),
|
||||||
"file.\n\n%s" ),
|
SYMBOL_LIB_TABLE::GetGlobalTableFileName(),
|
||||||
SYMBOL_LIB_TABLE::GetGlobalTableFileName(),
|
ioe.What() ) );
|
||||||
ioe.What() ) );
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,8 +80,7 @@ bool DIALOG_GLOBAL_SYM_LIB_TABLE_CONFIG::TransferDataFromWindow()
|
||||||
// Make sure the symbol library table to copy actually exists.
|
// Make sure the symbol library table to copy actually exists.
|
||||||
if( !fn.FileExists() )
|
if( !fn.FileExists() )
|
||||||
{
|
{
|
||||||
DisplayError( this,
|
DisplayError( this, wxString::Format( _( "File '%s' not found." ), fn.GetFullPath() ) );
|
||||||
wxString::Format( _( "File \"%s\" not found." ), fn.GetFullPath() ) );
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,9 +93,9 @@ bool DIALOG_GLOBAL_SYM_LIB_TABLE_CONFIG::TransferDataFromWindow()
|
||||||
}
|
}
|
||||||
catch( const IO_ERROR& ioe )
|
catch( const IO_ERROR& ioe )
|
||||||
{
|
{
|
||||||
DisplayError( this,
|
DisplayError( this, wxString::Format( _( "'%s' is not a valid symbol library table.\n\n%s" ),
|
||||||
wxString::Format( _( "File \"%s\" is not a valid symbol library table "
|
fn.GetFullPath(),
|
||||||
"file.\n\n%s" ), fn.GetFullPath(), ioe.What() ) );
|
ioe.What() ) );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,19 +104,18 @@ bool DIALOG_GLOBAL_SYM_LIB_TABLE_CONFIG::TransferDataFromWindow()
|
||||||
|
|
||||||
if( !symTableFileName.DirExists() && !symTableFileName.Mkdir( 0x777, wxPATH_MKDIR_FULL ) )
|
if( !symTableFileName.DirExists() && !symTableFileName.Mkdir( 0x777, wxPATH_MKDIR_FULL ) )
|
||||||
{
|
{
|
||||||
DisplayError( this,
|
DisplayError( this, wxString::Format( _( "Cannot create global library table path '%s'." ),
|
||||||
wxString::Format( _( "Cannot create global library table path \"%s\"." ),
|
symTableFileName.GetPath() ) );
|
||||||
symTableFileName.GetPath() ) );
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy the global symbol library table file to the user config.
|
// Copy the global symbol library table file to the user config.
|
||||||
if( !::wxCopyFile( fn.GetFullPath(), symTableFileName.GetFullPath() ) )
|
if( !::wxCopyFile( fn.GetFullPath(), symTableFileName.GetFullPath() ) )
|
||||||
{
|
{
|
||||||
DisplayError( this,
|
DisplayError( this, wxString::Format( _( "Cannot copy global symbol library table file "
|
||||||
wxString::Format( _( "Cannot copy global symbol library table "
|
"'%s' to '%s'." ),
|
||||||
"file:\n\n \"%s\"\n\n:to:\n\n\"%s\"." ),
|
fn.GetFullPath(),
|
||||||
fn.GetFullPath(), symTableFileName.GetFullPath() ) );
|
symTableFileName.GetFullPath() ) );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,9 +129,9 @@ bool DIALOG_GLOBAL_SYM_LIB_TABLE_CONFIG::TransferDataFromWindow()
|
||||||
}
|
}
|
||||||
catch( const IO_ERROR& ioe )
|
catch( const IO_ERROR& ioe )
|
||||||
{
|
{
|
||||||
DisplayError( this,
|
DisplayError( this, wxString::Format( _( "Error occurred loading global symbol library "
|
||||||
wxString::Format( _( "Error occurred loading global symbol library table:"
|
"table.\n\n%s" ),
|
||||||
"\n\n%s" ), ioe.What() ) );
|
ioe.What() ) );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -675,8 +675,9 @@ int ERC_TESTER::TestLibSymbolIssues()
|
||||||
{
|
{
|
||||||
wxCHECK( m_schematic, 0 );
|
wxCHECK( m_schematic, 0 );
|
||||||
|
|
||||||
wxString msg;
|
SYMBOL_LIB_TABLE* libTable = m_schematic->Prj().SchSymbolLibTable();
|
||||||
int err_count = 0;
|
wxString msg;
|
||||||
|
int err_count = 0;
|
||||||
|
|
||||||
SCH_SCREENS screens( m_schematic->Root() );
|
SCH_SCREENS screens( m_schematic->Root() );
|
||||||
|
|
||||||
|
@ -690,38 +691,65 @@ int ERC_TESTER::TestLibSymbolIssues()
|
||||||
|
|
||||||
wxCHECK2( symbol, continue );
|
wxCHECK2( symbol, continue );
|
||||||
|
|
||||||
LIB_PART* libSymbolInSchematic = screen->GetLibSymbols()[
|
wxString libIdStr = symbol->GetLibId().GetUniStringLibId();
|
||||||
symbol->GetLibId().GetUniStringLibId() ];
|
LIB_PART* libSymbolInSchematic = screen->GetLibSymbols()[ libIdStr ];
|
||||||
|
|
||||||
wxCHECK2( libSymbolInSchematic, continue );
|
wxCHECK2( libSymbolInSchematic, continue );
|
||||||
|
|
||||||
LIB_PART* libSymbol = SchGetLibPart( symbol->GetLibId(),
|
wxString libName = symbol->GetLibId().GetLibNickname();
|
||||||
m_schematic->Prj().SchSymbolLibTable() );
|
LIB_TABLE_ROW* libTableRow = libTable->FindRow( libName );
|
||||||
|
|
||||||
|
if( !libTableRow )
|
||||||
|
{
|
||||||
|
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_LIB_SYMBOL_ISSUES );
|
||||||
|
ercItem->SetItems( symbol );
|
||||||
|
msg.Printf( _( "The current configuration does not include the library '%s'." ),
|
||||||
|
libName );
|
||||||
|
ercItem->SetErrorMessage( msg );
|
||||||
|
|
||||||
|
markers.emplace_back( new SCH_MARKER( ercItem, symbol->GetPosition() ) );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if( !libTable->HasLibrary( libName, true ) )
|
||||||
|
{
|
||||||
|
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_LIB_SYMBOL_ISSUES );
|
||||||
|
ercItem->SetItems( symbol );
|
||||||
|
msg.Printf( _( "The library '%s' is not enabled in the current configuration." ),
|
||||||
|
libName );
|
||||||
|
ercItem->SetErrorMessage( msg );
|
||||||
|
|
||||||
|
markers.emplace_back( new SCH_MARKER( ercItem, symbol->GetPosition() ) );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString symbolName = symbol->GetLibId().GetLibItemName();
|
||||||
|
LIB_PART* libSymbol = SchGetLibPart( symbol->GetLibId(), libTable );
|
||||||
|
|
||||||
if( libSymbol == nullptr )
|
if( libSymbol == nullptr )
|
||||||
{
|
{
|
||||||
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_LIB_SYMBOL_ISSUES );
|
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_LIB_SYMBOL_ISSUES );
|
||||||
ercItem->SetItems( symbol );
|
ercItem->SetItems( symbol );
|
||||||
msg.Printf( "Library symbol link \"%s\" cannot be found in symbol library table",
|
msg.Printf( "Symbol '%s' not found in symbol library '%s'",
|
||||||
symbol->GetLibId().GetUniStringLibId() );
|
symbolName,
|
||||||
|
libName );
|
||||||
ercItem->SetErrorMessage( msg );
|
ercItem->SetErrorMessage( msg );
|
||||||
|
|
||||||
markers.emplace_back( new SCH_MARKER( ercItem, symbol->GetPosition() ) );
|
markers.emplace_back( new SCH_MARKER( ercItem, symbol->GetPosition() ) );
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
std::unique_ptr<LIB_PART> flattenedSymbol = libSymbol->Flatten();
|
||||||
|
|
||||||
|
if( *flattenedSymbol != *libSymbolInSchematic )
|
||||||
{
|
{
|
||||||
std::unique_ptr<LIB_PART> flattenedSymbol = libSymbol->Flatten();
|
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_LIB_SYMBOL_ISSUES );
|
||||||
|
ercItem->SetItems( symbol );
|
||||||
|
msg.Printf( "Symbol '%s' has been modified in library '%s'.",
|
||||||
|
symbolName,
|
||||||
|
libName );
|
||||||
|
ercItem->SetErrorMessage( msg );
|
||||||
|
|
||||||
if( *flattenedSymbol != *libSymbolInSchematic )
|
markers.emplace_back( new SCH_MARKER( ercItem, symbol->GetPosition() ) );
|
||||||
{
|
|
||||||
std::shared_ptr<ERC_ITEM> ercItem = ERC_ITEM::Create( ERCE_LIB_SYMBOL_ISSUES );
|
|
||||||
ercItem->SetItems( symbol );
|
|
||||||
msg.Printf( "Library symbol \"%s\" has been modified",
|
|
||||||
symbol->GetLibId().GetUniStringLibId() );
|
|
||||||
ercItem->SetErrorMessage( msg );
|
|
||||||
|
|
||||||
markers.emplace_back( new SCH_MARKER( ercItem, symbol->GetPosition() ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
#include <sch_view.h>
|
#include <sch_view.h>
|
||||||
#include <sch_painter.h>
|
#include <sch_painter.h>
|
||||||
#include <settings/settings_manager.h>
|
#include <settings/settings_manager.h>
|
||||||
#include <gal/graphics_abstraction_layer.h>
|
|
||||||
#include <confirm.h>
|
#include <confirm.h>
|
||||||
#include <preview_items/selection_area.h>
|
#include <preview_items/selection_area.h>
|
||||||
#include <class_library.h>
|
#include <class_library.h>
|
||||||
|
@ -42,7 +41,6 @@
|
||||||
#include <tool/tool_dispatcher.h>
|
#include <tool/tool_dispatcher.h>
|
||||||
#include <tools/ee_actions.h>
|
#include <tools/ee_actions.h>
|
||||||
#include <tools/ee_selection_tool.h>
|
#include <tools/ee_selection_tool.h>
|
||||||
#include <default_values.h> // For some default values
|
|
||||||
|
|
||||||
|
|
||||||
LIB_PART* SchGetLibPart( const LIB_ID& aLibId, SYMBOL_LIB_TABLE* aLibTable, PART_LIB* aCacheLib,
|
LIB_PART* SchGetLibPart( const LIB_ID& aLibId, SYMBOL_LIB_TABLE* aLibTable, PART_LIB* aCacheLib,
|
||||||
|
|
Loading…
Reference in New Issue