diff --git a/common/pcb.keywords b/common/pcb.keywords index 2d4c8327c3..59c2c7ba0b 100644 --- a/common/pcb.keywords +++ b/common/pcb.keywords @@ -141,6 +141,7 @@ hatch_min_hole_area height hide hole_to_hole_min +host id island island_removal_mode diff --git a/gerbview/export_to_pcbnew.cpp b/gerbview/export_to_pcbnew.cpp index 71514ef7bc..c1f5412892 100644 --- a/gerbview/export_to_pcbnew.cpp +++ b/gerbview/export_to_pcbnew.cpp @@ -437,8 +437,7 @@ void GBR_TO_PCB_EXPORTER::export_flashed_copper_item( const GERBER_DRAW_ITEM* aG void GBR_TO_PCB_EXPORTER::writePcbHeader( const LAYER_NUM* aLayerLookUpTable ) { - fprintf( m_fp, "(kicad_pcb (version 4) (host Gerbview \"%s\")\n\n", - TO_UTF8( GetBuildVersion() ) ); + fprintf( m_fp, "(kicad_pcb (version 4) (generator gerbview)\n\n" ); // Write layers section fprintf( m_fp, " (layers \n" ); diff --git a/pcbnew/board.h b/pcbnew/board.h index 5ae5137b25..ce56aacf91 100644 --- a/pcbnew/board.h +++ b/pcbnew/board.h @@ -286,7 +286,10 @@ public: void Move( const wxPoint& aMoveVector ) override; void SetFileFormatVersionAtLoad( int aVersion ) { m_fileFormatVersionAtLoad = aVersion; } - int GetFileFormatVersionAtLoad() const { return m_fileFormatVersionAtLoad; } + int GetFileFormatVersionAtLoad() const { return m_fileFormatVersionAtLoad; } + + void SetGenerator( const wxString& aGenerator ) { m_generator = aGenerator; } + const wxString& GetGenerator() const { return m_generator; } void Add( BOARD_ITEM* aItem, ADD_MODE aMode = ADD_MODE::INSERT ) override; @@ -1126,6 +1129,7 @@ private: HIGH_LIGHT_INFO m_highLightPrevious; // a previously stored high light data int m_fileFormatVersionAtLoad; // the version loaded from the file + wxString m_generator; // the generator tag from the file std::map<wxString, wxString> m_properties; std::shared_ptr<CONNECTIVITY_DATA> m_connectivity; diff --git a/pcbnew/files.cpp b/pcbnew/files.cpp index 8800d5aab7..486b98e720 100644 --- a/pcbnew/files.cpp +++ b/pcbnew/files.cpp @@ -780,10 +780,10 @@ bool PCB_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in else GetScreen()->SetContentModified( false ); - if( ( pluginType == IO_MGR::LEGACY && - loadedBoard->GetFileFormatVersionAtLoad() < LEGACY_BOARD_FILE_VERSION ) || - ( pluginType == IO_MGR::KICAD_SEXP && - loadedBoard->GetFileFormatVersionAtLoad() < SEXPR_BOARD_FILE_VERSION ) ) + if( ( pluginType == IO_MGR::LEGACY ) + || ( pluginType == IO_MGR::KICAD_SEXP + && loadedBoard->GetFileFormatVersionAtLoad() < SEXPR_BOARD_FILE_VERSION + && loadedBoard->GetGenerator().Lower() != "gerbview" ) ) { m_infoBar->RemoveAllButtons(); m_infoBar->AddCloseButton(); diff --git a/pcbnew/plugins/kicad/pcb_parser.cpp b/pcbnew/plugins/kicad/pcb_parser.cpp index d0888e0f34..7777e26f6f 100644 --- a/pcbnew/plugins/kicad/pcb_parser.cpp +++ b/pcbnew/plugins/kicad/pcb_parser.cpp @@ -592,6 +592,23 @@ BOARD* PCB_PARSER::parseBOARD_unchecked() switch( token ) { + case T_host: // legacy token + NeedSYMBOL(); + m_board->SetGenerator( FromUTF8() ); + + // Older formats included build data + if( m_requiredVersion < BOARD_FILE_HOST_VERSION ) + NeedSYMBOL(); + + NeedRIGHT(); + break; + + case T_generator: + NeedSYMBOL(); + m_board->SetGenerator( FromUTF8() ); + NeedRIGHT(); + break; + case T_general: parseGeneralSection(); break; @@ -900,27 +917,12 @@ void PCB_PARSER::parseHeader() m_requiredVersion = parseInt( FromUTF8().mb_str( wxConvUTF8 ) ); m_tooRecent = ( m_requiredVersion > SEXPR_BOARD_FILE_VERSION ); NeedRIGHT(); - - NeedLEFT(); - NeedSYMBOL(); - NeedSYMBOL(); - - // Older formats included build data - if( m_requiredVersion < BOARD_FILE_HOST_VERSION ) - NeedSYMBOL(); - - NeedRIGHT(); } else { m_requiredVersion = 20201115; // Last version before we started writing version #s // in footprint files as well as board files. m_tooRecent = ( m_requiredVersion > SEXPR_BOARD_FILE_VERSION ); - - // Skip the host name and host build version information. - NeedSYMBOL(); - NeedSYMBOL(); - NeedRIGHT(); } m_board->SetFileFormatVersionAtLoad( m_requiredVersion );