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

Fixed bugs #568896 and #569312 and minor code cleaning

parent 3b658b4b
Loading
Loading
Loading
Loading
+17 −28
Original line number Original line Diff line number Diff line
@@ -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(


        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(
    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(


        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 );
+16 −0
Original line number Original line Diff line number Diff line
@@ -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,
+14 −0
Original line number Original line Diff line number Diff line
@@ -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.
     *
     *
+3 −13
Original line number Original line Diff line number Diff line
@@ -502,21 +502,11 @@ wxString LIB_FIELD::GetFullText( int unit )
        return m_Text;
        return m_Text;


    wxString text = 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( "?" );
    text << wxT( "?" );


    if( GetParent()->IsMulti() )
        text << LIB_COMPONENT::ReturnSubReference( unit );

    return text;
    return text;
}
}


+2 −15
Original line number Original line Diff line number Diff line
@@ -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 )
            /* 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 );
    }
    }
Loading