Eeschema: move annotate power symbols from SCH_SHEET_PATH to SCH_SHEET.

1
* Uncouple SCH_COMPONENT::SetRef() from  SCH_SHEET_PATH and use SCH_SHEET  instead.
This commit is contained in:
Wayne Stambaugh 2016-01-03 08:58:27 -05:00
parent 662d35633a
commit 133b8f6b96
12 changed files with 72 additions and 82 deletions

View File

@ -694,7 +694,7 @@ int SCH_REFERENCE_LIST::CheckAnnotation( wxArrayString* aMessageList )
}
SCH_REFERENCE::SCH_REFERENCE( SCH_COMPONENT* aComponent, LIB_PART* aLibComponent,
SCH_REFERENCE::SCH_REFERENCE( SCH_COMPONENT* aComponent, LIB_PART* aLibComponent,
SCH_SHEET_PATH& aSheetPath )
{
wxASSERT( aComponent != NULL && aLibComponent != NULL );
@ -710,7 +710,7 @@ SCH_REFERENCE::SCH_REFERENCE( SCH_COMPONENT* aComponent, LIB_PART* aLibComp
m_SheetNum = 0;
if( aComponent->GetRef( &aSheetPath ).IsEmpty() )
aComponent->SetRef( &aSheetPath, wxT( "DefRef?" ) );
aComponent->SetRef( aSheetPath.Last(), wxT( "DefRef?" ) );
SetRef( aComponent->GetRef( &aSheetPath ) );
@ -730,7 +730,7 @@ void SCH_REFERENCE::Annotate()
else
m_Ref = TO_UTF8( GetRef() << m_NumRef );
m_RootCmp->SetRef( &m_SheetPath, FROM_UTF8( m_Ref.c_str() ) );
m_RootCmp->SetRef( m_SheetPath.Last(), FROM_UTF8( m_Ref.c_str() ) );
m_RootCmp->SetUnit( m_Unit );
m_RootCmp->SetUnitSelection( &m_SheetPath, m_Unit );
}

View File

@ -42,6 +42,7 @@
#include <sch_base_frame.h>
#include <class_library.h>
#include <sch_component.h>
#include <sch_sheet_path.h>
#include <dialog_helpers.h>
#include <dialog_edit_component_in_schematic_fbp.h>
@ -458,7 +459,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnOKButtonClick( wxCommandEvent& event
// Reference has a specific initialization, depending on the current active sheet
// because for a given component, in a complex hierarchy, there are more than one
// reference.
m_cmp->SetRef( &m_parent->GetCurrentSheet(), m_FieldsBuf[REFERENCE].GetText() );
m_cmp->SetRef( m_parent->GetCurrentSheet().Last(), m_FieldsBuf[REFERENCE].GetText() );
m_parent->OnModify();
m_parent->GetScreen()->TestDanglingEnds();

View File

@ -455,8 +455,8 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList )
m_tstUniqueGlobalLabels = m_cbTestUniqueGlbLabels->GetValue();
// Build the whole sheet list in hierarchy (sheet, not screen)
SCH_SHEET_LIST sheets;
sheets.AnnotatePowerSymbols( Prj().SchLibs() );
int refDes = 1;
g_RootSheet->AnnotatePowerSymbols( Prj().SchLibs(), &refDes );
if( m_parent->CheckAnnotate( aMessagesList, false ) )
{

View File

@ -2,8 +2,8 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2008-2013 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 2004-2013 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -38,6 +38,7 @@
#include <general.h>
#include <class_library.h>
#include <sch_component.h>
#include <sch_sheet_path.h>
#include <dialog_edit_one_field.h>
@ -101,7 +102,7 @@ void SCH_EDIT_FRAME::EditComponentFieldText( SCH_FIELD* aField )
// Test if the reference string is valid:
if( SCH_COMPONENT::IsReferenceStringValid( newtext ) )
{
component->SetRef( m_CurrentSheet, newtext );
component->SetRef( m_CurrentSheet->Last(), newtext );
}
else
{

View File

@ -67,9 +67,9 @@ int TestDuplicateSheetNames( bool aCreateMarker );
bool SCH_EDIT_FRAME::prepareForNetlist()
{
SCH_SHEET_LIST sheets;
int refDes = 1;
sheets.AnnotatePowerSymbols( Prj().SchLibs() );
g_RootSheet->AnnotatePowerSymbols( Prj().SchLibs(), &refDes );
// Performs some controls:
if( CheckAnnotate( NULL, 0 ) )

View File

@ -184,7 +184,7 @@ SCH_COMPONENT::SCH_COMPONENT( LIB_PART& aPart, SCH_SHEET_PATH* sheet, int unit,
// update the reference -- just the prefix for now.
msg += wxT( "?" );
SetRef( sheet, msg );
SetRef( sheet->Last(), msg );
// Use the schematic component name instead of the library value field
// name.
@ -471,7 +471,7 @@ const wxString SCH_COMPONENT::GetRef( const SCH_SHEET_PATH* sheet )
// all have the same component references, but perhaps this is best.
if( !GetField( REFERENCE )->GetText().IsEmpty() )
{
SetRef( sheet, GetField( REFERENCE )->GetText() );
SetRef( sheet->Last(), GetField( REFERENCE )->GetText() );
return GetField( REFERENCE )->GetText();
}
@ -504,9 +504,9 @@ bool SCH_COMPONENT::IsReferenceStringValid( const wxString& aReferenceString )
}
void SCH_COMPONENT::SetRef( const SCH_SHEET_PATH* sheet, const wxString& ref )
void SCH_COMPONENT::SetRef( const SCH_SHEET* aSheet, const wxString& ref )
{
wxString path = GetPath( sheet->Last() );
wxString path = GetPath( aSheet );
bool notInArray = true;

View File

@ -418,7 +418,7 @@ public:
/**
* Set the reference, for the given sheet path.
*/
void SetRef( const SCH_SHEET_PATH* sheet, const wxString& ref );
void SetRef( const SCH_SHEET* aSheet, const wxString& ref );
/**
* Function AddHierarchicalReference

View File

@ -48,6 +48,7 @@
#include <class_library.h>
#include <sch_component.h>
#include <sch_field.h>
#include <sch_sheet_path.h>
#include <kicad_string.h>
@ -447,7 +448,7 @@ bool SCH_FIELD::Replace( wxFindReplaceData& aSearchData, void* aAuxData )
isReplaced = EDA_ITEM::Replace( aSearchData, text );
if( isReplaced )
component->SetRef( (SCH_SHEET_PATH*) aAuxData, text );
component->SetRef( ((SCH_SHEET_PATH*) aAuxData)->Last(), text );
}
else
{

View File

@ -37,6 +37,7 @@
#include <kicad_string.h>
#include <msgpanel.h>
#include <class_library.h>
#include <sch_sheet.h>
#include <sch_sheet_path.h>
#include <sch_component.h>
@ -1294,6 +1295,43 @@ void SCH_SHEET::ClearModifyStatus()
}
void SCH_SHEET::AnnotatePowerSymbols( PART_LIBS* aLibs, int* aReference )
{
int ref = 1;
if( aReference )
ref = *aReference;
for( EDA_ITEM* item = m_screen->GetDrawItems(); item; item = item->Next() )
{
if( item->Type() != SCH_COMPONENT_T )
continue;
SCH_COMPONENT* component = (SCH_COMPONENT*) item;
LIB_PART* part = aLibs->FindLibPart( component->GetPartName() );
if( !part || !part->IsPower() )
continue;
wxString refstr = component->GetPrefix();
//str will be "C?" or so after the ClearAnnotation call.
while( refstr.Last() == '?' )
refstr.RemoveLast();
if( !refstr.StartsWith( wxT( "#" ) ) )
refstr = wxT( "#" ) + refstr;
refstr << wxT( "0" ) << ref;
component->SetRef( this, refstr );
ref++;
}
if( aReference )
*aReference = ref;
}
SCH_ITEM& SCH_SHEET::operator=( const SCH_ITEM& aItem )
{
wxLogDebug( wxT( "Sheet assignment operator." ) );

View File

@ -35,6 +35,7 @@
#include <sch_text.h>
class PART_LIBS;
class LINE_READER;
class SCH_SCREEN;
class SCH_SHEET;
@ -656,6 +657,17 @@ public:
*/
bool IsAutoSaveRequired();
/**
* Function AnnotatePowerSymbols
* annotates the power symbols only starting at \a aReference in the sheet path.
* @param aLibs the library list to use
* @param aReference A pointer to the number for the reference designator of the
* first power symbol to be annotated. If the pointer is NULL
* the annotation starts at 1. The number is incremented for
* each power symbol in the sheet that is annotated.
*/
void AnnotatePowerSymbols( PART_LIBS* aLibs, int* aReference );
#if defined(DEBUG)
void Show( int nestLevel, std::ostream& os ) const; // override
#endif

View File

@ -245,43 +245,6 @@ void SCH_SHEET_PATH::UpdateAllScreenReferences()
}
void SCH_SHEET_PATH::AnnotatePowerSymbols( PART_LIBS* aLibs, int* aReference )
{
int ref = 1;
if( aReference )
ref = *aReference;
for( EDA_ITEM* item = LastDrawList(); item; item = item->Next() )
{
if( item->Type() != SCH_COMPONENT_T )
continue;
SCH_COMPONENT* component = (SCH_COMPONENT*) item;
LIB_PART* part = aLibs->FindLibPart( component->GetPartName() );
if( !part || !part->IsPower() )
continue;
wxString refstr = component->GetPrefix();
//str will be "C?" or so after the ClearAnnotation call.
while( refstr.Last() == '?' )
refstr.RemoveLast();
if( !refstr.StartsWith( wxT( "#" ) ) )
refstr = wxT( "#" ) + refstr;
refstr << wxT( "0" ) << ref;
component->SetRef( this, refstr );
ref++;
}
if( aReference )
*aReference = ref;
}
void SCH_SHEET_PATH::GetComponents( PART_LIBS* aLibs, SCH_REFERENCE_LIST& aReferences, bool aIncludePowerSymbols )
{
// Search to sheet path number:
@ -684,15 +647,6 @@ void SCH_SHEET_LIST::BuildSheetList( SCH_SHEET* aSheet )
}
void SCH_SHEET_LIST::AnnotatePowerSymbols( PART_LIBS* aLibs )
{
int ref = 1;
for( SCH_SHEET_PATH* path = GetFirst(); path; path = GetNext() )
path->AnnotatePowerSymbols( aLibs, &ref );
}
void SCH_SHEET_LIST::GetComponents( PART_LIBS* aLibs, SCH_REFERENCE_LIST& aReferences,
bool aIncludePowerSymbols )
{

View File

@ -226,17 +226,6 @@ public:
*/
void UpdateAllScreenReferences();
/**
* Function AnnotatePowerSymbols
* annotates the power symbols only starting at \a aReference in the sheet path.
* @param aLibs the library list to use
* @param aReference A pointer to the number for the reference designator of the
* first power symbol to be annotated. If the pointer is NULL
* the annotation starts at 1. The number is incremented for
* each power symbol annotated.
*/
void AnnotatePowerSymbols( PART_LIBS* aLibs, int* aReference );
/**
* Function GetComponents
* adds a SCH_REFERENCE() object to \a aReferences for each component in the sheet.
@ -436,13 +425,6 @@ public:
*/
SCH_SHEET_PATH* GetSheetByPath( const wxString aPath, bool aHumanReadable = true );
/**
* Function AnnotatePowerSymbols
* clear and annotates the entire hierarchy of the sheet path list.
* @param aLib the library list to use
*/
void AnnotatePowerSymbols( PART_LIBS* aLib );
/**
* Function GetComponents
* adds a SCH_REFERENCE() object to \a aReferences for each component in the list
@ -451,7 +433,8 @@ public:
* @param aReferences List of references to populate.
* @param aIncludePowerSymbols Set to false to only get normal components.
*/
void GetComponents( PART_LIBS* aLibs, SCH_REFERENCE_LIST& aReferences, bool aIncludePowerSymbols = true );
void GetComponents( PART_LIBS* aLibs, SCH_REFERENCE_LIST& aReferences,
bool aIncludePowerSymbols = true );
/**
* Function GetMultiUnitComponents