Undo commit -r 6353.

This commit is contained in:
Wayne Stambaugh 2016-02-15 15:24:59 -05:00
parent 03bf559465
commit 97949ffde9
5 changed files with 61 additions and 188 deletions

View File

@ -260,7 +260,7 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
GetScreen()->SetFileName( fullFileName );
g_RootSheet->SetFileName( fullFileName );
g_RootSheet->SetName( "root" );
SetStatusText( wxEmptyString );
ClearMsgPanel();

View File

@ -98,11 +98,6 @@ void SCH_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition )
else
{
item = LocateAndShowItem( aPosition );
// Show the sheet information when the user clicks anywhere there are no items
// in the schematic.
if( item == NULL )
SetMsgPanel( GetCurrentSheet().Last() );
}
}

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2009 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2011 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
@ -204,7 +204,7 @@ bool SCH_SHEET::Load( LINE_READER& aLine, wxString& aErrorMsg )
&m_pos.x, &m_pos.y, &m_size.x, &m_size.y ) != 4 )
|| ( ((char*)aLine)[0] != 'S' ) )
{
aErrorMsg.Printf( wxT( " ** Eeschema file sheet error at line %d, aborted\n" ),
aErrorMsg.Printf( wxT( " ** Eeschema file sheet struct error at line %d, aborted\n" ),
aLine.LineNumber() );
aErrorMsg << FROM_UTF8( ((char*)aLine) );
@ -301,7 +301,7 @@ bool SCH_SHEET::Load( LINE_READER& aLine, wxString& aErrorMsg )
if( strnicmp( "$End", ((char*)aLine), 4 ) != 0 )
{
aErrorMsg.Printf( wxT( "**Eeschema file end_sheet error at line %d, aborted\n" ),
aErrorMsg.Printf( wxT( "**Eeschema file end_sheet struct error at line %d, aborted\n" ),
aLine.LineNumber() );
aErrorMsg << FROM_UTF8( ((char*)aLine) );
return false;
@ -474,6 +474,9 @@ int SCH_SHEET::GetMinHeight() const
}
/**
* Delete sheet labels which do not have corresponding hierarchical label.
*/
void SCH_SHEET::CleanupSheet()
{
SCH_SHEET_PINS::iterator i = m_pins.begin();
@ -718,15 +721,44 @@ bool SCH_SHEET::SearchHierarchy( const wxString& aFilename, SCH_SCREEN** aScreen
}
bool SCH_SHEET::LocatePathOfScreen( SCH_SCREEN* aScreen, SCH_SHEET_PATH* aList )
{
if( m_screen )
{
aList->Push( this );
if( m_screen == aScreen )
return true;
EDA_ITEM* strct = m_screen->GetDrawItems();
while( strct )
{
if( strct->Type() == SCH_SHEET_T )
{
SCH_SHEET* ss = (SCH_SHEET*) strct;
if( ss->LocatePathOfScreen( aScreen, aList ) )
return true;
}
strct = strct->Next();
}
aList->Pop();
}
return false;
}
bool SCH_SHEET::Load( SCH_EDIT_FRAME* aFrame )
{
bool success = true;
SCH_SCREEN* screen = NULL;
if( !m_screen )
{
GetRootSheet()->SearchHierarchy( m_fileName, &screen );
g_RootSheet->SearchHierarchy( m_fileName, &screen );
if( screen )
{
@ -750,11 +782,6 @@ bool SCH_SHEET::Load( SCH_EDIT_FRAME* aFrame )
{
SCH_SHEET* sheetstruct = (SCH_SHEET*) bs;
// Set the parent to this sheet. This effectively creates the
// schematic sheet hierarchy eliminating the need to keep a
// copy of the root sheet in order to generate the hierarchy.
sheetstruct->SetParent( this );
if( !sheetstruct->Load( aFrame ) )
success = false;
}
@ -786,7 +813,6 @@ int SCH_SHEET::CountSheets()
}
}
}
return count;
}
@ -801,10 +827,11 @@ void SCH_SHEET::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
{
aList.push_back( MSG_PANEL_ITEM( _( "Sheet Name" ), m_name, CYAN ) );
aList.push_back( MSG_PANEL_ITEM( _( "File Name" ), m_fileName, BROWN ) );
aList.push_back( MSG_PANEL_ITEM( _( "Path" ), GetHumanReadablePath(), DARKMAGENTA ) );
#if 1 // Set to 1 to display the sheet time stamp (mainly for test)
aList.push_back( MSG_PANEL_ITEM( _( "Time Stamp" ), GetPath(), BLUE ) );
#if 0 // Set to 1 to display the sheet time stamp (mainly for test)
wxString msg;
msg.Printf( wxT( "%.8X" ), m_TimeStamp );
aList.push_back( MSG_PANEL_ITEM( _( "Time Stamp" ), msg, BLUE ) );
#endif
}
@ -1121,6 +1148,7 @@ void SCH_SHEET::Plot( PLOTTER* aPlotter )
Text = m_name;
size = wxSize( m_sheetNameSize, m_sheetNameSize );
//pos = m_pos; pos.y -= 4;
thickness = GetDefaultLineThickness();
thickness = Clamp_Text_PenSize( thickness, size, false );
@ -1153,67 +1181,6 @@ void SCH_SHEET::Plot( PLOTTER* aPlotter )
}
SCH_SHEET* SCH_SHEET::GetRootSheet()
{
EDA_ITEM* parent = GetParent();
SCH_SHEET* rootSheet = this;
while( parent )
{
// The parent of a SCH_SHEET object can only be another SCH_SHEET object or NULL.
wxASSERT_MSG( parent->Type() == SCH_SHEET_T, "SCH_SHEET parent is not a SCH_SHEET" );
rootSheet = static_cast<SCH_SHEET*>( parent );
parent = parent->GetParent();
}
return rootSheet;
}
void SCH_SHEET::GetPath( SCH_CONST_SHEETS& aSheetPath ) const
{
aSheetPath.insert( aSheetPath.begin(), const_cast<SCH_SHEET*>( this ) );
if( GetParent() )
static_cast<SCH_SHEET*>( GetParent() )->GetPath( aSheetPath );
}
wxString SCH_SHEET::GetPath() const
{
wxString tmp;
wxString path = "/";
const SCH_SHEET* sheet = this;
while( sheet->GetParent() )
{
tmp.Printf( "/%8.8lX", (long unsigned) sheet->GetTimeStamp() );
// We are walking up the parent stack so prepend each time stamp.
path = tmp + path;
sheet = static_cast<SCH_SHEET*>( sheet->GetParent() );
}
return path;
}
wxString SCH_SHEET::GetHumanReadablePath() const
{
wxString path = "/";
const SCH_SHEET* sheet = this;
while( sheet->GetParent() )
{
// We are walking up the parent stack so prepend each sheet name.
path = "/" + sheet->GetName() + path;
sheet = static_cast<SCH_SHEET*>( sheet->GetParent() );
}
return path;
}
SCH_ITEM& SCH_SHEET::operator=( const SCH_ITEM& aItem )
{
wxLogDebug( wxT( "Sheet assignment operator." ) );
@ -1247,35 +1214,6 @@ SCH_ITEM& SCH_SHEET::operator=( const SCH_ITEM& aItem )
}
bool SCH_SHEET::operator<( const SCH_SHEET& aRhs ) const
{
// Don't waste time against comparing the same objects..
if( this == &aRhs )
return false;
SCH_CONST_SHEETS lhsPath, rhsPath;
GetPath( lhsPath );
aRhs.GetPath( rhsPath );
// Shorter paths are less than longer paths.
if( lhsPath.size() < rhsPath.size() )
return true;
if( lhsPath.size() > rhsPath.size() )
return false;
// Compare time stamps when path lengths are the same.
for( unsigned i = 0; i < lhsPath.size(); i++ )
{
if( lhsPath[i]->GetTimeStamp() < rhsPath[i]->GetTimeStamp() )
return true;
}
return false;
}
#if defined(DEBUG)
void SCH_SHEET::Show( int nestLevel, std::ostream& os ) const

View File

@ -265,7 +265,7 @@ public:
* Return true for items which are moved with the anchor point at mouse cursor
* and false for items moved with no reference to anchor
* Usually return true for small items (labels, junctions) and false for
* items which can be large (hierarchical sheets, components)
* items which can be large (hierarchical sheets, compoments)
* @return false for a hierarchical sheet
*/
bool IsMovableFromAnchorPoint() { return false; }
@ -457,6 +457,19 @@ public:
*/
bool SearchHierarchy( const wxString& aFilename, SCH_SCREEN** aScreen );
/**
* Function LocatePathOfScreen
* search the existing hierarchy for an instance of screen "FileName".
* don't bother looking at the root sheet - it must be unique,
* no other references to its m_screen otherwise there would be
* loops in the hierarchy.
*
* @param aScreen = the SCH_SCREEN* screen that we search for
* @param aList = the SCH_SHEET_PATH* that must be used
* @return true if found
*/
bool LocatePathOfScreen( SCH_SCREEN* aScreen, SCH_SHEET_PATH* aList );
/**
* Function CountSheets
* calculates the number of sheets found in "this"
@ -553,21 +566,6 @@ public:
SCH_ITEM& operator=( const SCH_ITEM& aSheet );
/**
* Operator <
*
* test if a \a aRhs is less than this sheet.
*
* Sheet comparison order is:
* The number of parent sheets of this sheet is less than \a aRhs.
* When the number of parent sheets for this sheet are the same as \a aRhs, the time
* stamps of each parent sheet are compared from the root sheet to the last sheet.
*
* @param aRhs is an SCH_SHEET reference to the right hand side of the comparison.
* @return true if this #SCH_SHEET is less than \a aRhs.
*/
bool operator<( const SCH_SHEET& aRhs ) const;
wxPoint GetPosition() const { return m_pos; }
void SetPosition( const wxPoint& aPosition );
@ -580,59 +578,6 @@ public:
EDA_ITEM* Clone() const;
/**
* Function GetRootSheet
*
* returns the root sheet of this SCH_SHEET object.
*
* The root (top level) sheet can be found by walking up the parent links until the only
* sheet that has no parent is found. The root sheet can be found from any sheet in the
* hierarchy.
*
* @return a SCH_SHEET pointer to the root sheet.
*/
SCH_SHEET* GetRootSheet();
/**
* Function IsRootSheet
*
* returns true if `this` sheet has no parent which indicates it is the root (top level)
* sheet.
*
* @return true if this is the root sheet, otherwise false.
*/
bool IsRootSheet() const { return GetParent() == NULL; }
/**
* Function GetPath
*
* recurses up the parent branch up to the root sheet adding a pointer for each
* parent sheet to \a aSheetPath.
*
* @param aSheetPath is a refernce to an #SCH_SHEETS object to populate.
*/
void GetPath( std::vector<const SCH_SHEET*>& aSheetPath ) const;
/**
* Function GetPath
*
* returns a wxString containing the sheet path of this SCH_SHEET.
*
* The SCH_SHEET path is a Posix like path containing the hexadecimal time stamps in
* the parent order of this SCH_SHEET. It looks something like /4567FEDC/AA2233DD/.
*/
wxString GetPath() const;
/**
* Function GetHumanReadablePath
*
* returns a wxString containing the human readable path of this sheet.
*
* Human readable SCH_SHEET paths are Posix like paths made up of the sheet names
* in the parent order of this SCH_SHEET. It looks something like /sheet1/sheet2.
*/
wxString GetHumanReadablePath() const;
#if defined(DEBUG)
void Show( int nestLevel, std::ostream& os ) const; // override
#endif
@ -651,8 +596,5 @@ protected:
typedef std::vector< SCH_SHEET* > SCH_SHEETS;
typedef std::vector< const SCH_SHEET* > SCH_CONST_SHEETS;
typedef SCH_SHEETS::iterator SCH_SHEETS_ITER;
typedef SCH_SHEETS::const_iterator SCH_SHEETS_CITER;
#endif /* SCH_SHEEET_H */

View File

@ -2,7 +2,7 @@
* 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) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2013 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
@ -523,8 +523,6 @@ void SCH_EDIT_FRAME::CreateScreens()
if( g_RootSheet == NULL )
{
g_RootSheet = new SCH_SHEET();
g_RootSheet->SetName( "root" );
g_RootSheet->SetFileName( "noname.sch" );
}
if( g_RootSheet->GetScreen() == NULL )