diff --git a/eeschema/eeschema_jobs_handler.cpp b/eeschema/eeschema_jobs_handler.cpp index c89d9a1b91..601509b5e3 100644 --- a/eeschema/eeschema_jobs_handler.cpp +++ b/eeschema/eeschema_jobs_handler.cpp @@ -449,6 +449,46 @@ int EESCHEMA_JOBS_HANDLER::JobExportBom( JOB* aJob ) for( wxString fieldName : aBomJob->m_fieldsOrdered ) { + // Handle wildcard. We allow the wildcard anywhere in the list, but it needs to respect + // fields that come before and after the wildcard. + if( fieldName == _( "*" ) ) + { + for( const BOM_FIELD& modelField : dataModel.GetFieldsOrdered() ) + { + struct BOM_FIELD field; + + field.name = modelField.name; + field.show = true; + field.groupBy = false; + field.label = field.name; + + bool fieldAlreadyPresent = false; + for( BOM_FIELD& presetField : preset.fieldsOrdered ) + { + if( presetField.name == field.name ) + { + fieldAlreadyPresent = true; + break; + } + } + + bool fieldLaterInList = false; + for( const wxString& fieldInList : aBomJob->m_fieldsOrdered ) + { + if( fieldInList == field.name ) + { + fieldLaterInList = true; + break; + } + } + + if( !fieldAlreadyPresent && !fieldLaterInList ) + preset.fieldsOrdered.emplace_back( field ); + } + + continue; + } + struct BOM_FIELD field; field.name = fieldName; diff --git a/kicad/cli/command_sch_export_bom.h b/kicad/cli/command_sch_export_bom.h index 4a6871a274..63f9d2baf4 100644 --- a/kicad/cli/command_sch_export_bom.h +++ b/kicad/cli/command_sch_export_bom.h @@ -53,7 +53,7 @@ namespace CLI //Options for controlling the fields and the grouping #define ARG_FIELDS "--fields" -#define ARG_FIELDS_DESC "An ordered list of fields to export." +#define ARG_FIELDS_DESC "An ordered list of fields to export. Supports * and ${} substitutions." #define ARG_LABELS "--labels" #define ARG_LABELS_DESC "An ordered list of labels to apply the exported fields."