Fixed bugs #568896 and #569312 and minor code cleaning

This commit is contained in:
jean-pierre charras 2010-04-24 13:27:38 +02:00
parent 3b658b4be6
commit 1ca9cbe547
6 changed files with 53 additions and 65 deletions

View File

@ -630,7 +630,6 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef(
bool CompactForm,
bool aIncludeSubComponents )
{
int Multi, Unit;
EDA_BaseStruct* DrawList;
SCH_COMPONENT* DrawLibItem;
LIB_COMPONENT* Entry;
@ -688,22 +687,20 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef(
DrawLibItem = (SCH_COMPONENT*) DrawList;
Multi = 0;
Unit = ' ';
bool isMulti = false;
wxString subRef;
Entry = CMP_LIBRARY::FindLibraryComponent( DrawLibItem->m_ChipName );
if( Entry )
Multi = Entry->GetPartCount();
isMulti = Entry->IsMulti();
if( ( Multi > 1 ) && aIncludeSubComponents )
#if defined(KICAD_GOST)
Unit = aList[ii].m_Unit + '1' - 1;
#else
Unit = aList[ii].m_Unit + 'A' - 1;
#endif
if( isMulti && aIncludeSubComponents )
subRef = LIB_COMPONENT::ReturnSubReference( aList[ii].m_Unit );
else
subRef.Empty();
sprintf( CmpName, "%s", aList[ii].m_Reference );
if( !CompactForm || Unit != ' ' )
sprintf( CmpName + strlen( CmpName ), "%c", Unit );
if( !CompactForm )
sprintf( CmpName + strlen( CmpName ), "%s", CONV_TO_UTF8(subRef) );
if( CompactForm )
#if defined(KICAD_GOST)
@ -875,8 +872,6 @@ int DIALOG_BUILD_BOM::PrintComponentsListByVal(
std::vector <OBJ_CMP_TO_LIST>& aList,
bool aIncludeSubComponents )
{
int Multi;
wxChar Unit;
EDA_BaseStruct* DrawList;
SCH_COMPONENT* DrawLibItem;
LIB_COMPONENT* Entry;
@ -902,25 +897,19 @@ int DIALOG_BUILD_BOM::PrintComponentsListByVal(
DrawLibItem = (SCH_COMPONENT*) DrawList;
Multi = 0;
Unit = ' ';
bool isMulti = false;
Entry = CMP_LIBRARY::FindLibraryComponent( DrawLibItem->m_ChipName );
if( Entry )
Multi = Entry->GetPartCount();
isMulti = Entry->IsMulti();
if( ( Multi > 1 ) && aIncludeSubComponents )
{
#if defined(KICAD_GOST)
Unit = aList[ii].m_Unit + '1' - 1;
}
wxString subRef;
if( isMulti && aIncludeSubComponents )
subRef = LIB_COMPONENT::ReturnSubReference( aList[ii].m_Unit );
else
subRef.Empty();
sprintf( CmpName, "%s.%c", aList[ii].m_Reference, Unit );
#else
Unit = aList[ii].m_Unit + 'A' - 1;
}
sprintf( CmpName, "%s%s", aList[ii].m_Reference, CONV_TO_UTF8(subRef) );
sprintf( CmpName, "%s%c", aList[ii].m_Reference, Unit );
#endif
fprintf( f, "| %-12s %-10s",
CONV_TO_UTF8( DrawLibItem->GetField( VALUE )->m_Text ),
CmpName );

View File

@ -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,
const wxPoint& aOffset, int aMulti,

View File

@ -575,6 +575,20 @@ public:
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.
*

View File

@ -502,21 +502,11 @@ wxString LIB_FIELD::GetFullText( int unit )
return m_Text;
wxString text = m_Text;
if( GetParent()->GetPartCount() > 1 )
{
#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( "?" );
if( GetParent()->IsMulti() )
text << LIB_COMPONENT::ReturnSubReference( unit );
return text;
}

View File

@ -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
* A, B, ... or 1, 2, .. to the reference. */
wxString fulltext = m_Text;
char part_id;
#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 );
fulltext << LIB_COMPONENT::ReturnSubReference( parentComponent->m_Multi );
DrawGraphicText( panel, DC, textpos, color, fulltext,
orient,
@ -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
* A, B, ... or 1, 2, .. to the reference. */
int part_id = pSch->GetUnitSelection( sheet );
#if defined(KICAD_GOST)
fulltext.Append( '.' );
part_id += '1' - 1;
#else
part_id += 'A' - 1;
#endif
fulltext.Append( (char)part_id );
fulltext << LIB_COMPONENT::ReturnSubReference( part_id );
}
return SCH_ITEM::Matches( fulltext, aSearchData );
}

View File

@ -125,15 +125,7 @@ static void PlotTextField( PLOTTER* plotter, SCH_COMPONENT* DrawLibItem,
{
/* Adding A, B ... to the reference */
wxString Text;
Text = field->m_Text;
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 );
Text = field->m_Text + LIB_COMPONENT::ReturnSubReference( DrawLibItem->m_Multi );
plotter->text( textpos, color, Text,
orient,
field->m_Size, hjustify, vjustify,