Loading change_log.txt +6 −0 Original line number Original line Diff line number Diff line Loading @@ -4,6 +4,12 @@ Started 2007-June-11 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. 2007-Dec-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr> ================================================================================ +eeschema: Solved an annotation problem: in multiple parts per package components, when sorted by position, parts were not grouped by package. 2007-Dec-2 UPDATE Dick Hollenbeck <dick@softplc.com> 2007-Dec-2 UPDATE Dick Hollenbeck <dick@softplc.com> ================================================================================ ================================================================================ Loading eeschema/annotate.cpp +100 −93 Original line number Original line Diff line number Diff line Loading @@ -2,17 +2,19 @@ /* annotate.cpp: component annotation */ /* annotate.cpp: component annotation */ /**************************************/ /**************************************/ /* Local Variable */ static bool AnnotProject = true; static bool SortByPosition = true; #include "annotate_dialog.cpp" #include "annotate_dialog.cpp" #include "netlist.h" #include "netlist.h" #include "protos.h" #include "protos.h" /* fonctions exportees */ /* Local Functions*/ int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumSheet ); static int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumSheet ); int AnnotTriComposant( const void* o1, const void* o2 ); static int AnnotTriComposant( const void* o1, const void* o2 ); void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ); static void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ); /* fonctions locales */ static void ReAnnotateComponents( CmpListStruct* BaseListeCmp, int NbOfCmp ); static void ReAnnotateComponents( CmpListStruct* BaseListeCmp, int NbOfCmp ); static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ); static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ); static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseListeCmp, static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseListeCmp, Loading @@ -20,19 +22,15 @@ static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseLis static int ExistUnit( CmpListStruct* Objet, int Unit, static int ExistUnit( CmpListStruct* Objet, int Unit, CmpListStruct* BaseListeCmp, int NbOfCmp ); CmpListStruct* BaseListeCmp, int NbOfCmp ); /* Variable locales */ static bool AnnotProject = TRUE; static bool SortByPosition = TRUE; /**************************************/ /**************************************/ void ReAnnotatePowerSymbolsOnly() void ReAnnotatePowerSymbolsOnly( void ) /**************************************/ /**************************************/ /* Used to reannotate the power symbols, before testing erc or computing netlist /* Used to reannotate the power symbols, before testing erc or computing netlist * when a true component reannotation is not necessary * when a true component reannotation is not necessary * * * In order to avoid conflicts the ref number start with a 0: * In order to avoid conflicts the ref number starts with a 0: * PWR with id 12 is named PWR12 in global annotation and PWR012 by the Power annotation * PWR with id 12 is named PWR12 in global annotation and PWR012 by the Power annotation */ */ { { Loading Loading @@ -66,9 +64,13 @@ void ReAnnotatePowerSymbolsOnly() } } /******************************************************************/ /***********************************************************************/ void InstallAnnotateFrame( WinEDA_SchematicFrame* parent, wxPoint& pos ) void InstallAnnotateFrame( WinEDA_SchematicFrame* parent, wxPoint& pos ) /******************************************************************/ /***********************************************************************/ /** Function InstallAnnotateFrame * Install the annotate dialog frame */ { { WinEDA_AnnotateFrame* frame = new WinEDA_AnnotateFrame( parent ); WinEDA_AnnotateFrame* frame = new WinEDA_AnnotateFrame( parent ); Loading @@ -81,7 +83,7 @@ void InstallAnnotateFrame( WinEDA_SchematicFrame* parent, wxPoint& pos ) void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) /******************************************************************/ /******************************************************************/ /* /** Function WinEDA_AnnotateFrame::AnnotateComponents * Compute the annotation of the components for the whole projeect, or the current sheet only. * Compute the annotation of the components for the whole projeect, or the current sheet only. * All the components or the new ones only will be annotated. * All the components or the new ones only will be annotated. */ */ Loading @@ -92,8 +94,8 @@ void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) wxBusyCursor dummy; wxBusyCursor dummy; AnnotProject = (m_AnnotProjetCtrl->GetSelection() == 0) ? TRUE : FALSE; AnnotProject = (m_AnnotProjetCtrl->GetSelection() == 0) ? true : FALSE; SortByPosition = (m_AnnotSortCmpCtrl->GetSelection() == 0) ? TRUE : FALSE; SortByPosition = (m_AnnotSortCmpCtrl->GetSelection() == 0) ? true : FALSE; /* If it is an annotation for all the components, reset previous annotation: */ /* If it is an annotation for all the components, reset previous annotation: */ if( m_AnnotNewCmpCtrl->GetSelection() == 0 ) if( m_AnnotNewCmpCtrl->GetSelection() == 0 ) Loading @@ -113,7 +115,7 @@ void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) /* First pass: Component counting */ /* First pass: Component counting */ screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; if( AnnotProject == TRUE ) if( AnnotProject == true ) { { NbOfCmp = 0; NbOfCmp = 0; for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) Loading @@ -132,7 +134,7 @@ void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) /* Second pass : Int data tables */ /* Second pass : Int data tables */ screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; if( AnnotProject == TRUE ) if( AnnotProject == true ) { { ii = 0; ii = 0; for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) Loading @@ -147,22 +149,22 @@ void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) if( ii != NbOfCmp ) if( ii != NbOfCmp ) DisplayError( this, wxT( "Internal error in AnnotateComponents()" ) ); DisplayError( this, wxT( "Internal error in AnnotateComponents()" ) ); /* Separation des Numeros de la reference: IC1 -> IC, et 1 dans .m_NumRef */ /* Break full components reference in name (prefix) and number: example: IC1 become IC, and 1 */ BreakReference( BaseListeCmp, NbOfCmp ); BreakReference( BaseListeCmp, NbOfCmp ); qsort( BaseListeCmp, NbOfCmp, sizeof(CmpListStruct), qsort( BaseListeCmp, NbOfCmp, sizeof(CmpListStruct), ( int( * ) ( const void*, const void* ) )AnnotTriComposant ); ( int( * ) ( const void*, const void* ) )AnnotTriComposant ); /* Recalcul des numeros de reference */ /* Recalculate reference numbers */ ComputeReferenceNumber( BaseListeCmp, NbOfCmp ); ComputeReferenceNumber( BaseListeCmp, NbOfCmp ); ReAnnotateComponents( BaseListeCmp, NbOfCmp ); ReAnnotateComponents( BaseListeCmp, NbOfCmp ); MyFree( BaseListeCmp ); BaseListeCmp = NULL; MyFree( BaseListeCmp ); BaseListeCmp = NULL; /* Final control */ /* Final control */ CheckAnnotate( m_Parent, AnnotProject ? FALSE : TRUE ); CheckAnnotate( m_Parent, AnnotProject ? FALSE : true ); m_Parent->DrawPanel->Refresh( TRUE ); /* Refresh screen */ m_Parent->DrawPanel->Refresh( true ); /* Refresh screen */ EndModal( 1 ); EndModal( 1 ); } } Loading @@ -181,10 +183,10 @@ void WinEDA_AnnotateFrame::DeleteAnnotation( wxCommandEvent& event ) if( !IsOK( this, _( "Previous Annotation will be deleted. Continue ?" ) ) ) if( !IsOK( this, _( "Previous Annotation will be deleted. Continue ?" ) ) ) { { m_Abort = TRUE; return; m_Abort = true; return; } } AnnotProject = (m_AnnotProjetCtrl->GetSelection() == 0) ? TRUE : FALSE; AnnotProject = (m_AnnotProjetCtrl->GetSelection() == 0) ? true : FALSE; m_Abort = FALSE; m_Abort = FALSE; /* Build the screen list */ /* Build the screen list */ Loading @@ -197,7 +199,7 @@ void WinEDA_AnnotateFrame::DeleteAnnotation( wxCommandEvent& event ) ScreenSch->SetModify(); ScreenSch->SetModify(); if( AnnotProject == TRUE ) if( AnnotProject == true ) screen = ScreenList.GetFirst(); screen = ScreenList.GetFirst(); else else screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; Loading @@ -218,7 +220,7 @@ void WinEDA_AnnotateFrame::DeleteAnnotation( wxCommandEvent& event ) break; break; } } m_Parent->DrawPanel->Refresh( TRUE ); m_Parent->DrawPanel->Refresh( true ); EndModal( 0 ); EndModal( 0 ); } } Loading Loading @@ -321,18 +323,16 @@ int AnnotTriComposant( const void* o1, const void* o2 ) int ii = strnicmp( Objet1->m_TextRef, Objet2->m_TextRef, 32 ); int ii = strnicmp( Objet1->m_TextRef, Objet2->m_TextRef, 32 ); if( SortByPosition == TRUE ) if( SortByPosition == true ) { { if( ii == 0 ) if( ii == 0 ) ii = Objet1->m_Sheet - Objet2->m_Sheet; ii = Objet1->m_Sheet - Objet2->m_Sheet; if( ii == 0 ) ii = Objet1->m_Unit - Objet2->m_Unit; if( ii == 0 ) if( ii == 0 ) ii = Objet1->m_Pos.x - Objet2->m_Pos.x; ii = Objet1->m_Pos.x - Objet2->m_Pos.x; if( ii == 0 ) if( ii == 0 ) ii = Objet1->m_Pos.y - Objet2->m_Pos.y; ii = Objet1->m_Pos.y - Objet2->m_Pos.y; } } else else // Sort by value { { if( ii == 0 ) if( ii == 0 ) ii = strnicmp( Objet1->m_TextValue, Objet2->m_TextValue, 32 ); ii = strnicmp( Objet1->m_TextValue, Objet2->m_TextValue, 32 ); Loading @@ -340,6 +340,10 @@ int AnnotTriComposant( const void* o1, const void* o2 ) ii = Objet1->m_Unit - Objet2->m_Unit; ii = Objet1->m_Unit - Objet2->m_Unit; if( ii == 0 ) if( ii == 0 ) ii = Objet1->m_Sheet - Objet2->m_Sheet; ii = Objet1->m_Sheet - Objet2->m_Sheet; if( ii == 0 ) ii = Objet1->m_Pos.x - Objet2->m_Pos.x; if( ii == 0 ) ii = Objet1->m_Pos.y - Objet2->m_Pos.y; } } if( ii == 0 ) if( ii == 0 ) Loading Loading @@ -384,19 +388,16 @@ static void ReAnnotateComponents( CmpListStruct* BaseListeCmp, int NbOfCmp ) void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ) void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ) /**************************************************************/ /**************************************************************/ /* Modifie dans BaseListeCmp la reference des composants en supprimant la /** BreakReference * partie nombre de la partie texte. * Break full components reference in name (prefix) and number: example: IC1 become IC, and 1 in .m_NumRef * Place le nombre dans .m_NumRef * For multi part per package components not already annotated, set .m_Unit to a max value (0x7FFFFFFF) * Pour les composants multiples non encore annotes, met .m_Unit a sa valeur max * @param BaseListeCmp = list of component * Utilise: * @param NbOfCmp = item count in the list * BaseListeCmp * NbOfCmp */ */ { { int ii, ll; int ii, ll; char* Text; char* Text; /* Separation des Numeros de la reference: IC1 -> IC, et 1 dans .m_NumRef */ for( ii = 0; ii < NbOfCmp; ii++ ) for( ii = 0; ii < NbOfCmp; ii++ ) { { BaseListeCmp[ii].m_NumRef = -1; BaseListeCmp[ii].m_NumRef = -1; Loading @@ -404,7 +405,7 @@ void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ) ll = strlen( Text ) - 1; ll = strlen( Text ) - 1; if( Text[ll] == '?' ) if( Text[ll] == '?' ) { { BaseListeCmp[ii].m_IsNew = TRUE; BaseListeCmp[ii].m_IsNew = true; if( !BaseListeCmp[ii].m_PartsLocked ) if( !BaseListeCmp[ii].m_PartsLocked ) BaseListeCmp[ii].m_Unit = 0x7FFFFFFF; BaseListeCmp[ii].m_Unit = 0x7FFFFFFF; Text[ll] = 0; Text[ll] = 0; Loading @@ -413,7 +414,7 @@ void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ) if( isdigit( Text[ll] ) == 0 ) if( isdigit( Text[ll] ) == 0 ) { { BaseListeCmp[ii].m_IsNew = TRUE; BaseListeCmp[ii].m_IsNew = true; if( !BaseListeCmp[ii].m_PartsLocked ) if( !BaseListeCmp[ii].m_PartsLocked ) BaseListeCmp[ii].m_Unit = 0x7FFFFFFF; BaseListeCmp[ii].m_Unit = 0x7FFFFFFF; continue; continue; Loading Loading @@ -453,7 +454,7 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) Text = BaseListeCmp[ii].m_TextRef; Text = BaseListeCmp[ii].m_TextRef; if( *Text == '#' ) if( *Text == '#' ) { { BaseListeCmp[ii].m_IsNew = TRUE; BaseListeCmp[ii].m_IsNew = true; BaseListeCmp[ii].m_NumRef = 0; BaseListeCmp[ii].m_NumRef = 0; } } } } Loading @@ -472,7 +473,7 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) LastReferenceNumber = GetLastReferenceNumber( BaseListeCmp + ii, BaseListeCmp, NbOfCmp ); LastReferenceNumber = GetLastReferenceNumber( BaseListeCmp + ii, BaseListeCmp, NbOfCmp ); } } /* Annotation of mono-part components ( 1 part per package ) (trivial case)*/ /* Annotation of one part per package components (trivial case)*/ if( BaseListeCmp[ii].m_NbParts <= 1 ) if( BaseListeCmp[ii].m_NbParts <= 1 ) { { if( BaseListeCmp[ii].m_IsNew ) if( BaseListeCmp[ii].m_IsNew ) Loading Loading @@ -514,13 +515,12 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) continue; continue; Text = BaseListeCmp[jj].m_TextRef; Text = BaseListeCmp[jj].m_TextRef; if( strnicmp( RefText, Text, 32 ) != 0 ) if( strnicmp( RefText, Text, 32 ) != 0 ) break; // references are different continue; // references are different Text = BaseListeCmp[jj].m_TextValue; Text = BaseListeCmp[jj].m_TextValue; if( strnicmp( ValText, Text, 32 ) != 0 ) if( strnicmp( ValText, Text, 32 ) != 0 ) break; // values are different continue; // values are different if( !BaseListeCmp[jj].m_IsNew ) if( !BaseListeCmp[jj].m_IsNew ) { { //BaseListeCmp[jj].m_Flag = 1; continue; continue; } } /* Component without reference number found, annotate it if possible */ /* Component without reference number found, annotate it if possible */ Loading @@ -542,9 +542,13 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseListeCmp, int NbOfCmp ) static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseListeCmp, int NbOfCmp ) /*************************************************************************************************/ /*************************************************************************************************/ /* Recherche le plus grand numero de reference dans les composants /** Function GetLastReferenceNumber * de meme prefixe de reference que celui pointe par Objet * Search the last (bigger) reference number in the component list * la liste des composants est supposee triee * for the prefix reference given by Objet * The component list must be sorted * @param Objet = reference item ( Objet->m_TextRef is the search pattern) * @param BaseListeCmp = list of items * @param NbOfCmp = items count in list of items */ */ { { CmpListStruct* LastObjet = BaseListeCmp + NbOfCmp; CmpListStruct* LastObjet = BaseListeCmp + NbOfCmp; Loading Loading @@ -608,9 +612,10 @@ static int ExistUnit( CmpListStruct* Objet, int Unit, int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) /******************************************************************/ /******************************************************************/ /* Retourne le nombre de composants non annots ou de meme rfrence (doubls) /** Function CheckAnnotate * Si OneSheetOnly : recherche sur le schema courant * @return composent count ( which are not annotated or have the same reference (duplicates)) * sinon: recherche sur toute la hierarchie * @param OneSheetOnly : true = search is made only in the current sheet * false = search in whole hierarchy (usual search). */ */ { { int NbSheet, ii, NumSheet = 1, error, NbOfCmp; int NbSheet, ii, NumSheet = 1, error, NbOfCmp; Loading @@ -619,7 +624,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) wxString Buff; wxString Buff; wxString msg, cmpref; wxString msg, cmpref; /* build tje screen list */ /* build the screen list */ EDA_ScreenList ScreenList( NULL ); EDA_ScreenList ScreenList( NULL ); NbSheet = ScreenList.GetCount(); NbSheet = ScreenList.GetCount(); Loading @@ -628,7 +633,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) ScreenSch->SetModify(); ScreenSch->SetModify(); ScreenList.UpdateSheetNumberAndDate(); ScreenList.UpdateSheetNumberAndDate(); /* 1ere passe : Comptage du nombre de composants */ /* first pass : count composents */ screen = (SCH_SCREEN*) frame->m_CurrentScreen; screen = (SCH_SCREEN*) frame->m_CurrentScreen; if( !OneSheetOnly ) if( !OneSheetOnly ) { { Loading @@ -647,10 +652,11 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) return 0; return 0; } } /* Second pass : create the list of components */ ii = sizeof(CmpListStruct) * NbOfCmp; ii = sizeof(CmpListStruct) * NbOfCmp; ListeCmp = (CmpListStruct*) MyZMalloc( ii ); ListeCmp = (CmpListStruct*) MyZMalloc( ii ); /* 2eme passe : Remplissage du tableau des caracteristiques */ if( OneSheetOnly == 0 ) if( OneSheetOnly == 0 ) { { ii = 0; ii = 0; Loading @@ -668,10 +674,10 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) qsort( ListeCmp, NbOfCmp, sizeof(CmpListStruct), AnnotTriComposant ); qsort( ListeCmp, NbOfCmp, sizeof(CmpListStruct), AnnotTriComposant ); /* Separation des Numeros de la reference: IC1 -> IC, et 1 dans .m_NumRef */ /* Break full components reference in name (prefix) and number: example: IC1 become IC, and 1 */ BreakReference( ListeCmp, NbOfCmp ); BreakReference( ListeCmp, NbOfCmp ); /* comptage des elements non annotes */ /* count not yet annotated items */ error = 0; error = 0; for( ii = 0; ii < NbOfCmp - 1; ii++ ) for( ii = 0; ii < NbOfCmp - 1; ii++ ) { { Loading Loading @@ -729,9 +735,10 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) if( (stricmp( ListeCmp[ii].m_TextRef, ListeCmp[ii + 1].m_TextRef ) != 0) if( (stricmp( ListeCmp[ii].m_TextRef, ListeCmp[ii + 1].m_TextRef ) != 0) || ( ListeCmp[ii].m_NumRef != ListeCmp[ii + 1].m_NumRef ) ) || ( ListeCmp[ii].m_NumRef != ListeCmp[ii + 1].m_NumRef ) ) continue; continue; /* Meme reference trouve */ /* Il y a erreur si meme unite */ /* Same reference found */ /* If same unit, error ! */ if( ListeCmp[ii].m_Unit == ListeCmp[ii + 1].m_Unit ) if( ListeCmp[ii].m_Unit == ListeCmp[ii + 1].m_Unit ) { { if( ListeCmp[ii].m_NumRef >= 0 ) if( ListeCmp[ii].m_NumRef >= 0 ) Loading @@ -753,8 +760,8 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) continue; continue; } } /* Il y a erreur si unites differentes mais nombre de parts differentes /* Test error if units are different but number of parts per package to hight * par boitier (ex U3 ( 1 part) et U3B sont incompatibles) */ * (ex U3 ( 1 part) and we find U3B the is an error) */ if( ListeCmp[ii].m_NbParts != ListeCmp[ii + 1].m_NbParts ) if( ListeCmp[ii].m_NbParts != ListeCmp[ii + 1].m_NbParts ) { { if( ListeCmp[ii].m_NumRef >= 0 ) if( ListeCmp[ii].m_NumRef >= 0 ) Loading @@ -775,7 +782,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) error++; error++; } } /* Il y a erreur si unites differentes ET valeurs diffrentes */ /* Error if values are diffrent between units, for the same reference */ if( stricmp( ListeCmp[ii].m_TextValue, ListeCmp[ii + 1].m_TextValue ) != 0 ) if( stricmp( ListeCmp[ii].m_TextValue, ListeCmp[ii + 1].m_TextValue ) != 0 ) { { wxString nextcmpref, cmpvalue, nextcmpvalue; wxString nextcmpref, cmpvalue, nextcmpvalue; Loading eeschema/annotate_dialog.cpp +2 −0 Original line number Original line Diff line number Diff line Loading @@ -155,6 +155,8 @@ void WinEDA_AnnotateFrame::CreateControls() itemBoxSizer7->Add(itemButton10, 0, wxGROW|wxALL, 5); itemBoxSizer7->Add(itemButton10, 0, wxGROW|wxALL, 5); ////@end WinEDA_AnnotateFrame content construction ////@end WinEDA_AnnotateFrame content construction m_AnnotSortCmpCtrl->SetSelection(SortByPosition ? 0 : 1); } } /*! /*! Loading gerbview/edit.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -148,7 +148,7 @@ void WinEDA_GerberFrame::Process_Special_Functions( wxCommandEvent& event ) break; break; case ID_PCB_GLOBAL_DELETE: case ID_PCB_GLOBAL_DELETE: Erase_Current_Layer( &dc, TRUE ); Erase_Current_Layer( TRUE ); break; break; case wxID_CUT: case wxID_CUT: Loading gerbview/files.cpp +3 −3 Original line number Original line Diff line number Diff line Loading @@ -32,7 +32,7 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event ) { { case ID_MENU_LOAD_FILE: case ID_MENU_LOAD_FILE: case ID_LOAD_FILE: case ID_LOAD_FILE: if( Clear_Pcb( &dc, TRUE ) ) if( Clear_Pcb( TRUE ) ) { { LoadOneGerberFile( wxEmptyString, &dc, 0 ); LoadOneGerberFile( wxEmptyString, &dc, 0 ); } } Loading @@ -56,7 +56,7 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event ) case ID_MENU_NEW_BOARD: case ID_MENU_NEW_BOARD: case ID_NEW_BOARD: case ID_NEW_BOARD: Clear_Pcb( &dc, TRUE ); Clear_Pcb( TRUE ); Zoom_Automatique( FALSE ); Zoom_Automatique( FALSE ); GetScreen()->SetRefreshReq(); GetScreen()->SetRefreshReq(); break; break; Loading @@ -71,7 +71,7 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event ) case ID_LOAD_FILE_8: case ID_LOAD_FILE_8: case ID_LOAD_FILE_9: case ID_LOAD_FILE_9: case ID_LOAD_FILE_10: case ID_LOAD_FILE_10: if( Clear_Pcb( &dc, TRUE ) ) if( Clear_Pcb( TRUE ) ) { { LoadOneGerberFile( LoadOneGerberFile( GetLastProject( id - ID_LOAD_FILE_1 ).GetData(), GetLastProject( id - ID_LOAD_FILE_1 ).GetData(), Loading Loading
change_log.txt +6 −0 Original line number Original line Diff line number Diff line Loading @@ -4,6 +4,12 @@ Started 2007-June-11 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. 2007-Dec-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr> ================================================================================ +eeschema: Solved an annotation problem: in multiple parts per package components, when sorted by position, parts were not grouped by package. 2007-Dec-2 UPDATE Dick Hollenbeck <dick@softplc.com> 2007-Dec-2 UPDATE Dick Hollenbeck <dick@softplc.com> ================================================================================ ================================================================================ Loading
eeschema/annotate.cpp +100 −93 Original line number Original line Diff line number Diff line Loading @@ -2,17 +2,19 @@ /* annotate.cpp: component annotation */ /* annotate.cpp: component annotation */ /**************************************/ /**************************************/ /* Local Variable */ static bool AnnotProject = true; static bool SortByPosition = true; #include "annotate_dialog.cpp" #include "annotate_dialog.cpp" #include "netlist.h" #include "netlist.h" #include "protos.h" #include "protos.h" /* fonctions exportees */ /* Local Functions*/ int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumSheet ); static int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumSheet ); int AnnotTriComposant( const void* o1, const void* o2 ); static int AnnotTriComposant( const void* o1, const void* o2 ); void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ); static void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ); /* fonctions locales */ static void ReAnnotateComponents( CmpListStruct* BaseListeCmp, int NbOfCmp ); static void ReAnnotateComponents( CmpListStruct* BaseListeCmp, int NbOfCmp ); static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ); static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ); static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseListeCmp, static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseListeCmp, Loading @@ -20,19 +22,15 @@ static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseLis static int ExistUnit( CmpListStruct* Objet, int Unit, static int ExistUnit( CmpListStruct* Objet, int Unit, CmpListStruct* BaseListeCmp, int NbOfCmp ); CmpListStruct* BaseListeCmp, int NbOfCmp ); /* Variable locales */ static bool AnnotProject = TRUE; static bool SortByPosition = TRUE; /**************************************/ /**************************************/ void ReAnnotatePowerSymbolsOnly() void ReAnnotatePowerSymbolsOnly( void ) /**************************************/ /**************************************/ /* Used to reannotate the power symbols, before testing erc or computing netlist /* Used to reannotate the power symbols, before testing erc or computing netlist * when a true component reannotation is not necessary * when a true component reannotation is not necessary * * * In order to avoid conflicts the ref number start with a 0: * In order to avoid conflicts the ref number starts with a 0: * PWR with id 12 is named PWR12 in global annotation and PWR012 by the Power annotation * PWR with id 12 is named PWR12 in global annotation and PWR012 by the Power annotation */ */ { { Loading Loading @@ -66,9 +64,13 @@ void ReAnnotatePowerSymbolsOnly() } } /******************************************************************/ /***********************************************************************/ void InstallAnnotateFrame( WinEDA_SchematicFrame* parent, wxPoint& pos ) void InstallAnnotateFrame( WinEDA_SchematicFrame* parent, wxPoint& pos ) /******************************************************************/ /***********************************************************************/ /** Function InstallAnnotateFrame * Install the annotate dialog frame */ { { WinEDA_AnnotateFrame* frame = new WinEDA_AnnotateFrame( parent ); WinEDA_AnnotateFrame* frame = new WinEDA_AnnotateFrame( parent ); Loading @@ -81,7 +83,7 @@ void InstallAnnotateFrame( WinEDA_SchematicFrame* parent, wxPoint& pos ) void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) /******************************************************************/ /******************************************************************/ /* /** Function WinEDA_AnnotateFrame::AnnotateComponents * Compute the annotation of the components for the whole projeect, or the current sheet only. * Compute the annotation of the components for the whole projeect, or the current sheet only. * All the components or the new ones only will be annotated. * All the components or the new ones only will be annotated. */ */ Loading @@ -92,8 +94,8 @@ void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) wxBusyCursor dummy; wxBusyCursor dummy; AnnotProject = (m_AnnotProjetCtrl->GetSelection() == 0) ? TRUE : FALSE; AnnotProject = (m_AnnotProjetCtrl->GetSelection() == 0) ? true : FALSE; SortByPosition = (m_AnnotSortCmpCtrl->GetSelection() == 0) ? TRUE : FALSE; SortByPosition = (m_AnnotSortCmpCtrl->GetSelection() == 0) ? true : FALSE; /* If it is an annotation for all the components, reset previous annotation: */ /* If it is an annotation for all the components, reset previous annotation: */ if( m_AnnotNewCmpCtrl->GetSelection() == 0 ) if( m_AnnotNewCmpCtrl->GetSelection() == 0 ) Loading @@ -113,7 +115,7 @@ void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) /* First pass: Component counting */ /* First pass: Component counting */ screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; if( AnnotProject == TRUE ) if( AnnotProject == true ) { { NbOfCmp = 0; NbOfCmp = 0; for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) Loading @@ -132,7 +134,7 @@ void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) /* Second pass : Int data tables */ /* Second pass : Int data tables */ screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; if( AnnotProject == TRUE ) if( AnnotProject == true ) { { ii = 0; ii = 0; for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) Loading @@ -147,22 +149,22 @@ void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) if( ii != NbOfCmp ) if( ii != NbOfCmp ) DisplayError( this, wxT( "Internal error in AnnotateComponents()" ) ); DisplayError( this, wxT( "Internal error in AnnotateComponents()" ) ); /* Separation des Numeros de la reference: IC1 -> IC, et 1 dans .m_NumRef */ /* Break full components reference in name (prefix) and number: example: IC1 become IC, and 1 */ BreakReference( BaseListeCmp, NbOfCmp ); BreakReference( BaseListeCmp, NbOfCmp ); qsort( BaseListeCmp, NbOfCmp, sizeof(CmpListStruct), qsort( BaseListeCmp, NbOfCmp, sizeof(CmpListStruct), ( int( * ) ( const void*, const void* ) )AnnotTriComposant ); ( int( * ) ( const void*, const void* ) )AnnotTriComposant ); /* Recalcul des numeros de reference */ /* Recalculate reference numbers */ ComputeReferenceNumber( BaseListeCmp, NbOfCmp ); ComputeReferenceNumber( BaseListeCmp, NbOfCmp ); ReAnnotateComponents( BaseListeCmp, NbOfCmp ); ReAnnotateComponents( BaseListeCmp, NbOfCmp ); MyFree( BaseListeCmp ); BaseListeCmp = NULL; MyFree( BaseListeCmp ); BaseListeCmp = NULL; /* Final control */ /* Final control */ CheckAnnotate( m_Parent, AnnotProject ? FALSE : TRUE ); CheckAnnotate( m_Parent, AnnotProject ? FALSE : true ); m_Parent->DrawPanel->Refresh( TRUE ); /* Refresh screen */ m_Parent->DrawPanel->Refresh( true ); /* Refresh screen */ EndModal( 1 ); EndModal( 1 ); } } Loading @@ -181,10 +183,10 @@ void WinEDA_AnnotateFrame::DeleteAnnotation( wxCommandEvent& event ) if( !IsOK( this, _( "Previous Annotation will be deleted. Continue ?" ) ) ) if( !IsOK( this, _( "Previous Annotation will be deleted. Continue ?" ) ) ) { { m_Abort = TRUE; return; m_Abort = true; return; } } AnnotProject = (m_AnnotProjetCtrl->GetSelection() == 0) ? TRUE : FALSE; AnnotProject = (m_AnnotProjetCtrl->GetSelection() == 0) ? true : FALSE; m_Abort = FALSE; m_Abort = FALSE; /* Build the screen list */ /* Build the screen list */ Loading @@ -197,7 +199,7 @@ void WinEDA_AnnotateFrame::DeleteAnnotation( wxCommandEvent& event ) ScreenSch->SetModify(); ScreenSch->SetModify(); if( AnnotProject == TRUE ) if( AnnotProject == true ) screen = ScreenList.GetFirst(); screen = ScreenList.GetFirst(); else else screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; Loading @@ -218,7 +220,7 @@ void WinEDA_AnnotateFrame::DeleteAnnotation( wxCommandEvent& event ) break; break; } } m_Parent->DrawPanel->Refresh( TRUE ); m_Parent->DrawPanel->Refresh( true ); EndModal( 0 ); EndModal( 0 ); } } Loading Loading @@ -321,18 +323,16 @@ int AnnotTriComposant( const void* o1, const void* o2 ) int ii = strnicmp( Objet1->m_TextRef, Objet2->m_TextRef, 32 ); int ii = strnicmp( Objet1->m_TextRef, Objet2->m_TextRef, 32 ); if( SortByPosition == TRUE ) if( SortByPosition == true ) { { if( ii == 0 ) if( ii == 0 ) ii = Objet1->m_Sheet - Objet2->m_Sheet; ii = Objet1->m_Sheet - Objet2->m_Sheet; if( ii == 0 ) ii = Objet1->m_Unit - Objet2->m_Unit; if( ii == 0 ) if( ii == 0 ) ii = Objet1->m_Pos.x - Objet2->m_Pos.x; ii = Objet1->m_Pos.x - Objet2->m_Pos.x; if( ii == 0 ) if( ii == 0 ) ii = Objet1->m_Pos.y - Objet2->m_Pos.y; ii = Objet1->m_Pos.y - Objet2->m_Pos.y; } } else else // Sort by value { { if( ii == 0 ) if( ii == 0 ) ii = strnicmp( Objet1->m_TextValue, Objet2->m_TextValue, 32 ); ii = strnicmp( Objet1->m_TextValue, Objet2->m_TextValue, 32 ); Loading @@ -340,6 +340,10 @@ int AnnotTriComposant( const void* o1, const void* o2 ) ii = Objet1->m_Unit - Objet2->m_Unit; ii = Objet1->m_Unit - Objet2->m_Unit; if( ii == 0 ) if( ii == 0 ) ii = Objet1->m_Sheet - Objet2->m_Sheet; ii = Objet1->m_Sheet - Objet2->m_Sheet; if( ii == 0 ) ii = Objet1->m_Pos.x - Objet2->m_Pos.x; if( ii == 0 ) ii = Objet1->m_Pos.y - Objet2->m_Pos.y; } } if( ii == 0 ) if( ii == 0 ) Loading Loading @@ -384,19 +388,16 @@ static void ReAnnotateComponents( CmpListStruct* BaseListeCmp, int NbOfCmp ) void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ) void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ) /**************************************************************/ /**************************************************************/ /* Modifie dans BaseListeCmp la reference des composants en supprimant la /** BreakReference * partie nombre de la partie texte. * Break full components reference in name (prefix) and number: example: IC1 become IC, and 1 in .m_NumRef * Place le nombre dans .m_NumRef * For multi part per package components not already annotated, set .m_Unit to a max value (0x7FFFFFFF) * Pour les composants multiples non encore annotes, met .m_Unit a sa valeur max * @param BaseListeCmp = list of component * Utilise: * @param NbOfCmp = item count in the list * BaseListeCmp * NbOfCmp */ */ { { int ii, ll; int ii, ll; char* Text; char* Text; /* Separation des Numeros de la reference: IC1 -> IC, et 1 dans .m_NumRef */ for( ii = 0; ii < NbOfCmp; ii++ ) for( ii = 0; ii < NbOfCmp; ii++ ) { { BaseListeCmp[ii].m_NumRef = -1; BaseListeCmp[ii].m_NumRef = -1; Loading @@ -404,7 +405,7 @@ void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ) ll = strlen( Text ) - 1; ll = strlen( Text ) - 1; if( Text[ll] == '?' ) if( Text[ll] == '?' ) { { BaseListeCmp[ii].m_IsNew = TRUE; BaseListeCmp[ii].m_IsNew = true; if( !BaseListeCmp[ii].m_PartsLocked ) if( !BaseListeCmp[ii].m_PartsLocked ) BaseListeCmp[ii].m_Unit = 0x7FFFFFFF; BaseListeCmp[ii].m_Unit = 0x7FFFFFFF; Text[ll] = 0; Text[ll] = 0; Loading @@ -413,7 +414,7 @@ void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ) if( isdigit( Text[ll] ) == 0 ) if( isdigit( Text[ll] ) == 0 ) { { BaseListeCmp[ii].m_IsNew = TRUE; BaseListeCmp[ii].m_IsNew = true; if( !BaseListeCmp[ii].m_PartsLocked ) if( !BaseListeCmp[ii].m_PartsLocked ) BaseListeCmp[ii].m_Unit = 0x7FFFFFFF; BaseListeCmp[ii].m_Unit = 0x7FFFFFFF; continue; continue; Loading Loading @@ -453,7 +454,7 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) Text = BaseListeCmp[ii].m_TextRef; Text = BaseListeCmp[ii].m_TextRef; if( *Text == '#' ) if( *Text == '#' ) { { BaseListeCmp[ii].m_IsNew = TRUE; BaseListeCmp[ii].m_IsNew = true; BaseListeCmp[ii].m_NumRef = 0; BaseListeCmp[ii].m_NumRef = 0; } } } } Loading @@ -472,7 +473,7 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) LastReferenceNumber = GetLastReferenceNumber( BaseListeCmp + ii, BaseListeCmp, NbOfCmp ); LastReferenceNumber = GetLastReferenceNumber( BaseListeCmp + ii, BaseListeCmp, NbOfCmp ); } } /* Annotation of mono-part components ( 1 part per package ) (trivial case)*/ /* Annotation of one part per package components (trivial case)*/ if( BaseListeCmp[ii].m_NbParts <= 1 ) if( BaseListeCmp[ii].m_NbParts <= 1 ) { { if( BaseListeCmp[ii].m_IsNew ) if( BaseListeCmp[ii].m_IsNew ) Loading Loading @@ -514,13 +515,12 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) continue; continue; Text = BaseListeCmp[jj].m_TextRef; Text = BaseListeCmp[jj].m_TextRef; if( strnicmp( RefText, Text, 32 ) != 0 ) if( strnicmp( RefText, Text, 32 ) != 0 ) break; // references are different continue; // references are different Text = BaseListeCmp[jj].m_TextValue; Text = BaseListeCmp[jj].m_TextValue; if( strnicmp( ValText, Text, 32 ) != 0 ) if( strnicmp( ValText, Text, 32 ) != 0 ) break; // values are different continue; // values are different if( !BaseListeCmp[jj].m_IsNew ) if( !BaseListeCmp[jj].m_IsNew ) { { //BaseListeCmp[jj].m_Flag = 1; continue; continue; } } /* Component without reference number found, annotate it if possible */ /* Component without reference number found, annotate it if possible */ Loading @@ -542,9 +542,13 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseListeCmp, int NbOfCmp ) static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseListeCmp, int NbOfCmp ) /*************************************************************************************************/ /*************************************************************************************************/ /* Recherche le plus grand numero de reference dans les composants /** Function GetLastReferenceNumber * de meme prefixe de reference que celui pointe par Objet * Search the last (bigger) reference number in the component list * la liste des composants est supposee triee * for the prefix reference given by Objet * The component list must be sorted * @param Objet = reference item ( Objet->m_TextRef is the search pattern) * @param BaseListeCmp = list of items * @param NbOfCmp = items count in list of items */ */ { { CmpListStruct* LastObjet = BaseListeCmp + NbOfCmp; CmpListStruct* LastObjet = BaseListeCmp + NbOfCmp; Loading Loading @@ -608,9 +612,10 @@ static int ExistUnit( CmpListStruct* Objet, int Unit, int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) /******************************************************************/ /******************************************************************/ /* Retourne le nombre de composants non annots ou de meme rfrence (doubls) /** Function CheckAnnotate * Si OneSheetOnly : recherche sur le schema courant * @return composent count ( which are not annotated or have the same reference (duplicates)) * sinon: recherche sur toute la hierarchie * @param OneSheetOnly : true = search is made only in the current sheet * false = search in whole hierarchy (usual search). */ */ { { int NbSheet, ii, NumSheet = 1, error, NbOfCmp; int NbSheet, ii, NumSheet = 1, error, NbOfCmp; Loading @@ -619,7 +624,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) wxString Buff; wxString Buff; wxString msg, cmpref; wxString msg, cmpref; /* build tje screen list */ /* build the screen list */ EDA_ScreenList ScreenList( NULL ); EDA_ScreenList ScreenList( NULL ); NbSheet = ScreenList.GetCount(); NbSheet = ScreenList.GetCount(); Loading @@ -628,7 +633,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) ScreenSch->SetModify(); ScreenSch->SetModify(); ScreenList.UpdateSheetNumberAndDate(); ScreenList.UpdateSheetNumberAndDate(); /* 1ere passe : Comptage du nombre de composants */ /* first pass : count composents */ screen = (SCH_SCREEN*) frame->m_CurrentScreen; screen = (SCH_SCREEN*) frame->m_CurrentScreen; if( !OneSheetOnly ) if( !OneSheetOnly ) { { Loading @@ -647,10 +652,11 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) return 0; return 0; } } /* Second pass : create the list of components */ ii = sizeof(CmpListStruct) * NbOfCmp; ii = sizeof(CmpListStruct) * NbOfCmp; ListeCmp = (CmpListStruct*) MyZMalloc( ii ); ListeCmp = (CmpListStruct*) MyZMalloc( ii ); /* 2eme passe : Remplissage du tableau des caracteristiques */ if( OneSheetOnly == 0 ) if( OneSheetOnly == 0 ) { { ii = 0; ii = 0; Loading @@ -668,10 +674,10 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) qsort( ListeCmp, NbOfCmp, sizeof(CmpListStruct), AnnotTriComposant ); qsort( ListeCmp, NbOfCmp, sizeof(CmpListStruct), AnnotTriComposant ); /* Separation des Numeros de la reference: IC1 -> IC, et 1 dans .m_NumRef */ /* Break full components reference in name (prefix) and number: example: IC1 become IC, and 1 */ BreakReference( ListeCmp, NbOfCmp ); BreakReference( ListeCmp, NbOfCmp ); /* comptage des elements non annotes */ /* count not yet annotated items */ error = 0; error = 0; for( ii = 0; ii < NbOfCmp - 1; ii++ ) for( ii = 0; ii < NbOfCmp - 1; ii++ ) { { Loading Loading @@ -729,9 +735,10 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) if( (stricmp( ListeCmp[ii].m_TextRef, ListeCmp[ii + 1].m_TextRef ) != 0) if( (stricmp( ListeCmp[ii].m_TextRef, ListeCmp[ii + 1].m_TextRef ) != 0) || ( ListeCmp[ii].m_NumRef != ListeCmp[ii + 1].m_NumRef ) ) || ( ListeCmp[ii].m_NumRef != ListeCmp[ii + 1].m_NumRef ) ) continue; continue; /* Meme reference trouve */ /* Il y a erreur si meme unite */ /* Same reference found */ /* If same unit, error ! */ if( ListeCmp[ii].m_Unit == ListeCmp[ii + 1].m_Unit ) if( ListeCmp[ii].m_Unit == ListeCmp[ii + 1].m_Unit ) { { if( ListeCmp[ii].m_NumRef >= 0 ) if( ListeCmp[ii].m_NumRef >= 0 ) Loading @@ -753,8 +760,8 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) continue; continue; } } /* Il y a erreur si unites differentes mais nombre de parts differentes /* Test error if units are different but number of parts per package to hight * par boitier (ex U3 ( 1 part) et U3B sont incompatibles) */ * (ex U3 ( 1 part) and we find U3B the is an error) */ if( ListeCmp[ii].m_NbParts != ListeCmp[ii + 1].m_NbParts ) if( ListeCmp[ii].m_NbParts != ListeCmp[ii + 1].m_NbParts ) { { if( ListeCmp[ii].m_NumRef >= 0 ) if( ListeCmp[ii].m_NumRef >= 0 ) Loading @@ -775,7 +782,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) error++; error++; } } /* Il y a erreur si unites differentes ET valeurs diffrentes */ /* Error if values are diffrent between units, for the same reference */ if( stricmp( ListeCmp[ii].m_TextValue, ListeCmp[ii + 1].m_TextValue ) != 0 ) if( stricmp( ListeCmp[ii].m_TextValue, ListeCmp[ii + 1].m_TextValue ) != 0 ) { { wxString nextcmpref, cmpvalue, nextcmpvalue; wxString nextcmpref, cmpvalue, nextcmpvalue; Loading
eeschema/annotate_dialog.cpp +2 −0 Original line number Original line Diff line number Diff line Loading @@ -155,6 +155,8 @@ void WinEDA_AnnotateFrame::CreateControls() itemBoxSizer7->Add(itemButton10, 0, wxGROW|wxALL, 5); itemBoxSizer7->Add(itemButton10, 0, wxGROW|wxALL, 5); ////@end WinEDA_AnnotateFrame content construction ////@end WinEDA_AnnotateFrame content construction m_AnnotSortCmpCtrl->SetSelection(SortByPosition ? 0 : 1); } } /*! /*! Loading
gerbview/edit.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -148,7 +148,7 @@ void WinEDA_GerberFrame::Process_Special_Functions( wxCommandEvent& event ) break; break; case ID_PCB_GLOBAL_DELETE: case ID_PCB_GLOBAL_DELETE: Erase_Current_Layer( &dc, TRUE ); Erase_Current_Layer( TRUE ); break; break; case wxID_CUT: case wxID_CUT: Loading
gerbview/files.cpp +3 −3 Original line number Original line Diff line number Diff line Loading @@ -32,7 +32,7 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event ) { { case ID_MENU_LOAD_FILE: case ID_MENU_LOAD_FILE: case ID_LOAD_FILE: case ID_LOAD_FILE: if( Clear_Pcb( &dc, TRUE ) ) if( Clear_Pcb( TRUE ) ) { { LoadOneGerberFile( wxEmptyString, &dc, 0 ); LoadOneGerberFile( wxEmptyString, &dc, 0 ); } } Loading @@ -56,7 +56,7 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event ) case ID_MENU_NEW_BOARD: case ID_MENU_NEW_BOARD: case ID_NEW_BOARD: case ID_NEW_BOARD: Clear_Pcb( &dc, TRUE ); Clear_Pcb( TRUE ); Zoom_Automatique( FALSE ); Zoom_Automatique( FALSE ); GetScreen()->SetRefreshReq(); GetScreen()->SetRefreshReq(); break; break; Loading @@ -71,7 +71,7 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event ) case ID_LOAD_FILE_8: case ID_LOAD_FILE_8: case ID_LOAD_FILE_9: case ID_LOAD_FILE_9: case ID_LOAD_FILE_10: case ID_LOAD_FILE_10: if( Clear_Pcb( &dc, TRUE ) ) if( Clear_Pcb( TRUE ) ) { { LoadOneGerberFile( LoadOneGerberFile( GetLastProject( id - ID_LOAD_FILE_1 ).GetData(), GetLastProject( id - ID_LOAD_FILE_1 ).GetData(), Loading