Remove all schematic object load and save code.
All of the schematic object load and save code is implemented in the legacy schematic plugin so it is no longer required. Remove unused file with old schematic file loader. Doxygen comment cleaning.
This commit is contained in:
parent
e97ce6ee4f
commit
a0473614b5
|
@ -145,7 +145,6 @@ set( EESCHEMA_SRCS
|
|||
lib_rectangle.cpp
|
||||
lib_text.cpp
|
||||
libfield.cpp
|
||||
load_one_schematic_file.cpp
|
||||
menubar.cpp
|
||||
menubar_libedit.cpp
|
||||
netform.cpp
|
||||
|
|
|
@ -352,14 +352,6 @@ public:
|
|||
*/
|
||||
virtual void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 ) override;
|
||||
|
||||
/**
|
||||
* Writes the data structures for this object out to \a aFile in "*.sch" format.
|
||||
*
|
||||
* @param aFile The FILE to write to.
|
||||
* @return bool - true if success writing else false.
|
||||
*/
|
||||
bool Save( FILE* aFile ) const;
|
||||
|
||||
/**
|
||||
* Clear the state flags of all the items in the screen.
|
||||
*/
|
||||
|
|
|
@ -1,413 +0,0 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2004 Jean-Pierre Charras, jean-pierre.charras@gipsa-lab.inpg.fr
|
||||
* Copyright (C) 2008 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* 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
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file load_one_schematic_file.cpp
|
||||
* @brief Code to load and save Eeschema files.
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <confirm.h>
|
||||
#include <kicad_string.h>
|
||||
#include <schframe.h>
|
||||
#include <richio.h>
|
||||
#include <project.h>
|
||||
|
||||
#include <general.h>
|
||||
#include <sch_bus_entry.h>
|
||||
#include <sch_marker.h>
|
||||
#include <sch_junction.h>
|
||||
#include <sch_line.h>
|
||||
#include <sch_no_connect.h>
|
||||
#include <sch_component.h>
|
||||
#include <sch_text.h>
|
||||
#include <sch_sheet.h>
|
||||
#include <sch_bitmap.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
|
||||
|
||||
bool ReadSchemaDescr( LINE_READER* aLine, wxString& aMsgDiag, SCH_SCREEN* Window );
|
||||
|
||||
|
||||
bool SCH_EDIT_FRAME::LoadOneEEFile( SCH_SCREEN* aScreen, const wxString& aFullFileName, bool append )
|
||||
{
|
||||
char name1[256];
|
||||
bool itemLoaded = false;
|
||||
SCH_ITEM* item;
|
||||
wxString msgDiag; // Error and log messages
|
||||
char* line;
|
||||
wxFileName fn;
|
||||
|
||||
if( aScreen == NULL )
|
||||
return false;
|
||||
|
||||
if( aFullFileName.IsEmpty() )
|
||||
return false;
|
||||
|
||||
// Place the undo limit into the screen
|
||||
aScreen->SetMaxUndoItems( m_UndoRedoCountMax );
|
||||
|
||||
// If path is relative, this expands it from the project directory.
|
||||
wxString fname = Prj().AbsolutePath( aFullFileName );
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
fname.Replace( wxT("/"), wxT("\\") );
|
||||
#else
|
||||
fname.Replace( wxT("\\"), wxT("/") );
|
||||
#endif
|
||||
|
||||
fn = fname;
|
||||
CheckForAutoSaveFile( fn, SchematicBackupFileExtension );
|
||||
|
||||
wxLogTrace( traceAutoSave, wxT( "Loading schematic file " ) + aFullFileName );
|
||||
|
||||
aScreen->SetCurItem( NULL );
|
||||
if( !append )
|
||||
aScreen->SetFileName( aFullFileName );
|
||||
|
||||
FILE* f = wxFopen( fname, wxT( "rt" ) );
|
||||
|
||||
if( !f )
|
||||
{
|
||||
msgDiag.Printf( _( "Failed to open '%s'" ), GetChars( aFullFileName ) );
|
||||
DisplayError( this, msgDiag );
|
||||
return false;
|
||||
}
|
||||
|
||||
// reader now owns the open FILE.
|
||||
FILE_LINE_READER reader( f, aFullFileName );
|
||||
|
||||
msgDiag.Printf( _( "Loading '%s'" ), GetChars( aScreen->GetFileName() ) );
|
||||
PrintMsg( msgDiag );
|
||||
|
||||
if( !reader.ReadLine()
|
||||
|| strncmp( (char*)reader + 9, SCHEMATIC_HEAD_STRING,
|
||||
sizeof( SCHEMATIC_HEAD_STRING ) - 1 ) != 0 )
|
||||
{
|
||||
msgDiag.Printf( _( "'%s' is NOT an Eeschema file!" ), GetChars( aFullFileName ) );
|
||||
DisplayError( this, msgDiag );
|
||||
return false;
|
||||
}
|
||||
|
||||
line = reader.Line();
|
||||
|
||||
// get the file version here.
|
||||
char *strversion = line + 9 + sizeof( SCHEMATIC_HEAD_STRING );
|
||||
|
||||
// Skip blanks
|
||||
while( *strversion && *strversion < '0' )
|
||||
strversion++;
|
||||
|
||||
int version = atoi( strversion );
|
||||
|
||||
if( version > EESCHEMA_VERSION )
|
||||
{
|
||||
msgDiag.Printf( _(
|
||||
"'%s' was created by a more recent version of Eeschema and may not"
|
||||
" load correctly. Please consider updating!" ),
|
||||
GetChars( aFullFileName )
|
||||
);
|
||||
DisplayInfoMessage( this, msgDiag );
|
||||
}
|
||||
|
||||
#if 0
|
||||
// Compile it if the new version is unreadable by previous Eeschema versions
|
||||
else if( version < EESCHEMA_VERSION )
|
||||
{
|
||||
MsgDiag = aFullFileName + _( " was created by an older version of \
|
||||
Eeschema. It will be stored in the new file format when you save this file \
|
||||
again." );
|
||||
|
||||
DisplayInfoMessage( this, MsgDiag );
|
||||
}
|
||||
#endif
|
||||
|
||||
// The next lines are the lib list section, and are mainly comments, like:
|
||||
// LIBS:power
|
||||
// the lib list is not used, but is in schematic file just in case.
|
||||
// It is usually not empty, but we accept empty list.
|
||||
// If empty, there is a legacy section, not used
|
||||
// EELAYER i j
|
||||
// and the last line is
|
||||
// EELAYER END
|
||||
// Skip all lines until the end of header "EELAYER END" is found
|
||||
while( reader.ReadLine() )
|
||||
{
|
||||
line = reader.Line();
|
||||
|
||||
while( *line == ' ' )
|
||||
line++;
|
||||
|
||||
if( strncasecmp( line, "EELAYER END", 11 ) == 0 )
|
||||
break; // end of not used header found
|
||||
}
|
||||
|
||||
while( reader.ReadLine() )
|
||||
{
|
||||
itemLoaded = false;
|
||||
line = reader.Line();
|
||||
|
||||
item = NULL;
|
||||
|
||||
char* sline = line;
|
||||
|
||||
while( (*sline != ' ' ) && *sline )
|
||||
sline++;
|
||||
|
||||
switch( line[0] )
|
||||
{
|
||||
case '$': // identification block
|
||||
if( line[1] == 'C' )
|
||||
item = new SCH_COMPONENT();
|
||||
else if( line[1] == 'S' )
|
||||
item = new SCH_SHEET();
|
||||
else if( line[1] == 'D' )
|
||||
itemLoaded = ReadSchemaDescr( &reader, msgDiag, aScreen );
|
||||
else if( line[1] == 'B' )
|
||||
item = new SCH_BITMAP();
|
||||
else if( line[1] == 'E' )
|
||||
itemLoaded = true; // The EOF marker
|
||||
break;
|
||||
|
||||
case 'L': // Its a library item.
|
||||
item = new SCH_COMPONENT();
|
||||
break;
|
||||
|
||||
case 'W': // Its a Segment (WIRE or BUS) item.
|
||||
item = new SCH_LINE();
|
||||
break;
|
||||
|
||||
case 'E': // Its a WIRE or BUS item.
|
||||
/* The bus entry can be represented by two different
|
||||
* classes, so we need a factory function */
|
||||
itemLoaded = SCH_BUS_ENTRY_BASE::Load( reader, msgDiag, &item );
|
||||
break;
|
||||
|
||||
case 'C': // It is a connection item.
|
||||
item = new SCH_JUNCTION();
|
||||
break;
|
||||
|
||||
case 'K': // It is a Marker item.
|
||||
// Markers are no more read from file. they are only created on
|
||||
// demand in schematic
|
||||
itemLoaded = true; // Just skip descr and disable err message
|
||||
break;
|
||||
|
||||
case 'N': // It is a NoConnect item.
|
||||
item = new SCH_NO_CONNECT();
|
||||
break;
|
||||
|
||||
case 'T': // It is a text item.
|
||||
if( sscanf( sline, "%255s", name1 ) != 1 )
|
||||
{
|
||||
msgDiag.Printf( _( "Eeschema file text load error at line %d" ),
|
||||
reader.LineNumber() );
|
||||
itemLoaded = false;
|
||||
}
|
||||
else if( name1[0] == 'L' )
|
||||
item = new SCH_LABEL();
|
||||
else if( name1[0] == 'G' && version > 1 )
|
||||
item = new SCH_GLOBALLABEL();
|
||||
else if( (name1[0] == 'H') || (name1[0] == 'G' && version == 1) )
|
||||
item = new SCH_HIERLABEL();
|
||||
else
|
||||
item = new SCH_TEXT();
|
||||
break;
|
||||
|
||||
default:
|
||||
itemLoaded = false;
|
||||
msgDiag.Printf( _( "Eeschema file undefined object at line %d, aborted" ),
|
||||
reader.LineNumber() );
|
||||
msgDiag << wxT( "\n" ) << FROM_UTF8( line );
|
||||
}
|
||||
|
||||
if( item )
|
||||
{
|
||||
// Load it if it wasn't by a factory
|
||||
if( !itemLoaded )
|
||||
itemLoaded = item->Load( reader, msgDiag );
|
||||
|
||||
if( !itemLoaded )
|
||||
{
|
||||
delete item;
|
||||
}
|
||||
else
|
||||
{
|
||||
aScreen->Append( item );
|
||||
}
|
||||
}
|
||||
|
||||
if( !itemLoaded )
|
||||
{
|
||||
msgDiag.Printf( _( "Eeschema file object not loaded at line %d, aborted" ),
|
||||
reader.LineNumber() );
|
||||
msgDiag << wxT( "\n" ) << FROM_UTF8( line );
|
||||
DisplayError( this, msgDiag );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0 && defined (DEBUG)
|
||||
aScreen->Show( 0, std::cout );
|
||||
#endif
|
||||
|
||||
// Build links between each components and its part lib LIB_PART
|
||||
aScreen->UpdateSymbolLinks();
|
||||
|
||||
aScreen->TestDanglingEnds();
|
||||
|
||||
msgDiag.Printf( _( "Done Loading <%s>" ), GetChars( aScreen->GetFileName() ) );
|
||||
PrintMsg( msgDiag );
|
||||
|
||||
return true; // Although it may be that file is only partially loaded.
|
||||
}
|
||||
|
||||
|
||||
/// Get the length of a string constant, at compile time
|
||||
#define SZ( x ) (sizeof(x)-1)
|
||||
|
||||
static const char delims[] = " \t\r\n";
|
||||
|
||||
/* Read the schematic header. */
|
||||
bool ReadSchemaDescr( LINE_READER* aLine, wxString& aMsgDiag, SCH_SCREEN* aScreen )
|
||||
{
|
||||
char* line = aLine->Line();
|
||||
|
||||
char* pageType = strtok( line + SZ( "$Descr" ), delims );
|
||||
char* width = strtok( NULL, delims );
|
||||
char* height = strtok( NULL, delims );
|
||||
char* orient = strtok( NULL, delims );
|
||||
|
||||
wxString pagename = FROM_UTF8( pageType );
|
||||
|
||||
PAGE_INFO pageInfo;
|
||||
TITLE_BLOCK tb;
|
||||
|
||||
if( !pageInfo.SetType( pagename ) )
|
||||
{
|
||||
aMsgDiag.Printf( _( "Eeschema file dimension definition error line %d,"
|
||||
"\nAbort reading file.\n" ),
|
||||
aLine->LineNumber() );
|
||||
aMsgDiag << FROM_UTF8( line );
|
||||
}
|
||||
|
||||
if( pagename == PAGE_INFO::Custom )
|
||||
{
|
||||
if( width && height )
|
||||
{
|
||||
int w = atoi( width );
|
||||
int h = atoi( height );
|
||||
|
||||
pageInfo.SetWidthMils( w );
|
||||
pageInfo.SetHeightMils( h );
|
||||
}
|
||||
}
|
||||
|
||||
// non custom size, set portrait if its present
|
||||
else if( orient && !strcmp( orient, "portrait" ) )
|
||||
{
|
||||
pageInfo.SetPortrait( true );
|
||||
}
|
||||
|
||||
aScreen->SetPageSettings( pageInfo );
|
||||
|
||||
for(;;)
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
if( !aLine->ReadLine() )
|
||||
return true;
|
||||
|
||||
line = aLine->Line();
|
||||
|
||||
if( strncasecmp( line, "$End", 4 ) == 0 )
|
||||
{
|
||||
aScreen->SetTitleBlock( tb );
|
||||
break;
|
||||
}
|
||||
|
||||
if( strncasecmp( line, "Sheet", 2 ) == 0 )
|
||||
sscanf( line + 5, " %d %d",
|
||||
&aScreen->m_ScreenNumber, &aScreen->m_NumberOfScreens );
|
||||
|
||||
if( strncasecmp( line, "Title", 2 ) == 0 )
|
||||
{
|
||||
ReadDelimitedText( buf, line, 256 );
|
||||
tb.SetTitle( FROM_UTF8( buf ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strncasecmp( line, "Date", 2 ) == 0 )
|
||||
{
|
||||
ReadDelimitedText( buf, line, 256 );
|
||||
tb.SetDate( FROM_UTF8( buf ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strncasecmp( line, "Rev", 2 ) == 0 )
|
||||
{
|
||||
ReadDelimitedText( buf, line, 256 );
|
||||
tb.SetRevision( FROM_UTF8( buf ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strncasecmp( line, "Comp", 4 ) == 0 )
|
||||
{
|
||||
ReadDelimitedText( buf, line, 256 );
|
||||
tb.SetCompany( FROM_UTF8( buf ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strncasecmp( line, "Comment1", 8 ) == 0 )
|
||||
{
|
||||
ReadDelimitedText( buf, line, 256 );
|
||||
tb.SetComment1( FROM_UTF8( buf ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strncasecmp( line, "Comment2", 8 ) == 0 )
|
||||
{
|
||||
ReadDelimitedText( buf, line, 256 );
|
||||
tb.SetComment2( FROM_UTF8( buf ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strncasecmp( line, "Comment3", 8 ) == 0 )
|
||||
{
|
||||
ReadDelimitedText( buf, line, 256 );
|
||||
tb.SetComment3( FROM_UTF8( buf ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strncasecmp( line, "Comment4", 8 ) == 0 )
|
||||
{
|
||||
ReadDelimitedText( buf, line, 256 );
|
||||
tb.SetComment4( FROM_UTF8( buf ) );
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2011 jean-pierre.charras
|
||||
* Copyright (C) 2011 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2011-2017 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
|
||||
|
@ -37,11 +37,6 @@
|
|||
#include <wx/mstream.h>
|
||||
|
||||
|
||||
/*
|
||||
* class SCH_BITMAP
|
||||
* This class handle a bitmap image that can be inserted in a schematic.
|
||||
*/
|
||||
|
||||
SCH_BITMAP::SCH_BITMAP( const wxPoint& pos ) :
|
||||
SCH_ITEM( NULL, SCH_BITMAP_T )
|
||||
{
|
||||
|
@ -88,34 +83,6 @@ bool SCH_BITMAP::ReadImageFile( const wxString& aFullFilename )
|
|||
}
|
||||
|
||||
|
||||
bool SCH_BITMAP::Save( FILE* aFile ) const
|
||||
{
|
||||
if( fprintf( aFile, "$Bitmap\n" ) == EOF )
|
||||
return false;
|
||||
|
||||
if( fprintf( aFile, "Pos %-4d %-4d\n", m_pos.x, m_pos.y ) == EOF )
|
||||
return false;
|
||||
|
||||
if( fprintf( aFile, "Scale %f\n", m_image->GetScale() ) == EOF )
|
||||
return false;
|
||||
|
||||
if( fprintf( aFile, "Data\n" ) == EOF )
|
||||
return false;
|
||||
|
||||
if( !m_image->SaveData( aFile ) )
|
||||
return false;
|
||||
|
||||
if( fprintf( aFile, "\nEndData\n" ) == EOF )
|
||||
return false;
|
||||
|
||||
|
||||
if( fprintf( aFile, "$EndBitmap\n" ) == EOF )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
EDA_ITEM* SCH_BITMAP::Clone() const
|
||||
{
|
||||
return new SCH_BITMAP( *this );
|
||||
|
@ -134,52 +101,6 @@ void SCH_BITMAP::SwapData( SCH_ITEM* aItem )
|
|||
}
|
||||
|
||||
|
||||
bool SCH_BITMAP::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||
{
|
||||
char* line = aLine.Line();
|
||||
|
||||
if( strncasecmp( line, "$Bitmap", 7 ) != 0 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file bitmap image load error at line %d, aborted" ),
|
||||
aLine.LineNumber() );
|
||||
aErrorMsg << wxT( "\n" ) << FROM_UTF8( (char*) aLine );
|
||||
return false;
|
||||
}
|
||||
|
||||
for( ; ; )
|
||||
{
|
||||
if( !aLine.ReadLine() )
|
||||
return false;
|
||||
|
||||
line = aLine.Line();
|
||||
|
||||
if( strncasecmp( line, "Pos", 3 ) == 0 )
|
||||
{
|
||||
sscanf( line + 3, "%d %d", &m_pos.x, &m_pos.y );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strncasecmp( line, "Scale", 5 ) == 0 )
|
||||
{
|
||||
double scale = 1.0;
|
||||
sscanf( line + 5, "%lf", &scale );
|
||||
m_image->SetScale( scale );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strncasecmp( line, "Data", 4 ) == 0 )
|
||||
{
|
||||
m_image->LoadData( aLine, aErrorMsg );
|
||||
}
|
||||
|
||||
if( strncasecmp( line, "$EndBitmap", 4 ) == 0 )
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const EDA_RECT SCH_BITMAP::GetBoundingBox() const
|
||||
{
|
||||
EDA_RECT rect = m_image->GetBoundingBox();
|
||||
|
@ -222,18 +143,12 @@ void SCH_BITMAP::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset
|
|||
}
|
||||
|
||||
|
||||
/* Function GetSize
|
||||
* returns the actual size (in user units, not in pixels) of the image
|
||||
*/
|
||||
wxSize SCH_BITMAP::GetSize() const
|
||||
{
|
||||
return m_image->GetSize();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Mirror image relative to a horizontal X axis )
|
||||
*/
|
||||
void SCH_BITMAP::MirrorX( int aXaxis_position )
|
||||
{
|
||||
MIRROR( m_pos.y, aXaxis_position );
|
||||
|
@ -241,9 +156,6 @@ void SCH_BITMAP::MirrorX( int aXaxis_position )
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* Mirror image relative to a vertical Y axis
|
||||
*/
|
||||
void SCH_BITMAP::MirrorY( int aYaxis_position )
|
||||
{
|
||||
MIRROR( m_pos.x, aYaxis_position );
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2011 jean-pierre.charras
|
||||
* Copyright (C) 2011 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2011-2017 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
|
||||
|
@ -35,6 +35,10 @@
|
|||
#include <class_bitmap_base.h>
|
||||
|
||||
|
||||
/**
|
||||
* Object to handle a bitmap image that can be inserted in a schematic.
|
||||
*/
|
||||
|
||||
class SCH_BITMAP : public SCH_ITEM
|
||||
{
|
||||
wxPoint m_pos; // XY coordinates of center of the bitmap
|
||||
|
@ -66,7 +70,6 @@ public:
|
|||
}
|
||||
|
||||
/**
|
||||
* Function GetScalingFactor
|
||||
* @return the scaling factor from pixel size to actual draw size
|
||||
* this scaling factor depend on m_pixelScaleFactor and m_Scale
|
||||
* m_pixelScaleFactor gives the scaling factor between a pixel size and
|
||||
|
@ -89,8 +92,7 @@ public:
|
|||
|
||||
|
||||
/**
|
||||
* Function GetSize
|
||||
* @returns the actual size (in user units, not in pixels) of the image
|
||||
* @return the actual size (in user units, not in pixels) of the image
|
||||
*/
|
||||
wxSize GetSize() const;
|
||||
|
||||
|
@ -102,18 +104,14 @@ public:
|
|||
GR_DRAWMODE aDrawMode, COLOR4D aColor = COLOR4D::UNSPECIFIED ) override;
|
||||
|
||||
/**
|
||||
* Function ReadImageFile
|
||||
* Reads and stores an image file. Init the bitmap used to draw this item
|
||||
* format.
|
||||
*
|
||||
* @param aFullFilename The full filename of the image file to read.
|
||||
* @return bool - true if success reading else false.
|
||||
*/
|
||||
bool ReadImageFile( const wxString& aFullFilename );
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
bool Load( LINE_READER& aLine, wxString& aErrorMsg ) override;
|
||||
|
||||
void Move( const wxPoint& aMoveVector ) override
|
||||
{
|
||||
m_pos += aMoveVector;
|
||||
|
|
|
@ -94,67 +94,6 @@ void SCH_BUS_ENTRY_BASE::SwapData( SCH_ITEM* aItem )
|
|||
}
|
||||
|
||||
|
||||
bool SCH_BUS_WIRE_ENTRY::Save( FILE* aFile ) const
|
||||
{
|
||||
if( fprintf( aFile, "Entry Wire Line\n\t%-4d %-4d %-4d %-4d\n",
|
||||
m_pos.x, m_pos.y, m_End().x, m_End().y ) == EOF )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_BUS_BUS_ENTRY::Save( FILE* aFile ) const
|
||||
{
|
||||
if( fprintf( aFile, "Entry Bus Bus\n\t%-4d %-4d %-4d %-4d\n",
|
||||
m_pos.x, m_pos.y, m_End().x, m_End().y ) == EOF )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_BUS_ENTRY_BASE::Load( LINE_READER& aLine, wxString& aErrorMsg,
|
||||
SCH_ITEM **out )
|
||||
{
|
||||
char Name1[256];
|
||||
char Name2[256];
|
||||
char* line = (char*) aLine;
|
||||
*out = NULL;
|
||||
|
||||
while( (*line != ' ' ) && *line )
|
||||
line++;
|
||||
|
||||
if( sscanf( line, "%255s %255s", Name1, Name2 ) != 2 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file bus entry load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
aErrorMsg << wxT( "\n" ) << FROM_UTF8( (char*) aLine );
|
||||
return false;
|
||||
}
|
||||
|
||||
SCH_BUS_ENTRY_BASE *this_new;
|
||||
if( Name1[0] == 'B' )
|
||||
this_new = new SCH_BUS_BUS_ENTRY;
|
||||
else
|
||||
this_new = new SCH_BUS_WIRE_ENTRY;
|
||||
*out = this_new;
|
||||
|
||||
if( !aLine.ReadLine() || sscanf( (char*) aLine, "%d %d %d %d ",
|
||||
&this_new->m_pos.x, &this_new->m_pos.y,
|
||||
&this_new->m_size.x, &this_new->m_size.y ) != 4 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file bus entry load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
aErrorMsg << wxT( "\n" ) << FROM_UTF8( (char*) aLine );
|
||||
return false;
|
||||
}
|
||||
|
||||
this_new->m_size.x -= this_new->m_pos.x;
|
||||
this_new->m_size.y -= this_new->m_pos.y;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const EDA_RECT SCH_BUS_ENTRY_BASE::GetBoundingBox() const
|
||||
{
|
||||
EDA_RECT box;
|
||||
|
@ -374,10 +313,7 @@ void SCH_BUS_ENTRY_BASE::Plot( PLOTTER* aPlotter )
|
|||
aPlotter->FinishTo( m_End() );
|
||||
}
|
||||
|
||||
/* SetBusEntryShape:
|
||||
* Set the shape of the bus entry.
|
||||
* aShape = ascii code '/' or '\'
|
||||
*/
|
||||
|
||||
void SCH_BUS_ENTRY_BASE::SetBusEntryShape( char aShape )
|
||||
{
|
||||
switch( aShape )
|
||||
|
@ -395,9 +331,6 @@ void SCH_BUS_ENTRY_BASE::SetBusEntryShape( char aShape )
|
|||
}
|
||||
|
||||
|
||||
/* GetBusEntryShape:
|
||||
* return the shape of the bus entry, as an ascii code '/' or '\'
|
||||
*/
|
||||
char SCH_BUS_ENTRY_BASE::GetBusEntryShape() const
|
||||
{
|
||||
if( GetSize().y < 0 )
|
||||
|
@ -405,4 +338,3 @@ char SCH_BUS_ENTRY_BASE::GetBusEntryShape() const
|
|||
else
|
||||
return '\\';
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2004-2017 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
|
||||
|
@ -36,8 +36,6 @@
|
|||
|
||||
|
||||
/**
|
||||
* Class SCH_BUS_ENTRY_BASE
|
||||
*
|
||||
* Base class for a bus or wire entry.
|
||||
*/
|
||||
class SCH_BUS_ENTRY_BASE : public SCH_ITEM
|
||||
|
@ -85,8 +83,6 @@ public:
|
|||
void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
|
||||
GR_DRAWMODE aDrawMode, COLOR4D aColor = COLOR4D::UNSPECIFIED ) override;
|
||||
|
||||
static bool Load( LINE_READER& aLine, wxString& aErrorMsg, SCH_ITEM **out );
|
||||
|
||||
const EDA_RECT GetBoundingBox() const override;
|
||||
|
||||
void Move( const wxPoint& aMoveVector ) override
|
||||
|
@ -131,8 +127,6 @@ public:
|
|||
};
|
||||
|
||||
/**
|
||||
* Class SCH_BUS_WIRE_ENTRY
|
||||
*
|
||||
* Class for a wire to bus entry.
|
||||
*/
|
||||
class SCH_BUS_WIRE_ENTRY : public SCH_BUS_ENTRY_BASE
|
||||
|
@ -147,8 +141,6 @@ public:
|
|||
return wxT( "SCH_BUS_WIRE_ENTRY" );
|
||||
}
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
int GetPenSize() const override;
|
||||
|
||||
wxString GetSelectMenuText() const override;
|
||||
|
@ -157,8 +149,6 @@ public:
|
|||
};
|
||||
|
||||
/**
|
||||
* Class SCH_BUS_WIRE_ENTRY
|
||||
*
|
||||
* Class for a bus to bus entry.
|
||||
*/
|
||||
class SCH_BUS_BUS_ENTRY : public SCH_BUS_ENTRY_BASE
|
||||
|
@ -173,8 +163,6 @@ public:
|
|||
return wxT( "SCH_BUS_BUS_ENTRY" );
|
||||
}
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
int GetPenSize() const override;
|
||||
|
||||
wxString GetSelectMenuText() const override;
|
||||
|
|
|
@ -1255,442 +1255,6 @@ void SCH_COMPONENT::Show( int nestLevel, std::ostream& os ) const
|
|||
#endif
|
||||
|
||||
|
||||
bool SCH_COMPONENT::Save( FILE* f ) const
|
||||
{
|
||||
std::string name1;
|
||||
std::string name2;
|
||||
wxArrayString reference_fields;
|
||||
|
||||
static wxString delimiters( wxT( " " ) );
|
||||
|
||||
// this is redundant with the AR entries below, but it makes the
|
||||
// files backwards-compatible.
|
||||
if( m_PathsAndReferences.GetCount() > 0 )
|
||||
{
|
||||
reference_fields = wxStringTokenize( m_PathsAndReferences[0], delimiters );
|
||||
|
||||
name1 = toUTFTildaText( reference_fields[1] );
|
||||
}
|
||||
else
|
||||
{
|
||||
if( GetField( REFERENCE )->GetText().IsEmpty() )
|
||||
name1 = toUTFTildaText( m_prefix );
|
||||
else
|
||||
name1 = toUTFTildaText( GetField( REFERENCE )->GetText() );
|
||||
}
|
||||
|
||||
wxString part_name = GetLibId().Format();
|
||||
|
||||
if( part_name.size() )
|
||||
{
|
||||
name2 = toUTFTildaText( part_name );
|
||||
}
|
||||
else
|
||||
{
|
||||
name2 = NULL_STRING;
|
||||
}
|
||||
|
||||
if( fprintf( f, "$Comp\n" ) == EOF )
|
||||
return false;
|
||||
|
||||
if( fprintf( f, "L %s %s\n", name2.c_str(), name1.c_str() ) == EOF )
|
||||
return false;
|
||||
|
||||
// Generate unit number, convert and time stamp
|
||||
if( fprintf( f, "U %d %d %8.8lX\n", m_unit, m_convert, (unsigned long)m_TimeStamp ) == EOF )
|
||||
return false;
|
||||
|
||||
// Save the position
|
||||
if( fprintf( f, "P %d %d\n", m_Pos.x, m_Pos.y ) == EOF )
|
||||
return false;
|
||||
|
||||
/* If this is a complex hierarchy; save hierarchical references.
|
||||
* but for simple hierarchies it is not necessary.
|
||||
* the reference inf is already saved
|
||||
* this is useful for old Eeschema version compatibility
|
||||
*/
|
||||
if( m_PathsAndReferences.GetCount() > 1 )
|
||||
{
|
||||
for( unsigned int ii = 0; ii < m_PathsAndReferences.GetCount(); ii++ )
|
||||
{
|
||||
/*format:
|
||||
* AR Path="/140/2" Ref="C99" Part="1"
|
||||
* where 140 is the uid of the containing sheet
|
||||
* and 2 is the timestamp of this component.
|
||||
* (timestamps are actually 8 hex chars)
|
||||
* Ref is the conventional component reference for this 'path'
|
||||
* Part is the conventional component part selection for this 'path'
|
||||
*/
|
||||
reference_fields = wxStringTokenize( m_PathsAndReferences[ii], delimiters );
|
||||
|
||||
if( fprintf( f, "AR Path=\"%s\" Ref=\"%s\" Part=\"%s\" \n",
|
||||
TO_UTF8( reference_fields[0] ),
|
||||
TO_UTF8( reference_fields[1] ),
|
||||
TO_UTF8( reference_fields[2] ) ) == EOF )
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// update the ugly field index, which I would like to see go away someday soon.
|
||||
for( unsigned i = 0; i<m_Fields.size(); ++i )
|
||||
{
|
||||
SCH_FIELD* fld = GetField( i );
|
||||
fld->SetId( i ); // we don't need field Ids, please be gone.
|
||||
}
|
||||
|
||||
// Fixed fields:
|
||||
// Save mandatory fields even if they are blank,
|
||||
// because the visibility, size and orientation are set from libary editor.
|
||||
for( unsigned i = 0; i<MANDATORY_FIELDS; ++i )
|
||||
{
|
||||
SCH_FIELD* fld = GetField( i );
|
||||
if( !fld->Save( f ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
// User defined fields:
|
||||
// The *policy* about which user defined fields are part of a symbol is now
|
||||
// only in the dialog editors. No policy should be enforced here, simply
|
||||
// save all the user defined fields, they are present because a dialog editor
|
||||
// thought they should be. If you disagree, go fix the dialog editors.
|
||||
for( unsigned i = MANDATORY_FIELDS; i<m_Fields.size(); ++i )
|
||||
{
|
||||
SCH_FIELD* fld = GetField( i );
|
||||
|
||||
if( !fld->Save( f ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
// Unit number, position, box ( old standard )
|
||||
if( fprintf( f, "\t%-4d %-4d %-4d\n", m_unit, m_Pos.x, m_Pos.y ) == EOF )
|
||||
return false;
|
||||
|
||||
if( fprintf( f, "\t%-4d %-4d %-4d %-4d\n",
|
||||
m_transform.x1, m_transform.y1, m_transform.x2, m_transform.y2 ) == EOF )
|
||||
return false;
|
||||
|
||||
if( fprintf( f, "$EndComp\n" ) == EOF )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_COMPONENT::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||
{
|
||||
// Remark: avoid using sscanf to read texts entered by user
|
||||
// which are UTF8 encoded, because sscanf does not work well on Windows
|
||||
// with some UTF8 values.
|
||||
char name1[256], char1[256], char2[256], char3[256];
|
||||
int newfmt = 0;
|
||||
char* ptcar;
|
||||
wxString fieldName;
|
||||
char* line = aLine.Line();
|
||||
unsigned long timeStamp;
|
||||
|
||||
m_convert = 1;
|
||||
|
||||
if( line[0] == '$' )
|
||||
{
|
||||
newfmt = 1;
|
||||
|
||||
if( !(line = aLine.ReadLine()) )
|
||||
return true;
|
||||
}
|
||||
|
||||
// Parse the first line of description:
|
||||
// like "L partname ref" (for instance "L 74LS00 U4"
|
||||
// They are UTF8 texts, so do not use sscanf
|
||||
|
||||
line += 1;
|
||||
|
||||
if( *line == ' ' )
|
||||
line++;
|
||||
|
||||
// line points the first parameter
|
||||
wxString buffer( FROM_UTF8( line ) );
|
||||
wxStringTokenizer tokenizer( buffer, wxT( " \r\n" ) );
|
||||
|
||||
if( tokenizer.CountTokens() < 2 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema component description error at line %d, aborted" ),
|
||||
aLine.LineNumber() );
|
||||
aErrorMsg << wxT( "\n" ) << FROM_UTF8( line );
|
||||
return false;
|
||||
}
|
||||
|
||||
wxString partname = tokenizer.NextToken();
|
||||
partname.Replace( wxT("~"), wxT(" ") ); // all spaces were replaced by ~ in files.
|
||||
|
||||
if( partname != NULL_STRING )
|
||||
{
|
||||
m_lib_id.SetLibItemName( partname, false );
|
||||
|
||||
if( !newfmt )
|
||||
GetField( VALUE )->SetText( partname );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_lib_id.clear();
|
||||
GetField( VALUE )->Empty();
|
||||
GetField( VALUE )->SetTextAngle( TEXT_ANGLE_HORIZ );
|
||||
GetField( VALUE )->SetVisible( false );
|
||||
}
|
||||
|
||||
wxString reference = tokenizer.NextToken();
|
||||
reference.Replace( wxT("~"), wxT(" ") ); // all spaces were replaced by ~ in files.
|
||||
reference.Trim( true );
|
||||
reference.Trim( false );
|
||||
|
||||
if( reference != NULL_STRING )
|
||||
{
|
||||
wxString prefix = reference;
|
||||
// Build reference prefix from the actual reference by removing trailing digits
|
||||
// (Perhaps outdated code, only for very old schematic files)
|
||||
while( prefix.Length() )
|
||||
{
|
||||
if( ( prefix.Last() < '0' || prefix.Last() > '9') && prefix.Last() != '?' )
|
||||
break;
|
||||
|
||||
prefix.RemoveLast();
|
||||
}
|
||||
|
||||
// Avoid a prefix containing trailing/leading spaces
|
||||
prefix.Trim( true );
|
||||
prefix.Trim( false );
|
||||
|
||||
if( prefix.IsEmpty() )
|
||||
m_prefix = wxT( "U" );
|
||||
else
|
||||
m_prefix = prefix;
|
||||
|
||||
if( !newfmt )
|
||||
GetField( REFERENCE )->SetText( reference );
|
||||
}
|
||||
else
|
||||
{
|
||||
GetField( REFERENCE )->SetVisible( false );
|
||||
}
|
||||
|
||||
/* Parse component description
|
||||
* These lines begin with:
|
||||
* "P" = Position
|
||||
* U = Num Unit and Conversion
|
||||
* "Fn" = Fields (0 .. n = = number of field)
|
||||
* "Ar" = Alternate reference in the case of multiple sheets referring to
|
||||
* one schematic file.
|
||||
*/
|
||||
for( ; ; )
|
||||
{
|
||||
if( !(line = aLine.ReadLine()) )
|
||||
return false;
|
||||
|
||||
if( line[0] == 'U' )
|
||||
{
|
||||
sscanf( line + 1, "%d %d %lX", &m_unit, &m_convert, &timeStamp );
|
||||
m_TimeStamp = (time_t)timeStamp;
|
||||
}
|
||||
else if( line[0] == 'P' )
|
||||
{
|
||||
sscanf( line + 1, "%d %d", &m_Pos.x, &m_Pos.y );
|
||||
|
||||
// Set fields position to a default position (that is the
|
||||
// component position. For existing fields, the real position
|
||||
// will be set later
|
||||
for( int i = 0; i<GetFieldCount(); i++ )
|
||||
{
|
||||
if( GetField( i )->GetText().IsEmpty() )
|
||||
GetField( i )->SetTextPos( m_Pos );
|
||||
}
|
||||
}
|
||||
else if( line[0] == 'A' && line[1] == 'R' )
|
||||
{
|
||||
/* format:
|
||||
* AR Path="/9086AF6E/67452AA0" Ref="C99" Part="1"
|
||||
* where 9086AF6E is the unique timestamp of the containing sheet
|
||||
* and 67452AA0 is the timestamp of this component.
|
||||
* C99 is the reference given this path.
|
||||
*/
|
||||
int ii;
|
||||
ptcar = line + 2;
|
||||
|
||||
//copy the path.
|
||||
ii = ReadDelimitedText( name1, ptcar, 255 );
|
||||
ptcar += ii + 1;
|
||||
wxString path = FROM_UTF8( name1 );
|
||||
|
||||
// copy the reference
|
||||
ii = ReadDelimitedText( name1, ptcar, 255 );
|
||||
ptcar += ii + 1;
|
||||
wxString ref = FROM_UTF8( name1 );
|
||||
|
||||
// copy the multi, if exists
|
||||
ii = ReadDelimitedText( name1, ptcar, 255 );
|
||||
|
||||
if( name1[0] == 0 ) // Nothing read, put a default value
|
||||
sprintf( name1, "%d", m_unit );
|
||||
|
||||
int multi = atoi( name1 );
|
||||
|
||||
// Avoid out of range multi id:
|
||||
if( multi < 0 || multi > MAX_UNIT_COUNT_PER_PACKAGE )
|
||||
multi = 1;
|
||||
|
||||
AddHierarchicalReference( path, ref, multi );
|
||||
GetField( REFERENCE )->SetText( ref );
|
||||
}
|
||||
else if( line[0] == 'F' )
|
||||
{
|
||||
int fieldNdx;
|
||||
|
||||
wxString fieldText;
|
||||
EDA_TEXT_HJUSTIFY_T hjustify = GR_TEXT_HJUSTIFY_CENTER;
|
||||
EDA_TEXT_VJUSTIFY_T vjustify = GR_TEXT_VJUSTIFY_CENTER;
|
||||
|
||||
ptcar = (char*) aLine;
|
||||
|
||||
while( *ptcar && (*ptcar != '"') )
|
||||
ptcar++;
|
||||
|
||||
if( *ptcar != '"' )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file library field F at line %d, aborted" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
ptcar += ReadDelimitedText( &fieldText, ptcar );
|
||||
|
||||
if( *ptcar == 0 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Component field F at line %d, aborted" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
fieldNdx = atoi( line + 2 );
|
||||
|
||||
ReadDelimitedText( &fieldName, ptcar );
|
||||
|
||||
if( fieldName.IsEmpty() )
|
||||
fieldName = TEMPLATE_FIELDNAME::GetDefaultFieldName( fieldNdx );
|
||||
|
||||
if( fieldNdx >= GetFieldCount() )
|
||||
{
|
||||
// The first MANDATOR_FIELDS _must_ be constructed within
|
||||
// the SCH_COMPONENT constructor. This assert is simply here
|
||||
// to guard against a change in that constructor.
|
||||
wxASSERT( GetFieldCount() >= MANDATORY_FIELDS );
|
||||
|
||||
// Ignore the _supplied_ fieldNdx. It is not important anymore
|
||||
// if within the user defined fields region (i.e. >= MANDATORY_FIELDS).
|
||||
// We freely renumber the index to fit the next available field slot.
|
||||
|
||||
fieldNdx = GetFieldCount(); // new has this index after insertion
|
||||
|
||||
SCH_FIELD field( wxPoint( 0, 0 ),
|
||||
-1, // field id is not relavant for user defined fields
|
||||
this, fieldName );
|
||||
|
||||
AddField( field );
|
||||
}
|
||||
else
|
||||
{
|
||||
GetField( fieldNdx )->SetName( fieldName );
|
||||
}
|
||||
|
||||
GetField( fieldNdx )->SetText( fieldText );
|
||||
memset( char3, 0, sizeof(char3) );
|
||||
int ii, x, y, w, attr;
|
||||
|
||||
if( ( ii = sscanf( ptcar, "%255s %d %d %d %X %255s %255s", char1, &x, &y, &w, &attr,
|
||||
char2, char3 ) ) < 4 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Component Field error line %d, aborted" ),
|
||||
aLine.LineNumber() );
|
||||
continue;
|
||||
}
|
||||
|
||||
GetField( fieldNdx )->SetTextPos( wxPoint( x, y ) );
|
||||
GetField( fieldNdx )->SetVisible( !attr );
|
||||
|
||||
if( (w == 0 ) || (ii == 4) )
|
||||
w = GetDefaultTextSize();
|
||||
|
||||
GetField( fieldNdx )->SetTextSize( wxSize( w, w ) );
|
||||
GetField( fieldNdx )->SetTextAngle( TEXT_ANGLE_HORIZ );
|
||||
|
||||
if( char1[0] == 'V' )
|
||||
GetField( fieldNdx )->SetTextAngle( TEXT_ANGLE_VERT );
|
||||
|
||||
if( ii >= 7 )
|
||||
{
|
||||
if( *char2 == 'L' )
|
||||
hjustify = GR_TEXT_HJUSTIFY_LEFT;
|
||||
else if( *char2 == 'R' )
|
||||
hjustify = GR_TEXT_HJUSTIFY_RIGHT;
|
||||
|
||||
if( char3[0] == 'B' )
|
||||
vjustify = GR_TEXT_VJUSTIFY_BOTTOM;
|
||||
else if( char3[0] == 'T' )
|
||||
vjustify = GR_TEXT_VJUSTIFY_TOP;
|
||||
|
||||
GetField( fieldNdx )->SetItalic( char3[1] == 'I' );
|
||||
GetField( fieldNdx )->SetBold( char3[2] == 'B' );
|
||||
GetField( fieldNdx )->SetHorizJustify( hjustify );
|
||||
GetField( fieldNdx )->SetVertJustify( vjustify );
|
||||
}
|
||||
|
||||
if( fieldNdx == REFERENCE )
|
||||
if( GetField( fieldNdx )->GetText()[0] == '#' )
|
||||
GetField( fieldNdx )->SetVisible( false );
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( sscanf( line, "%d %d %d", &m_unit, &m_Pos.x, &m_Pos.y ) != 3 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Component unit & pos error at line %d, aborted" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !(line = aLine.ReadLine()) ||
|
||||
sscanf( line, "%d %d %d %d",
|
||||
&m_transform.x1,
|
||||
&m_transform.y1,
|
||||
&m_transform.x2,
|
||||
&m_transform.y2 ) != 4 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Component orient error at line %d, aborted" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( newfmt )
|
||||
{
|
||||
if( !(line = aLine.ReadLine()) )
|
||||
return false;
|
||||
|
||||
if( strncasecmp( "$End", line, 4 ) != 0 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Component End expected at line %d, aborted" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// ensure flags (mainly used in edit) are cleared.
|
||||
// some changes have set the modified flag
|
||||
m_Flags = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
EDA_RECT SCH_COMPONENT::GetBodyBoundingBox() const
|
||||
{
|
||||
EDA_RECT bBox;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2014 Dick Hollenbeck, dick@softplc.com
|
||||
* Copyright (C) 2015-2017 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 2015 Wayne Stambaugh <stambaughw@gmail.com>
|
||||
* Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -238,10 +238,6 @@ public:
|
|||
*/
|
||||
int GetUnitCount() const;
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
bool Load( LINE_READER& aLine, wxString& aErrorMsg ) override;
|
||||
|
||||
/**
|
||||
* Compute the new transform matrix based on \a aOrientation for the symbol which is
|
||||
* applied to the current transform.
|
||||
|
|
|
@ -311,54 +311,6 @@ bool SCH_FIELD::IsHorizJustifyFlipped() const
|
|||
}
|
||||
|
||||
|
||||
bool SCH_FIELD::Save( FILE* aFile ) const
|
||||
{
|
||||
char hjustify = 'C';
|
||||
|
||||
if( GetHorizJustify() == GR_TEXT_HJUSTIFY_LEFT )
|
||||
hjustify = 'L';
|
||||
else if( GetHorizJustify() == GR_TEXT_HJUSTIFY_RIGHT )
|
||||
hjustify = 'R';
|
||||
|
||||
char vjustify = 'C';
|
||||
|
||||
if( GetVertJustify() == GR_TEXT_VJUSTIFY_BOTTOM )
|
||||
vjustify = 'B';
|
||||
else if( GetVertJustify() == GR_TEXT_VJUSTIFY_TOP )
|
||||
vjustify = 'T';
|
||||
|
||||
if( fprintf( aFile, "F %d %s %c %-3d %-3d %-3d %4.4X %c %c%c%c",
|
||||
m_id,
|
||||
EscapedUTF8( m_Text ).c_str(), // wraps in quotes too
|
||||
GetTextAngle() == TEXT_ANGLE_HORIZ ? 'H' : 'V',
|
||||
GetTextPos().x, GetTextPos().y,
|
||||
GetTextWidth(),
|
||||
!IsVisible(),
|
||||
hjustify, vjustify,
|
||||
IsItalic() ? 'I' : 'N',
|
||||
IsBold() ? 'B' : 'N' ) == EOF )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Save field name, if the name is user definable
|
||||
if( m_id >= FIELD1 )
|
||||
{
|
||||
if( fprintf( aFile, " %s", EscapedUTF8( m_name ).c_str() ) == EOF )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if( fprintf( aFile, "\n" ) == EOF )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void SCH_FIELD::Place( SCH_EDIT_FRAME* frame, wxDC* DC )
|
||||
{
|
||||
frame->GetCanvas()->SetMouseCapture( NULL, NULL );
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2004-2017 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
|
||||
|
@ -143,8 +143,6 @@ public:
|
|||
void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
|
||||
GR_DRAWMODE aDrawMode, COLOR4D aColor = COLOR4D::UNSPECIFIED ) override;
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
// Geometric transforms (used in block operations):
|
||||
|
||||
void Move( const wxPoint& aMoveVector ) override
|
||||
|
|
|
@ -222,14 +222,6 @@ public:
|
|||
*/
|
||||
virtual void Rotate( wxPoint aPosition ) = 0;
|
||||
|
||||
/**
|
||||
* Function Save
|
||||
* writes the data structures for this object out to a FILE in "*.sch" format.
|
||||
* @param aFile The FILE to write to.
|
||||
* @return bool - true if success writing else false.
|
||||
*/
|
||||
virtual bool Save( FILE* aFile ) const = 0;
|
||||
|
||||
/**
|
||||
* Function Load
|
||||
* reads a schematic item from \a aLine in a .sch file.
|
||||
|
|
|
@ -50,19 +50,6 @@ SCH_JUNCTION::SCH_JUNCTION( const wxPoint& pos ) :
|
|||
}
|
||||
|
||||
|
||||
bool SCH_JUNCTION::Save( FILE* aFile ) const
|
||||
{
|
||||
bool success = true;
|
||||
|
||||
if( fprintf( aFile, "Connection ~ %-4d %-4d\n", m_pos.x, m_pos.y ) == EOF )
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
EDA_ITEM* SCH_JUNCTION::Clone() const
|
||||
{
|
||||
return new SCH_JUNCTION( *this );
|
||||
|
@ -79,26 +66,6 @@ void SCH_JUNCTION::SwapData( SCH_ITEM* aItem )
|
|||
}
|
||||
|
||||
|
||||
bool SCH_JUNCTION::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||
{
|
||||
char name[256];
|
||||
char* line = (char*) aLine;
|
||||
|
||||
while( (*line != ' ' ) && *line )
|
||||
line++;
|
||||
|
||||
if( sscanf( line, "%255s %d %d", name, &m_pos.x, &m_pos.y ) != 3 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file connection load error at line %d, aborted" ),
|
||||
aLine.LineNumber() );
|
||||
aErrorMsg << wxT( "\n" ) << FROM_UTF8( (char*) aLine );
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const EDA_RECT SCH_JUNCTION::GetBoundingBox() const
|
||||
{
|
||||
EDA_RECT rect;
|
||||
|
@ -235,6 +202,7 @@ void SCH_JUNCTION::Plot( PLOTTER* aPlotter )
|
|||
aPlotter->Circle( m_pos, GetSymbolSize(), FILLED_SHAPE );
|
||||
}
|
||||
|
||||
|
||||
BITMAP_DEF SCH_JUNCTION::GetMenuImage() const
|
||||
{
|
||||
return add_junction_xpm;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2017 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
|
||||
|
@ -60,10 +60,6 @@ public:
|
|||
void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
|
||||
GR_DRAWMODE aDrawMode, COLOR4D aColor = COLOR4D::UNSPECIFIED ) override;
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
bool Load( LINE_READER& aLine, wxString& aErrorMsg ) override;
|
||||
|
||||
void Move( const wxPoint& aMoveVector ) override
|
||||
{
|
||||
m_pos += aMoveVector;
|
||||
|
|
|
@ -201,72 +201,6 @@ double SCH_LINE::GetLength() const
|
|||
}
|
||||
|
||||
|
||||
bool SCH_LINE::Save( FILE* aFile ) const
|
||||
{
|
||||
bool success = true;
|
||||
|
||||
const char* layer = "Notes";
|
||||
const char* width = "Line";
|
||||
|
||||
if( GetLayer() == LAYER_WIRE )
|
||||
layer = "Wire";
|
||||
|
||||
if( GetLayer() == LAYER_BUS )
|
||||
layer = "Bus";
|
||||
|
||||
if( fprintf( aFile, "Wire %s %s\n", layer, width ) == EOF )
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
|
||||
if( fprintf( aFile, "\t%-4d %-4d %-4d %-4d\n", m_start.x, m_start.y,
|
||||
m_end.x, m_end.y ) == EOF )
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_LINE::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||
{
|
||||
char Name1[256];
|
||||
char Name2[256];
|
||||
char* line = (char*) aLine;
|
||||
|
||||
while( (*line != ' ' ) && *line )
|
||||
line++;
|
||||
|
||||
if( sscanf( line, "%255s %255s", Name1, Name2 ) != 2 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file segment error at line %d, aborted" ),
|
||||
aLine.LineNumber() );
|
||||
aErrorMsg << wxT( "\n" ) << FROM_UTF8( (char*) aLine );
|
||||
return false;
|
||||
}
|
||||
|
||||
m_Layer = LAYER_NOTES;
|
||||
|
||||
if( Name1[0] == 'W' )
|
||||
m_Layer = LAYER_WIRE;
|
||||
|
||||
if( Name1[0] == 'B' )
|
||||
m_Layer = LAYER_BUS;
|
||||
|
||||
if( !aLine.ReadLine() || sscanf( (char*) aLine, "%d %d %d %d ",
|
||||
&m_start.x, &m_start.y, &m_end.x, &m_end.y ) != 4 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file Segment struct error at line %d, aborted" ),
|
||||
aLine.LineNumber() );
|
||||
aErrorMsg << wxT( "\n" ) << FROM_UTF8( (char*) aLine );
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
COLOR4D SCH_LINE::GetDefaultColor() const
|
||||
{
|
||||
return GetLayerColor( m_Layer );
|
||||
|
@ -418,10 +352,6 @@ void SCH_LINE::Rotate( wxPoint aPosition )
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* MergeOverlap try to merge 2 lines that are colinear.
|
||||
* this function expects these 2 lines have at least a common end
|
||||
*/
|
||||
bool SCH_LINE::MergeOverlap( SCH_LINE* aLine )
|
||||
{
|
||||
auto less = []( const wxPoint& lhs, const wxPoint& rhs ) -> bool
|
||||
|
@ -618,9 +548,9 @@ wxString SCH_LINE::GetSelectMenuText() const
|
|||
wxString menuText, txtfmt, orient;
|
||||
|
||||
if( m_start.x == m_end.x )
|
||||
orient = _("Vert.");
|
||||
orient = _( "Vert." );
|
||||
else if( m_start.y == m_end.y )
|
||||
orient = _("Horiz.");
|
||||
orient = _( "Horiz." );
|
||||
|
||||
switch( m_Layer )
|
||||
{
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2017 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
|
||||
|
@ -35,9 +35,8 @@
|
|||
class NETLIST_OBJECT_LIST;
|
||||
|
||||
/**
|
||||
* Class SCH_LINE
|
||||
* is a segment description base class to describe items which have 2 end
|
||||
* points (track, wire, draw line ...)
|
||||
* Segment description base class to describe items which have 2 end points (track, wire,
|
||||
* draw line ...)
|
||||
*/
|
||||
class SCH_LINE : public SCH_ITEM
|
||||
{
|
||||
|
@ -121,10 +120,6 @@ public:
|
|||
void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
|
||||
GR_DRAWMODE aDrawMode, COLOR4D aColor = COLOR4D::UNSPECIFIED ) override;
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
bool Load( LINE_READER& aLine, wxString& aErrorMsg ) override;
|
||||
|
||||
int GetPenSize() const override;
|
||||
|
||||
void Move( const wxPoint& aMoveVector ) override;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2017 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
|
||||
|
@ -39,10 +39,6 @@
|
|||
#include <erc.h>
|
||||
|
||||
|
||||
/********************/
|
||||
/* class SCH_MARKER */
|
||||
/********************/
|
||||
|
||||
SCH_MARKER::SCH_MARKER() : SCH_ITEM( NULL, SCH_MARKER_T ), MARKER_BASE()
|
||||
{
|
||||
}
|
||||
|
@ -72,17 +68,6 @@ void SCH_MARKER::Show( int nestLevel, std::ostream& os ) const
|
|||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Function Save (do nothing : markers are no more saved in files )
|
||||
* writes the data structures for this object out to a FILE in "*.brd" format.
|
||||
* @param aFile The FILE to write to.
|
||||
* @return bool - true if success writing else false.
|
||||
*/
|
||||
bool SCH_MARKER::Save( FILE* aFile ) const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void SCH_MARKER::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
|
||||
const wxPoint& aOffset, GR_DRAWMODE aDrawMode, COLOR4D aColor )
|
||||
|
@ -123,13 +108,6 @@ bool SCH_MARKER::Matches( wxFindReplaceData& aSearchData, void* aAuxData,
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function GetBoundingBox
|
||||
* returns the orthogonal, bounding box of this object for display purposes.
|
||||
* This box should be an enclosing perimeter for visible components of this
|
||||
* object, and the units should be in the pcb or schematic coordinate system.
|
||||
* It is OK to overestimate the size by a few counts.
|
||||
*/
|
||||
const EDA_RECT SCH_MARKER::GetBoundingBox() const
|
||||
{
|
||||
return GetBoundingBoxMarker();
|
||||
|
@ -190,4 +168,3 @@ bool SCH_MARKER::HitTest( const wxPoint& aPosition, int aAccuracy ) const
|
|||
{
|
||||
return HitTestMarker( aPosition );
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2004-2017 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
|
||||
|
@ -63,8 +63,6 @@ public:
|
|||
(void) aPlotter;
|
||||
}
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
EDA_RECT const GetBoundingBox() const override;
|
||||
|
||||
// Geometric transforms (used in block operations):
|
||||
|
@ -82,7 +80,6 @@ public:
|
|||
void Rotate( wxPoint aPosition ) override;
|
||||
|
||||
/**
|
||||
* Function Matches, virtual from the base class EDA_ITEM
|
||||
* Compare DRC marker main and auxiliary text against search string.
|
||||
*
|
||||
* @param aSearchData - Criteria to search against.
|
||||
|
|
|
@ -81,39 +81,6 @@ const EDA_RECT SCH_NO_CONNECT::GetBoundingBox() const
|
|||
}
|
||||
|
||||
|
||||
bool SCH_NO_CONNECT::Save( FILE* aFile ) const
|
||||
{
|
||||
bool success = true;
|
||||
|
||||
if( fprintf( aFile, "NoConn ~ %-4d %-4d\n", m_pos.x, m_pos.y ) == EOF )
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_NO_CONNECT::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||
{
|
||||
char name[256];
|
||||
char* line = (char*) aLine;
|
||||
|
||||
while( (*line != ' ' ) && *line )
|
||||
line++;
|
||||
|
||||
if( sscanf( line, "%255s %d %d", name, &m_pos.x, &m_pos.y ) != 3 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file No Connect load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
aErrorMsg << wxT( "\n" ) << FROM_UTF8( ((char*)aLine) );
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void SCH_NO_CONNECT::GetEndPoints( std::vector< DANGLING_END_ITEM >& aItemList )
|
||||
{
|
||||
DANGLING_END_ITEM item( NO_CONNECT_END, this, m_pos );
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2017 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
|
||||
|
@ -58,10 +58,6 @@ public:
|
|||
void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
|
||||
GR_DRAWMODE aDrawMode, COLOR4D aColor = COLOR4D::UNSPECIFIED ) override;
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
bool Load( LINE_READER& aLine, wxString& aErrorMsg ) override;
|
||||
|
||||
void GetEndPoints( std::vector< DANGLING_END_ITEM >& aItemList ) override;
|
||||
|
||||
const EDA_RECT GetBoundingBox() const override;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
* Copyright (C) 2008-2016 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 2008 Wayne Stambaugh <stambaughw@gmail.com>
|
||||
* Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -484,63 +484,6 @@ bool SCH_SCREEN::SchematicCleanUp()
|
|||
}
|
||||
|
||||
|
||||
bool SCH_SCREEN::Save( FILE* aFile ) const
|
||||
{
|
||||
// Creates header
|
||||
if( fprintf( aFile, "%s %s %d\n", EESCHEMA_FILE_STAMP,
|
||||
SCHEMATIC_HEAD_STRING, EESCHEMA_VERSION ) < 0 )
|
||||
return false;
|
||||
|
||||
for( const PART_LIB& lib : *Prj().SchLibs() )
|
||||
{
|
||||
if( fprintf( aFile, "LIBS:%s\n", TO_UTF8( lib.GetName() ) ) < 0 )
|
||||
return false;
|
||||
}
|
||||
|
||||
// This section is not used, but written for file compatibility
|
||||
if( fprintf( aFile, "EELAYER %d %d\n", SCH_LAYER_ID_COUNT, 0 ) < 0
|
||||
|| fprintf( aFile, "EELAYER END\n" ) < 0 )
|
||||
return false;
|
||||
|
||||
/* Write page info, ScreenNumber and NumberOfScreen; not very meaningful for
|
||||
* SheetNumber and Sheet Count in a complex hierarchy, but useful in
|
||||
* simple hierarchy and flat hierarchy. Used also to search the root
|
||||
* sheet ( ScreenNumber = 1 ) within the files
|
||||
*/
|
||||
const TITLE_BLOCK& tb = GetTitleBlock();
|
||||
|
||||
if( fprintf( aFile, "$Descr %s %d %d%s\n", TO_UTF8( m_paper.GetType() ),
|
||||
m_paper.GetWidthMils(),
|
||||
m_paper.GetHeightMils(),
|
||||
!m_paper.IsCustom() && m_paper.IsPortrait() ?
|
||||
" portrait" : ""
|
||||
) < 0
|
||||
|| fprintf( aFile, "encoding utf-8\n") < 0
|
||||
|| fprintf( aFile, "Sheet %d %d\n", m_ScreenNumber, m_NumberOfScreens ) < 0
|
||||
|| fprintf( aFile, "Title %s\n", EscapedUTF8( tb.GetTitle() ).c_str() ) < 0
|
||||
|| fprintf( aFile, "Date %s\n", EscapedUTF8( tb.GetDate() ).c_str() ) < 0
|
||||
|| fprintf( aFile, "Rev %s\n", EscapedUTF8( tb.GetRevision() ).c_str() ) < 0
|
||||
|| fprintf( aFile, "Comp %s\n", EscapedUTF8( tb.GetCompany() ).c_str() ) < 0
|
||||
|| fprintf( aFile, "Comment1 %s\n", EscapedUTF8( tb.GetComment1() ).c_str() ) < 0
|
||||
|| fprintf( aFile, "Comment2 %s\n", EscapedUTF8( tb.GetComment2() ).c_str() ) < 0
|
||||
|| fprintf( aFile, "Comment3 %s\n", EscapedUTF8( tb.GetComment3() ).c_str() ) < 0
|
||||
|| fprintf( aFile, "Comment4 %s\n", EscapedUTF8( tb.GetComment4() ).c_str() ) < 0
|
||||
|| fprintf( aFile, "$EndDescr\n" ) < 0 )
|
||||
return false;
|
||||
|
||||
for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() )
|
||||
{
|
||||
if( !item->Save( aFile ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
if( fprintf( aFile, "$EndSCHEMATC\n" ) < 0 )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void SCH_SCREEN::UpdateSymbolLinks( bool aForce )
|
||||
{
|
||||
// Initialize or reinitialize the pointer to the LIB_PART for each component
|
||||
|
@ -596,10 +539,6 @@ void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode
|
|||
}
|
||||
|
||||
|
||||
/* note: SCH_SCREEN::Plot is useful only for schematic.
|
||||
* library editor and library viewer do not use a draw list, and therefore
|
||||
* SCH_SCREEN::Plot plots nothing
|
||||
*/
|
||||
void SCH_SCREEN::Plot( PLOTTER* aPlotter )
|
||||
{
|
||||
// Ensure links are up to date, even if a library was reloaded for some reason:
|
||||
|
@ -1321,13 +1260,8 @@ void SCH_SCREEN::Show( int nestLevel, std::ostream& os ) const
|
|||
#endif
|
||||
|
||||
|
||||
/******************************************************************/
|
||||
/* Class SCH_SCREENS to handle the list of screens in a hierarchy */
|
||||
/******************************************************************/
|
||||
|
||||
/**
|
||||
* Function SortByTimeStamp
|
||||
* sorts a list of schematic items by time stamp and type.
|
||||
* Sort a list of schematic items by time stamp and type.
|
||||
*/
|
||||
static bool SortByTimeStamp( const EDA_ITEM* item1, const EDA_ITEM* item2 )
|
||||
{
|
||||
|
@ -1647,4 +1581,3 @@ int SCH_SCREENS::ChangeSymbolLibNickname( const wxString& aFrom, const wxString&
|
|||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
|
|
|
@ -144,188 +144,6 @@ SCH_SHEET* SCH_SHEET::GetRootSheet()
|
|||
}
|
||||
|
||||
|
||||
bool SCH_SHEET::Save( FILE* aFile ) const
|
||||
{
|
||||
if( fprintf( aFile, "$Sheet\n" ) == EOF
|
||||
|| fprintf( aFile, "S %-4d %-4d %-4d %-4d\n",
|
||||
m_pos.x, m_pos.y, m_size.x, m_size.y ) == EOF )
|
||||
return false;
|
||||
|
||||
//save the unique timestamp, like other schematic parts.
|
||||
if( fprintf( aFile, "U %8.8lX\n", (unsigned long) m_TimeStamp ) == EOF )
|
||||
return false;
|
||||
|
||||
/* Save schematic sheetname and filename. */
|
||||
if( !m_name.IsEmpty() )
|
||||
{
|
||||
if( fprintf( aFile, "F0 %s %d\n", EscapedUTF8( m_name ).c_str(),
|
||||
m_sheetNameSize ) == EOF )
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !m_fileName.IsEmpty() )
|
||||
{
|
||||
if( fprintf( aFile, "F1 %s %d\n", EscapedUTF8( m_fileName ).c_str(),
|
||||
m_fileNameSize ) == EOF )
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Save the list of labels in the sheet. */
|
||||
|
||||
for( const SCH_SHEET_PIN& label : m_pins )
|
||||
{
|
||||
if( !label.Save( aFile ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
if( fprintf( aFile, "$EndSheet\n" ) == EOF )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_SHEET::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||
{
|
||||
int fieldNdx, size;
|
||||
SCH_SHEET_PIN* sheetPin;
|
||||
char* ptcar;
|
||||
unsigned long timeStamp = 0UL;
|
||||
|
||||
SetTimeStamp( GetNewTimeStamp() );
|
||||
|
||||
// sheets are added to the GetDrawItems() like other schematic components.
|
||||
// however, in order to preserve the hierarchy (through m_Parent pointers),
|
||||
// a duplicate of the sheet is added to m_SubSheet array.
|
||||
// must be a duplicate, references just work for a two-layer structure.
|
||||
// this is accomplished through the Sync() function.
|
||||
|
||||
if( ((char*)aLine)[0] == '$' ) // line should be "$Sheet"
|
||||
{
|
||||
if( !aLine.ReadLine() )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Read File Error" ) );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Next line: must be "S xx yy nn mm" with xx, yy = sheet position
|
||||
* ( upper left corner ) et nn,mm = sheet size */
|
||||
if( ( sscanf( &((char*)aLine)[1], "%d %d %d %d",
|
||||
&m_pos.x, &m_pos.y, &m_size.x, &m_size.y ) != 4 )
|
||||
|| ( ((char*)aLine)[0] != 'S' ) )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( " ** Eeschema file sheet struct error at line %d, aborted\n" ),
|
||||
aLine.LineNumber() );
|
||||
|
||||
aErrorMsg << FROM_UTF8( ((char*)aLine) );
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Read fields */
|
||||
for( ; ; ) /* Analysis of lines "Fn" text. */
|
||||
{
|
||||
if( !aLine.ReadLine() )
|
||||
return false;
|
||||
|
||||
if( ((char*)aLine)[0] == 'U' )
|
||||
{
|
||||
sscanf( ((char*)aLine) + 1, "%lX", &timeStamp );
|
||||
|
||||
m_TimeStamp = (time_t) timeStamp;
|
||||
|
||||
if( m_TimeStamp == 0 ) // zero is not unique!
|
||||
SetTimeStamp( GetNewTimeStamp() );
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if( ((char*)aLine)[0] != 'F' )
|
||||
break;
|
||||
|
||||
sscanf( ((char*)aLine) + 1, "%d", &fieldNdx );
|
||||
|
||||
/* Read the field:
|
||||
* If fieldNdx> = 2: Fn "text" t s posx posy
|
||||
* If F0 "text" for SheetName
|
||||
* F1 and "text" for filename
|
||||
*/
|
||||
ptcar = ((char*)aLine);
|
||||
|
||||
while( *ptcar && ( *ptcar != '"' ) )
|
||||
ptcar++;
|
||||
|
||||
if( *ptcar != '"' )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file sheet label F%d at line %d, aborted\n" ),
|
||||
fieldNdx, aLine.LineNumber() );
|
||||
aErrorMsg << FROM_UTF8( (char*) aLine );
|
||||
return false;
|
||||
}
|
||||
|
||||
wxString sheetName;
|
||||
ptcar += ReadDelimitedText( &sheetName, ptcar );
|
||||
|
||||
if( *ptcar == 0 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file sheet field F at line %d, aborted\n" ),
|
||||
aLine.LineNumber() );
|
||||
aErrorMsg << FROM_UTF8( (char*) aLine );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( ( fieldNdx == 0 ) || ( fieldNdx == 1 ) )
|
||||
{
|
||||
if( sscanf( ptcar, "%d", &size ) != 1 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file sheet Label error line %d, aborted\n" ),
|
||||
aLine.LineNumber() );
|
||||
|
||||
aErrorMsg << FROM_UTF8( (char*) aLine );
|
||||
}
|
||||
|
||||
if( size == 0 )
|
||||
size = GetDefaultTextSize();
|
||||
|
||||
if( fieldNdx == 0 )
|
||||
{
|
||||
m_name = sheetName;
|
||||
m_sheetNameSize = size;
|
||||
}
|
||||
else
|
||||
{
|
||||
SetFileName( sheetName );
|
||||
m_fileNameSize = size;
|
||||
}
|
||||
}
|
||||
|
||||
if( fieldNdx > 1 )
|
||||
{
|
||||
sheetPin = new SCH_SHEET_PIN( this );
|
||||
|
||||
if( !sheetPin->Load( aLine, aErrorMsg ) )
|
||||
{
|
||||
delete sheetPin;
|
||||
sheetPin = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
AddPin( sheetPin );
|
||||
}
|
||||
}
|
||||
|
||||
if( strncasecmp( "$End", ((char*)aLine), 4 ) != 0 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "**Eeschema file end_sheet struct error at line %d, aborted\n" ),
|
||||
aLine.LineNumber() );
|
||||
aErrorMsg << FROM_UTF8( ((char*)aLine) );
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void SCH_SHEET::SwapData( SCH_ITEM* aItem )
|
||||
{
|
||||
wxCHECK_RET( aItem->Type() == SCH_SHEET_T,
|
||||
|
@ -803,59 +621,6 @@ bool SCH_SHEET::LocatePathOfScreen( SCH_SCREEN* aScreen, SCH_SHEET_PATH* aList )
|
|||
}
|
||||
|
||||
|
||||
bool SCH_SHEET::Load( SCH_EDIT_FRAME* aFrame )
|
||||
{
|
||||
bool success = true;
|
||||
|
||||
SCH_SCREEN* screen = NULL;
|
||||
|
||||
if( !m_screen )
|
||||
{
|
||||
g_RootSheet->SearchHierarchy( m_fileName, &screen );
|
||||
|
||||
if( screen )
|
||||
{
|
||||
SetScreen( screen );
|
||||
|
||||
//do not need to load the sub-sheets - this has already been done.
|
||||
}
|
||||
else
|
||||
{
|
||||
SetScreen( new SCH_SCREEN( &aFrame->Kiway() ) );
|
||||
|
||||
success = aFrame->LoadOneEEFile( m_screen, m_fileName );
|
||||
|
||||
if( success )
|
||||
{
|
||||
EDA_ITEM* bs = m_screen->GetDrawItems();
|
||||
|
||||
while( bs )
|
||||
{
|
||||
if( bs->Type() == SCH_SHEET_T )
|
||||
{
|
||||
SCH_SHEET* sheet = (SCH_SHEET*) bs;
|
||||
|
||||
// Set the parent to this sheet. This effectively creates a method
|
||||
// to find the root sheet from any sheet so a pointer to the root
|
||||
// sheet does not need to be stored globally. Note: this is not the
|
||||
// same as a hierarchy. Complex hierarchies can have multiple copies
|
||||
// of a sheet. This only provides a simple tree to find the root sheet.
|
||||
sheet->SetParent( this );
|
||||
|
||||
if( !sheet->Load( aFrame ) )
|
||||
success = false;
|
||||
}
|
||||
|
||||
bs = bs->Next();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
int SCH_SHEET::CountSheets()
|
||||
{
|
||||
int count = 1; //1 = this!!
|
||||
|
|
|
@ -49,8 +49,7 @@ class NETLIST_OBJECT_LIST;
|
|||
|
||||
|
||||
/**
|
||||
* Class SCH_SHEET_PIN
|
||||
* defines a sheet pin (label) used in sheets to create hierarchical schematics.
|
||||
* Define a sheet pin (label) used in sheets to create hierarchical schematics.
|
||||
*
|
||||
* A SCH_SHEET_PIN is used to create a hierarchical sheet in the same way a
|
||||
* pin is used in a component. It connects the objects in the sheet object
|
||||
|
@ -105,9 +104,9 @@ public:
|
|||
bool operator ==( const SCH_SHEET_PIN* aPin ) const;
|
||||
|
||||
/**
|
||||
* Virtual function IsMovableFromAnchorPoint
|
||||
* 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 large items)
|
||||
*
|
||||
* @return true for a hierarchical sheet pin
|
||||
*/
|
||||
bool IsMovableFromAnchorPoint() override { return true; }
|
||||
|
@ -116,8 +115,8 @@ public:
|
|||
GR_DRAWMODE aDrawMode, COLOR4D aColor = COLOR4D::UNSPECIFIED ) override;
|
||||
|
||||
/**
|
||||
* Function CreateGraphicShape (virtual)
|
||||
* Calculates the graphic shape (a polygon) associated to the text
|
||||
* Calculate the graphic shape (a polygon) associated to the text.
|
||||
*
|
||||
* @param aPoints = a buffer to fill with polygon corners coordinates
|
||||
* @param aPos = Position of the shape
|
||||
*/
|
||||
|
@ -146,8 +145,7 @@ public:
|
|||
SHEET_SIDE GetEdge() const;
|
||||
|
||||
/**
|
||||
* Function ConstrainOnEdge
|
||||
* is used to adjust label position to edge based on proximity to vertical / horizontal edge
|
||||
* Adjust label position to edge based on proximity to vertical or horizontal edge
|
||||
* of the parent sheet.
|
||||
*/
|
||||
void ConstrainOnEdge( wxPoint Pos );
|
||||
|
@ -160,10 +158,6 @@ public:
|
|||
*/
|
||||
SCH_SHEET* GetParent() const { return (SCH_SHEET*) m_Parent; }
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
bool Load( LINE_READER& aLine, wxString& aErrorMsg ) override;
|
||||
|
||||
#if defined(DEBUG)
|
||||
void Show( int nestLevel, std::ostream& os ) const override;
|
||||
#endif
|
||||
|
@ -210,8 +204,7 @@ typedef boost::ptr_vector<SCH_SHEET_PIN> SCH_SHEET_PINS;
|
|||
|
||||
|
||||
/**
|
||||
* Class SCH_SHEET
|
||||
* is the sheet symbol placed in a schematic, and is the entry point for a sub schematic.
|
||||
* Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
|
||||
*/
|
||||
class SCH_SHEET : public SCH_ITEM
|
||||
{
|
||||
|
@ -248,8 +241,7 @@ public:
|
|||
SCH_SHEET( const wxPoint& pos = wxPoint( 0, 0 ) );
|
||||
|
||||
/**
|
||||
* Copy Constructor
|
||||
* clones \a aSheet into a new object. All sheet pins are copied as is except and
|
||||
* Copy \a aSheet into a new object. All sheet pins are copied as is except and
|
||||
* the SCH_SHEET_PIN's #m_Parent pointers are set to the new copied parent object.
|
||||
*/
|
||||
SCH_SHEET( const SCH_SHEET& aSheet );
|
||||
|
@ -262,11 +254,12 @@ public:
|
|||
}
|
||||
|
||||
/**
|
||||
* Virtual function IsMovableFromAnchorPoint
|
||||
* Return true for items which are moved with the anchor point at mouse cursor
|
||||
* and false for items moved with no reference to anchor
|
||||
* 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, compoments)
|
||||
*
|
||||
* @return false for a hierarchical sheet
|
||||
*/
|
||||
bool IsMovableFromAnchorPoint() override { return false; }
|
||||
|
@ -290,9 +283,7 @@ public:
|
|||
void SetSize( const wxSize& aSize ) { m_size = aSize; }
|
||||
|
||||
/**
|
||||
* Function GetRootSheet
|
||||
*
|
||||
* returns the root sheet of this SCH_SHEET object.
|
||||
* Return 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 without
|
||||
|
@ -303,30 +294,25 @@ public:
|
|||
SCH_SHEET* GetRootSheet();
|
||||
|
||||
/**
|
||||
* Function SetScreen
|
||||
* sets the screen associated with this sheet to \a aScreen.
|
||||
* <p>
|
||||
* Set the #SCH_SCREEN associated with this sheet to \a aScreen.
|
||||
*
|
||||
* The screen reference counting is performed by SetScreen. If \a aScreen is not
|
||||
* the same as the current screen, the current screen reference count is decremented
|
||||
* and \a aScreen becomes the screen for the sheet. If the current screen reference
|
||||
* count reaches zero, the current screen is deleted. NULL is a valid value for
|
||||
* \a aScreen.
|
||||
* </p>
|
||||
*
|
||||
* @param aScreen The new screen to associate with the sheet.
|
||||
*/
|
||||
void SetScreen( SCH_SCREEN* aScreen );
|
||||
|
||||
/**
|
||||
* Function GetScreenCount
|
||||
* returns the number of times the associated screen for the sheet is being used. If
|
||||
* no screen is associated with the sheet, then zero is returned.
|
||||
* Return the number of times the associated screen for the sheet is being used.
|
||||
*
|
||||
* If no screen is associated with the sheet, then zero is returned.
|
||||
*/
|
||||
int GetScreenCount() const;
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
bool Load( LINE_READER& aLine, wxString& aErrorMsg ) override;
|
||||
|
||||
void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList ) override;
|
||||
|
||||
/* there is no member for orientation in sch_sheet, to preserve file
|
||||
|
@ -395,32 +381,25 @@ public:
|
|||
bool HasUndefinedPins();
|
||||
|
||||
/**
|
||||
* Function GetMinWidth
|
||||
* returns the minimum width of the sheet based on the widths of the sheet pin text.
|
||||
* Return the minimum width of the sheet based on the widths of the sheet pin text.
|
||||
*
|
||||
* <p>
|
||||
* The minimum sheet width is determined by the width of the bounding box of each
|
||||
* hierarchical sheet pin. If two pins are horizontally adjacent ( same Y position )
|
||||
* to each other, the sum of the bounding box widths is used. If at some point in
|
||||
* the future sheet objects can be rotated or pins can be placed in the vertical
|
||||
* orientation, this function will need to be changed.
|
||||
* </p>
|
||||
*
|
||||
* @return The minimum width the sheet can be resized.
|
||||
*/
|
||||
int GetMinWidth() const;
|
||||
|
||||
/**
|
||||
* Function GetMinHeight
|
||||
* returns the minimum height that the sheet can be resized based on the sheet pin
|
||||
* positions.
|
||||
* Return the minimum height that the sheet can be resized based on the sheet pin positions.
|
||||
*
|
||||
* <p>
|
||||
* The minimum width of a sheet is determined by the Y axis location of the bottom
|
||||
* most sheet pin. If at some point in the future sheet objects can be rotated or
|
||||
* pins can be placed in the vertical orientation, this function will need to be
|
||||
* changed.
|
||||
* </p>
|
||||
*
|
||||
* @return The minimum height the sheet can be resized.
|
||||
*/
|
||||
|
@ -434,8 +413,7 @@ public:
|
|||
EDA_RECT const GetBoundingBox() const override;
|
||||
|
||||
/**
|
||||
* Function GetResizePos
|
||||
* returns the position of the lower right corner of the sheet in drawing units.
|
||||
* Return the position of the lower right corner of the sheet in drawing units.
|
||||
*
|
||||
* @return A wxPoint containing lower right corner of the sheet in drawing units.
|
||||
*/
|
||||
|
@ -444,39 +422,38 @@ public:
|
|||
void SwapData( SCH_ITEM* aItem ) override;
|
||||
|
||||
/**
|
||||
* Function ComponentCount
|
||||
* count our own components, without the power components.
|
||||
* Count our own components, without the power components.
|
||||
*
|
||||
* @return the component count.
|
||||
*/
|
||||
int ComponentCount();
|
||||
|
||||
/**
|
||||
* Function Load.
|
||||
* for the sheet: load the file m_fileName
|
||||
* if a screen already exists, the file is already read.
|
||||
* m_screen point on the screen, and its m_RefCount is
|
||||
* incremented
|
||||
* else creates a new associated screen and load the data file.
|
||||
* Load sheet from file #m_fileName
|
||||
*
|
||||
* If a screen already exists, the file is already read and #m_screen points to the screen
|
||||
* and its m_RefCount is incremented. Otherwise creates a new associated screen and load
|
||||
* the schematic file into this sheet.
|
||||
*
|
||||
* @param aFrame = a SCH_EDIT_FRAME pointer to the maim schematic frame
|
||||
* @return true if OK
|
||||
*/
|
||||
bool Load( SCH_EDIT_FRAME* aFrame );
|
||||
|
||||
/**
|
||||
* Function SearchHierarchy
|
||||
* search the existing hierarchy for an instance of screen "FileName".
|
||||
* @param aFilename = the filename to find
|
||||
* @param aScreen = a location to return a pointer to the screen (if found)
|
||||
* @return bool if found, and a pointer to the screen
|
||||
* Search the existing hierarchy for an instance of screen loaded from \a aFileName.
|
||||
*
|
||||
* @param aFilename = the filename to find
|
||||
* @param aScreen = a location to return a pointer to the screen (if found)
|
||||
* @return bool if found, and a pointer to the screen
|
||||
*/
|
||||
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.
|
||||
* Search the existing hierarchy for an instance of screen loaded from \a aFileName.
|
||||
*
|
||||
* 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
|
||||
|
@ -485,16 +462,15 @@ public:
|
|||
bool LocatePathOfScreen( SCH_SCREEN* aScreen, SCH_SHEET_PATH* aList );
|
||||
|
||||
/**
|
||||
* Function CountSheets
|
||||
* calculates the number of sheets found in "this"
|
||||
* this number includes the full subsheets count
|
||||
* Count the number of sheets found in "this" sheet includeing all of the subsheets.
|
||||
*
|
||||
* @return the full count of sheets+subsheets contained by "this"
|
||||
*/
|
||||
int CountSheets();
|
||||
|
||||
/**
|
||||
* Function GetFileName
|
||||
* return the filename corresponding to this sheet
|
||||
* Return the filename corresponding to this sheet.
|
||||
*
|
||||
* @return a wxString containing the filename
|
||||
*/
|
||||
wxString GetFileName( void ) const;
|
||||
|
@ -509,10 +485,6 @@ public:
|
|||
|
||||
bool ChangeFileName( SCH_EDIT_FRAME* aFrame, const wxString& aFileName );
|
||||
|
||||
//void RemoveSheet(SCH_SHEET* sheet);
|
||||
//to remove a sheet, just delete it
|
||||
//-- the destructor should take care of everything else.
|
||||
|
||||
// Geometric transforms (used in block operations):
|
||||
|
||||
void Move( const wxPoint& aMoveVector ) override
|
||||
|
@ -545,13 +517,11 @@ public:
|
|||
void Resize( const wxSize& aSize );
|
||||
|
||||
/**
|
||||
* Function GetSheetNamePosition
|
||||
* @return the position of the anchor of sheet name text
|
||||
*/
|
||||
wxPoint GetSheetNamePosition();
|
||||
|
||||
/**
|
||||
* Function GetFileNamePosition
|
||||
* @return the position of the anchor of filename text
|
||||
*/
|
||||
wxPoint GetFileNamePosition();
|
||||
|
|
|
@ -211,162 +211,6 @@ void SCH_SHEET_PIN::ConstrainOnEdge( wxPoint Pos )
|
|||
}
|
||||
|
||||
|
||||
bool SCH_SHEET_PIN::Save( FILE* aFile ) const
|
||||
{
|
||||
int type = 'U', side = 'L';
|
||||
|
||||
if( m_Text.IsEmpty() )
|
||||
return true;
|
||||
|
||||
switch( m_edge )
|
||||
{
|
||||
default:
|
||||
case SHEET_LEFT_SIDE: //pin on left side
|
||||
side = 'L';
|
||||
break;
|
||||
|
||||
case SHEET_RIGHT_SIDE: //pin on right side
|
||||
side = 'R';
|
||||
break;
|
||||
|
||||
case SHEET_TOP_SIDE: //pin on top side
|
||||
side = 'T';
|
||||
break;
|
||||
|
||||
case SHEET_BOTTOM_SIDE: //pin on bottom side
|
||||
side = 'B';
|
||||
break;
|
||||
}
|
||||
|
||||
switch( m_shape )
|
||||
{
|
||||
case NET_INPUT:
|
||||
type = 'I'; break;
|
||||
|
||||
case NET_OUTPUT:
|
||||
type = 'O'; break;
|
||||
|
||||
case NET_BIDI:
|
||||
type = 'B'; break;
|
||||
|
||||
case NET_TRISTATE:
|
||||
type = 'T'; break;
|
||||
|
||||
case NET_UNSPECIFIED:
|
||||
type = 'U'; break;
|
||||
}
|
||||
|
||||
if( fprintf( aFile, "F%d %s %c %c %-3d %-3d %-3d\n", m_number,
|
||||
EscapedUTF8( m_Text ).c_str(), // supplies wrapping quotes
|
||||
type, side, GetTextPos().x, GetTextPos().y,
|
||||
GetTextWidth() ) == EOF )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_SHEET_PIN::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||
{
|
||||
int x, y, size;
|
||||
char number[256];
|
||||
char name[256];
|
||||
char connectType[256];
|
||||
char sheetSide[256];
|
||||
char* line = aLine.Line();
|
||||
char* cp;
|
||||
|
||||
static const char delims[] = " \t";
|
||||
|
||||
// Read coordinates.
|
||||
// D( printf( "line: \"%s\"\n", line );)
|
||||
|
||||
cp = strtok( line, delims );
|
||||
|
||||
strncpy( number, cp, sizeof(number) );
|
||||
number[sizeof(number)-1] = 0;
|
||||
|
||||
cp += strlen( number ) + 1;
|
||||
|
||||
cp += ReadDelimitedText( name, cp, sizeof(name) );
|
||||
|
||||
cp = strtok( cp, delims );
|
||||
strncpy( connectType, cp, sizeof(connectType) );
|
||||
connectType[sizeof(connectType)-1] = 0;
|
||||
|
||||
cp = strtok( NULL, delims );
|
||||
strncpy( sheetSide, cp, sizeof(sheetSide) );
|
||||
sheetSide[sizeof(sheetSide)-1] = 0;
|
||||
|
||||
cp += strlen( sheetSide ) + 1;
|
||||
|
||||
int r = sscanf( cp, "%d %d %d", &x, &y, &size );
|
||||
if( r != 3 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file sheet hierarchical label error at line %d.\n" ),
|
||||
aLine.LineNumber() );
|
||||
|
||||
aErrorMsg << FROM_UTF8( line );
|
||||
return false;
|
||||
}
|
||||
|
||||
m_Text = FROM_UTF8( name );
|
||||
|
||||
if( size == 0 )
|
||||
size = GetDefaultTextSize();
|
||||
|
||||
SetTextSize( wxSize( size, size ) );
|
||||
SetTextPos( wxPoint( x, y ) );
|
||||
|
||||
switch( connectType[0] )
|
||||
{
|
||||
case 'I':
|
||||
m_shape = NET_INPUT;
|
||||
break;
|
||||
|
||||
case 'O':
|
||||
m_shape = NET_OUTPUT;
|
||||
break;
|
||||
|
||||
case 'B':
|
||||
m_shape = NET_BIDI;
|
||||
break;
|
||||
|
||||
case 'T':
|
||||
m_shape = NET_TRISTATE;
|
||||
break;
|
||||
|
||||
case 'U':
|
||||
m_shape = NET_UNSPECIFIED;
|
||||
break;
|
||||
}
|
||||
|
||||
switch( sheetSide[0] )
|
||||
{
|
||||
case 'R' : // pin on right side
|
||||
SetEdge( SHEET_RIGHT_SIDE );
|
||||
break;
|
||||
|
||||
case 'T' : // pin on top side
|
||||
SetEdge( SHEET_TOP_SIDE );
|
||||
break;
|
||||
|
||||
case 'B' : // pin on bottom side
|
||||
SetEdge( SHEET_BOTTOM_SIDE );
|
||||
break;
|
||||
|
||||
case 'L' : // pin on left side
|
||||
default :
|
||||
SetEdge( SHEET_LEFT_SIDE );
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_SHEET_PIN::Matches( wxFindReplaceData& aSearchData,
|
||||
void* aAuxData, wxPoint* aFindLocation )
|
||||
{
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2015 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2017 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
|
||||
|
@ -379,124 +379,6 @@ void SCH_TEXT::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& aOffset,
|
|||
}
|
||||
|
||||
|
||||
bool SCH_TEXT::Save( FILE* aFile ) const
|
||||
{
|
||||
bool success = true;
|
||||
const char* shape = "~";
|
||||
|
||||
if( IsItalic() )
|
||||
shape = "Italic";
|
||||
|
||||
// For compatibility reason, the text must be saved in only one text line
|
||||
// so we replace all E.O.L. by \\n
|
||||
wxString text = m_Text;
|
||||
|
||||
text.Replace( wxT("\n"), wxT( "\\n" ) );
|
||||
|
||||
// Here we should have no CR or LF character in line
|
||||
// This is not always the case if a multiline text was copied (using a copy/paste function)
|
||||
// from a text that uses E.O.L characters that differs from the current EOL format
|
||||
// This is mainly the case under Linux using LF symbol when copying a text from
|
||||
// Windows (using CRLF symbol)
|
||||
// So we must just remove the extra CR left (or LF left under MacOSX)
|
||||
for( unsigned ii = 0; ii < text.Len(); )
|
||||
{
|
||||
if( text[ii] == 0x0A || text[ii] == 0x0D )
|
||||
text.erase( ii, 1 );
|
||||
else
|
||||
ii++;
|
||||
}
|
||||
|
||||
if( fprintf( aFile, "Text Notes %-4d %-4d %-4d %-4d %s %d\n%s\n",
|
||||
GetTextPos().x, GetTextPos().y, GetLabelSpinStyle(), GetTextWidth(),
|
||||
shape, GetThickness(), TO_UTF8( text ) ) == EOF )
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_TEXT::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||
{
|
||||
char Name1[256];
|
||||
char Name2[256];
|
||||
char Name3[256];
|
||||
int thickness = 0, orient = 0;
|
||||
int x, y, size = 0;
|
||||
|
||||
Name1[0] = 0; Name2[0] = 0; Name3[0] = 0;
|
||||
|
||||
char* sline = (char*) aLine;
|
||||
|
||||
while( ( *sline != ' ' ) && *sline )
|
||||
sline++;
|
||||
|
||||
// sline points the start of parameters
|
||||
int ii = sscanf( sline, "%255s %d %d %d %d %255s %255s %d", Name1, &x, &y,
|
||||
&orient, &size, Name2, Name3, &thickness );
|
||||
|
||||
if( ii < 4 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file text load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !aLine.ReadLine() )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file text load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( size == 0 )
|
||||
size = GetDefaultTextSize();
|
||||
|
||||
char* text = strtok( (char*) aLine, "\n\r" );
|
||||
|
||||
if( text == NULL )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file text load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
wxString val = FROM_UTF8( text );
|
||||
|
||||
for( ; ; )
|
||||
{
|
||||
int i = val.find( wxT( "\\n" ) );
|
||||
|
||||
if( i == wxNOT_FOUND )
|
||||
break;
|
||||
|
||||
val.erase( i, 2 );
|
||||
val.insert( i, wxT( "\n" ) );
|
||||
}
|
||||
|
||||
m_Text = val;
|
||||
|
||||
SetTextSize( wxSize( size, size ) );
|
||||
SetTextPos( wxPoint( x, y ) );
|
||||
|
||||
SetLabelSpinStyle( orient );
|
||||
|
||||
if( isdigit( Name3[0] ) )
|
||||
{
|
||||
thickness = atol( Name3 );
|
||||
SetBold( thickness != 0 );
|
||||
SetThickness( IsBold() ? GetPenSizeForBold( size ) : 0 );
|
||||
}
|
||||
|
||||
if( strncasecmp( Name2, "Italic", 6 ) == 0 )
|
||||
SetItalic( true );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void SCH_TEXT::GetEndPoints( std::vector <DANGLING_END_ITEM>& aItemList )
|
||||
{
|
||||
// Normal text labels cannot be tested for dangling ends.
|
||||
|
@ -893,91 +775,6 @@ void SCH_LABEL::Rotate( wxPoint aPosition )
|
|||
}
|
||||
|
||||
|
||||
bool SCH_LABEL::Save( FILE* aFile ) const
|
||||
{
|
||||
bool success = true;
|
||||
const char* shape = "~";
|
||||
|
||||
if( IsItalic() )
|
||||
shape = "Italic";
|
||||
|
||||
if( fprintf( aFile, "Text Label %-4d %-4d %-4d %-4d %s %d\n%s\n",
|
||||
GetTextPos().x, GetTextPos().y, GetLabelSpinStyle(), GetTextWidth(), shape,
|
||||
GetThickness(), TO_UTF8( m_Text ) ) == EOF )
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_LABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||
{
|
||||
char Name1[256];
|
||||
char Name2[256];
|
||||
char Name3[256];
|
||||
int thickness = 0, size = 0, orient = 0;
|
||||
int x, y;
|
||||
|
||||
Name1[0] = 0; Name2[0] = 0; Name3[0] = 0;
|
||||
|
||||
char* sline = (char*) aLine;
|
||||
|
||||
while( ( *sline != ' ' ) && *sline )
|
||||
sline++;
|
||||
|
||||
// sline points the start of parameters
|
||||
int ii = sscanf( sline, "%255s %d %d %d %d %255s %255s %d", Name1, &x, &y,
|
||||
&orient, &size, Name2, Name3, &thickness );
|
||||
|
||||
if( ii < 4 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file label load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !aLine.ReadLine() )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file label load error atline %d" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( size == 0 )
|
||||
size = GetDefaultTextSize();
|
||||
|
||||
char* text = strtok( (char*) aLine, "\n\r" );
|
||||
|
||||
if( text == NULL )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file label load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
m_Text = FROM_UTF8( text );
|
||||
|
||||
SetTextSize( wxSize( size, size ) );
|
||||
SetTextPos( wxPoint( x, y ) );
|
||||
|
||||
SetLabelSpinStyle( orient );
|
||||
|
||||
if( isdigit( Name3[0] ) )
|
||||
{
|
||||
thickness = atol( Name3 );
|
||||
SetBold( thickness != 0 );
|
||||
SetThickness( IsBold() ? GetPenSizeForBold( size ) : 0 );
|
||||
}
|
||||
|
||||
if( strcasecmp( Name2, "Italic" ) == 0 )
|
||||
SetItalic( true );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void SCH_LABEL::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset,
|
||||
GR_DRAWMODE DrawMode, COLOR4D Color )
|
||||
{
|
||||
|
@ -1039,100 +836,6 @@ EDA_ITEM* SCH_GLOBALLABEL::Clone() const
|
|||
}
|
||||
|
||||
|
||||
bool SCH_GLOBALLABEL::Save( FILE* aFile ) const
|
||||
{
|
||||
bool success = true;
|
||||
const char* shape = "~";
|
||||
|
||||
if( IsItalic() )
|
||||
shape = "Italic";
|
||||
|
||||
if( fprintf( aFile, "Text GLabel %-4d %-4d %-4d %-4d %s %s %d\n%s\n",
|
||||
GetTextPos().x, GetTextPos().y, GetLabelSpinStyle(), GetTextWidth(),
|
||||
SheetLabelType[m_shape], shape, GetThickness(), TO_UTF8( m_Text ) ) == EOF )
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_GLOBALLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||
{
|
||||
char Name1[256];
|
||||
char Name2[256];
|
||||
char Name3[256];
|
||||
int thickness = 0, size = 0, orient = 0;
|
||||
int x, y;
|
||||
|
||||
Name1[0] = 0; Name2[0] = 0; Name3[0] = 0;
|
||||
|
||||
char* sline = (char*) aLine;
|
||||
|
||||
while( (*sline != ' ' ) && *sline )
|
||||
sline++;
|
||||
|
||||
// sline points the start of parameters
|
||||
int ii = sscanf( sline, "%255s %d %d %d %d %255s %255s %d", Name1, &x, &y,
|
||||
&orient, &size, Name2, Name3, &thickness );
|
||||
|
||||
if( ii < 4 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file global label load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !aLine.ReadLine() )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file global label load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( size == 0 )
|
||||
size = GetDefaultTextSize();
|
||||
|
||||
char* text = strtok( (char*) aLine, "\n\r" );
|
||||
|
||||
if( text == NULL )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file global label load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
m_Text = FROM_UTF8( text );
|
||||
|
||||
SetTextSize( wxSize( size, size ) );
|
||||
SetTextPos( wxPoint( x, y ) );
|
||||
|
||||
SetLabelSpinStyle( orient );
|
||||
|
||||
m_shape = NET_INPUT;
|
||||
SetBold( thickness != 0 );
|
||||
SetThickness( IsBold() ? GetPenSizeForBold( size ) : 0 );
|
||||
|
||||
if( strcasecmp( Name2, SheetLabelType[NET_OUTPUT] ) == 0 )
|
||||
m_shape = NET_OUTPUT;
|
||||
|
||||
if( strcasecmp( Name2, SheetLabelType[NET_BIDI] ) == 0 )
|
||||
m_shape = NET_BIDI;
|
||||
|
||||
if( strcasecmp( Name2, SheetLabelType[NET_TRISTATE] ) == 0 )
|
||||
m_shape = NET_TRISTATE;
|
||||
|
||||
if( strcasecmp( Name2, SheetLabelType[NET_UNSPECIFIED] ) == 0 )
|
||||
m_shape = NET_UNSPECIFIED;
|
||||
|
||||
if( strcasecmp( Name3, "Italic" ) == 0 )
|
||||
SetItalic( true );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void SCH_GLOBALLABEL::MirrorY( int aYaxis_position )
|
||||
{
|
||||
/* The global label is NOT really mirrored.
|
||||
|
@ -1503,101 +1206,6 @@ EDA_ITEM* SCH_HIERLABEL::Clone() const
|
|||
}
|
||||
|
||||
|
||||
bool SCH_HIERLABEL::Save( FILE* aFile ) const
|
||||
{
|
||||
bool success = true;
|
||||
const char* shape = "~";
|
||||
|
||||
if( IsItalic() )
|
||||
shape = "Italic";
|
||||
|
||||
if( fprintf( aFile, "Text HLabel %-4d %-4d %-4d %-4d %s %s %d\n%s\n",
|
||||
GetTextPos().x, GetTextPos().y, GetLabelSpinStyle(), GetTextWidth(),
|
||||
SheetLabelType[m_shape], shape, GetThickness(), TO_UTF8( m_Text ) ) == EOF )
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
bool SCH_HIERLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||
{
|
||||
char Name1[256];
|
||||
char Name2[256];
|
||||
char Name3[256];
|
||||
int thickness = 0, size = 0, orient = 0;
|
||||
int x, y;
|
||||
|
||||
Name1[0] = 0; Name2[0] = 0; Name3[0] = 0;
|
||||
|
||||
char* sline = (char*) aLine;
|
||||
|
||||
while( (*sline != ' ' ) && *sline )
|
||||
sline++;
|
||||
|
||||
// sline points the start of parameters
|
||||
int ii = sscanf( sline, "%255s %d %d %d %d %255s %255s %d", Name1,
|
||||
&x, &y,
|
||||
&orient, &size, Name2, Name3, &thickness );
|
||||
|
||||
if( ii < 4 )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file hierarchical label load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !aLine.ReadLine() )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file hierarchical label load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( size == 0 )
|
||||
size = GetDefaultTextSize();
|
||||
|
||||
char* text = strtok( (char*) aLine, "\n\r" );
|
||||
|
||||
if( text == NULL )
|
||||
{
|
||||
aErrorMsg.Printf( wxT( "Eeschema file hierarchical label load error at line %d" ),
|
||||
aLine.LineNumber() );
|
||||
return false;
|
||||
}
|
||||
|
||||
m_Text = FROM_UTF8( text );
|
||||
|
||||
SetTextSize( wxSize( size, size ) );
|
||||
SetTextPos( wxPoint( x, y ) );
|
||||
|
||||
SetLabelSpinStyle( orient );
|
||||
m_shape = NET_INPUT;
|
||||
SetBold( thickness != 0 );
|
||||
|
||||
SetThickness( IsBold() ? GetPenSizeForBold( size ) : 0 );
|
||||
|
||||
if( strcasecmp( Name2, SheetLabelType[NET_OUTPUT] ) == 0 )
|
||||
m_shape = NET_OUTPUT;
|
||||
|
||||
if( strcasecmp( Name2, SheetLabelType[NET_BIDI] ) == 0 )
|
||||
m_shape = NET_BIDI;
|
||||
|
||||
if( strcasecmp( Name2, SheetLabelType[NET_TRISTATE] ) == 0 )
|
||||
m_shape = NET_TRISTATE;
|
||||
|
||||
if( strcasecmp( Name2, SheetLabelType[NET_UNSPECIFIED] ) == 0 )
|
||||
m_shape = NET_UNSPECIFIED;
|
||||
|
||||
if( strcasecmp( Name3, "Italic" ) == 0 )
|
||||
SetItalic( true );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void SCH_HIERLABEL::SetLabelSpinStyle( int aSpinStyle )
|
||||
{
|
||||
m_spin_style = aSpinStyle;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2017 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
|
||||
|
@ -81,8 +81,7 @@ public:
|
|||
KICAD_T aType = SCH_TEXT_T );
|
||||
|
||||
/**
|
||||
* Copy Constructor
|
||||
* clones \a aText into a new object. All members are copied as is except
|
||||
* Clones \a aText into a new object. All members are copied as is except
|
||||
* for the #m_isDangling member which is set to false. This prevents newly
|
||||
* copied objects derived from #SCH_TEXT from having their connection state
|
||||
* improperly set.
|
||||
|
@ -97,17 +96,15 @@ public:
|
|||
}
|
||||
|
||||
/**
|
||||
* Function IncrementLabel
|
||||
* increments the label text, if it ends with a number.
|
||||
* @param aIncrement = the increment value to add to the number
|
||||
* ending the text
|
||||
* Increment the label text, if it ends with a number.
|
||||
*
|
||||
* @param aIncrement = the increment value to add to the number ending the text.
|
||||
*/
|
||||
void IncrementLabel( int aIncrement );
|
||||
|
||||
/**
|
||||
* Function SetLabelSpinStyle
|
||||
* sets a spin or rotation angle, along with specific horizontal and vertical
|
||||
* justification styles with each angle.
|
||||
* Set a spin or rotation angle, along with specific horizontal and vertical justification
|
||||
* styles with each angle.
|
||||
*
|
||||
* @param aSpinStyle =
|
||||
* 0 = normal (horizontal, left justified).
|
||||
|
@ -123,7 +120,6 @@ public:
|
|||
void SetShape( PINSHEETLABEL_SHAPE aShape ) { m_shape = aShape; }
|
||||
|
||||
/**
|
||||
* Function GetSchematicTextOffset (virtual)
|
||||
* @return the offset between the SCH_TEXT position and the text itself position
|
||||
*
|
||||
* This offset depends on the orientation, the type of text, and the area required to
|
||||
|
@ -135,8 +131,8 @@ public:
|
|||
GR_DRAWMODE draw_mode, COLOR4D Color = COLOR4D::UNSPECIFIED ) override;
|
||||
|
||||
/**
|
||||
* Function CreateGraphicShape
|
||||
* Calculates the graphic shape (a polygon) associated to the text
|
||||
* Calculate the graphic shape (a polygon) associated to the text.
|
||||
*
|
||||
* @param aPoints A buffer to fill with polygon corners coordinates
|
||||
* @param Pos Position of the shape, for texts and labels: do nothing
|
||||
* Mainly for derived classes (SCH_SHEET_PIN and Hierarchical labels)
|
||||
|
@ -150,10 +146,6 @@ public:
|
|||
|
||||
virtual const EDA_RECT GetBoundingBox() const override;
|
||||
|
||||
virtual bool Save( FILE* aFile ) const override;
|
||||
|
||||
virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg ) override;
|
||||
|
||||
virtual int GetPenSize() const override;
|
||||
|
||||
// Geometric transforms (used in block operations):
|
||||
|
@ -245,10 +237,6 @@ public:
|
|||
|
||||
const EDA_RECT GetBoundingBox() const override;
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
bool Load( LINE_READER& aLine, wxString& aErrorMsg ) override;
|
||||
|
||||
bool IsConnectable() const override { return true; }
|
||||
|
||||
wxString GetSelectMenuText() const override;
|
||||
|
@ -285,10 +273,6 @@ public:
|
|||
|
||||
wxPoint GetSchematicTextOffset() const override;
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
bool Load( LINE_READER& aLine, wxString& aErrorMsg ) override;
|
||||
|
||||
const EDA_RECT GetBoundingBox() const override;
|
||||
|
||||
void CreateGraphicShape( std::vector <wxPoint>& aPoints, const wxPoint& aPos ) override;
|
||||
|
@ -337,10 +321,6 @@ public:
|
|||
|
||||
void CreateGraphicShape( std::vector <wxPoint>& aPoints, const wxPoint& Pos ) override;
|
||||
|
||||
bool Save( FILE* aFile ) const override;
|
||||
|
||||
bool Load( LINE_READER& aLine, wxString& aErrorMsg ) override;
|
||||
|
||||
const EDA_RECT GetBoundingBox() const override;
|
||||
|
||||
void MirrorY( int aYaxis_position ) override;
|
||||
|
|
|
@ -703,19 +703,6 @@ public:
|
|||
*/
|
||||
bool AppendSchematic();
|
||||
|
||||
/**
|
||||
* Load the schematic (.sch) file \a aFullFileName into \a aScreen.
|
||||
*
|
||||
* @param aScreen Pointer to the associated SCH_SCREEN object in which to load
|
||||
* \a aFullFileName.
|
||||
* @param aFullFileName A reference to a wxString object containing the absolute path
|
||||
* and file name to load.
|
||||
* @param append True if loaded file is being appended to the currently open file instead
|
||||
* of replacing it.
|
||||
* @return True if \a aFullFileName has been loaded (at least partially.)
|
||||
*/
|
||||
bool LoadOneEEFile( SCH_SCREEN* aScreen, const wxString& aFullFileName, bool append = false );
|
||||
|
||||
/**
|
||||
* Loads a .cmp file from CvPcb and update the footprint field of components.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue