Commit 4eb80203 authored by Dick Hollenbeck's avatar Dick Hollenbeck
Browse files

++eeschema:

  * Now link with XML support within wxWidgets.
  * Start of export the generic netlist in XML.  Still need to rework the chain
    loaded netlist plugin.
  * OBJ_CMP_TO_LIST class now uses a std::string to hold the 8 bit string m_Ref,
    but hides this behind accessors which provide for both Unicode and 8 bit
    set and get functions.
  * build_BOM.cpp retains the selected filename on subsequent runs as a default.
  * Code cleaning, especially in build_BOM.cpp.
parent 3aabdd26
Loading
Loading
Loading
Loading
+14 −0
Original line number Original line Diff line number Diff line
@@ -4,6 +4,20 @@ KiCad ChangeLog 2010
Please add newer entries at the top, list the date and your name with
Please add newer entries at the top, list the date and your name with
email address.
email address.


2010-Jul-30 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++eeschema:
  * Now link with XML support within wxWidgets.
  * Start of export the generic netlist in XML.  Still need to rework the chain
    loaded netlist plugin.
  * OBJ_CMP_TO_LIST class now uses a std::string to hold the 8 bit string m_Ref,
    but hides this behind accessors which provide for both Unicode and 8 bit
    set and get functions.
  * build_BOM.cpp retains the selected filename on subsequent runs as a default.
  * Code cleaning, especially in build_BOM.cpp.
  * Will work tomorrow also.


2010-jul-27, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
2010-jul-27, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
================================================================================
================================================================================
++all:
++all:
+2 −2
Original line number Original line Diff line number Diff line
@@ -134,9 +134,9 @@ check_find_package_result(OPENGL_FOUND "OpenGL")


# On Apple only wxwidgets 2.9 or higher doesn't need to find aui part of base
# On Apple only wxwidgets 2.9 or higher doesn't need to find aui part of base
if(APPLE)
if(APPLE)
    find_package(wxWidgets COMPONENTS gl adv html core net base QUIET)
    find_package(wxWidgets COMPONENTS gl adv html core net base xml QUIET)
else(APPLE)
else(APPLE)
    find_package(wxWidgets COMPONENTS gl aui adv html core net base QUIET)
    find_package(wxWidgets COMPONENTS gl aui adv html core net base xml QUIET)
endif(APPLE)
endif(APPLE)
check_find_package_result(wxWidgets_FOUND "wxWidgets")
check_find_package_result(wxWidgets_FOUND "wxWidgets")


+81 −43
Original line number Original line Diff line number Diff line
@@ -381,8 +381,7 @@ int AddComponentsInSheetToList( std::vector <OBJ_CMP_TO_LIST>& aComponentsList,
            if( DrawLibItem->GetRef( aSheet ).IsEmpty() )
            if( DrawLibItem->GetRef( aSheet ).IsEmpty() )
                DrawLibItem->SetRef( aSheet, wxT( "DefRef?" ) );
                DrawLibItem->SetRef( aSheet, wxT( "DefRef?" ) );


            strncpy( new_object.m_Reference,
            new_object.SetRef( DrawLibItem->GetRef( aSheet ) );
                     CONV_TO_UTF8( DrawLibItem->GetRef( aSheet ) ), 32 );


            new_object.m_NumRef = -1;
            new_object.m_NumRef = -1;


@@ -409,6 +408,7 @@ static void ReAnnotateComponents( std::vector <OBJ_CMP_TO_LIST>& aComponentsList
    /* update the reference numbers */
    /* update the reference numbers */
    for( unsigned ii = 0; ii < aComponentsList.size(); ii++ )
    for( unsigned ii = 0; ii < aComponentsList.size(); ii++ )
    {
    {
#if 0
        char*          Text = aComponentsList[ii].m_Reference;
        char*          Text = aComponentsList[ii].m_Reference;
        SCH_COMPONENT* component = aComponentsList[ii].m_RootCmp;
        SCH_COMPONENT* component = aComponentsList[ii].m_RootCmp;


@@ -419,8 +419,23 @@ static void ReAnnotateComponents( std::vector <OBJ_CMP_TO_LIST>& aComponentsList


        component->SetRef( &(aComponentsList[ii].m_SheetPath),
        component->SetRef( &(aComponentsList[ii].m_SheetPath),
                           CONV_FROM_UTF8( Text ) );
                           CONV_FROM_UTF8( Text ) );
#else

        wxString        ref = aComponentsList[ii].GetRef();
        SCH_COMPONENT*  component = aComponentsList[ii].m_RootCmp;

        if( aComponentsList[ii].m_NumRef < 0 )
            ref += wxChar( '?' );
        else
            ref << aComponentsList[ii].m_NumRef;

        aComponentsList[ii].SetRef( ref );

        component->SetRef( &aComponentsList[ii].m_SheetPath, ref );
#endif

        component->m_Multi = aComponentsList[ii].m_Unit;
        component->m_Multi = aComponentsList[ii].m_Unit;
        component->SetUnitSelection( &(aComponentsList[ii].m_SheetPath),
        component->SetUnitSelection( &aComponentsList[ii].m_SheetPath,
                                     aComponentsList[ii].m_Unit );
                                     aComponentsList[ii].m_Unit );
    }
    }
}
}
@@ -437,42 +452,58 @@ static void ReAnnotateComponents( std::vector <OBJ_CMP_TO_LIST>& aComponentsList
 */
 */
void BreakReference( std::vector <OBJ_CMP_TO_LIST>& aComponentsList )
void BreakReference( std::vector <OBJ_CMP_TO_LIST>& aComponentsList )
{
{
    char* Text;
    std::string refText;    // construct once outside loop


    for( unsigned ii = 0; ii < aComponentsList.size(); ii++ )
    for( unsigned ii = 0; ii < aComponentsList.size(); ii++ )
    {
    {
        aComponentsList[ii].m_NumRef = -1;
        aComponentsList[ii].m_NumRef = -1;
        Text = aComponentsList[ii].m_Reference;

        int ll = strlen( Text ) - 1;
        refText = aComponentsList[ii].GetRefStr();
        if( Text[ll] == '?' )

        int ll = refText.length() - 1;

        if( refText[ll] == '?' )
        {
        {
            aComponentsList[ii].m_IsNew = true;
            aComponentsList[ii].m_IsNew = true;

            if( !aComponentsList[ii].IsPartsLocked() )
            if( !aComponentsList[ii].IsPartsLocked() )
                aComponentsList[ii].m_Unit = 0x7FFFFFFF;
                aComponentsList[ii].m_Unit = 0x7FFFFFFF;
            Text[ll] = 0;

            continue;
            refText.erase(ll);  // delete last char

            aComponentsList[ii].SetRefStr( refText );
        }
        }


        if( isdigit( Text[ll] ) == 0 )
        else if( isdigit( refText[ll] ) == 0 )
        {
        {
            aComponentsList[ii].m_IsNew = true;
            aComponentsList[ii].m_IsNew = true;
            if( !aComponentsList[ii].IsPartsLocked() )
            if( !aComponentsList[ii].IsPartsLocked() )
                aComponentsList[ii].m_Unit = 0x7FFFFFFF;
                aComponentsList[ii].m_Unit = 0x7FFFFFFF;
            continue;
        }
        }


        else
        {
            while( ll >= 0 )
            while( ll >= 0 )
            {
            {
            if( (Text[ll] <= ' ' ) || isdigit( Text[ll] ) )
                if( (refText[ll] <= ' ' ) || isdigit( refText[ll] ) )
                    ll--;
                    ll--;
                else
                else
                {
                {
                if( isdigit( Text[ll + 1] ) )
                    if( isdigit( refText[ll + 1] ) )
                    aComponentsList[ii].m_NumRef = atoi( &Text[ll + 1] );
                    {
                Text[ll + 1] = 0;
                        // nul terminated C string into cp
                        const char* cp = refText.c_str() + ll + 1;

                        aComponentsList[ii].m_NumRef = atoi( cp );
                    }

                    refText.erase( ll+1 );  // delete from ll+1 to end
                    break;
                    break;
                }
                }
            }
            }

            aComponentsList[ii].SetRefStr( refText );
        }
    }
    }
}
}


@@ -490,7 +521,7 @@ static void ComputeReferenceNumber( std::vector <OBJ_CMP_TO_LIST>& aComponentsLi
     */
     */
    for( unsigned ii = 0; ii < aComponentsList.size(); ii++ )
    for( unsigned ii = 0; ii < aComponentsList.size(); ii++ )
    {
    {
        if( aComponentsList[ii].m_Reference[0] == '#' )
        if( aComponentsList[ii].GetRefStr()[0] == '#' )
        {
        {
            aComponentsList[ii].m_IsNew  = true;
            aComponentsList[ii].m_IsNew  = true;
            aComponentsList[ii].m_NumRef = 0;
            aComponentsList[ii].m_NumRef = 0;
@@ -716,9 +747,9 @@ int WinEDA_SchematicFrame::CheckAnnotate( wxArrayString* aMessageList,
            else
            else
                Buff = wxT( "?" );
                Buff = wxT( "?" );


            cmpref = CONV_FROM_UTF8( ComponentsList[ii].m_Reference );
            cmpref = ComponentsList[ii].GetRef();
            msg.Printf( _( "item not annotated: %s%s" ),
            msg.Printf( _( "item not annotated: %s%s" ),
                       cmpref.GetData(), Buff.GetData() );
                       GetChars( cmpref ), GetChars( Buff ) );


            if( ( ComponentsList[ii].m_Unit > 0 )
            if( ( ComponentsList[ii].m_Unit > 0 )
                && ( ComponentsList[ii].m_Unit < 0x7FFFFFFF ) )
                && ( ComponentsList[ii].m_Unit < 0x7FFFFFFF ) )
@@ -748,9 +779,10 @@ int WinEDA_SchematicFrame::CheckAnnotate( wxArrayString* aMessageList,
            else
            else
                Buff = wxT( "?" );
                Buff = wxT( "?" );


            cmpref = CONV_FROM_UTF8( ComponentsList[ii].m_Reference );
            cmpref = ComponentsList[ii].GetRef();
            msg.Printf( _( "Error item %s%s" ), cmpref.GetData(),

                       Buff.GetData() );
            msg.Printf( _( "Error item %s%s" ), GetChars( cmpref ),
                       GetChars( Buff ) );


            Buff.Printf( _( " unit %d and no more than %d parts" ),
            Buff.Printf( _( " unit %d and no more than %d parts" ),
                         ComponentsList[ii].m_Unit,
                         ComponentsList[ii].m_Unit,
@@ -789,9 +821,10 @@ int WinEDA_SchematicFrame::CheckAnnotate( wxArrayString* aMessageList,
            else
            else
                Buff = wxT( "?" );
                Buff = wxT( "?" );


            cmpref = CONV_FROM_UTF8( ComponentsList[ii].m_Reference );
            cmpref = ComponentsList[ii].GetRef();

            msg.Printf( _( "Multiple item %s%s" ),
            msg.Printf( _( "Multiple item %s%s" ),
                       cmpref.GetData(), Buff.GetData() );
                       GetChars( cmpref ), GetChars( Buff ) );


            if( ( ComponentsList[ii].m_Unit > 0 )
            if( ( ComponentsList[ii].m_Unit > 0 )
                && ( ComponentsList[ii].m_Unit < 0x7FFFFFFF ) )
                && ( ComponentsList[ii].m_Unit < 0x7FFFFFFF ) )
@@ -819,9 +852,9 @@ int WinEDA_SchematicFrame::CheckAnnotate( wxArrayString* aMessageList,
            else
            else
                Buff = wxT( "?" );
                Buff = wxT( "?" );


            cmpref = CONV_FROM_UTF8( ComponentsList[ii].m_Reference );
            cmpref = ComponentsList[ii].GetRef();
            msg.Printf( _( "Multiple item %s%s" ),
            msg.Printf( _( "Multiple item %s%s" ),
                       cmpref.GetData(), Buff.GetData() );
                       GetChars( cmpref ), GetChars( Buff ) );


            if( ( ComponentsList[ii].m_Unit > 0 )
            if( ( ComponentsList[ii].m_Unit > 0 )
                && ( ComponentsList[ii].m_Unit < 0x7FFFFFFF ) )
                && ( ComponentsList[ii].m_Unit < 0x7FFFFFFF ) )
@@ -846,16 +879,17 @@ int WinEDA_SchematicFrame::CheckAnnotate( wxArrayString* aMessageList,
        int next = ii + 1;
        int next = ii + 1;
        if( ComponentsList[ii].CompareValue( ComponentsList[next] ) != 0 )
        if( ComponentsList[ii].CompareValue( ComponentsList[next] ) != 0 )
        {
        {
            wxString nextcmpref;
            wxString nextcmpref = ComponentsList[next].GetRef();
            cmpref     = CONV_FROM_UTF8( ComponentsList[ii].m_Reference );

            nextcmpref = CONV_FROM_UTF8( ComponentsList[next].m_Reference );
            cmpref = ComponentsList[ii].GetRef();

#if defined(KICAD_GOST)
#if defined(KICAD_GOST)
            msg.Printf( _( "Diff values for %s%d.%c (%s) and %s%d.%c (%s)" ),
            msg.Printf( _( "Diff values for %s%d.%c (%s) and %s%d.%c (%s)" ),
                        cmpref.GetData(),
                        cmpref.GetData(),
                        ComponentsList[ii].m_NumRef,
                        ComponentsList[ii].m_NumRef,
                        ComponentsList[ii].m_Unit + '1' - 1,
                        ComponentsList[ii].m_Unit + '1' - 1,
                        ComponentsList[ii].m_Value->GetData(),
                        GetChars( *ComponentsList[ii].m_Value ),
                        nextcmpref.GetData(),
                        GetChars( nextcmpref ),
                        ComponentsList[next].m_NumRef,
                        ComponentsList[next].m_NumRef,
                        ComponentsList[next].m_Unit + '1' - 1,
                        ComponentsList[next].m_Unit + '1' - 1,
                        ComponentsList[next].m_Value->GetData() );
                        ComponentsList[next].m_Value->GetData() );
@@ -864,11 +898,11 @@ int WinEDA_SchematicFrame::CheckAnnotate( wxArrayString* aMessageList,
                        cmpref.GetData(),
                        cmpref.GetData(),
                        ComponentsList[ii].m_NumRef,
                        ComponentsList[ii].m_NumRef,
                        ComponentsList[ii].m_Unit + 'A' - 1,
                        ComponentsList[ii].m_Unit + 'A' - 1,
                        ComponentsList[ii].m_Value->GetData(),
                        GetChars( *ComponentsList[ii].m_Value ),
                        nextcmpref.GetData(),
                        GetChars( nextcmpref ),
                        ComponentsList[next].m_NumRef,
                        ComponentsList[next].m_NumRef,
                        ComponentsList[next].m_Unit + 'A' - 1,
                        ComponentsList[next].m_Unit + 'A' - 1,
                        ComponentsList[next].m_Value->GetData() );
                        GetChars( *ComponentsList[next].m_Value ) );
#endif
#endif


            if( aMessageList )
            if( aMessageList )
@@ -897,15 +931,19 @@ int WinEDA_SchematicFrame::CheckAnnotate( wxArrayString* aMessageList,
        /* Same time stamp found.  */
        /* Same time stamp found.  */
        wxString nextcmpref;
        wxString nextcmpref;
        wxString full_path;
        wxString full_path;

        full_path.Printf( wxT( "%s%8.8X" ),
        full_path.Printf( wxT( "%s%8.8X" ),
                          ComponentsList[ii].m_SheetPath.Path().GetData(),
                          GetChars( ComponentsList[ii].m_SheetPath.Path() ),
                          ComponentsList[ii].m_TimeStamp );
                          ComponentsList[ii].m_TimeStamp );
        cmpref     = CONV_FROM_UTF8( ComponentsList[ii].m_Reference );

        nextcmpref = CONV_FROM_UTF8( ComponentsList[ii + 1].m_Reference );
        cmpref     = ComponentsList[ii].GetRef();
        nextcmpref = ComponentsList[ii + 1].GetRef();

        msg.Printf( _( "duplicate time stamp (%s) for %s%d and %s%d" ),
        msg.Printf( _( "duplicate time stamp (%s) for %s%d and %s%d" ),
                    full_path.GetData(),
                    GetChars( full_path ),
                    cmpref.GetData(), ComponentsList[ii].m_NumRef,
                    GetChars( cmpref ), ComponentsList[ii].m_NumRef,
                    nextcmpref.GetData(), ComponentsList[ii + 1].m_NumRef );
                    GetChars( nextcmpref ), ComponentsList[ii + 1].m_NumRef );

        if( aMessageList )
        if( aMessageList )
        {
        {
            aMessageList->Add( msg + wxT( "\n" ));
            aMessageList->Add( msg + wxT( "\n" ));
+224 −183

File changed.

Preview size limit exceeded, changes collapsed.

+0 −6
Original line number Original line Diff line number Diff line
@@ -477,12 +477,6 @@ SCH_SHEET_PATH* SCH_SHEET_LIST::GetSheet( int aIndex )
}
}




/** Function BuildSheetList
 * Build the list of sheets and their sheet path from the aSheet sheet
 * if aSheet = g_RootSheet, the full sheet path list (and full sheet list) is
 * built
 * @param aSheet = the starting sheet to  build list
 */
void SCH_SHEET_LIST::BuildSheetList( SCH_SHEET* aSheet )
void SCH_SHEET_LIST::BuildSheetList( SCH_SHEET* aSheet )
{
{
    if( m_List == NULL )
    if( m_List == NULL )
Loading