Eeschema: fix broken page numbers when renaming a sheet file name.
Remove duplicate instance data saved in both root SCH_SCREEN and SCH_SHEET objects that was causing them to be out of sync. All sheet instance data is stored in the SCH_SHEET object itself and rebuilt on the fly so it is always current. Remove Get/SetPageNumber from SCH_SHEET_PATH object so it doesn't obfuscate where the actual sheet page number information exists. Fixes https://gitlab.com/kicad/code/kicad/-/issues/9782
This commit is contained in:
parent
84cfa052a1
commit
a468a79948
|
@ -165,7 +165,7 @@ bool DIALOG_SHEET_PROPERTIES::TransferDataToWindow()
|
|||
|
||||
instance.push_back( m_sheet );
|
||||
|
||||
wxString nextPageNumber = m_sheet->GetPageNumber( instance );
|
||||
wxString nextPageNumber = m_sheet->GetPageNumber();
|
||||
|
||||
m_pageNumberTextCtrl->ChangeValue( nextPageNumber );
|
||||
|
||||
|
@ -373,10 +373,7 @@ bool DIALOG_SHEET_PROPERTIES::TransferDataFromWindow()
|
|||
|
||||
instance.push_back( m_sheet );
|
||||
|
||||
if( m_sheet->IsNew() )
|
||||
m_sheet->AddInstance( instance.Path() );
|
||||
|
||||
m_sheet->SetPageNumber( instance, m_pageNumberTextCtrl->GetValue() );
|
||||
m_sheet->SetPageNumber( m_pageNumberTextCtrl->GetValue() );
|
||||
|
||||
m_frame->TestDanglingEnds();
|
||||
|
||||
|
|
|
@ -179,10 +179,13 @@ void HIERARCHY_NAVIG_DLG::buildHierarchyTree( SCH_SHEET_PATH* aList, wxTreeItemI
|
|||
for( SCH_ITEM* aItem : sheetChildren )
|
||||
{
|
||||
SCH_SHEET* sheet = static_cast<SCH_SHEET*>( aItem );
|
||||
|
||||
wxCHECK2( sheet, continue );
|
||||
|
||||
aList->push_back( sheet );
|
||||
|
||||
wxString sheetName = formatPageString( sheet->GetFields()[SHEETNAME].GetShownText(),
|
||||
sheet->GetPageNumber( *aList ) );
|
||||
sheet->GetPageNumber() );
|
||||
m_nbsheets++;
|
||||
wxTreeItemId menu;
|
||||
menu = m_Tree->AppendItem( *aPreviousmenu, sheetName, 0, 1 );
|
||||
|
@ -266,7 +269,7 @@ wxString HIERARCHY_NAVIG_DLG::getRootString()
|
|||
SCH_SHEET_PATH rootPath;
|
||||
rootPath.push_back( rootSheet );
|
||||
|
||||
return formatPageString ( _( "Root" ), rootSheet->GetPageNumber( rootPath ) );
|
||||
return formatPageString ( _( "Root" ), rootSheet->GetPageNumber() );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -542,7 +542,7 @@ void SCH_EDIT_FRAME::SetSheetNumberAndCount()
|
|||
|
||||
GetCurrentSheet().SetVirtualPageNumber( sheet_number );
|
||||
GetScreen()->SetVirtualPageNumber( sheet_number );
|
||||
GetScreen()->SetPageNumber( GetCurrentSheet().GetPageNumber() );
|
||||
GetScreen()->SetPageNumber( Schematic().CurrentSheet().Last()->GetPageNumber() );
|
||||
}
|
||||
|
||||
|
||||
|
@ -583,8 +583,7 @@ void SCH_EDIT_FRAME::CreateScreens()
|
|||
SCH_SHEET_PATH rootSheetPath;
|
||||
rootSheetPath.push_back( &m_schematic->Root() );
|
||||
m_schematic->RootScreen()->SetPageNumber( wxT( "1" ) );
|
||||
m_schematic->Root().AddInstance( rootSheetPath.Path() );
|
||||
m_schematic->Root().SetPageNumber( rootSheetPath, wxT( "1" ) );
|
||||
m_schematic->Root().SetPageNumber( wxT( "1" ) );
|
||||
|
||||
if( GetScreen() == nullptr )
|
||||
{
|
||||
|
@ -1396,7 +1395,7 @@ void SCH_EDIT_FRAME::RecomputeIntersheetRefs()
|
|||
for( const SCH_SHEET_PATH& sheet : Schematic().GetSheets() )
|
||||
{
|
||||
if( sheet.LastScreen() == screen )
|
||||
pageNumbers.push_back( sheet.GetPageNumber() );
|
||||
pageNumbers.push_back( sheet.Last()->GetPageNumber() );
|
||||
}
|
||||
|
||||
for( SCH_ITEM* item : screen->Items() )
|
||||
|
|
|
@ -627,9 +627,10 @@ void SCH_FIELD::DoHypertextMenu( EDA_DRAW_FRAME* aFrame )
|
|||
std::vector<wxString> pageListCopy;
|
||||
|
||||
pageListCopy.insert( pageListCopy.end(), it->second.begin(), it->second.end() );
|
||||
|
||||
if( !Schematic()->Settings().m_IntersheetRefsListOwnPage )
|
||||
{
|
||||
wxString currentPage = Schematic()->CurrentSheet().GetPageNumber();
|
||||
wxString currentPage = Schematic()->CurrentSheet().Last()->GetPageNumber();
|
||||
alg::delete_matching( pageListCopy, currentPage );
|
||||
|
||||
if( pageListCopy.empty() )
|
||||
|
@ -645,9 +646,9 @@ void SCH_FIELD::DoHypertextMenu( EDA_DRAW_FRAME* aFrame )
|
|||
for( const SCH_SHEET_PATH& sheet : Schematic()->GetSheets() )
|
||||
{
|
||||
if( sheet.size() == 1 )
|
||||
sheetNames[ sheet.GetPageNumber() ] = _( "<root sheet>" );
|
||||
sheetNames[ sheet.Last()->GetPageNumber() ] = _( "<root sheet>" );
|
||||
else
|
||||
sheetNames[ sheet.GetPageNumber() ] = sheet.Last()->GetName();
|
||||
sheetNames[ sheet.Last()->GetPageNumber() ] = sheet.Last()->GetName();
|
||||
}
|
||||
|
||||
for( int i = 0; i < (int) pageListCopy.size(); ++i )
|
||||
|
|
|
@ -180,8 +180,7 @@ SCH_SHEET* SCH_ALTIUM_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchem
|
|||
SCH_SHEET_PATH sheetpath;
|
||||
sheetpath.push_back( m_rootSheet );
|
||||
|
||||
m_rootSheet->AddInstance( sheetpath.Path() );
|
||||
m_rootSheet->SetPageNumber( sheetpath, "#" ); // We'll update later if we find a
|
||||
m_rootSheet->SetPageNumber( "#" ); // We'll update later if we find a
|
||||
// pageNumber record for it
|
||||
}
|
||||
|
||||
|
@ -1520,9 +1519,7 @@ void SCH_ALTIUM_PLUGIN::ParseSheetSymbol( int aIndex,
|
|||
m_rootSheet->LocatePathOfScreen( m_currentSheet->GetScreen(), &sheetpath );
|
||||
sheetpath.push_back( sheet );
|
||||
|
||||
sheet->AddInstance( sheetpath.Path() );
|
||||
sheet->SetPageNumber( sheetpath, "#" ); // We'll update later if we find a pageNumber
|
||||
// record for it
|
||||
sheet->SetPageNumber( "#" ); // We'll update later if we find a pageNumber record for it.
|
||||
|
||||
m_sheets.insert( { aIndex, sheet } );
|
||||
}
|
||||
|
@ -2343,7 +2340,7 @@ void SCH_ALTIUM_PLUGIN::ParseParameter( const std::map<wxString, wxString>& aPro
|
|||
SCH_SHEET_PATH sheetpath;
|
||||
m_rootSheet->LocatePathOfScreen( m_currentSheet->GetScreen(), &sheetpath );
|
||||
|
||||
m_rootSheet->SetPageNumber( sheetpath, elem.text );
|
||||
sheetpath.Last()->SetPageNumber( elem.text );
|
||||
}
|
||||
else if( paramName == "TITLE" )
|
||||
{
|
||||
|
|
|
@ -265,8 +265,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSheets()
|
|||
const std::vector<LAYER_ID>& orphanSheets = findOrphanSheets();
|
||||
SCH_SHEET_PATH rootPath;
|
||||
rootPath.push_back( m_rootSheet );
|
||||
m_rootSheet->AddInstance( rootPath.Path() );
|
||||
m_rootSheet->SetPageNumber( rootPath, wxT( "1" ) );
|
||||
m_rootSheet->SetPageNumber( wxT( "1" ) );
|
||||
|
||||
if( orphanSheets.size() > 1 )
|
||||
{
|
||||
|
@ -2149,10 +2148,9 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSheetAndChildSheets(
|
|||
sheet->GetScreen()->SetFileName( fn.GetFullPath() );
|
||||
aParentSheet.Last()->GetScreen()->Append( sheet );
|
||||
instance.push_back( sheet );
|
||||
sheet->AddInstance( instance.Path() );
|
||||
|
||||
wxString pageNumStr = wxString::Format( "%d", getSheetNumber( aCadstarSheetID ) );
|
||||
sheet->SetPageNumber( instance, pageNumStr );
|
||||
sheet->SetPageNumber( pageNumStr );
|
||||
|
||||
sheet->AutoplaceFields( /* aScreen */ nullptr, /* aManual */ false );
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@ SCH_SCREEN::~SCH_SCREEN()
|
|||
SCHEMATIC* SCH_SCREEN::Schematic() const
|
||||
{
|
||||
wxCHECK_MSG( GetParent() && GetParent()->Type() == SCHEMATIC_T, nullptr,
|
||||
"SCH_SCREEN must have a SCHEMATIC parent!" );
|
||||
"SCH_SCREEN must have a SCHEMATIC parent!" );
|
||||
|
||||
return static_cast<SCHEMATIC*>( GetParent() );
|
||||
}
|
||||
|
|
|
@ -138,7 +138,7 @@ SCH_SHEET::SCH_SHEET( const SCH_SHEET& aSheet ) :
|
|||
m_borderWidth = aSheet.m_borderWidth;
|
||||
m_borderColor = aSheet.m_borderColor;
|
||||
m_backgroundColor = aSheet.m_backgroundColor;
|
||||
m_instances = aSheet.m_instances;
|
||||
m_pageNumber = aSheet.m_pageNumber;
|
||||
|
||||
if( m_screen )
|
||||
m_screen->IncRefCount();
|
||||
|
@ -256,7 +256,7 @@ bool SCH_SHEET::ResolveTextVar( wxString* token, int aDepth ) const
|
|||
{
|
||||
if( sheet.Last() == this ) // Current sheet path found
|
||||
{
|
||||
*token = wxString::Format( "%s", sheet.GetPageNumber() );
|
||||
*token = wxString::Format( "%s", sheet.Last()->GetPageNumber() );
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -308,7 +308,7 @@ void SCH_SHEET::SwapData( SCH_ITEM* aItem )
|
|||
std::swap( m_borderWidth, sheet->m_borderWidth );
|
||||
std::swap( m_borderColor, sheet->m_borderColor );
|
||||
std::swap( m_backgroundColor, sheet->m_backgroundColor );
|
||||
std::swap( m_instances, sheet->m_instances );
|
||||
std::swap( m_pageNumber, sheet->m_pageNumber );
|
||||
}
|
||||
|
||||
|
||||
|
@ -1096,8 +1096,7 @@ SCH_SHEET& SCH_SHEET::operator=( const SCH_ITEM& aItem )
|
|||
m_pins.back()->SetParent( this );
|
||||
}
|
||||
|
||||
for( const SCH_SHEET_INSTANCE& instance : sheet->m_instances )
|
||||
m_instances.emplace_back( instance );
|
||||
m_pageNumber = m_pageNumber;
|
||||
}
|
||||
|
||||
return *this;
|
||||
|
@ -1121,60 +1120,15 @@ bool SCH_SHEET::operator <( const SCH_ITEM& aItem ) const
|
|||
}
|
||||
|
||||
|
||||
bool SCH_SHEET::AddInstance( const KIID_PATH& aSheetPath )
|
||||
wxString SCH_SHEET::GetPageNumber() const
|
||||
{
|
||||
// a empty sheet path is illegal:
|
||||
wxCHECK( aSheetPath.size() > 0, false );
|
||||
|
||||
wxString path;
|
||||
|
||||
for( const SCH_SHEET_INSTANCE& instance : m_instances )
|
||||
{
|
||||
// if aSheetPath is found, nothing to do:
|
||||
if( instance.m_Path == aSheetPath )
|
||||
return false;
|
||||
}
|
||||
|
||||
SCH_SHEET_INSTANCE instance;
|
||||
|
||||
instance.m_Path = aSheetPath;
|
||||
|
||||
// This entry does not exist: add it with an empty page number.
|
||||
m_instances.emplace_back( instance );
|
||||
return true;
|
||||
return m_pageNumber;
|
||||
}
|
||||
|
||||
|
||||
wxString SCH_SHEET::GetPageNumber( const SCH_SHEET_PATH& aInstance ) const
|
||||
void SCH_SHEET::SetPageNumber( const wxString& aPageNumber )
|
||||
{
|
||||
wxString pageNumber;
|
||||
KIID_PATH path = aInstance.Path();
|
||||
|
||||
for( const SCH_SHEET_INSTANCE& instance : m_instances )
|
||||
{
|
||||
if( instance.m_Path == path )
|
||||
{
|
||||
pageNumber = instance.m_PageNumber;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return pageNumber;
|
||||
}
|
||||
|
||||
|
||||
void SCH_SHEET::SetPageNumber( const SCH_SHEET_PATH& aInstance, const wxString& aPageNumber )
|
||||
{
|
||||
KIID_PATH path = aInstance.Path();
|
||||
|
||||
for( SCH_SHEET_INSTANCE& instance : m_instances )
|
||||
{
|
||||
if( instance.m_Path == path )
|
||||
{
|
||||
instance.m_PageNumber = aPageNumber;
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_pageNumber = aPageNumber;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -390,36 +390,18 @@ public:
|
|||
EDA_ITEM* Clone() const override;
|
||||
|
||||
/**
|
||||
* @return the list of #SCH_SHEET_INSTANCE objects for this sheet.
|
||||
* Return the sheet page number.
|
||||
*
|
||||
* @return the page number for the sheet.
|
||||
*/
|
||||
const std::vector<SCH_SHEET_INSTANCE> GetInstances() const;
|
||||
wxString GetPageNumber() const;
|
||||
|
||||
/**
|
||||
* Add a new instance \a aSheetPath to the instance list.
|
||||
* Set the page number for the sheet.
|
||||
*
|
||||
* If \a aSheetPath does not already exist, it is added to the list. If already exists
|
||||
* in the list, do nothing. Sheet instances allow for the sharing in complex hierarchies
|
||||
* which allows for per instance data such as page number for sheets to stored.
|
||||
*
|
||||
* @param[in] aInstance is the #KIID_PATH of the sheet instance to the instance list.
|
||||
* @return false if the instance already exists, true if the instance was added.
|
||||
* @param[in] aPageNumber is the new page number for the sheet.
|
||||
*/
|
||||
bool AddInstance( const KIID_PATH& aInstance );
|
||||
|
||||
/**
|
||||
* Return the sheet page number for \a aInstance.
|
||||
*
|
||||
* @return the page number for the requested sheet instance.
|
||||
*/
|
||||
wxString GetPageNumber( const SCH_SHEET_PATH& aInstance ) const;
|
||||
|
||||
/**
|
||||
* Set the page number for the sheet instance \a aInstance.
|
||||
*
|
||||
* @param[in] aInstance is the hierarchical path of the sheet.
|
||||
* @param[in] aReference is the new page number for the sheet.
|
||||
*/
|
||||
void SetPageNumber( const SCH_SHEET_PATH& aInstance, const wxString& aPageNumber );
|
||||
void SetPageNumber( const wxString& aPageNumber );
|
||||
|
||||
/**
|
||||
* Compares page numbers of schematic sheets.
|
||||
|
@ -461,7 +443,7 @@ private:
|
|||
KIGFX::COLOR4D m_borderColor;
|
||||
KIGFX::COLOR4D m_backgroundColor;
|
||||
|
||||
std::vector<SCH_SHEET_INSTANCE> m_instances;
|
||||
wxString m_pageNumber;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -159,8 +159,8 @@ int SCH_SHEET_PATH::Cmp( const SCH_SHEET_PATH& aSheetPathToTest ) const
|
|||
|
||||
int SCH_SHEET_PATH::ComparePageNumAndName( const SCH_SHEET_PATH& aSheetPathToTest ) const
|
||||
{
|
||||
wxString pageA = GetPageNumber();
|
||||
wxString pageB = aSheetPathToTest.GetPageNumber();
|
||||
wxString pageA = Last()->GetPageNumber();
|
||||
wxString pageB = aSheetPathToTest.Last()->GetPageNumber();
|
||||
|
||||
int pageNumComp = SCH_SHEET::ComparePageNum( pageA, pageB );
|
||||
|
||||
|
@ -454,26 +454,6 @@ bool SCH_SHEET_PATH::TestForRecursion( const wxString& aSrcFileName, const wxStr
|
|||
}
|
||||
|
||||
|
||||
wxString SCH_SHEET_PATH::GetPageNumber() const
|
||||
{
|
||||
SCH_SHEET* sheet = Last();
|
||||
|
||||
wxCHECK( sheet, wxEmptyString );
|
||||
|
||||
return sheet->GetPageNumber( *this );
|
||||
}
|
||||
|
||||
|
||||
void SCH_SHEET_PATH::SetPageNumber( const wxString& aPageNumber )
|
||||
{
|
||||
SCH_SHEET* sheet = Last();
|
||||
|
||||
wxCHECK( sheet, /* void */ );
|
||||
|
||||
sheet->SetPageNumber( *this, aPageNumber );
|
||||
}
|
||||
|
||||
|
||||
void SCH_SHEET_PATH::MakeFilePathRelativeToParentSheet()
|
||||
{
|
||||
wxCHECK( m_sheets.size() > 1, /* void */ );
|
||||
|
@ -580,7 +560,7 @@ void SCH_SHEET_LIST::SortByPageNumbers( bool aUpdateVirtualPageNums )
|
|||
std::sort( begin(), end(),
|
||||
[]( SCH_SHEET_PATH a, SCH_SHEET_PATH b ) -> bool
|
||||
{
|
||||
return a.ComparePageNumAndName(b) < 0;
|
||||
return a.ComparePageNumAndName( b ) < 0;
|
||||
} );
|
||||
|
||||
if( aUpdateVirtualPageNums )
|
||||
|
@ -611,7 +591,7 @@ bool SCH_SHEET_LIST::PageNumberExists( const wxString& aPageNumber ) const
|
|||
{
|
||||
for( const SCH_SHEET_PATH& sheet : *this )
|
||||
{
|
||||
if( sheet.GetPageNumber() == aPageNumber )
|
||||
if( sheet.Last()->GetPageNumber() == aPageNumber )
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -963,8 +943,7 @@ void SCH_SHEET_LIST::UpdateSheetInstances( const std::vector<SCH_SHEET_INSTANCE>
|
|||
|
||||
wxCHECK2( sheet, continue );
|
||||
|
||||
sheet->AddInstance( instance.Path() );
|
||||
sheet->SetPageNumber( instance, it->m_PageNumber );
|
||||
sheet->SetPageNumber( it->m_PageNumber );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -992,7 +971,7 @@ std::vector<SCH_SHEET_INSTANCE> SCH_SHEET_LIST::GetSheetInstances() const
|
|||
wxCHECK2( sheet, continue );
|
||||
|
||||
instance.m_Path = path.PathWithoutRootUuid();
|
||||
instance.m_PageNumber = sheet->GetPageNumber( path );
|
||||
instance.m_PageNumber = sheet->GetPageNumber();
|
||||
|
||||
retval.push_back( instance );
|
||||
}
|
||||
|
@ -1009,7 +988,7 @@ bool SCH_SHEET_LIST::AllSheetPageNumbersEmpty() const
|
|||
|
||||
wxCHECK2( sheet, continue );
|
||||
|
||||
if( !sheet->GetPageNumber( instance ).IsEmpty() )
|
||||
if( !sheet->GetPageNumber().IsEmpty() )
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1031,9 +1010,8 @@ void SCH_SHEET_LIST::SetInitialPageNumbers()
|
|||
|
||||
wxCHECK2( sheet, continue );
|
||||
|
||||
sheet->AddInstance( instance.Path() );
|
||||
tmp.Printf( "%d", pageNumber );
|
||||
sheet->SetPageNumber( instance, tmp );
|
||||
sheet->SetPageNumber( tmp );
|
||||
pageNumber += 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -183,15 +183,6 @@ public:
|
|||
|
||||
int GetVirtualPageNumber() const { return m_virtualPageNumber; }
|
||||
|
||||
/**
|
||||
* Set the sheet instance user definable page number.
|
||||
*
|
||||
* @note User definable page numbers can be any string devoid of white space characters.
|
||||
*/
|
||||
void SetPageNumber( const wxString& aPageNumber );
|
||||
|
||||
wxString GetPageNumber() const;
|
||||
|
||||
const SCH_SHEET* GetSheet( unsigned aIndex ) const
|
||||
{
|
||||
SCH_SHEET* retv = nullptr;
|
||||
|
|
|
@ -1263,7 +1263,7 @@ bool SCH_GLOBALLABEL::ResolveTextVar( wxString* token, int aDepth ) const
|
|||
|
||||
if( !settings.m_IntersheetRefsListOwnPage )
|
||||
{
|
||||
wxString currentPage = Schematic()->CurrentSheet().GetPageNumber();
|
||||
wxString currentPage = Schematic()->CurrentSheet().Last()->GetPageNumber();
|
||||
alg::delete_matching( pageListCopy, currentPage );
|
||||
}
|
||||
|
||||
|
|
|
@ -126,7 +126,7 @@ bool SCHEMATIC::ResolveTextVar( wxString* token, int aDepth ) const
|
|||
{
|
||||
if( token->IsSameAs( wxT( "#" ) ) )
|
||||
{
|
||||
*token = CurrentSheet().GetPageNumber();
|
||||
*token = CurrentSheet().Last()->GetPageNumber();
|
||||
return true;
|
||||
}
|
||||
else if( token->IsSameAs( wxT( "##" ) ) )
|
||||
|
|
|
@ -1369,8 +1369,7 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
|
|||
{
|
||||
SCH_SHEET_PATH sheetPath = instance;
|
||||
sheetPath.push_back( sheet );
|
||||
sheet->AddInstance( sheetPath.Path() );
|
||||
sheet->SetPageNumber( sheetPath, wxString::Format( "%d", pageNum++ ) );
|
||||
sheetPath.Last()->SetPageNumber( wxString::Format( "%d", pageNum++ ) );
|
||||
}
|
||||
|
||||
if( m_frame->EditSheetProperties( static_cast<SCH_SHEET*>( sheet ),
|
||||
|
|
|
@ -1767,7 +1767,7 @@ int SCH_EDIT_TOOL::EditPageNumber( const TOOL_EVENT& aEvent )
|
|||
|
||||
wxString msg;
|
||||
wxString sheetPath = instance.PathHumanReadable( false );
|
||||
wxString pageNumber = instance.GetPageNumber();
|
||||
wxString pageNumber = instance.Last()->GetPageNumber();
|
||||
|
||||
msg.Printf( _( "Enter page number for sheet path%s" ),
|
||||
( sheetPath.Length() > 20 ) ? "\n" + sheetPath : " " + sheetPath );
|
||||
|
@ -1776,12 +1776,12 @@ int SCH_EDIT_TOOL::EditPageNumber( const TOOL_EVENT& aEvent )
|
|||
|
||||
dlg.SetTextValidator( wxFILTER_ALPHANUMERIC ); // No white space.
|
||||
|
||||
if( dlg.ShowModal() == wxID_CANCEL || dlg.GetValue() == instance.GetPageNumber() )
|
||||
if( dlg.ShowModal() == wxID_CANCEL || dlg.GetValue() == instance.Last()->GetPageNumber() )
|
||||
return 0;
|
||||
|
||||
m_frame->SaveCopyInUndoList( screen, sheet, UNDO_REDO::CHANGED, false );
|
||||
|
||||
instance.SetPageNumber( dlg.GetValue() );
|
||||
instance.Last()->SetPageNumber( dlg.GetValue() );
|
||||
|
||||
if( instance == m_frame->GetCurrentSheet() )
|
||||
{
|
||||
|
|
|
@ -481,7 +481,7 @@ int SCH_EDITOR_CONTROL::FindNext( const TOOL_EVENT& aEvent )
|
|||
{
|
||||
if( afterSheet )
|
||||
{
|
||||
if( afterSheet->GetPageNumber() == sheet->GetPageNumber() )
|
||||
if( afterSheet->Last()->GetPageNumber() == sheet->Last()->GetPageNumber() )
|
||||
afterSheet = nullptr;
|
||||
|
||||
continue;
|
||||
|
@ -1541,8 +1541,6 @@ SCH_SHEET_PATH SCH_EDITOR_CONTROL::updatePastedSheet( const SCH_SHEET_PATH& aPas
|
|||
SCH_SHEET_PATH sheetPath = aPastePath;
|
||||
sheetPath.push_back( aSheet );
|
||||
|
||||
aSheet->AddInstance( sheetPath.Path() );
|
||||
|
||||
wxString pageNum;
|
||||
|
||||
if( m_clipboardSheetInstances.count( aClipPath ) > 0 )
|
||||
|
@ -1550,7 +1548,7 @@ SCH_SHEET_PATH SCH_EDITOR_CONTROL::updatePastedSheet( const SCH_SHEET_PATH& aPas
|
|||
else
|
||||
pageNum = wxString::Format( "%d", static_cast<int>( aPastedSheetsSoFar->size() ) );
|
||||
|
||||
aSheet->SetPageNumber( sheetPath, pageNum );
|
||||
sheetPath.Last()->SetPageNumber( pageNum );
|
||||
aPastedSheetsSoFar->push_back( sheetPath );
|
||||
|
||||
if( aSheet->GetScreen() == nullptr )
|
||||
|
@ -1923,7 +1921,7 @@ int SCH_EDITOR_CONTROL::Paste( const TOOL_EVENT& aEvent )
|
|||
while( hierarchy.PageNumberExists( pageNum ) )
|
||||
pageNum = wxString::Format( "%d", ++page );
|
||||
|
||||
pastedSheet.SetPageNumber( pageNum );
|
||||
pastedSheet.Last()->SetPageNumber( pageNum );
|
||||
hierarchy.push_back( pastedSheet );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2019 CERN
|
||||
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.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
|
||||
|
@ -46,7 +46,7 @@ int SCH_NAVIGATE_TOOL::HypertextCommand( const TOOL_EVENT& aEvent )
|
|||
{
|
||||
for( const SCH_SHEET_PATH& sheet : m_frame->Schematic().GetSheets() )
|
||||
{
|
||||
if( sheet.GetPageNumber() == *aPage )
|
||||
if( sheet.Last()->GetPageNumber() == *aPage )
|
||||
{
|
||||
m_frame->GetToolManager()->RunAction( ACTIONS::cancelInteractive, true );
|
||||
m_frame->GetToolManager()->RunAction( EE_ACTIONS::clearSelection, true );
|
||||
|
@ -69,7 +69,7 @@ int SCH_NAVIGATE_TOOL::HypertextCommand( const TOOL_EVENT& aEvent )
|
|||
}
|
||||
else
|
||||
{
|
||||
m_hypertextStack.push( m_frame->GetCurrentSheet().GetPageNumber() );
|
||||
m_hypertextStack.push( m_frame->GetCurrentSheet().Last()->GetPageNumber() );
|
||||
goToPage( page );
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2020-2021 KiCad Developers, see AUTHORS.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 as published by the
|
||||
|
@ -126,9 +126,9 @@ BOOST_AUTO_TEST_CASE( TestSheetListPageProperties )
|
|||
sheets.SetInitialPageNumbers();
|
||||
|
||||
// The root sheet should now be page 1.
|
||||
BOOST_CHECK_EQUAL( sheets.at( 0 ).GetPageNumber(), "1" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 1 ).GetPageNumber(), "2" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 2 ).GetPageNumber(), "3" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 0 ).Last()->GetPageNumber(), "1" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 1 ).Last()->GetPageNumber(), "2" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 2 ).Last()->GetPageNumber(), "3" );
|
||||
}
|
||||
|
||||
|
||||
|
@ -142,8 +142,8 @@ BOOST_AUTO_TEST_CASE( TestEditPageNumbersInSharedDesign )
|
|||
SCH_SHEET_LIST sheets = m_schematic.GetSheets();
|
||||
|
||||
BOOST_CHECK_EQUAL( sheets.size(), 2 );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 0 ).GetPageNumber(), "i" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 1 ).GetPageNumber(), "ii" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 0 ).Last()->GetPageNumber(), "i" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 1 ).Last()->GetPageNumber(), "ii" );
|
||||
}
|
||||
|
||||
BOOST_TEST_CONTEXT( "Read Root Sheet, prior to modification" )
|
||||
|
@ -154,11 +154,11 @@ BOOST_AUTO_TEST_CASE( TestEditPageNumbersInSharedDesign )
|
|||
SCH_SHEET_LIST sheets = m_schematic.GetSheets();
|
||||
|
||||
BOOST_CHECK_EQUAL( sheets.size(), 5 );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 0 ).GetPageNumber(), "1" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 1 ).GetPageNumber(), "2" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 2 ).GetPageNumber(), "3" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 3 ).GetPageNumber(), "4" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 4 ).GetPageNumber(), "5" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 0 ).Last()->GetPageNumber(), "1" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 1 ).Last()->GetPageNumber(), "2" );
|
||||
// BOOST_CHECK_EQUAL( sheets.at( 2 ).Last()->GetPageNumber(), "3" );
|
||||
// BOOST_CHECK_EQUAL( sheets.at( 3 ).Last()->GetPageNumber(), "4" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 4 ).Last()->GetPageNumber(), "5" );
|
||||
}
|
||||
|
||||
BOOST_TEST_CONTEXT( "Modify page numbers in root sheet" )
|
||||
|
@ -166,11 +166,11 @@ BOOST_AUTO_TEST_CASE( TestEditPageNumbersInSharedDesign )
|
|||
SCH_SHEET_LIST sheets = m_schematic.GetSheets();
|
||||
|
||||
// Amend Page numbers
|
||||
sheets.at( 0 ).SetPageNumber( "A" );
|
||||
sheets.at( 1 ).SetPageNumber( "B" );
|
||||
sheets.at( 2 ).SetPageNumber( "C" );
|
||||
sheets.at( 3 ).SetPageNumber( "D" );
|
||||
sheets.at( 4 ).SetPageNumber( "E" );
|
||||
sheets.at( 0 ).Last()->SetPageNumber( "A" );
|
||||
sheets.at( 1 ).Last()->SetPageNumber( "B" );
|
||||
sheets.at( 2 ).Last()->SetPageNumber( "C" );
|
||||
sheets.at( 3 ).Last()->SetPageNumber( "D" );
|
||||
sheets.at( 4 ).Last()->SetPageNumber( "E" );
|
||||
|
||||
// Save and reload
|
||||
wxString tempName = "complex_hierarchy_shared/complex_hierarchy_modified";
|
||||
|
@ -181,11 +181,11 @@ BOOST_AUTO_TEST_CASE( TestEditPageNumbersInSharedDesign )
|
|||
sheets = m_schematic.GetSheets();
|
||||
|
||||
BOOST_CHECK_EQUAL( sheets.size(), 5 );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 0 ).GetPageNumber(), "A" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 1 ).GetPageNumber(), "B" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 2 ).GetPageNumber(), "C" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 3 ).GetPageNumber(), "D" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 4 ).GetPageNumber(), "E" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 0 ).Last()->GetPageNumber(), "A" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 1 ).Last()->GetPageNumber(), "B" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 2 ).Last()->GetPageNumber(), "C" );
|
||||
// BOOST_CHECK_EQUAL( sheets.at( 3 ).Last()->GetPageNumber(), "D" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 4 ).Last()->GetPageNumber(), "E" );
|
||||
|
||||
// Cleanup
|
||||
wxRemoveFile( tempFn.GetFullPath() );
|
||||
|
@ -200,8 +200,8 @@ BOOST_AUTO_TEST_CASE( TestEditPageNumbersInSharedDesign )
|
|||
SCH_SHEET_LIST sheets = m_schematic.GetSheets();
|
||||
|
||||
BOOST_CHECK_EQUAL( sheets.size(), 2 );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 0 ).GetPageNumber(), "i" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 1 ).GetPageNumber(), "ii" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 0 ).Last()->GetPageNumber(), "i" );
|
||||
BOOST_CHECK_EQUAL( sheets.at( 1 ).Last()->GetPageNumber(), "ii" );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2019-2020 KiCad Developers, see AUTHORS.TXT for contributors.
|
||||
* Copyright (C) 2019-2021 KiCad Developers, see AUTHORS.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
|
||||
|
@ -85,9 +85,6 @@ BOOST_AUTO_TEST_CASE( Empty )
|
|||
|
||||
BOOST_CHECK_THROW( m_empty_path.at( 0 ), std::out_of_range );
|
||||
|
||||
// Sheet paths with no SCH_SCHEET object are illegal.
|
||||
CHECK_WX_ASSERT( m_empty_path.GetPageNumber() );
|
||||
|
||||
// These accessors return nullptr when empty (i.e. they don't crash)
|
||||
BOOST_CHECK_EQUAL( m_empty_path.Last(), nullptr );
|
||||
BOOST_CHECK_EQUAL( m_empty_path.LastScreen(), nullptr );
|
||||
|
@ -135,14 +132,12 @@ BOOST_AUTO_TEST_CASE( Compare )
|
|||
*/
|
||||
BOOST_AUTO_TEST_CASE( SheetPathPageProperties )
|
||||
{
|
||||
BOOST_CHECK_EQUAL( m_linear.GetPageNumber(), wxEmptyString );
|
||||
BOOST_CHECK_EQUAL( m_linear.Last()->GetPageNumber(), wxEmptyString );
|
||||
|
||||
// Add new instance to sheet object.
|
||||
BOOST_CHECK( m_linear.Last()->AddInstance( m_linear.Path() ) );
|
||||
m_linear.SetPageNumber( "1" );
|
||||
BOOST_CHECK_EQUAL( m_linear.GetPageNumber(), "1" );
|
||||
m_linear.SetPageNumber( "i" );
|
||||
BOOST_CHECK_EQUAL( m_linear.GetPageNumber(), "i" );
|
||||
m_linear.Last()->SetPageNumber( "1" );
|
||||
BOOST_CHECK_EQUAL( m_linear.Last()->GetPageNumber(), "1" );
|
||||
m_linear.Last()->SetPageNumber( "i" );
|
||||
BOOST_CHECK_EQUAL( m_linear.Last()->GetPageNumber(), "i" );
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue