int SCH_SCREENS::ReplaceDuplicateTimeStamps() { EDA_ITEMS items; SCH_ITEM* item; for( size_t i = 0; i < m_screens.size(); i++ ) m_screens[i]->GetHierarchicalItems( items ); if( items.size() < 2 ) return 0; sort( items.begin(), items.end(), SortByTimeStamp ); int count = 0; for( size_t ii = 0; ii < items.size() - 1; ii++ ) { item = (SCH_ITEM*)items[ii]; SCH_ITEM* nextItem = (SCH_ITEM*)items[ii + 1]; if( item->GetTimeStamp() == nextItem->GetTimeStamp() ) { count++; // for a component, update its Time stamp and its paths // (m_PathsAndReferences field) if( item->Type() == SCH_COMPONENT_T ) ( (SCH_COMPONENT*) item )->SetTimeStamp( GetNewTimeStamp() ); // for a sheet, update only its time stamp (annotation of its // components will be lost) // @todo: see how to change sheet paths for its cmp list (can // be possible in most cases) else item->SetTimeStamp( GetNewTimeStamp() ); } } return count; }