Use external REPORTER for EESCHEMA_JOBS_HANDLER / PCB_JOBS_HANDLER
This commit is contained in:
parent
fcb156c323
commit
3f758711fd
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2022 Mark Roszko <mark.roszko@gmail.com>
|
||||
* Copyright (C) 1992-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
|
@ -20,6 +20,15 @@
|
|||
|
||||
#include <cli/exit_codes.h>
|
||||
#include <jobs/job_dispatcher.h>
|
||||
#include <reporter.h>
|
||||
#include <wx/debug.h>
|
||||
|
||||
|
||||
JOB_DISPATCHER::JOB_DISPATCHER()
|
||||
{
|
||||
m_reporter = &NULL_REPORTER::GetInstance();
|
||||
}
|
||||
|
||||
|
||||
void JOB_DISPATCHER::Register( const std::string& aJobTypeName,
|
||||
std::function<int( JOB* job )> aHandler )
|
||||
|
@ -27,6 +36,7 @@ void JOB_DISPATCHER::Register( const std::string& aJobTypeName,
|
|||
m_jobHandlers.emplace( aJobTypeName, aHandler );
|
||||
}
|
||||
|
||||
|
||||
int JOB_DISPATCHER::RunJob( JOB* job )
|
||||
{
|
||||
if( m_jobHandlers.count( job->GetType() ) )
|
||||
|
@ -35,4 +45,11 @@ int JOB_DISPATCHER::RunJob( JOB* job )
|
|||
}
|
||||
|
||||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void JOB_DISPATCHER::SetReporter( REPORTER* aReporter )
|
||||
{
|
||||
wxCHECK( aReporter != nullptr, /*void*/ );
|
||||
m_reporter = aReporter;
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2022 Mark Roszko <mark.roszko@gmail.com>
|
||||
* Copyright (C) 1992-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
|
@ -26,14 +26,23 @@
|
|||
#include <map>
|
||||
#include <jobs/job.h>
|
||||
|
||||
|
||||
class REPORTER;
|
||||
|
||||
class JOB_DISPATCHER
|
||||
{
|
||||
public:
|
||||
JOB_DISPATCHER();
|
||||
void Register( const std::string& aJobTypeName, std::function<int( JOB* job )> aHandler );
|
||||
int RunJob( JOB* job );
|
||||
int RunJob( JOB* job );
|
||||
void SetReporter( REPORTER* aReporter );
|
||||
|
||||
protected:
|
||||
REPORTER* m_reporter; // non-owning
|
||||
|
||||
private:
|
||||
std::map<std::string, std::function<int( JOB* job )>> m_jobHandlers;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
|
@ -29,6 +29,7 @@
|
|||
#include <reporter.h>
|
||||
#include <widgets/wx_infobar.h>
|
||||
#include <widgets/wx_html_report_panel.h>
|
||||
#include <wx/crt.h>
|
||||
#include <wx/log.h>
|
||||
#include <wx/textctrl.h>
|
||||
#include <wx/statusbr.h>
|
||||
|
@ -125,6 +126,30 @@ REPORTER& NULL_REPORTER::GetInstance()
|
|||
}
|
||||
|
||||
|
||||
REPORTER& CLI_REPORTER::Report( const wxString& aMsg, SEVERITY aSeverity )
|
||||
{
|
||||
FILE* target = stdout;
|
||||
|
||||
if( aSeverity == RPT_SEVERITY_ERROR )
|
||||
target = stderr;
|
||||
|
||||
if( aMsg.EndsWith( wxS( "\n" ) ) )
|
||||
wxFprintf( target, aMsg );
|
||||
else
|
||||
wxFprintf( target, aMsg + wxS( "\n" ) );
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
REPORTER& CLI_REPORTER::GetInstance()
|
||||
{
|
||||
static CLI_REPORTER s_cliReporter;
|
||||
|
||||
return s_cliReporter;
|
||||
}
|
||||
|
||||
|
||||
REPORTER& STDOUT_REPORTER::Report( const wxString& aMsg, SEVERITY aSeverity )
|
||||
{
|
||||
switch( aSeverity )
|
||||
|
|
|
@ -349,6 +349,9 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
|
|||
|
||||
m_jobHandler = std::make_unique<EESCHEMA_JOBS_HANDLER>();
|
||||
|
||||
if( m_start_flags & KFCTL_CLI )
|
||||
m_jobHandler->SetReporter( &CLI_REPORTER::GetInstance() );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
#include <jobs/job_sym_export_svg.h>
|
||||
#include <jobs/job_sym_upgrade.h>
|
||||
#include <schematic.h>
|
||||
#include <wx/crt.h>
|
||||
#include <wx/dir.h>
|
||||
#include <wx/file.h>
|
||||
#include <memory>
|
||||
|
@ -96,18 +95,7 @@ void EESCHEMA_JOBS_HANDLER::InitRenderSettings( KIGFX::SCH_RENDER_SETTINGS* aRen
|
|||
aSch->Prj().GetProjectPath() );
|
||||
|
||||
if( !DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet( filename ) )
|
||||
wxFprintf( stderr, _( "Error loading drawing sheet." ) );
|
||||
}
|
||||
|
||||
|
||||
REPORTER& EESCHEMA_JOBS_HANDLER::Report( const wxString& aText, SEVERITY aSeverity )
|
||||
{
|
||||
if( aSeverity == RPT_SEVERITY_ERROR )
|
||||
wxFprintf( stderr, wxS( "%s\n" ), aText );
|
||||
else
|
||||
wxPrintf( wxS( "%s\n" ), aText );
|
||||
|
||||
return *this;
|
||||
m_reporter->Report( _( "Error loading drawing sheet." ), RPT_SEVERITY_ERROR );
|
||||
}
|
||||
|
||||
|
||||
|
@ -122,7 +110,7 @@ int EESCHEMA_JOBS_HANDLER::JobExportPlot( JOB* aJob )
|
|||
|
||||
if( sch == nullptr )
|
||||
{
|
||||
wxFprintf( stderr, _( "Failed to load schematic file\n" ) );
|
||||
m_reporter->Report( _( "Failed to load schematic file\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_INVALID_INPUT_FILE;
|
||||
}
|
||||
|
||||
|
@ -131,7 +119,7 @@ int EESCHEMA_JOBS_HANDLER::JobExportPlot( JOB* aJob )
|
|||
InitRenderSettings( renderSettings.get(), aPlotJob->settings.m_theme, sch );
|
||||
|
||||
std::unique_ptr<SCH_PLOTTER> schPlotter = std::make_unique<SCH_PLOTTER>( sch );
|
||||
schPlotter->Plot( aPlotJob->m_plotFormat, aPlotJob->settings, renderSettings.get(), this );
|
||||
schPlotter->Plot( aPlotJob->m_plotFormat, aPlotJob->settings, renderSettings.get(), m_reporter );
|
||||
|
||||
return CLI::EXIT_CODES::OK;
|
||||
}
|
||||
|
@ -148,7 +136,7 @@ int EESCHEMA_JOBS_HANDLER::JobExportNetlist( JOB* aJob )
|
|||
|
||||
if( sch == nullptr )
|
||||
{
|
||||
wxFprintf( stderr, _( "Failed to load schematic file\n" ) );
|
||||
m_reporter->Report( _( "Failed to load schematic file\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_INVALID_INPUT_FILE;
|
||||
}
|
||||
|
||||
|
@ -165,7 +153,9 @@ int EESCHEMA_JOBS_HANDLER::JobExportNetlist( JOB* aJob )
|
|||
} )
|
||||
> 0 )
|
||||
{
|
||||
wxPrintf( _( "Warning: schematic has annotation errors, please use the schematic editor to fix them\n" ) );
|
||||
m_reporter->Report( _( "Warning: schematic has annotation errors, please use the "
|
||||
"schematic editor to fix them\n" ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -174,7 +164,7 @@ int EESCHEMA_JOBS_HANDLER::JobExportNetlist( JOB* aJob )
|
|||
|
||||
if( erc.TestDuplicateSheetNames( false ) > 0 )
|
||||
{
|
||||
wxPrintf( _( "Warning: duplicate sheet names.\n" ) );
|
||||
m_reporter->Report( _( "Warning: duplicate sheet names.\n" ), RPT_SEVERITY_WARNING );
|
||||
}
|
||||
|
||||
|
||||
|
@ -216,7 +206,7 @@ int EESCHEMA_JOBS_HANDLER::JobExportNetlist( JOB* aJob )
|
|||
helper = std::make_unique<NETLIST_EXPORTER_XML>( sch );
|
||||
break;
|
||||
default:
|
||||
wxFprintf( stderr, _( "Unknown netlist format.\n" ) );
|
||||
m_reporter->Report( _( "Unknown netlist format.\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
}
|
||||
|
||||
|
@ -230,7 +220,7 @@ int EESCHEMA_JOBS_HANDLER::JobExportNetlist( JOB* aJob )
|
|||
aNetJob->m_outputFile = fn.GetFullName();
|
||||
}
|
||||
|
||||
bool res = helper->WriteNetlist( aNetJob->m_outputFile, netlistOption, *this );
|
||||
bool res = helper->WriteNetlist( aNetJob->m_outputFile, netlistOption, *m_reporter );
|
||||
|
||||
if(!res)
|
||||
{
|
||||
|
@ -252,7 +242,7 @@ int EESCHEMA_JOBS_HANDLER::JobExportBom( JOB* aJob )
|
|||
|
||||
if( sch == nullptr )
|
||||
{
|
||||
wxFprintf( stderr, _( "Failed to load schematic file\n" ) );
|
||||
m_reporter->Report( _( "Failed to load schematic file\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_INVALID_INPUT_FILE;
|
||||
}
|
||||
|
||||
|
@ -272,8 +262,10 @@ int EESCHEMA_JOBS_HANDLER::JobExportBom( JOB* aJob )
|
|||
} )
|
||||
> 0 )
|
||||
{
|
||||
wxPrintf( _( "Warning: schematic has annotation errors, please use the schematic "
|
||||
"editor to fix them\n" ) );
|
||||
m_reporter->Report(
|
||||
_( "Warning: schematic has annotation errors, please use the schematic "
|
||||
"editor to fix them\n" ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -282,7 +274,7 @@ int EESCHEMA_JOBS_HANDLER::JobExportBom( JOB* aJob )
|
|||
|
||||
if( erc.TestDuplicateSheetNames( false ) > 0 )
|
||||
{
|
||||
wxPrintf( _( "Warning: duplicate sheet names.\n" ) );
|
||||
m_reporter->Report( _( "Warning: duplicate sheet names.\n" ), RPT_SEVERITY_WARNING );
|
||||
}
|
||||
|
||||
|
||||
|
@ -358,7 +350,11 @@ int EESCHEMA_JOBS_HANDLER::JobExportBom( JOB* aJob )
|
|||
wxFile f;
|
||||
if( !f.Open( aBomJob->m_outputFile, wxFile::write ) )
|
||||
{
|
||||
wxFprintf( stderr, _( "Unable to open destination '%s'" ), aBomJob->m_outputFile );
|
||||
m_reporter->Report(
|
||||
wxString::Format( _( "Unable to open destination '%s'" ), aBomJob->m_outputFile ),
|
||||
RPT_SEVERITY_ERROR
|
||||
);
|
||||
|
||||
return CLI::EXIT_CODES::ERR_INVALID_INPUT_FILE;
|
||||
}
|
||||
|
||||
|
@ -392,7 +388,7 @@ int EESCHEMA_JOBS_HANDLER::JobExportPythonBom( JOB* aJob )
|
|||
|
||||
if( sch == nullptr )
|
||||
{
|
||||
wxFprintf( stderr, _( "Failed to load schematic file\n" ) );
|
||||
m_reporter->Report( _( "Failed to load schematic file\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_INVALID_INPUT_FILE;
|
||||
}
|
||||
|
||||
|
@ -409,8 +405,10 @@ int EESCHEMA_JOBS_HANDLER::JobExportPythonBom( JOB* aJob )
|
|||
} )
|
||||
> 0 )
|
||||
{
|
||||
wxPrintf( _( "Warning: schematic has annotation errors, please use the schematic "
|
||||
"editor to fix them\n" ) );
|
||||
m_reporter->Report(
|
||||
_( "Warning: schematic has annotation errors, please use the schematic "
|
||||
"editor to fix them\n" ),
|
||||
RPT_SEVERITY_WARNING );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -418,7 +416,7 @@ int EESCHEMA_JOBS_HANDLER::JobExportPythonBom( JOB* aJob )
|
|||
ERC_TESTER erc( sch );
|
||||
|
||||
if( erc.TestDuplicateSheetNames( false ) > 0 )
|
||||
wxPrintf( _( "Warning: duplicate sheet names.\n" ) );
|
||||
m_reporter->Report( _( "Warning: duplicate sheet names.\n" ), RPT_SEVERITY_WARNING );
|
||||
|
||||
std::unique_ptr<NETLIST_EXPORTER_XML> xmlNetlist =
|
||||
std::make_unique<NETLIST_EXPORTER_XML>( sch );
|
||||
|
@ -432,7 +430,7 @@ int EESCHEMA_JOBS_HANDLER::JobExportPythonBom( JOB* aJob )
|
|||
aNetJob->m_outputFile = fn.GetFullName();
|
||||
}
|
||||
|
||||
bool res = xmlNetlist->WriteNetlist( aNetJob->m_outputFile, GNL_OPT_BOM, *this );
|
||||
bool res = xmlNetlist->WriteNetlist( aNetJob->m_outputFile, GNL_OPT_BOM, *m_reporter );
|
||||
|
||||
if( !res )
|
||||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
|
@ -492,8 +490,9 @@ int EESCHEMA_JOBS_HANDLER::doSymExportSvg( JOB_SYM_EXPORT_SVG* aSvgJob,
|
|||
filename += wxS( "_demorgan" );
|
||||
|
||||
fn.SetName( filename );
|
||||
wxPrintf( _( "Plotting symbol '%s' unit %d to '%s'\n" ), symbol->GetName(), unit,
|
||||
fn.GetFullPath() );
|
||||
m_reporter->Report( wxString::Format( _( "Plotting symbol '%s' unit %d to '%s'\n" ),
|
||||
symbol->GetName(), unit, fn.GetFullPath() ),
|
||||
RPT_SEVERITY_ACTION );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -503,7 +502,9 @@ int EESCHEMA_JOBS_HANDLER::doSymExportSvg( JOB_SYM_EXPORT_SVG* aSvgJob,
|
|||
filename += wxS( "_demorgan" );
|
||||
|
||||
fn.SetName( filename );
|
||||
wxPrintf( _( "Plotting symbol '%s' to '%s'\n" ), symbol->GetName(), fn.GetFullPath() );
|
||||
m_reporter->Report( wxString::Format( _( "Plotting symbol '%s' to '%s'\n" ),
|
||||
symbol->GetName(), fn.GetFullPath() ),
|
||||
RPT_SEVERITY_ACTION );
|
||||
}
|
||||
|
||||
// Get the symbol bounding box to fit the plot page to it
|
||||
|
@ -527,7 +528,9 @@ int EESCHEMA_JOBS_HANDLER::doSymExportSvg( JOB_SYM_EXPORT_SVG* aSvgJob,
|
|||
|
||||
if( !plotter->OpenFile( fn.GetFullPath() ) )
|
||||
{
|
||||
wxFprintf( stderr, _( "Unable to open destination '%s'" ), fn.GetFullPath() );
|
||||
m_reporter->Report( wxString::Format( _( "Unable to open destination '%s'" ),
|
||||
fn.GetFullPath() ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
|
||||
delete plotter;
|
||||
return CLI::EXIT_CODES::ERR_INVALID_INPUT_FILE;
|
||||
|
@ -580,7 +583,7 @@ int EESCHEMA_JOBS_HANDLER::JobSymExportSvg( JOB* aJob )
|
|||
}
|
||||
catch( ... )
|
||||
{
|
||||
wxFprintf( stderr, _( "Unable to load library\n" ) );
|
||||
m_reporter->Report( _( "Unable to load library\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
}
|
||||
|
||||
|
@ -593,7 +596,7 @@ int EESCHEMA_JOBS_HANDLER::JobSymExportSvg( JOB* aJob )
|
|||
|
||||
if( !symbol )
|
||||
{
|
||||
wxFprintf( stderr, _( "There is no symbol selected to save." ) );
|
||||
m_reporter->Report( _( "There is no symbol selected to save." ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_ARGS;
|
||||
}
|
||||
}
|
||||
|
@ -650,7 +653,7 @@ int EESCHEMA_JOBS_HANDLER::JobSymUpgrade( JOB* aJob )
|
|||
}
|
||||
catch( ... )
|
||||
{
|
||||
wxFprintf( stderr, _( "Unable to load library\n" ) );
|
||||
m_reporter->Report( _( "Unable to load library\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
}
|
||||
|
||||
|
@ -658,7 +661,8 @@ int EESCHEMA_JOBS_HANDLER::JobSymUpgrade( JOB* aJob )
|
|||
{
|
||||
if( wxFile::Exists( upgradeJob->m_outputLibraryPath ) )
|
||||
{
|
||||
wxFprintf( stderr, _( "Output path must not conflict with existing path\n" ) );
|
||||
m_reporter->Report(
|
||||
_( "Output path must not conflict with existing path\n", RPT_SEVERITY_ERROR ) );
|
||||
return CLI::EXIT_CODES::ERR_INVALID_OUTPUT_CONFLICT;
|
||||
}
|
||||
}
|
||||
|
@ -668,7 +672,7 @@ int EESCHEMA_JOBS_HANDLER::JobSymUpgrade( JOB* aJob )
|
|||
|
||||
if( shouldSave )
|
||||
{
|
||||
wxPrintf( _( "Saving symbol library in updated format\n" ) );
|
||||
m_reporter->Report( _( "Saving symbol library in updated format\n", RPT_SEVERITY_ACTION ) );
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -682,13 +686,13 @@ int EESCHEMA_JOBS_HANDLER::JobSymUpgrade( JOB* aJob )
|
|||
}
|
||||
catch( ... )
|
||||
{
|
||||
wxFprintf( stderr, _( "Unable to save library\n" ) );
|
||||
m_reporter->Report( ( "Unable to save library\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wxPrintf( _( "Symbol library was not updated\n" ) );
|
||||
m_reporter->Report( _( "Symbol library was not updated\n" ), RPT_SEVERITY_INFO );
|
||||
}
|
||||
|
||||
return CLI::EXIT_CODES::OK;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2022 Mark Roszko <mark.roszko@gmail.com>
|
||||
* Copyright (C) 1992-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
|
@ -37,7 +37,7 @@ class LIB_SYMBOL;
|
|||
/**
|
||||
* Handles eeschema job dispatches
|
||||
*/
|
||||
class EESCHEMA_JOBS_HANDLER : public JOB_DISPATCHER, REPORTER
|
||||
class EESCHEMA_JOBS_HANDLER : public JOB_DISPATCHER
|
||||
{
|
||||
public:
|
||||
EESCHEMA_JOBS_HANDLER();
|
||||
|
@ -62,16 +62,6 @@ public:
|
|||
void InitRenderSettings( KIGFX::SCH_RENDER_SETTINGS* aRenderSettings, const wxString& aTheme,
|
||||
SCHEMATIC* aSch );
|
||||
|
||||
/*
|
||||
* REPORTER INTERFACE
|
||||
*/
|
||||
REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
||||
|
||||
bool HasMessage() const override
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -239,6 +239,28 @@ public:
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* Reporter forwarding messages to stdout or stderr as appropriate
|
||||
*/
|
||||
class CLI_REPORTER : public REPORTER
|
||||
{
|
||||
public:
|
||||
CLI_REPORTER()
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~CLI_REPORTER()
|
||||
{
|
||||
}
|
||||
|
||||
static REPORTER& GetInstance();
|
||||
|
||||
REPORTER& Report( const wxString& aMsg, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
||||
|
||||
bool HasMessage() const override { return false; }
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Debug type reporter, forwarding messages to std::cout.
|
||||
*/
|
||||
|
|
|
@ -364,6 +364,9 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
|
|||
|
||||
m_jobHandler = std::make_unique<PCBNEW_JOBS_HANDLER>();
|
||||
|
||||
if( m_start_flags & KFCTL_CLI )
|
||||
m_jobHandler->SetReporter( &CLI_REPORTER::GetInstance() );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,6 @@
|
|||
#include <board_design_settings.h>
|
||||
#include <pad.h>
|
||||
#include <pcbnew_settings.h>
|
||||
#include <wx/crt.h>
|
||||
#include <wx/dir.h>
|
||||
#include <pcb_plot_svg.h>
|
||||
#include <gendrill_Excellon_writer.h>
|
||||
|
@ -82,7 +81,7 @@ int PCBNEW_JOBS_HANDLER::JobExportStep( JOB* aJob )
|
|||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
|
||||
if( aJob->IsCli() )
|
||||
wxPrintf( _( "Loading board\n" ) );
|
||||
m_reporter->Report( _( "Loading board\n" ), RPT_SEVERITY_INFO );
|
||||
|
||||
BOARD* brd = LoadBoard( aStepJob->m_filename );
|
||||
|
||||
|
@ -137,16 +136,16 @@ int PCBNEW_JOBS_HANDLER::JobExportSvg( JOB* aJob )
|
|||
svgPlotOptions.m_plotFrame = aSvgJob->m_plotDrawingSheet;
|
||||
|
||||
if( aJob->IsCli() )
|
||||
wxPrintf( _( "Loading board\n" ) );
|
||||
m_reporter->Report( _( "Loading board\n" ), RPT_SEVERITY_INFO );
|
||||
|
||||
BOARD* brd = LoadBoard( aSvgJob->m_filename );
|
||||
|
||||
if( aJob->IsCli() )
|
||||
{
|
||||
if( PCB_PLOT_SVG::Plot( brd, svgPlotOptions ) )
|
||||
wxPrintf( _( "Successfully created svg file" ) );
|
||||
m_reporter->Report( _( "Successfully created svg file" ), RPT_SEVERITY_INFO );
|
||||
else
|
||||
wxPrintf( _( "Error creating svg file" ) );
|
||||
m_reporter->Report( _( "Error creating svg file" ), RPT_SEVERITY_ERROR );
|
||||
}
|
||||
|
||||
return CLI::EXIT_CODES::OK;
|
||||
|
@ -161,7 +160,7 @@ int PCBNEW_JOBS_HANDLER::JobExportDxf( JOB* aJob )
|
|||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
|
||||
if( aJob->IsCli() )
|
||||
wxPrintf( _( "Loading board\n" ) );
|
||||
m_reporter->Report( _( "Loading board\n" ), RPT_SEVERITY_INFO );
|
||||
|
||||
BOARD* brd = LoadBoard( aDxfJob->m_filename );
|
||||
|
||||
|
@ -216,7 +215,7 @@ int PCBNEW_JOBS_HANDLER::JobExportPdf( JOB* aJob )
|
|||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
|
||||
if( aJob->IsCli() )
|
||||
wxPrintf( _( "Loading board\n" ) );
|
||||
m_reporter->Report( _( "Loading board\n" ), RPT_SEVERITY_INFO );
|
||||
|
||||
BOARD* brd = LoadBoard( aPdfJob->m_filename );
|
||||
|
||||
|
@ -269,7 +268,7 @@ int PCBNEW_JOBS_HANDLER::JobExportGerbers( JOB* aJob )
|
|||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
|
||||
if( aJob->IsCli() )
|
||||
wxPrintf( _( "Loading board\n" ) );
|
||||
m_reporter->Report( _( "Loading board\n" ), RPT_SEVERITY_INFO );
|
||||
|
||||
BOARD* brd = LoadBoard( aGerberJob->m_filename );
|
||||
PCB_PLOT_PARAMS boardPlotOptions = brd->GetPlotOptions();
|
||||
|
@ -333,13 +332,16 @@ int PCBNEW_JOBS_HANDLER::JobExportGerbers( JOB* aJob )
|
|||
|
||||
if( plotter )
|
||||
{
|
||||
wxPrintf( _( "Plotted to '%s'.\n" ), fn.GetFullPath() );
|
||||
m_reporter->Report( wxString::Format( _( "Plotted to '%s'.\n" ), fn.GetFullPath() ),
|
||||
RPT_SEVERITY_ACTION );
|
||||
PlotBoardLayers( brd, plotter, plotSequence, plotOpts );
|
||||
plotter->EndPlot();
|
||||
}
|
||||
else
|
||||
{
|
||||
wxFprintf( stderr, _( "Failed to plot to '%s'.\n" ), fn.GetFullPath() );
|
||||
m_reporter->Report( wxString::Format( _( "Failed to plot to '%s'.\n" ),
|
||||
fn.GetFullPath() ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
exitCode = CLI::EXIT_CODES::ERR_INVALID_OUTPUT_CONFLICT;
|
||||
}
|
||||
|
||||
|
@ -387,7 +389,7 @@ int PCBNEW_JOBS_HANDLER::JobExportGerber( JOB* aJob )
|
|||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
|
||||
if( aJob->IsCli() )
|
||||
wxPrintf( _( "Loading board\n" ) );
|
||||
m_reporter->Report( _( "Loading board\n" ), RPT_SEVERITY_INFO );
|
||||
|
||||
BOARD* brd = LoadBoard( aGerberJob->m_filename );
|
||||
|
||||
|
@ -417,7 +419,9 @@ int PCBNEW_JOBS_HANDLER::JobExportGerber( JOB* aJob )
|
|||
}
|
||||
else
|
||||
{
|
||||
wxFprintf( stderr, _( "Failed to plot to '%s'.\n" ), aGerberJob->m_outputFile );
|
||||
m_reporter->Report( wxString::Format( _( "Failed to plot to '%s'.\n" ),
|
||||
aGerberJob->m_outputFile ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
exitCode = CLI::EXIT_CODES::ERR_INVALID_OUTPUT_CONFLICT;
|
||||
}
|
||||
|
||||
|
@ -438,7 +442,7 @@ int PCBNEW_JOBS_HANDLER::JobExportDrill( JOB* aJob )
|
|||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
|
||||
if( aJob->IsCli() )
|
||||
wxPrintf( _( "Loading board\n" ) );
|
||||
m_reporter->Report( _( "Loading board\n" ), RPT_SEVERITY_INFO );
|
||||
|
||||
BOARD* brd = LoadBoard( aDrillJob->m_filename );
|
||||
|
||||
|
@ -514,7 +518,7 @@ int PCBNEW_JOBS_HANDLER::JobExportDrill( JOB* aJob )
|
|||
excellonWriter->SetMapFileFormat( mapFormat );
|
||||
|
||||
if( !excellonWriter->CreateDrillandMapFilesSet( aDrillJob->m_outputDir, true,
|
||||
aDrillJob->m_generateMap, this ) )
|
||||
aDrillJob->m_generateMap, m_reporter ) )
|
||||
{
|
||||
return CLI::EXIT_CODES::ERR_INVALID_OUTPUT_CONFLICT;
|
||||
}
|
||||
|
@ -534,7 +538,7 @@ int PCBNEW_JOBS_HANDLER::JobExportDrill( JOB* aJob )
|
|||
gerberWriter->SetMapFileFormat( mapFormat );
|
||||
|
||||
if( !gerberWriter->CreateDrillandMapFilesSet( aDrillJob->m_outputDir, true,
|
||||
aDrillJob->m_generateMap, this ) )
|
||||
aDrillJob->m_generateMap, m_reporter ) )
|
||||
{
|
||||
return CLI::EXIT_CODES::ERR_INVALID_OUTPUT_CONFLICT;
|
||||
}
|
||||
|
@ -552,7 +556,7 @@ int PCBNEW_JOBS_HANDLER::JobExportPos( JOB* aJob )
|
|||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
|
||||
if( aJob->IsCli() )
|
||||
wxPrintf( _( "Loading board\n" ) );
|
||||
m_reporter->Report( _( "Loading board\n" ), RPT_SEVERITY_INFO );
|
||||
|
||||
BOARD* brd = LoadBoard( aPosJob->m_filename );
|
||||
|
||||
|
@ -627,14 +631,15 @@ int PCBNEW_JOBS_HANDLER::JobExportFpUpgrade( JOB* aJob )
|
|||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
|
||||
if( aJob->IsCli() )
|
||||
wxPrintf( _( "Loading footprint library\n" ) );
|
||||
m_reporter->Report( _( "Loading footprint library\n" ), RPT_SEVERITY_INFO );
|
||||
|
||||
if( !upgradeJob->m_outputLibraryPath.IsEmpty() )
|
||||
{
|
||||
if( wxFile::Exists( upgradeJob->m_outputLibraryPath ) ||
|
||||
wxDir::Exists( upgradeJob->m_outputLibraryPath) )
|
||||
{
|
||||
wxFprintf( stderr, _( "Output path must not conflict with existing path\n" ) );
|
||||
m_reporter->Report( _( "Output path must not conflict with existing path\n" ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_INVALID_OUTPUT_CONFLICT;
|
||||
}
|
||||
}
|
||||
|
@ -648,7 +653,7 @@ int PCBNEW_JOBS_HANDLER::JobExportFpUpgrade( JOB* aJob )
|
|||
}
|
||||
catch(...)
|
||||
{
|
||||
wxFprintf( stderr, _( "Unable to load library\n" ) );
|
||||
m_reporter->Report( _( "Unable to load library\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
}
|
||||
|
||||
|
@ -664,7 +669,7 @@ int PCBNEW_JOBS_HANDLER::JobExportFpUpgrade( JOB* aJob )
|
|||
|
||||
if( shouldSave )
|
||||
{
|
||||
wxPrintf( _( "Saving footprint library\n" ) );
|
||||
m_reporter->Report( _( "Saving footprint library\n" ), RPT_SEVERITY_INFO );
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -677,13 +682,13 @@ int PCBNEW_JOBS_HANDLER::JobExportFpUpgrade( JOB* aJob )
|
|||
}
|
||||
catch( ... )
|
||||
{
|
||||
wxFprintf( stderr, _( "Unable to save library\n" ) );
|
||||
m_reporter->Report( _( "Unable to save library\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wxPrintf( _( "Footprint library was not updated\n" ) );
|
||||
m_reporter->Report( _( "Footprint library was not updated\n" ), RPT_SEVERITY_INFO );
|
||||
}
|
||||
|
||||
return CLI::EXIT_CODES::OK;
|
||||
|
@ -698,7 +703,7 @@ int PCBNEW_JOBS_HANDLER::JobExportFpSvg( JOB* aJob )
|
|||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
|
||||
if( aJob->IsCli() )
|
||||
wxPrintf( _( "Loading footprint library\n" ) );
|
||||
m_reporter->Report( _( "Loading footprint library\n" ), RPT_SEVERITY_INFO );
|
||||
|
||||
PCB_PLUGIN pcb_io( CTL_FOR_LIBRARY );
|
||||
FP_CACHE fpLib( &pcb_io, svgJob->m_libraryPath );
|
||||
|
@ -709,7 +714,7 @@ int PCBNEW_JOBS_HANDLER::JobExportFpSvg( JOB* aJob )
|
|||
}
|
||||
catch( ... )
|
||||
{
|
||||
wxFprintf( stderr, _( "Unable to load library\n" ) );
|
||||
m_reporter->Report( _( "Unable to load library\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
}
|
||||
|
||||
|
@ -747,7 +752,10 @@ int PCBNEW_JOBS_HANDLER::JobExportFpSvg( JOB* aJob )
|
|||
}
|
||||
|
||||
if( !svgJob->m_footprint.IsEmpty() && !singleFpPlotted )
|
||||
wxFprintf( stderr, _( "The given footprint could not be found to export." ) );
|
||||
{
|
||||
m_reporter->Report( _( "The given footprint could not be found to export." ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
}
|
||||
|
||||
return CLI::EXIT_CODES::OK;
|
||||
}
|
||||
|
@ -785,8 +793,10 @@ int PCBNEW_JOBS_HANDLER::doFpExportSvg( JOB_FP_EXPORT_SVG* aSvgJob, const FOOTPR
|
|||
outputFile.SetName( aFootprint->GetFPID().GetLibItemName().wx_str() );
|
||||
outputFile.SetExt( SVGFileExtension );
|
||||
|
||||
wxPrintf( _( "Plotting footprint '%s' to '%s'\n" ),
|
||||
aFootprint->GetFPID().GetLibItemName().wx_str(), outputFile.GetFullPath() );
|
||||
m_reporter->Report( wxString::Format( _( "Plotting footprint '%s' to '%s'\n" ),
|
||||
aFootprint->GetFPID().GetLibItemName().wx_str(),
|
||||
outputFile.GetFullPath() ),
|
||||
RPT_SEVERITY_ACTION );
|
||||
|
||||
|
||||
PCB_PLOT_SVG_OPTIONS svgPlotOptions;
|
||||
|
@ -799,19 +809,9 @@ int PCBNEW_JOBS_HANDLER::doFpExportSvg( JOB_FP_EXPORT_SVG* aSvgJob, const FOOTPR
|
|||
svgPlotOptions.m_plotFrame = false;
|
||||
|
||||
if( !PCB_PLOT_SVG::Plot( brd.get(), svgPlotOptions ) )
|
||||
wxFprintf( stderr, _( "Error creating svg file" ) );
|
||||
m_reporter->Report( _( "Error creating svg file" ), RPT_SEVERITY_ERROR );
|
||||
|
||||
|
||||
return CLI::EXIT_CODES::OK;
|
||||
}
|
||||
|
||||
|
||||
REPORTER& PCBNEW_JOBS_HANDLER::Report( const wxString& aText, SEVERITY aSeverity )
|
||||
{
|
||||
if( aSeverity == RPT_SEVERITY_ERROR )
|
||||
wxFprintf( stderr, wxS( "%s\n" ), aText );
|
||||
else
|
||||
wxPrintf( wxS( "%s\n" ), aText );
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2022 Mark Roszko <mark.roszko@gmail.com>
|
||||
* Copyright (C) 1992-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
|
@ -29,7 +29,7 @@ class JOB_EXPORT_PCB_GERBER;
|
|||
class JOB_FP_EXPORT_SVG;
|
||||
class FOOTPRINT;
|
||||
|
||||
class PCBNEW_JOBS_HANDLER : public JOB_DISPATCHER, REPORTER
|
||||
class PCBNEW_JOBS_HANDLER : public JOB_DISPATCHER
|
||||
{
|
||||
public:
|
||||
PCBNEW_JOBS_HANDLER();
|
||||
|
@ -44,13 +44,6 @@ public:
|
|||
int JobExportFpUpgrade( JOB* aJob );
|
||||
int JobExportFpSvg( JOB* aJob );
|
||||
|
||||
/*
|
||||
* REPORTER INTERFACE
|
||||
*/
|
||||
REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_SEVERITY_UNDEFINED ) override;
|
||||
|
||||
bool HasMessage() const override { return false; }
|
||||
|
||||
private:
|
||||
void populateGerberPlotOptionsFromJob( PCB_PLOT_PARAMS& aPlotOpts,
|
||||
JOB_EXPORT_PCB_GERBER* aJob );
|
||||
|
|
Loading…
Reference in New Issue