77 if(
board->Footprints().empty() )
79 m_frame->ShowInfoBarError(
_(
"Cannot export BOM: there are no footprints on the PCB." ) );
84 fn =
board->GetFileName();
87 wxString pro_dir = wxPathOnly(
m_frame->Prj().GetProjectFullName() );
89 wxFileDialog dlg(
m_frame,
_(
"Save Bill of Materials" ), pro_dir, fn.GetFullName(),
92 if( dlg.ShowModal() == wxID_CANCEL )
97 fp_bom = wxFopen( fn.GetFullPath(), wxT(
"wt" ) );
99 if( fp_bom ==
nullptr )
101 DisplayError(
m_frame, wxString::Format(
_(
"Failed to create file '%s'." ), fn.GetFullPath() ) );
106 wxString msg = wxT(
"\"" );
107 msg <<
_(
"Id" ) << wxT(
"\";\"" );
108 msg <<
_(
"Designator" ) << wxT(
"\";\"" );
109 msg <<
_(
"Footprint" ) << wxT(
"\";\"" );
110 msg <<
_(
"Quantity" ) << wxT(
"\";\"" );
111 msg <<
_(
"Designation" ) << wxT(
"\";\"" );
112 msg <<
_(
"Supplier and ref" ) << wxT(
"\";\n" );
113 fprintf( fp_bom,
"%s",
TO_UTF8( msg ) );
124 bool valExist =
false;
129 if( curEntry.m_Val ==
footprint->GetValue() && curEntry.m_FPID ==
footprint->GetFPID() )
131 curEntry.m_Ref.Append( wxT(
", " ), 1 );
132 curEntry.m_Ref.Append(
footprint->Reference().GetShownText(
false ) );
158 msg << curEntry.m_Id << wxT(
";\"" );
159 msg << curEntry.m_Ref << wxT(
"\";\"" );
160 msg <<
From_UTF8( curEntry.m_FPID.GetLibItemName().c_str() ) << wxT(
"\";" );
161 msg << curEntry.m_Count << wxT(
";\"" );
162 msg << curEntry.m_Val << wxT(
"\";;;\n" );
163 fprintf( fp_bom,
"%s",
TO_UTF8( msg ) );