Move importers from wxLog to REPORTER.
Fixes https://gitlab.com/kicad/code/kicad/issues/6389
This commit is contained in:
parent
a530c22eff
commit
2ad69fc56b
|
@ -113,20 +113,20 @@ REPORTER& NULL_REPORTER::GetInstance()
|
|||
}
|
||||
|
||||
|
||||
REPORTER& STDOUT_REPORTER::Report( const wxString& aText, SEVERITY aSeverity )
|
||||
REPORTER& STDOUT_REPORTER::Report( const wxString& aMsg, SEVERITY aSeverity )
|
||||
{
|
||||
switch( aSeverity )
|
||||
{
|
||||
case RPT_SEVERITY_UNDEFINED: std::cout << "SEVERITY_UNDEFINED: "; break;
|
||||
case RPT_SEVERITY_INFO: std::cout << "SEVERITY_INFO: "; break;
|
||||
case RPT_SEVERITY_WARNING: std::cout << "SEVERITY_WARNING: "; break;
|
||||
case RPT_SEVERITY_ERROR: std::cout << "SEVERITY_ERROR: "; break;
|
||||
case RPT_SEVERITY_ACTION: std::cout << "SEVERITY_ACTION: "; break;
|
||||
case RPT_SEVERITY_EXCLUSION:
|
||||
case RPT_SEVERITY_IGNORE: break;
|
||||
case RPT_SEVERITY_UNDEFINED: std::cout << "SEVERITY_UNDEFINED: "; break;
|
||||
case RPT_SEVERITY_INFO: std::cout << "SEVERITY_INFO: "; break;
|
||||
case RPT_SEVERITY_WARNING: std::cout << "SEVERITY_WARNING: "; break;
|
||||
case RPT_SEVERITY_ERROR: std::cout << "SEVERITY_ERROR: "; break;
|
||||
case RPT_SEVERITY_ACTION: std::cout << "SEVERITY_ACTION: "; break;
|
||||
case RPT_SEVERITY_EXCLUSION:
|
||||
case RPT_SEVERITY_IGNORE: break;
|
||||
}
|
||||
|
||||
std::cout << aText << std::endl;
|
||||
std::cout << aMsg << std::endl;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
@ -143,6 +143,34 @@ REPORTER& STDOUT_REPORTER::GetInstance()
|
|||
}
|
||||
|
||||
|
||||
REPORTER& WXLOG_REPORTER::Report( const wxString& aMsg, SEVERITY aSeverity )
|
||||
{
|
||||
switch( aSeverity )
|
||||
{
|
||||
case RPT_SEVERITY_ERROR: wxLogError( aMsg ); break;
|
||||
case RPT_SEVERITY_WARNING: wxLogWarning( aMsg ); break;
|
||||
case RPT_SEVERITY_UNDEFINED: wxLogMessage( aMsg ); break;
|
||||
case RPT_SEVERITY_INFO: wxLogInfo( aMsg ); break;
|
||||
case RPT_SEVERITY_ACTION: wxLogInfo( aMsg ); break;
|
||||
case RPT_SEVERITY_EXCLUSION: break;
|
||||
case RPT_SEVERITY_IGNORE: break;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
REPORTER& WXLOG_REPORTER::GetInstance()
|
||||
{
|
||||
static REPORTER* s_wxLogReporter = nullptr;
|
||||
|
||||
if( !s_wxLogReporter )
|
||||
s_wxLogReporter = new WXLOG_REPORTER();
|
||||
|
||||
return *s_wxLogReporter;
|
||||
}
|
||||
|
||||
|
||||
REPORTER& STATUSBAR_REPORTER::Report( const wxString& aText, SEVERITY aSeverity )
|
||||
{
|
||||
if( m_statusBar )
|
||||
|
|
|
@ -39,6 +39,8 @@
|
|||
#include <profile.h>
|
||||
#include <project/project_file.h>
|
||||
#include <project_rescue.h>
|
||||
#include <wx_html_report_box.h>
|
||||
#include <dialog_HTML_reporter_base.h>
|
||||
#include <reporter.h>
|
||||
#include <richio.h>
|
||||
#include <sch_edit_frame.h>
|
||||
|
@ -930,8 +932,8 @@ bool SCH_EDIT_FRAME::doAutoSave()
|
|||
|
||||
bool SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType )
|
||||
{
|
||||
wxFileName newfilename;
|
||||
SCH_SHEET_LIST sheetList = Schematic().GetSheets();
|
||||
wxFileName newfilename;
|
||||
SCH_SHEET_LIST sheetList = Schematic().GetSheets();
|
||||
SCH_IO_MGR::SCH_FILE_T fileType = (SCH_IO_MGR::SCH_FILE_T) aFileType;
|
||||
|
||||
switch( fileType )
|
||||
|
@ -953,10 +955,18 @@ bool SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType )
|
|||
|
||||
try
|
||||
{
|
||||
SCH_PLUGIN::SCH_PLUGIN_RELEASER pi(
|
||||
SCH_IO_MGR::FindPlugin( (SCH_IO_MGR::SCH_FILE_T) aFileType ) );
|
||||
SCH_PLUGIN::SCH_PLUGIN_RELEASER pi( SCH_IO_MGR::FindPlugin( fileType ) );
|
||||
DIALOG_HTML_REPORTER* reporter = new DIALOG_HTML_REPORTER( this );
|
||||
|
||||
pi->SetReporter( reporter->m_Reporter );
|
||||
Schematic().SetRoot( pi->Load( aFileName, &Schematic() ) );
|
||||
|
||||
if( reporter->m_Reporter->HasMessage() )
|
||||
reporter->ShowModal();
|
||||
|
||||
pi->SetReporter( &WXLOG_REPORTER::GetInstance() );
|
||||
delete reporter;
|
||||
|
||||
// Non-KiCad schematics do not use a drawing-sheet (or if they do, it works differently
|
||||
// to KiCad), so set it to an empty one
|
||||
DS_DATA_MODEL& drawingSheet = DS_DATA_MODEL::GetTheInstance();
|
||||
|
|
|
@ -56,21 +56,13 @@ SCH_PLUGIN* SCH_IO_MGR::FindPlugin( SCH_FILE_T aFileType )
|
|||
|
||||
switch( aFileType )
|
||||
{
|
||||
case SCH_LEGACY:
|
||||
return new SCH_LEGACY_PLUGIN();
|
||||
case SCH_KICAD:
|
||||
return new SCH_SEXPR_PLUGIN();
|
||||
case SCH_ALTIUM:
|
||||
return new SCH_ALTIUM_PLUGIN();
|
||||
case SCH_CADSTAR_ARCHIVE:
|
||||
return new CADSTAR_SCH_ARCHIVE_PLUGIN();
|
||||
case SCH_EAGLE:
|
||||
return new SCH_EAGLE_PLUGIN();
|
||||
default:
|
||||
;
|
||||
case SCH_LEGACY: return new SCH_LEGACY_PLUGIN();
|
||||
case SCH_KICAD: return new SCH_SEXPR_PLUGIN();
|
||||
case SCH_ALTIUM: return new SCH_ALTIUM_PLUGIN();
|
||||
case SCH_CADSTAR_ARCHIVE: return new CADSTAR_SCH_ARCHIVE_PLUGIN();
|
||||
case SCH_EAGLE: return new SCH_EAGLE_PLUGIN();
|
||||
default: return nullptr;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -92,23 +84,13 @@ const wxString SCH_IO_MGR::ShowType( SCH_FILE_T aType )
|
|||
|
||||
switch( aType )
|
||||
{
|
||||
default:
|
||||
return wxString::Format( _( "Unknown SCH_FILE_T value: %d" ), aType );
|
||||
|
||||
case SCH_LEGACY:
|
||||
return wxString( wxT( "Legacy" ) );
|
||||
|
||||
case SCH_KICAD:
|
||||
return wxString( wxT( "KiCad" ) );
|
||||
|
||||
case SCH_ALTIUM:
|
||||
return wxString( wxT( "Altium" ) );
|
||||
|
||||
case SCH_CADSTAR_ARCHIVE:
|
||||
return wxString( wxT( "CADSTAR Schematic Archive" ) );
|
||||
|
||||
case SCH_EAGLE:
|
||||
return wxString( wxT( "EAGLE" ) );
|
||||
case SCH_LEGACY: return wxString( wxT( "Legacy" ) );
|
||||
case SCH_KICAD: return wxString( wxT( "KiCad" ) );
|
||||
case SCH_ALTIUM: return wxString( wxT( "Altium" ) );
|
||||
case SCH_CADSTAR_ARCHIVE: return wxString( wxT( "CADSTAR Schematic Archive" ) );
|
||||
case SCH_EAGLE: return wxString( wxT( "EAGLE" ) );
|
||||
default: return wxString::Format( _( "Unknown SCH_FILE_T value: %d" ),
|
||||
aType );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include <import_export.h>
|
||||
#include <map>
|
||||
#include <enum_vector.h>
|
||||
#include <reporter.h>
|
||||
|
||||
|
||||
class SCH_SHEET;
|
||||
|
@ -158,6 +159,11 @@ public:
|
|||
*/
|
||||
virtual const wxString GetName() const = 0;
|
||||
|
||||
/**
|
||||
* Set an optional reporter for warnings/errors.
|
||||
*/
|
||||
virtual void SetReporter( REPORTER* aReporter ) {}
|
||||
|
||||
/**
|
||||
* Return the file extension for the #SCH_PLUGIN.
|
||||
*/
|
||||
|
|
|
@ -80,6 +80,8 @@ SCH_ALTIUM_PLUGIN::SCH_ALTIUM_PLUGIN()
|
|||
m_rootSheet = nullptr;
|
||||
m_currentSheet = nullptr;
|
||||
m_schematic = nullptr;
|
||||
|
||||
m_reporter = &WXLOG_REPORTER::GetInstance();
|
||||
}
|
||||
|
||||
|
||||
|
@ -241,7 +243,8 @@ void SCH_ALTIUM_PLUGIN::ParseAltiumSch( const wxString& aFileName )
|
|||
|
||||
if( fp == nullptr )
|
||||
{
|
||||
wxLogError( wxString::Format( _( "Cannot open file '%s'" ), aFileName ) );
|
||||
m_reporter->Report( wxString::Format( _( "Cannot open file '%s'." ), aFileName ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -434,7 +437,8 @@ void SCH_ALTIUM_PLUGIN::Parse( const CFB::CompoundFileReader& aReader )
|
|||
case ALTIUM_SCH_RECORD::RECORD_226:
|
||||
break;
|
||||
default:
|
||||
wxLogError( wxString::Format( "Unknown Record id: %d", recordId ) );
|
||||
m_reporter->Report( wxString::Format( _( "Unknown Record id: %d." ), recordId ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -532,8 +536,9 @@ void SCH_ALTIUM_PLUGIN::ParsePin( const std::map<wxString, wxString>& aPropertie
|
|||
if( symbol == m_symbols.end() )
|
||||
{
|
||||
// TODO: e.g. can depend on Template (RECORD=39
|
||||
wxLogWarning( wxString::Format( "Pin has non-existent ownerindex %d",
|
||||
elem.ownerindex ) );
|
||||
m_reporter->Report( wxString::Format( _( "Pin has non-existent ownerindex %d." ),
|
||||
elem.ownerindex ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -572,7 +577,7 @@ void SCH_ALTIUM_PLUGIN::ParsePin( const std::map<wxString, wxString>& aPropertie
|
|||
pinLocation.y += elem.pinlength;
|
||||
break;
|
||||
default:
|
||||
wxLogWarning( "Pin has unexpected orientation" );
|
||||
m_reporter->Report( _( "Pin has unexpected orientation." ), RPT_SEVERITY_WARNING );
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -610,15 +615,15 @@ void SCH_ALTIUM_PLUGIN::ParsePin( const std::map<wxString, wxString>& aPropertie
|
|||
case ASCH_PIN_ELECTRICAL::UNKNOWN:
|
||||
default:
|
||||
pin->SetType( ELECTRICAL_PINTYPE::PT_UNSPECIFIED );
|
||||
wxLogWarning( "Pin has unexpected electrical type" );
|
||||
m_reporter->Report( _( "Pin has unexpected electrical type." ), RPT_SEVERITY_WARNING );
|
||||
break;
|
||||
}
|
||||
|
||||
if( elem.symbolOuterEdge == ASCH_PIN_SYMBOL_OUTEREDGE::UNKNOWN )
|
||||
wxLogWarning( "Pin has unexpected outer edge type" );
|
||||
m_reporter->Report( _( "Pin has unexpected outer edge type." ), RPT_SEVERITY_WARNING );
|
||||
|
||||
if( elem.symbolInnerEdge == ASCH_PIN_SYMBOL_INNEREDGE::UNKNOWN )
|
||||
wxLogWarning( "Pin has unexpected inner edge type" );
|
||||
m_reporter->Report( _( "Pin has unexpected inner edge type." ), RPT_SEVERITY_WARNING );
|
||||
|
||||
if( elem.symbolOuterEdge == ASCH_PIN_SYMBOL_OUTEREDGE::NEGATED )
|
||||
{
|
||||
|
@ -740,8 +745,9 @@ void SCH_ALTIUM_PLUGIN::ParseLabel( const std::map<wxString, wxString>& aPropert
|
|||
if( symbol == m_symbols.end() )
|
||||
{
|
||||
// TODO: e.g. can depend on Template (RECORD=39
|
||||
wxLogWarning( wxString::Format( "Label has non-existent ownerindex %d",
|
||||
elem.ownerindex ) );
|
||||
m_reporter->Report( wxString::Format( _( "Label has non-existent ownerindex %d." ),
|
||||
elem.ownerindex ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -775,8 +781,10 @@ void SCH_ALTIUM_PLUGIN::ParseBezier( const std::map<wxString, wxString>& aProper
|
|||
|
||||
if( elem.points.size() < 2 )
|
||||
{
|
||||
wxLogWarning( wxString::Format( "Bezier has %d control points. At least 2 are expected.",
|
||||
static_cast<int>( elem.points.size() ) ) );
|
||||
m_reporter->Report( wxString::Format( _( "Bezier has %d control points. At least 2 are "
|
||||
"expected." ),
|
||||
static_cast<int>( elem.points.size() ) ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -831,8 +839,9 @@ void SCH_ALTIUM_PLUGIN::ParseBezier( const std::map<wxString, wxString>& aProper
|
|||
if( symbol == m_symbols.end() )
|
||||
{
|
||||
// TODO: e.g. can depend on Template (RECORD=39
|
||||
wxLogWarning( wxString::Format( "Bezier has non-existent ownerindex %d",
|
||||
elem.ownerindex ) );
|
||||
m_reporter->Report( wxString::Format( _( "Bezier has non-existent ownerindex %d." ),
|
||||
elem.ownerindex ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -915,8 +924,9 @@ void SCH_ALTIUM_PLUGIN::ParsePolyline( const std::map<wxString, wxString>& aProp
|
|||
if( symbol == m_symbols.end() )
|
||||
{
|
||||
// TODO: e.g. can depend on Template (RECORD=39
|
||||
wxLogWarning( wxString::Format( "Polyline has non-existent ownerindex %d",
|
||||
elem.ownerindex ) );
|
||||
m_reporter->Report( wxString::Format( _( "Polyline has non-existent ownerindex %d." ),
|
||||
elem.ownerindex ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -976,8 +986,9 @@ void SCH_ALTIUM_PLUGIN::ParsePolygon( const std::map<wxString, wxString>& aPrope
|
|||
if( symbol == m_symbols.end() )
|
||||
{
|
||||
// TODO: e.g. can depend on Template (RECORD=39
|
||||
wxLogWarning( wxString::Format( "Polygon has non-existent ownerindex %d",
|
||||
elem.ownerindex ) );
|
||||
m_reporter->Report( wxString::Format( _( "Polygon has non-existent ownerindex %d." ),
|
||||
elem.ownerindex ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1057,8 +1068,10 @@ void SCH_ALTIUM_PLUGIN::ParseRoundRectangle( const std::map<wxString, wxString>&
|
|||
if( symbol == m_symbols.end() )
|
||||
{
|
||||
// TODO: e.g. can depend on Template (RECORD=39
|
||||
wxLogWarning( wxString::Format( "Rounded Rectangle has non-existent ownerindex %d",
|
||||
elem.ownerindex ) );
|
||||
m_reporter->Report( wxString::Format( _( "Rounded rectangle has non-existent "
|
||||
"ownerindex %d." ),
|
||||
elem.ownerindex ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1093,7 +1106,8 @@ void SCH_ALTIUM_PLUGIN::ParseArc( const std::map<wxString, wxString>& aPropertie
|
|||
|
||||
if( elem.ownerpartid == ALTIUM_COMPONENT_NONE )
|
||||
{
|
||||
wxLogError( "Arc drawing is not possible for now on schematic." );
|
||||
m_reporter->Report( _( "Arc drawing is not possible for now on schematic." ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1101,8 +1115,9 @@ void SCH_ALTIUM_PLUGIN::ParseArc( const std::map<wxString, wxString>& aPropertie
|
|||
if( symbol == m_symbols.end() )
|
||||
{
|
||||
// TODO: e.g. can depend on Template (RECORD=39
|
||||
wxLogWarning( wxString::Format( "Arc has non-existent ownerindex %d",
|
||||
elem.ownerindex ) );
|
||||
m_reporter->Report( wxString::Format( _( "Arc has non-existent ownerindex %d." ),
|
||||
elem.ownerindex ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1161,8 +1176,9 @@ void SCH_ALTIUM_PLUGIN::ParseLine( const std::map<wxString, wxString>& aProperti
|
|||
if( symbol == m_symbols.end() )
|
||||
{
|
||||
// TODO: e.g. can depend on Template (RECORD=39
|
||||
wxLogWarning( wxString::Format( "Line has non-existent ownerindex %d",
|
||||
elem.ownerindex ) );
|
||||
m_reporter->Report( wxString::Format( _( "Line has non-existent ownerindex %d." ),
|
||||
elem.ownerindex ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1232,8 +1248,9 @@ void SCH_ALTIUM_PLUGIN::ParseRectangle( const std::map<wxString, wxString>& aPro
|
|||
if( symbol == m_symbols.end() )
|
||||
{
|
||||
// TODO: e.g. can depend on Template (RECORD=39
|
||||
wxLogWarning( wxString::Format( "Rectangle has non-existent ownerindex %d",
|
||||
elem.ownerindex ) );
|
||||
m_reporter->Report( wxString::Format( _( "Rectangle has non-existent ownerindex %d." ),
|
||||
elem.ownerindex ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1351,7 +1368,8 @@ void SCH_ALTIUM_PLUGIN::ParseSheetEntry( const std::map<wxString, wxString>& aPr
|
|||
}
|
||||
|
||||
|
||||
wxPoint HelperGeneratePowerPortGraphics( LIB_PART* aKPart, ASCH_POWER_PORT_STYLE aStyle )
|
||||
wxPoint HelperGeneratePowerPortGraphics( LIB_PART* aKPart, ASCH_POWER_PORT_STYLE aStyle,
|
||||
REPORTER* aReporter )
|
||||
{
|
||||
if( aStyle == ASCH_POWER_PORT_STYLE::CIRCLE || aStyle == ASCH_POWER_PORT_STYLE::ARROW )
|
||||
{
|
||||
|
@ -1534,7 +1552,10 @@ wxPoint HelperGeneratePowerPortGraphics( LIB_PART* aKPart, ASCH_POWER_PORT_STYLE
|
|||
else
|
||||
{
|
||||
if( aStyle != ASCH_POWER_PORT_STYLE::BAR )
|
||||
wxLogWarning( "Power Port has unknown style, use bar instead. " );
|
||||
{
|
||||
aReporter->Report( _( "Power Port has unknown style, use bar instead." ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
}
|
||||
|
||||
LIB_POLYLINE* line1 = new LIB_POLYLINE( aKPart );
|
||||
aKPart->AddDrawItem( line1 );
|
||||
|
@ -1591,7 +1612,7 @@ void SCH_ALTIUM_PLUGIN::ParsePowerPort( const std::map<wxString, wxString>& aPro
|
|||
pin->SetType( ELECTRICAL_PINTYPE::PT_POWER_IN );
|
||||
pin->SetVisible( false );
|
||||
|
||||
wxPoint valueFieldPos = HelperGeneratePowerPortGraphics( kpart, elem.style );
|
||||
wxPoint valueFieldPos = HelperGeneratePowerPortGraphics( kpart, elem.style, m_reporter );
|
||||
|
||||
kpart->GetValueField().SetPosition( valueFieldPos );
|
||||
|
||||
|
@ -1641,7 +1662,7 @@ void SCH_ALTIUM_PLUGIN::ParsePowerPort( const std::map<wxString, wxString>& aPro
|
|||
valueField->SetHorizJustify( EDA_TEXT_HJUSTIFY_T::GR_TEXT_HJUSTIFY_CENTER );
|
||||
break;
|
||||
default:
|
||||
wxLogWarning( "Pin has unexpected orientation" );
|
||||
m_reporter->Report( _( "Pin has unexpected orientation." ), RPT_SEVERITY_WARNING );
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2012,8 +2033,9 @@ void SCH_ALTIUM_PLUGIN::ParseDesignator( const std::map<wxString, wxString>& aPr
|
|||
if( symbol == m_symbols.end() )
|
||||
{
|
||||
// TODO: e.g. can depend on Template (RECORD=39
|
||||
wxLogWarning( wxString::Format( "Designator has non-existent ownerindex %d",
|
||||
elem.ownerindex ) );
|
||||
m_reporter->Report( wxString::Format( _( "Designator has non-existent ownerindex %d." ),
|
||||
elem.ownerindex ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -55,6 +55,8 @@ public:
|
|||
|
||||
const wxString GetName() const override;
|
||||
|
||||
void SetReporter( REPORTER* aReporter ) override { m_reporter = aReporter; }
|
||||
|
||||
const wxString GetFileExtension() const override;
|
||||
|
||||
const wxString GetLibraryFileExtension() const override;
|
||||
|
@ -134,6 +136,8 @@ private:
|
|||
void ParseParameter( const std::map<wxString, wxString>& aProperties );
|
||||
|
||||
private:
|
||||
REPORTER* m_reporter; // current reporter for warnings/errors
|
||||
|
||||
SCH_SHEET* m_rootSheet; // The root sheet of the schematic being loaded..
|
||||
SCH_SHEET* m_currentSheet; // The current sheet of the schematic being loaded..
|
||||
SCHEMATIC* m_schematic; // Passed to Load(), the schematic object being loaded
|
||||
|
|
|
@ -99,24 +99,26 @@ void CADSTAR_SCH_ARCHIVE_LOADER::Load( SCHEMATIC* aSchematic, SCH_SHEET* aRootSh
|
|||
|
||||
if( Schematic.VariantHierarchy.Variants.size() > 0 )
|
||||
{
|
||||
wxLogWarning( wxString::Format(
|
||||
_( "The CADSTAR design contains variants which has no KiCad equivalent. Only "
|
||||
"the master variant ('%s') was loaded." ),
|
||||
Schematic.VariantHierarchy.Variants.at( "V0" ).Name ) );
|
||||
m_reporter->Report( wxString::Format( _( "The CADSTAR design contains variants which has "
|
||||
"no KiCad equivalent. Only the master variant "
|
||||
"('%s') was loaded." ),
|
||||
Schematic.VariantHierarchy.Variants.at( "V0" ).Name ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
}
|
||||
|
||||
if( Schematic.Groups.size() > 0 )
|
||||
{
|
||||
wxLogWarning(
|
||||
_( "The CADSTAR design contains grouped items which has no KiCad equivalent. Any "
|
||||
"grouped items have been ungrouped." ) );
|
||||
m_reporter->Report( _( "The CADSTAR design contains grouped items which has no KiCad "
|
||||
"equivalent. Any grouped items have been ungrouped." ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
}
|
||||
|
||||
if( Schematic.ReuseBlocks.size() > 0 )
|
||||
{
|
||||
wxLogWarning(
|
||||
_( "The CADSTAR design contains re-use blocks which has no KiCad equivalent. The "
|
||||
"re-use block information has been discarded during the import." ) );
|
||||
m_reporter->Report( _( "The CADSTAR design contains re-use blocks which has no KiCad "
|
||||
"equivalent. The re-use block information has been discarded during "
|
||||
"the import." ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
}
|
||||
|
||||
|
||||
|
@ -216,9 +218,8 @@ void CADSTAR_SCH_ARCHIVE_LOADER::Load( SCHEMATIC* aSchematic, SCH_SHEET* aRootSh
|
|||
}
|
||||
}
|
||||
|
||||
wxLogMessage(
|
||||
_( "The CADSTAR design has been imported successfully.\n"
|
||||
"Please review the import errors and warnings (if any)." ) );
|
||||
m_reporter->Report( _( "The CADSTAR design has been imported successfully.\n"
|
||||
"Please review the import errors and warnings (if any)." ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -348,11 +349,14 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadPartsLibrary()
|
|||
|
||||
if( symbolID.IsEmpty() )
|
||||
{
|
||||
wxLogWarning( wxString::Format(
|
||||
_( "Part definition '%s' references symbol '%s' (alternate '%s') "
|
||||
"which could not be found in the symbol library. The part has not "
|
||||
"been loaded into the KiCad library." ),
|
||||
part.Name, gate.Name, gate.Alternate ) );
|
||||
m_reporter->Report( wxString::Format( _( "Part definition '%s' references symbol "
|
||||
"'%s' (alternate '%s') which could not be "
|
||||
"found in the symbol library. The part has "
|
||||
"not been loaded into the KiCad library." ),
|
||||
part.Name,
|
||||
gate.Name,
|
||||
gate.Alternate ),
|
||||
RPT_SEVERITY_WARNING);
|
||||
|
||||
ok = false;
|
||||
break;
|
||||
|
@ -393,10 +397,12 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSchematicSymbolInstances()
|
|||
{
|
||||
if( m_partMap.find( sym.PartRef.RefID ) == m_partMap.end() )
|
||||
{
|
||||
wxLogError( wxString::Format(
|
||||
_( "Symbol '%s' references part '%s' which could not be found "
|
||||
"in the library. The symbol was not loaded" ),
|
||||
sym.ComponentRef.Designator, sym.PartRef.RefID ) );
|
||||
m_reporter->Report( wxString::Format( _( "Symbol '%s' references part '%s' which "
|
||||
"could not be found in the library. The "
|
||||
"symbol was not loaded" ),
|
||||
sym.ComponentRef.Designator,
|
||||
sym.PartRef.RefID ),
|
||||
RPT_SEVERITY_ERROR);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
@ -617,10 +623,11 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSchematicSymbolInstances()
|
|||
}
|
||||
else
|
||||
{
|
||||
wxLogError( wxString::Format(
|
||||
_( "Symbol ID '%s' is of an unknown type. It is neither a component or a "
|
||||
"net power / symbol. The symbol was not loaded." ),
|
||||
sym.ID ) );
|
||||
m_reporter->Report( wxString::Format( _( "Symbol ID '%s' is of an unknown type. It is "
|
||||
"neither a component or a net power / symbol. "
|
||||
"The symbol was not loaded." ),
|
||||
sym.ID ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
}
|
||||
|
||||
if( sym.ScaleRatioDenominator != 1 || sym.ScaleRatioNumerator != 1 )
|
||||
|
@ -630,11 +637,13 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSchematicSymbolInstances()
|
|||
if( symbolName.empty() )
|
||||
symbolName = wxString::Format( "ID: %s", sym.ID);
|
||||
|
||||
wxLogError( wxString::Format(
|
||||
_( "Symbol '%s' is scaled in the original CADSTAR schematic but this is not"
|
||||
" supported in KiCad. The symbol was loaded with 1:1 scale and may require "
|
||||
"manual fixing." ),
|
||||
symbolName, sym.PartRef.RefID ) );
|
||||
m_reporter->Report( wxString::Format( _( "Symbol '%s' is scaled in the original "
|
||||
"CADSTAR schematic but this is not supported "
|
||||
"in KiCad. The symbol was loaded with 1:1 "
|
||||
"scale and may require manual fixing." ),
|
||||
symbolName,
|
||||
sym.PartRef.RefID ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1057,11 +1066,12 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadDocumentationSymbols()
|
|||
|
||||
if( Library.SymbolDefinitions.find( docSym.SymdefID ) == Library.SymbolDefinitions.end() )
|
||||
{
|
||||
wxLogError(
|
||||
wxString::Format( _( "Documentation Symbol '%s' refers to symbol definition "
|
||||
"ID '%s' which does not exist in the library. The symbol "
|
||||
"was not loaded." ),
|
||||
docSym.ID, docSym.SymdefID ) );
|
||||
m_reporter->Report( wxString::Format( _( "Documentation Symbol '%s' refers to symbol "
|
||||
"definition ID '%s' which does not exist in "
|
||||
"the library. The symbol was not loaded." ),
|
||||
docSym.ID,
|
||||
docSym.SymdefID ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1163,7 +1173,8 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadTextVariables()
|
|||
}
|
||||
else
|
||||
{
|
||||
wxLogError( _( "Text Variables could not be set as there is no project attached." ) );
|
||||
m_reporter->Report( _( "Text Variables could not be set as there is no project attached." ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1560,22 +1571,26 @@ SCH_COMPONENT* CADSTAR_SCH_ARCHIVE_LOADER::loadSchematicSymbol(
|
|||
|
||||
if( NormalizeAngle180( compAngleDeciDeg ) != NormalizeAngle180( aComponentOrientationDeciDeg ) )
|
||||
{
|
||||
wxLogError(
|
||||
wxString::Format( _( "Symbol '%s' is rotated by an angle of %.1f degrees in the "
|
||||
"original CADSTAR design but KiCad only supports rotation "
|
||||
"angles multiples of 90 degrees. The connecting wires will "
|
||||
"need manual fixing." ),
|
||||
aCadstarSymbol.ComponentRef.Designator, compAngleDeciDeg / 10.0 ) );
|
||||
m_reporter->Report( wxString::Format( _( "Symbol '%s' is rotated by an angle of %.1f "
|
||||
"degrees in the original CADSTAR design but "
|
||||
"KiCad only supports rotation angles multiples "
|
||||
"of 90 degrees. The connecting wires will need "
|
||||
"manual fixing." ),
|
||||
aCadstarSymbol.ComponentRef.Designator,
|
||||
compAngleDeciDeg / 10.0 ),
|
||||
RPT_SEVERITY_ERROR);
|
||||
}
|
||||
|
||||
component->SetOrientation( compOrientation );
|
||||
|
||||
if( m_sheetMap.find( aCadstarSymbol.LayerID ) == m_sheetMap.end() )
|
||||
{
|
||||
wxLogError(
|
||||
wxString::Format( _( "Symbol '%s' references sheet ID '%s' which does not exist in "
|
||||
"the design. The symbol was not loaded." ),
|
||||
aCadstarSymbol.ComponentRef.Designator, aCadstarSymbol.LayerID ) );
|
||||
m_reporter->Report( wxString::Format( _( "Symbol '%s' references sheet ID '%s' which does "
|
||||
"not exist in the design. The symbol was not "
|
||||
"loaded." ),
|
||||
aCadstarSymbol.ComponentRef.Designator,
|
||||
aCadstarSymbol.LayerID ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
|
||||
delete component;
|
||||
return nullptr;
|
||||
|
@ -1656,7 +1671,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSymbolFieldAttribute(
|
|||
case ALIGNMENT::CENTERLEFT: fieldAlignment = ALIGNMENT::CENTERRIGHT; break;
|
||||
case ALIGNMENT::TOPLEFT: fieldAlignment = ALIGNMENT::TOPRIGHT; break;
|
||||
//Change right to left:
|
||||
case ALIGNMENT::BOTTOMRIGHT: fieldAlignment = ALIGNMENT::BOTTOMLEFT; break;
|
||||
case ALIGNMENT::BOTTOMRIGHT: fieldAlignment = ALIGNMENT::BOTTOMLEFT; break;
|
||||
case ALIGNMENT::CENTERRIGHT: fieldAlignment = ALIGNMENT::CENTERLEFT; break;
|
||||
case ALIGNMENT::TOPRIGHT: fieldAlignment = ALIGNMENT::TOPLEFT; break;
|
||||
// Center alignment does not mirror:
|
||||
|
@ -1718,10 +1733,12 @@ CADSTAR_SCH_ARCHIVE_LOADER::POINT CADSTAR_SCH_ARCHIVE_LOADER::getLocationOfNetEl
|
|||
auto logUnknownNetElementError =
|
||||
[&]()
|
||||
{
|
||||
wxLogError( wxString::Format( _(
|
||||
"Net %s references unknown net element %s. The net was "
|
||||
"not properly loaded and may require manual fixing." ),
|
||||
getNetName( aNet ), aNetElementID ) );
|
||||
m_reporter->Report( wxString::Format( _( "Net %s references unknown net element %s. "
|
||||
"The net was not properly loaded and may "
|
||||
"require manual fixing." ),
|
||||
getNetName( aNet ),
|
||||
aNetElementID ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
|
||||
return POINT();
|
||||
};
|
||||
|
@ -2002,12 +2019,15 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadChildSheets(
|
|||
{
|
||||
if( block.Figures.size() > 0 )
|
||||
{
|
||||
wxLogError( wxString::Format(
|
||||
_( "The block ID %s (Block name: '%s') is drawn on sheet '%s' but is "
|
||||
"not linked to another sheet in the design. KiCad requires all "
|
||||
"sheet symbols to be associated to a sheet, so the block was not "
|
||||
"loaded." ),
|
||||
block.ID, block.Name, Sheets.SheetNames.at( aCadstarSheetID ) ) );
|
||||
m_reporter->Report( wxString::Format( _( "The block ID %s (Block name: '%s') "
|
||||
"is drawn on sheet '%s' but is not "
|
||||
"linked to another sheet in the "
|
||||
"design. KiCad requires all sheet "
|
||||
"symbols to be associated to a sheet, "
|
||||
"so the block was not loaded." ),
|
||||
block.ID, block.Name,
|
||||
Sheets.SheetNames.at( aCadstarSheetID ) ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
}
|
||||
|
||||
continue;
|
||||
|
@ -2024,10 +2044,10 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadChildSheets(
|
|||
}
|
||||
else
|
||||
{
|
||||
THROW_IO_ERROR( wxString::Format(
|
||||
_( "The CADSTAR schematic might be corrupt: Block %s references a "
|
||||
"child sheet but has no Figure defined." ),
|
||||
block.ID ) );
|
||||
THROW_IO_ERROR( wxString::Format( _( "The CADSTAR schematic might be corrupt: "
|
||||
"Block %s references a child sheet but has no "
|
||||
"Figure defined." ),
|
||||
block.ID ) );
|
||||
}
|
||||
|
||||
loadSheetAndChildSheets( block.AssocLayerID, blockExtents.first, blockExtents.second, aSheet );
|
||||
|
|
|
@ -52,7 +52,7 @@ class SCHEMATIC;
|
|||
class CADSTAR_SCH_ARCHIVE_LOADER : public CADSTAR_SCH_ARCHIVE_PARSER
|
||||
{
|
||||
public:
|
||||
explicit CADSTAR_SCH_ARCHIVE_LOADER( wxString aFilename )
|
||||
explicit CADSTAR_SCH_ARCHIVE_LOADER( wxString aFilename, REPORTER* aReporter )
|
||||
: CADSTAR_SCH_ARCHIVE_PARSER( aFilename )
|
||||
{
|
||||
m_schematic = nullptr;
|
||||
|
@ -60,6 +60,7 @@ public:
|
|||
m_plugin = nullptr;
|
||||
m_designCenter.x = 0;
|
||||
m_designCenter.y = 0;
|
||||
m_reporter = aReporter;
|
||||
}
|
||||
|
||||
|
||||
|
@ -86,6 +87,7 @@ private:
|
|||
*/
|
||||
typedef std::map<TERMINAL_ID, wxString> TERMINAL_TO_PINNUM_MAP;
|
||||
|
||||
REPORTER* m_reporter;
|
||||
SCHEMATIC* m_schematic;
|
||||
SCH_SHEET* m_rootSheet;
|
||||
SCH_PLUGIN::SCH_PLUGIN_RELEASER* m_plugin;
|
||||
|
|
|
@ -134,7 +134,7 @@ SCH_SHEET* CADSTAR_SCH_ARCHIVE_PLUGIN::Load( const wxString& aFileName, SCHEMATI
|
|||
aSchematic->Prj().SchSymbolLibTable();
|
||||
}
|
||||
|
||||
CADSTAR_SCH_ARCHIVE_LOADER csaFile( aFileName );
|
||||
CADSTAR_SCH_ARCHIVE_LOADER csaFile( aFileName, m_reporter );
|
||||
csaFile.Load( aSchematic, rootSheet, &sch_plugin, libFileName );
|
||||
|
||||
sch_plugin->SaveLibrary( libFileName.GetFullPath() );
|
||||
|
|
|
@ -29,6 +29,8 @@
|
|||
|
||||
|
||||
#include <sch_io_mgr.h>
|
||||
#include <reporter.h>
|
||||
|
||||
|
||||
class SCH_SHEET;
|
||||
class SCH_SCREEN;
|
||||
|
@ -40,6 +42,8 @@ public:
|
|||
|
||||
const wxString GetName() const override;
|
||||
|
||||
void SetReporter( REPORTER* aReporter ) override { m_reporter = aReporter; }
|
||||
|
||||
const wxString GetFileExtension() const override;
|
||||
|
||||
const wxString GetLibraryFileExtension() const override;
|
||||
|
@ -88,11 +92,14 @@ public:
|
|||
|
||||
CADSTAR_SCH_ARCHIVE_PLUGIN()
|
||||
{
|
||||
m_reporter = &WXLOG_REPORTER::GetInstance();
|
||||
}
|
||||
|
||||
~CADSTAR_SCH_ARCHIVE_PLUGIN()
|
||||
{
|
||||
}
|
||||
|
||||
REPORTER* m_reporter; // current reporter for warnings/errors
|
||||
};
|
||||
|
||||
#endif // CADSTAR_SCH_ARCHIVE_PLUGIN_H_
|
||||
|
|
|
@ -351,10 +351,11 @@ static void eagleToKicadAlignment( EDA_TEXT* aText, int aEagleAlignment, int aRe
|
|||
|
||||
SCH_EAGLE_PLUGIN::SCH_EAGLE_PLUGIN()
|
||||
{
|
||||
m_kiway = nullptr;
|
||||
m_rootSheet = nullptr;
|
||||
m_currentSheet = nullptr;
|
||||
m_schematic = nullptr;
|
||||
|
||||
m_reporter = &WXLOG_REPORTER::GetInstance();
|
||||
}
|
||||
|
||||
|
||||
|
@ -1157,9 +1158,10 @@ void SCH_EAGLE_PLUGIN::loadInstance( wxXmlNode* aInstanceNode )
|
|||
|
||||
if( part_it == m_partlist.end() )
|
||||
{
|
||||
wxLogError( _( "Error parsing Eagle file. "
|
||||
"Could not find \"%s\" instance but it is referenced in the schematic." ),
|
||||
einstance.part );
|
||||
m_reporter->Report( wxString::Format( _( "Error parsing Eagle file. Could not find '%s' "
|
||||
"instance but it is referenced in the schematic." ),
|
||||
einstance.part ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -1187,8 +1189,9 @@ void SCH_EAGLE_PLUGIN::loadInstance( wxXmlNode* aInstanceNode )
|
|||
|
||||
if( !part )
|
||||
{
|
||||
wxLogMessage( wxString::Format( _( "Could not find %s in the imported library" ),
|
||||
kisymbolname ) );
|
||||
m_reporter->Report( wxString::Format( _( "Could not find '%s' in the imported library." ),
|
||||
kisymbolname ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -86,6 +86,8 @@ public:
|
|||
|
||||
const wxString GetName() const override;
|
||||
|
||||
void SetReporter( REPORTER* aReporter ) override { m_reporter = aReporter; }
|
||||
|
||||
const wxString GetFileExtension() const override;
|
||||
|
||||
const wxString GetLibraryFileExtension() const override;
|
||||
|
@ -212,32 +214,34 @@ private:
|
|||
std::map<int, bool> units;
|
||||
};
|
||||
|
||||
REPORTER* m_reporter; ///< Reporter for warnings/errors
|
||||
|
||||
///< Map references to missing component units data
|
||||
std::map<wxString, EAGLE_MISSING_CMP> m_missingCmps;
|
||||
|
||||
KIWAY* m_kiway; ///< For creating sub sheets.
|
||||
SCH_SHEET* m_rootSheet; ///< The root sheet of the schematic being loaded..
|
||||
SCH_SHEET* m_currentSheet; ///< The current sheet of the schematic being loaded..
|
||||
wxString m_version; ///< Eagle file version.
|
||||
wxFileName m_filename;
|
||||
wxString m_libName; ///< Library name to save symbols
|
||||
SCHEMATIC* m_schematic; ///< Passed to Load(), the schematic object being loaded
|
||||
SCH_SHEET* m_rootSheet; ///< The root sheet of the schematic being loaded
|
||||
SCH_SHEET* m_currentSheet; ///< The current sheet of the schematic being loaded
|
||||
wxString m_version; ///< Eagle file version.
|
||||
wxFileName m_filename;
|
||||
wxString m_libName; ///< Library name to save symbols
|
||||
SCHEMATIC* m_schematic; ///< Passed to Load(), the schematic object being loaded
|
||||
|
||||
EPART_MAP m_partlist;
|
||||
EPART_MAP m_partlist;
|
||||
std::map<wxString, EAGLE_LIBRARY> m_eagleLibs;
|
||||
|
||||
SCH_PLUGIN::SCH_PLUGIN_RELEASER m_pi; ///< Plugin to create the KiCad symbol library.
|
||||
std::unique_ptr< PROPERTIES > m_properties; ///< Library plugin properties.
|
||||
SCH_PLUGIN::SCH_PLUGIN_RELEASER m_pi; ///< Plugin to create the KiCad symbol library.
|
||||
std::unique_ptr< PROPERTIES > m_properties; ///< Library plugin properties.
|
||||
|
||||
std::map<wxString, int> m_netCounts;
|
||||
std::map<int, SCH_LAYER_ID> m_layerMap;
|
||||
std::map<wxString, int> m_netCounts;
|
||||
std::map<int, SCH_LAYER_ID> m_layerMap;
|
||||
|
||||
///< Wire intersection points, used for quick checks whether placing a net label in a particular
|
||||
///< place would short two nets.
|
||||
std::vector<VECTOR2I> m_wireIntersections;
|
||||
|
||||
///< Wires and labels of a single connection (segment in Eagle nomenclature)
|
||||
typedef struct SEG_DESC_STRUCT {
|
||||
typedef struct SEG_DESC_STRUCT
|
||||
{
|
||||
///< Test if a particular label is attached to any of the stored segments
|
||||
const SEG* LabelAttached( const SCH_TEXT* aLabel ) const;
|
||||
|
||||
|
|
|
@ -249,8 +249,26 @@ public:
|
|||
|
||||
static REPORTER& GetInstance();
|
||||
|
||||
REPORTER& Report( const wxString& aText,
|
||||
SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
||||
REPORTER& Report( const wxString& aMsg, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
||||
|
||||
bool HasMessage() const override { return false; }
|
||||
};
|
||||
|
||||
|
||||
class WXLOG_REPORTER : public REPORTER
|
||||
{
|
||||
public:
|
||||
WXLOG_REPORTER()
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~WXLOG_REPORTER()
|
||||
{
|
||||
}
|
||||
|
||||
static REPORTER& GetInstance();
|
||||
|
||||
REPORTER& Report( const wxString& aMsg, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
||||
|
||||
bool HasMessage() const override { return false; }
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue