Commit 1ca9cbe5 authored by jean-pierre charras's avatar jean-pierre charras

Fixed bugs #568896 and #569312 and minor code cleaning

parent 3b658b4b
...@@ -630,7 +630,6 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef( ...@@ -630,7 +630,6 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef(
bool CompactForm, bool CompactForm,
bool aIncludeSubComponents ) bool aIncludeSubComponents )
{ {
int Multi, Unit;
EDA_BaseStruct* DrawList; EDA_BaseStruct* DrawList;
SCH_COMPONENT* DrawLibItem; SCH_COMPONENT* DrawLibItem;
LIB_COMPONENT* Entry; LIB_COMPONENT* Entry;
...@@ -688,22 +687,20 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef( ...@@ -688,22 +687,20 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef(
DrawLibItem = (SCH_COMPONENT*) DrawList; DrawLibItem = (SCH_COMPONENT*) DrawList;
Multi = 0; bool isMulti = false;
Unit = ' '; wxString subRef;
Entry = CMP_LIBRARY::FindLibraryComponent( DrawLibItem->m_ChipName ); Entry = CMP_LIBRARY::FindLibraryComponent( DrawLibItem->m_ChipName );
if( Entry ) if( Entry )
Multi = Entry->GetPartCount(); isMulti = Entry->IsMulti();
if( ( Multi > 1 ) && aIncludeSubComponents ) if( isMulti && aIncludeSubComponents )
#if defined(KICAD_GOST) subRef = LIB_COMPONENT::ReturnSubReference( aList[ii].m_Unit );
Unit = aList[ii].m_Unit + '1' - 1; else
#else subRef.Empty();
Unit = aList[ii].m_Unit + 'A' - 1;
#endif
sprintf( CmpName, "%s", aList[ii].m_Reference ); sprintf( CmpName, "%s", aList[ii].m_Reference );
if( !CompactForm || Unit != ' ' ) if( !CompactForm )
sprintf( CmpName + strlen( CmpName ), "%c", Unit ); sprintf( CmpName + strlen( CmpName ), "%s", CONV_TO_UTF8(subRef) );
if( CompactForm ) if( CompactForm )
#if defined(KICAD_GOST) #if defined(KICAD_GOST)
...@@ -875,8 +872,6 @@ int DIALOG_BUILD_BOM::PrintComponentsListByVal( ...@@ -875,8 +872,6 @@ int DIALOG_BUILD_BOM::PrintComponentsListByVal(
std::vector <OBJ_CMP_TO_LIST>& aList, std::vector <OBJ_CMP_TO_LIST>& aList,
bool aIncludeSubComponents ) bool aIncludeSubComponents )
{ {
int Multi;
wxChar Unit;
EDA_BaseStruct* DrawList; EDA_BaseStruct* DrawList;
SCH_COMPONENT* DrawLibItem; SCH_COMPONENT* DrawLibItem;
LIB_COMPONENT* Entry; LIB_COMPONENT* Entry;
...@@ -902,25 +897,19 @@ int DIALOG_BUILD_BOM::PrintComponentsListByVal( ...@@ -902,25 +897,19 @@ int DIALOG_BUILD_BOM::PrintComponentsListByVal(
DrawLibItem = (SCH_COMPONENT*) DrawList; DrawLibItem = (SCH_COMPONENT*) DrawList;
Multi = 0; bool isMulti = false;
Unit = ' ';
Entry = CMP_LIBRARY::FindLibraryComponent( DrawLibItem->m_ChipName ); Entry = CMP_LIBRARY::FindLibraryComponent( DrawLibItem->m_ChipName );
if( Entry ) if( Entry )
Multi = Entry->GetPartCount(); isMulti = Entry->IsMulti();
if( ( Multi > 1 ) && aIncludeSubComponents ) wxString subRef;
{ if( isMulti && aIncludeSubComponents )
#if defined(KICAD_GOST) subRef = LIB_COMPONENT::ReturnSubReference( aList[ii].m_Unit );
Unit = aList[ii].m_Unit + '1' - 1; else
} subRef.Empty();
sprintf( CmpName, "%s.%c", aList[ii].m_Reference, Unit ); sprintf( CmpName, "%s%s", aList[ii].m_Reference, CONV_TO_UTF8(subRef) );
#else
Unit = aList[ii].m_Unit + 'A' - 1;
}
sprintf( CmpName, "%s%c", aList[ii].m_Reference, Unit );
#endif
fprintf( f, "| %-12s %-10s", fprintf( f, "| %-12s %-10s",
CONV_TO_UTF8( DrawLibItem->GetField( VALUE )->m_Text ), CONV_TO_UTF8( DrawLibItem->GetField( VALUE )->m_Text ),
CmpName ); CmpName );
......
...@@ -230,6 +230,22 @@ LIB_COMPONENT::~LIB_COMPONENT() ...@@ -230,6 +230,22 @@ LIB_COMPONENT::~LIB_COMPONENT()
{ {
} }
/** function IsMulti
* @return the sub reference for component having multiple parts per package.
* The sub reference identify the part (or unit)
* @param aUnit = the part identifier ( 1 to 26)
*/
wxString LIB_COMPONENT::ReturnSubReference( int aUnit )
{
wxString subRef;
#if defined(KICAD_GOST)
subRef.Printf( wxT(".%d" ), aUnit);
#else
subRef.Append( aUnit + 'A' - 1 );
#endif
return subRef;
}
void LIB_COMPONENT::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDc, void LIB_COMPONENT::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDc,
const wxPoint& aOffset, int aMulti, const wxPoint& aOffset, int aMulti,
......
...@@ -575,6 +575,20 @@ public: ...@@ -575,6 +575,20 @@ public:
int GetPartCount() { return unitCount; } int GetPartCount() { return unitCount; }
/** function IsMulti
* @return true if the component has multiple parts per package.
* When happens, the reference has a sub reference ti identify part
*/
bool IsMulti() { return unitCount > 1; }
/** function IsMulti
* @return the sub reference for component having multiple parts per package.
* The sub reference identify the part (or unit)
* @param aUnit = the part identifier ( 1 to max count)
* Note: this is a static function.
*/
static wxString ReturnSubReference( int aUnit );
/** /**
* Set or clear the alternate body style (DeMorgan) for the component. * Set or clear the alternate body style (DeMorgan) for the component.
* *
......
...@@ -502,20 +502,10 @@ wxString LIB_FIELD::GetFullText( int unit ) ...@@ -502,20 +502,10 @@ wxString LIB_FIELD::GetFullText( int unit )
return m_Text; return m_Text;
wxString text = m_Text; wxString text = m_Text;
text << wxT( "?" );
if( GetParent()->GetPartCount() > 1 ) if( GetParent()->IsMulti() )
{ text << LIB_COMPONENT::ReturnSubReference( unit );
#if defined(KICAD_GOST)
text.Printf( wxT( "%s?.%c" ),
m_Text.GetData(), unit + '1' - 1 );
#else
text.Printf( wxT( "%s?%c" ),
m_Text.GetData(), unit + 'A' - 1 );
#endif
}
else
text << wxT( "?" );
return text; return text;
} }
......
...@@ -140,14 +140,7 @@ void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, ...@@ -140,14 +140,7 @@ void SCH_FIELD::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
/* For more than one part per package, we must add the part selection /* For more than one part per package, we must add the part selection
* A, B, ... or 1, 2, .. to the reference. */ * A, B, ... or 1, 2, .. to the reference. */
wxString fulltext = m_Text; wxString fulltext = m_Text;
char part_id; fulltext << LIB_COMPONENT::ReturnSubReference( parentComponent->m_Multi );
#if defined(KICAD_GOST)
fulltext.Append( '.' );
part_id = '1' - 1 + parentComponent->m_Multi;
#else
part_id = 'A' - 1 + parentComponent->m_Multi;
#endif
fulltext.Append( part_id );
DrawGraphicText( panel, DC, textpos, color, fulltext, DrawGraphicText( panel, DC, textpos, color, fulltext,
orient, orient,
...@@ -432,13 +425,7 @@ bool SCH_FIELD::Matches( wxFindReplaceData& aSearchData, void * aAuxData ) ...@@ -432,13 +425,7 @@ bool SCH_FIELD::Matches( wxFindReplaceData& aSearchData, void * aAuxData )
/* For more than one part per package, we must add the part selection /* For more than one part per package, we must add the part selection
* A, B, ... or 1, 2, .. to the reference. */ * A, B, ... or 1, 2, .. to the reference. */
int part_id = pSch->GetUnitSelection( sheet ); int part_id = pSch->GetUnitSelection( sheet );
#if defined(KICAD_GOST) fulltext << LIB_COMPONENT::ReturnSubReference( part_id );
fulltext.Append( '.' );
part_id += '1' - 1;
#else
part_id += 'A' - 1;
#endif
fulltext.Append( (char)part_id );
} }
return SCH_ITEM::Matches( fulltext, aSearchData ); return SCH_ITEM::Matches( fulltext, aSearchData );
} }
......
...@@ -125,15 +125,7 @@ static void PlotTextField( PLOTTER* plotter, SCH_COMPONENT* DrawLibItem, ...@@ -125,15 +125,7 @@ static void PlotTextField( PLOTTER* plotter, SCH_COMPONENT* DrawLibItem,
{ {
/* Adding A, B ... to the reference */ /* Adding A, B ... to the reference */
wxString Text; wxString Text;
Text = field->m_Text; Text = field->m_Text + LIB_COMPONENT::ReturnSubReference( DrawLibItem->m_Multi );
char unit_id;
#if defined(KICAD_GOST)
Text.Append( '.' );
unit_id = '1' - 1 + DrawLibItem->m_Multi;
#else
unit_id = 'A' - 1 + DrawLibItem->m_Multi;
#endif
Text.Append( unit_id );
plotter->text( textpos, color, Text, plotter->text( textpos, color, Text,
orient, orient,
field->m_Size, hjustify, vjustify, field->m_Size, hjustify, vjustify,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment