Encapsulate SCH_POLYLINE, SCH_SHEET, and SCH_TEXT classes.
This commit is contained in:
parent
eb52f4ba63
commit
1047e60e35
|
@ -1,8 +1,32 @@
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/*
|
||||||
// Name: build_BOM.cpp
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
// Author: jean-pierre Charras
|
*
|
||||||
// License: GPL license
|
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
* Copyright (C) 2011 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 build_BOM.cpp
|
||||||
|
* @brief Code used to generate bill of materials.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <algorithm> // to use sort vector
|
#include <algorithm> // to use sort vector
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -159,7 +183,7 @@ int PrintListeGLabel( FILE* f, LABEL_OBJECT_LIST& aList )
|
||||||
case SCH_SHEET_PIN_T:
|
case SCH_SHEET_PIN_T:
|
||||||
{
|
{
|
||||||
pinsheet = (SCH_SHEET_PIN*) aList[ii].m_Label;
|
pinsheet = (SCH_SHEET_PIN*) aList[ii].m_Label;
|
||||||
int jj = pinsheet->m_Shape;
|
int jj = pinsheet->GetShape();
|
||||||
|
|
||||||
if( jj < 0 )
|
if( jj < 0 )
|
||||||
jj = NET_TMAX;
|
jj = NET_TMAX;
|
||||||
|
|
|
@ -424,18 +424,18 @@ void SCH_EDIT_FRAME::DeleteCurrentSegment( wxDC* DC )
|
||||||
endpos = screen->GetCrossHairPosition();
|
endpos = screen->GetCrossHairPosition();
|
||||||
|
|
||||||
int idx = polyLine->GetCornerCount() - 1;
|
int idx = polyLine->GetCornerCount() - 1;
|
||||||
|
wxPoint pt = (*polyLine)[idx];
|
||||||
|
|
||||||
if( g_HVLines )
|
if( g_HVLines )
|
||||||
{
|
{
|
||||||
/* Coerce the line to vertical or horizontal one: */
|
/* Coerce the line to vertical or horizontal one: */
|
||||||
if( ABS( endpos.x - polyLine->m_PolyPoints[idx].x ) <
|
if( ABS( endpos.x - pt.x ) < ABS( endpos.y - pt.y ) )
|
||||||
ABS( endpos.y - polyLine->m_PolyPoints[idx].y ) )
|
endpos.x = pt.x;
|
||||||
endpos.x = polyLine->m_PolyPoints[idx].x;
|
|
||||||
else
|
else
|
||||||
endpos.y = polyLine->m_PolyPoints[idx].y;
|
endpos.y = pt.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
polyLine->m_PolyPoints[idx] = endpos;
|
polyLine->SetPoint( idx, endpos );
|
||||||
polyLine->Draw( DrawPanel, DC, wxPoint( 0, 0 ), g_XorMode );
|
polyLine->Draw( DrawPanel, DC, wxPoint( 0, 0 ), g_XorMode );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,10 +1,32 @@
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/*
|
||||||
// Name: dialog_edit_label.cpp
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
// Author: jean-pierre Charras
|
*
|
||||||
// Modified by:
|
* Copyright (C) 2008 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||||
// Created: 18/12/2008 15:46:26
|
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||||
// Licence: GPL
|
* 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 sch_text.h
|
||||||
|
* @brief Implementation of the label properties dialog.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "fctsys.h"
|
#include "fctsys.h"
|
||||||
#include "wx/valgen.h"
|
#include "wx/valgen.h"
|
||||||
|
@ -98,6 +120,7 @@ void DialogLabelEditor::InitDialog()
|
||||||
int MINTEXTWIDTH = 40; // M's are big characters, a few establish a lot of width
|
int MINTEXTWIDTH = 40; // M's are big characters, a few establish a lot of width
|
||||||
|
|
||||||
int max_len = 0;
|
int max_len = 0;
|
||||||
|
|
||||||
if ( !multiLine )
|
if ( !multiLine )
|
||||||
{
|
{
|
||||||
max_len =m_CurrentText->m_Text.Length();
|
max_len =m_CurrentText->m_Text.Length();
|
||||||
|
@ -108,6 +131,7 @@ void DialogLabelEditor::InitDialog()
|
||||||
// we cannot use the length of the entire text that has no meaning
|
// we cannot use the length of the entire text that has no meaning
|
||||||
int curr_len = MINTEXTWIDTH;
|
int curr_len = MINTEXTWIDTH;
|
||||||
int imax = m_CurrentText->m_Text.Len();
|
int imax = m_CurrentText->m_Text.Len();
|
||||||
|
|
||||||
for( int count = 0; count < imax; count++ )
|
for( int count = 0; count < imax; count++ )
|
||||||
{
|
{
|
||||||
if( m_CurrentText->m_Text[count] == '\n' ||
|
if( m_CurrentText->m_Text[count] == '\n' ||
|
||||||
|
@ -118,11 +142,13 @@ void DialogLabelEditor::InitDialog()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
curr_len++;
|
curr_len++;
|
||||||
|
|
||||||
if ( max_len < curr_len )
|
if ( max_len < curr_len )
|
||||||
max_len = curr_len;
|
max_len = curr_len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( max_len < MINTEXTWIDTH )
|
if( max_len < MINTEXTWIDTH )
|
||||||
max_len = MINTEXTWIDTH;
|
max_len = MINTEXTWIDTH;
|
||||||
|
|
||||||
|
@ -132,11 +158,13 @@ void DialogLabelEditor::InitDialog()
|
||||||
|
|
||||||
// Set validators
|
// Set validators
|
||||||
m_TextOrient->SetSelection( m_CurrentText->GetOrientation() );
|
m_TextOrient->SetSelection( m_CurrentText->GetOrientation() );
|
||||||
m_TextShape->SetSelection( m_CurrentText->m_Shape );
|
m_TextShape->SetSelection( m_CurrentText->GetShape() );
|
||||||
|
|
||||||
int style = 0;
|
int style = 0;
|
||||||
|
|
||||||
if( m_CurrentText->m_Italic )
|
if( m_CurrentText->m_Italic )
|
||||||
style = 1;
|
style = 1;
|
||||||
|
|
||||||
if( m_CurrentText->m_Bold )
|
if( m_CurrentText->m_Bold )
|
||||||
style += 2;
|
style += 2;
|
||||||
|
|
||||||
|
@ -203,6 +231,7 @@ void DialogLabelEditor::TextPropertiesAccept( wxCommandEvent& aEvent )
|
||||||
m_Parent->DrawPanel->RefreshDrawingRect( m_CurrentText->GetBoundingBox() );
|
m_Parent->DrawPanel->RefreshDrawingRect( m_CurrentText->GetBoundingBox() );
|
||||||
|
|
||||||
text = m_textLabel->GetValue();
|
text = m_textLabel->GetValue();
|
||||||
|
|
||||||
if( !text.IsEmpty() )
|
if( !text.IsEmpty() )
|
||||||
m_CurrentText->m_Text = text;
|
m_CurrentText->m_Text = text;
|
||||||
else if( (m_CurrentText->m_Flags & IS_NEW) == 0 )
|
else if( (m_CurrentText->m_Flags & IS_NEW) == 0 )
|
||||||
|
@ -212,10 +241,12 @@ void DialogLabelEditor::TextPropertiesAccept( wxCommandEvent& aEvent )
|
||||||
text = m_TextSize->GetValue();
|
text = m_TextSize->GetValue();
|
||||||
value = ReturnValueFromString( g_UserUnit, text, m_Parent->m_InternalUnits );
|
value = ReturnValueFromString( g_UserUnit, text, m_Parent->m_InternalUnits );
|
||||||
m_CurrentText->m_Size.x = m_CurrentText->m_Size.y = value;
|
m_CurrentText->m_Size.x = m_CurrentText->m_Size.y = value;
|
||||||
|
|
||||||
if( m_TextShape )
|
if( m_TextShape )
|
||||||
m_CurrentText->m_Shape = m_TextShape->GetSelection();
|
m_CurrentText->SetShape( m_TextShape->GetSelection() );
|
||||||
|
|
||||||
int style = m_TextStyle->GetSelection();
|
int style = m_TextStyle->GetSelection();
|
||||||
|
|
||||||
if( ( style & 1 ) )
|
if( ( style & 1 ) )
|
||||||
m_CurrentText->m_Italic = 1;
|
m_CurrentText->m_Italic = 1;
|
||||||
else
|
else
|
||||||
|
|
|
@ -87,12 +87,12 @@ SCH_TEXT* SCH_EDIT_FRAME::CreateNewText( wxDC* aDC, int aType )
|
||||||
|
|
||||||
case LAYER_HIERLABEL:
|
case LAYER_HIERLABEL:
|
||||||
textItem = new SCH_HIERLABEL( GetScreen()->GetCrossHairPosition() );
|
textItem = new SCH_HIERLABEL( GetScreen()->GetCrossHairPosition() );
|
||||||
textItem->m_Shape = lastGlobalLabelShape;
|
textItem->SetShape( lastGlobalLabelShape );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LAYER_GLOBLABEL:
|
case LAYER_GLOBLABEL:
|
||||||
textItem = new SCH_GLOBALLABEL( GetScreen()->GetCrossHairPosition() );
|
textItem = new SCH_GLOBALLABEL( GetScreen()->GetCrossHairPosition() );
|
||||||
textItem->m_Shape = lastGlobalLabelShape;
|
textItem->SetShape( lastGlobalLabelShape );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -121,7 +121,7 @@ SCH_TEXT* SCH_EDIT_FRAME::CreateNewText( wxDC* aDC, int aType )
|
||||||
|
|
||||||
if( (aType == SCH_GLOBAL_LABEL_T) || (aType == SCH_HIERARCHICAL_LABEL_T) )
|
if( (aType == SCH_GLOBAL_LABEL_T) || (aType == SCH_HIERARCHICAL_LABEL_T) )
|
||||||
{
|
{
|
||||||
lastGlobalLabelShape = textItem->m_Shape;
|
lastGlobalLabelShape = textItem->GetShape();
|
||||||
}
|
}
|
||||||
|
|
||||||
textItem->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE );
|
textItem->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE );
|
||||||
|
@ -207,7 +207,7 @@ void SCH_EDIT_FRAME::OnConvertTextType( wxCommandEvent& aEvent )
|
||||||
* text item type.
|
* text item type.
|
||||||
*/
|
*/
|
||||||
newtext->SetFlags( text->GetFlags() );
|
newtext->SetFlags( text->GetFlags() );
|
||||||
newtext->m_Shape = text->m_Shape;
|
newtext->SetShape( text->GetShape() );
|
||||||
newtext->SetOrientation( text->GetOrientation() );
|
newtext->SetOrientation( text->GetOrientation() );
|
||||||
newtext->m_Size = text->m_Size;
|
newtext->m_Size = text->m_Size;
|
||||||
newtext->m_Thickness = text->m_Thickness;
|
newtext->m_Thickness = text->m_Thickness;
|
||||||
|
|
|
@ -197,8 +197,8 @@ int TestDuplicateSheetNames( bool aCreateMarker )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// We have found a second sheet: compare names
|
// We have found a second sheet: compare names
|
||||||
if( ( (SCH_SHEET*) item )->m_SheetName.CmpNoCase(
|
if( ( (SCH_SHEET*) item )->GetName().CmpNoCase(
|
||||||
( ( SCH_SHEET* ) test_item )-> m_SheetName ) == 0 )
|
( ( SCH_SHEET* ) test_item )->GetName() ) == 0 )
|
||||||
{
|
{
|
||||||
if( aCreateMarker )
|
if( aCreateMarker )
|
||||||
{
|
{
|
||||||
|
@ -206,9 +206,9 @@ int TestDuplicateSheetNames( bool aCreateMarker )
|
||||||
SCH_MARKER* marker = new SCH_MARKER();
|
SCH_MARKER* marker = new SCH_MARKER();
|
||||||
marker->m_TimeStamp = GetNewTimeStamp();
|
marker->m_TimeStamp = GetNewTimeStamp();
|
||||||
marker->SetData( ERCE_DUPLICATE_SHEET_NAME,
|
marker->SetData( ERCE_DUPLICATE_SHEET_NAME,
|
||||||
( (SCH_SHEET*) test_item )->m_Pos,
|
( (SCH_SHEET*) test_item )->GetPosition(),
|
||||||
_( "Duplicate sheet name" ),
|
_( "Duplicate sheet name" ),
|
||||||
( (SCH_SHEET*) test_item )->m_Pos );
|
( (SCH_SHEET*) test_item )->GetPosition() );
|
||||||
marker->SetMarkerType( MARK_ERC );
|
marker->SetMarkerType( MARK_ERC );
|
||||||
marker->SetErrorLevel( ERR );
|
marker->SetErrorLevel( ERR );
|
||||||
marker->SetNext( screen->GetDrawItems() );
|
marker->SetNext( screen->GetDrawItems() );
|
||||||
|
|
|
@ -197,7 +197,7 @@ void HIERARCHY_NAVIG_DLG::BuildSheetsTree( SCH_SHEET_PATH* list, wxTreeItemId*
|
||||||
{
|
{
|
||||||
SCH_SHEET* sheet = (SCH_SHEET*) schitem;
|
SCH_SHEET* sheet = (SCH_SHEET*) schitem;
|
||||||
m_nbsheets++;
|
m_nbsheets++;
|
||||||
menu = m_Tree->AppendItem( *previousmenu, sheet->m_SheetName, 0, 1 );
|
menu = m_Tree->AppendItem( *previousmenu, sheet->GetName(), 0, 1 );
|
||||||
list->Push( sheet );
|
list->Push( sheet );
|
||||||
m_Tree->SetItemData( menu, new TreeItemData( *list ) );
|
m_Tree->SetItemData( menu, new TreeItemData( *list ) );
|
||||||
int ll = m_Tree->GetItemText( menu ).Len();
|
int ll = m_Tree->GetItemText( menu ).Len();
|
||||||
|
|
|
@ -1,6 +1,31 @@
|
||||||
/**********************/
|
/*
|
||||||
/* Class SCH_POLYLINE */
|
* 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) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||||
|
* Copyright (C) 2004-2011 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
|
||||||
|
* 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 sch_polyline.cpp
|
||||||
|
*/
|
||||||
|
|
||||||
#include "fctsys.h"
|
#include "fctsys.h"
|
||||||
#include "gr_basic.h"
|
#include "gr_basic.h"
|
||||||
|
@ -18,7 +43,7 @@
|
||||||
SCH_POLYLINE::SCH_POLYLINE( int layer ) :
|
SCH_POLYLINE::SCH_POLYLINE( int layer ) :
|
||||||
SCH_ITEM( NULL, SCH_POLYLINE_T )
|
SCH_ITEM( NULL, SCH_POLYLINE_T )
|
||||||
{
|
{
|
||||||
m_Width = 0;
|
m_width = 0;
|
||||||
|
|
||||||
switch( layer )
|
switch( layer )
|
||||||
{
|
{
|
||||||
|
@ -38,8 +63,8 @@ SCH_POLYLINE::SCH_POLYLINE( int layer ) :
|
||||||
SCH_POLYLINE::SCH_POLYLINE( const SCH_POLYLINE& aPolyLine ) :
|
SCH_POLYLINE::SCH_POLYLINE( const SCH_POLYLINE& aPolyLine ) :
|
||||||
SCH_ITEM( aPolyLine )
|
SCH_ITEM( aPolyLine )
|
||||||
{
|
{
|
||||||
m_Width = aPolyLine.m_Width;
|
m_width = aPolyLine.m_width;
|
||||||
m_PolyPoints = aPolyLine.m_PolyPoints;
|
m_points = aPolyLine.m_points;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,7 +99,7 @@ bool SCH_POLYLINE::Save( FILE* aFile ) const
|
||||||
|
|
||||||
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
|
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
|
||||||
{
|
{
|
||||||
if( fprintf( aFile, "\t%-4d %-4d\n", m_PolyPoints[ii ].x, m_PolyPoints[ii].y ) == EOF )
|
if( fprintf( aFile, "\t%-4d %-4d\n", m_points[ii ].x, m_points[ii].y ) == EOF )
|
||||||
{
|
{
|
||||||
success = false;
|
success = false;
|
||||||
break;
|
break;
|
||||||
|
@ -133,7 +158,7 @@ bool SCH_POLYLINE::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||||
|
|
||||||
int SCH_POLYLINE::GetPenSize() const
|
int SCH_POLYLINE::GetPenSize() const
|
||||||
{
|
{
|
||||||
int pensize = ( m_Width == 0 ) ? g_DrawDefaultLineThickness : m_Width;
|
int pensize = ( m_width == 0 ) ? g_DrawDefaultLineThickness : m_width;
|
||||||
|
|
||||||
return pensize;
|
return pensize;
|
||||||
}
|
}
|
||||||
|
@ -157,19 +182,19 @@ void SCH_POLYLINE::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffs
|
||||||
width *= 3;
|
width *= 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
GRMoveTo( m_PolyPoints[0].x, m_PolyPoints[0].y );
|
GRMoveTo( m_points[0].x, m_points[0].y );
|
||||||
|
|
||||||
if( m_Layer == LAYER_NOTES )
|
if( m_Layer == LAYER_NOTES )
|
||||||
{
|
{
|
||||||
for( unsigned i = 1; i < GetCornerCount(); i++ )
|
for( unsigned i = 1; i < GetCornerCount(); i++ )
|
||||||
GRDashedLineTo( &aPanel->m_ClipBox, aDC, m_PolyPoints[i].x + aOffset.x,
|
GRDashedLineTo( &aPanel->m_ClipBox, aDC, m_points[i].x + aOffset.x,
|
||||||
m_PolyPoints[i].y + aOffset.y, width, color );
|
m_points[i].y + aOffset.y, width, color );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for( unsigned i = 1; i < GetCornerCount(); i++ )
|
for( unsigned i = 1; i < GetCornerCount(); i++ )
|
||||||
GRLineTo( &aPanel->m_ClipBox, aDC, m_PolyPoints[i].x + aOffset.x,
|
GRLineTo( &aPanel->m_ClipBox, aDC, m_points[i].x + aOffset.x,
|
||||||
m_PolyPoints[i].y + aOffset.y, width, color );
|
m_points[i].y + aOffset.y, width, color );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,9 +203,9 @@ void SCH_POLYLINE::Mirror_X( int aXaxis_position )
|
||||||
{
|
{
|
||||||
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
|
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
|
||||||
{
|
{
|
||||||
m_PolyPoints[ii].y -= aXaxis_position;
|
m_points[ii].y -= aXaxis_position;
|
||||||
NEGATE( m_PolyPoints[ii].y );
|
NEGATE( m_points[ii].y );
|
||||||
m_PolyPoints[ii].y = aXaxis_position;
|
m_points[ii].y = aXaxis_position;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,9 +214,9 @@ void SCH_POLYLINE::Mirror_Y( int aYaxis_position )
|
||||||
{
|
{
|
||||||
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
|
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
|
||||||
{
|
{
|
||||||
m_PolyPoints[ii].x -= aYaxis_position;
|
m_points[ii].x -= aYaxis_position;
|
||||||
NEGATE( m_PolyPoints[ii].x );
|
NEGATE( m_points[ii].x );
|
||||||
m_PolyPoints[ii].x = aYaxis_position;
|
m_points[ii].x = aYaxis_position;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,7 +225,7 @@ void SCH_POLYLINE::Rotate( wxPoint rotationPoint )
|
||||||
{
|
{
|
||||||
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
|
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
|
||||||
{
|
{
|
||||||
RotatePoint( &m_PolyPoints[ii], rotationPoint, 900 );
|
RotatePoint( &m_points[ii], rotationPoint, 900 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -227,7 +252,7 @@ wxString SCH_POLYLINE::GetSelectMenuText() const
|
||||||
fmt = _( "Polyline on Unkown Layer with %d Points" );
|
fmt = _( "Polyline on Unkown Layer with %d Points" );
|
||||||
}
|
}
|
||||||
|
|
||||||
menuText.Printf( fmt, m_PolyPoints.size() );
|
menuText.Printf( fmt, m_points.size() );
|
||||||
|
|
||||||
return menuText;
|
return menuText;
|
||||||
}
|
}
|
||||||
|
@ -246,9 +271,9 @@ BITMAP_DEF SCH_POLYLINE::GetMenuImage() const
|
||||||
|
|
||||||
bool SCH_POLYLINE::doHitTest( const wxPoint& aPoint, int aAccuracy ) const
|
bool SCH_POLYLINE::doHitTest( const wxPoint& aPoint, int aAccuracy ) const
|
||||||
{
|
{
|
||||||
for( size_t i = 0; i < m_PolyPoints.size() - 1; i++ )
|
for( size_t i = 0; i < m_points.size() - 1; i++ )
|
||||||
{
|
{
|
||||||
if( TestSegmentHit( aPoint, m_PolyPoints[i], m_PolyPoints[i + 1], aAccuracy ) )
|
if( TestSegmentHit( aPoint, m_points[i], m_points[i + 1], aAccuracy ) )
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -271,9 +296,9 @@ bool SCH_POLYLINE::doHitTest( const EDA_RECT& aRect, bool aContained, int aAccur
|
||||||
|
|
||||||
void SCH_POLYLINE::doSetPosition( const wxPoint& aPosition )
|
void SCH_POLYLINE::doSetPosition( const wxPoint& aPosition )
|
||||||
{
|
{
|
||||||
wxPoint offset = m_PolyPoints[0] - aPosition;
|
wxPoint offset = m_points[0] - aPosition;
|
||||||
|
|
||||||
for( size_t i = 0; i < m_PolyPoints.size(); i++ )
|
for( size_t i = 0; i < m_points.size(); i++ )
|
||||||
m_PolyPoints[i] = m_PolyPoints[i] - offset;
|
m_points[i] = m_points[i] - offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,9 +37,8 @@
|
||||||
|
|
||||||
class SCH_POLYLINE : public SCH_ITEM
|
class SCH_POLYLINE : public SCH_ITEM
|
||||||
{
|
{
|
||||||
public:
|
int m_width; /* Thickness */
|
||||||
int m_Width; /* Thickness */
|
std::vector<wxPoint> m_points; // list of points (>= 2)
|
||||||
std::vector<wxPoint> m_PolyPoints; // list of points (>= 2)
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SCH_POLYLINE( int layer = LAYER_NOTES );
|
SCH_POLYLINE( int layer = LAYER_NOTES );
|
||||||
|
@ -77,19 +76,36 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function AddPoint
|
* Function AddPoint
|
||||||
* add a corner to m_PolyPoints
|
* add a corner to m_points
|
||||||
*/
|
*/
|
||||||
void AddPoint( const wxPoint& point )
|
void AddPoint( const wxPoint& point )
|
||||||
{
|
{
|
||||||
m_PolyPoints.push_back( point );
|
m_points.push_back( point );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function SetPoint
|
||||||
|
* sets the point at \a aIndex in the list to \a aPoint.
|
||||||
|
*
|
||||||
|
* @param aIndex The index in the point list.
|
||||||
|
* @param aPoint The new point value.
|
||||||
|
*/
|
||||||
|
void SetPoint( int aIndex, const wxPoint& aPoint )
|
||||||
|
{
|
||||||
|
// (unsigned) excludes aIndex<0 also
|
||||||
|
wxCHECK_RET( (unsigned)aIndex < m_points.size(),
|
||||||
|
wxT( "Invalid SCH_POLYLINE point list index." ) );
|
||||||
|
|
||||||
|
m_points[ aIndex ] = aPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetCornerCount
|
* Function GetCornerCount
|
||||||
* @return the number of corners
|
* @return the number of corners
|
||||||
*/
|
*/
|
||||||
|
unsigned GetCornerCount() const { return m_points.size(); }
|
||||||
unsigned GetCornerCount() const { return m_PolyPoints.size(); }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetPenSize
|
* Function GetPenSize
|
||||||
|
@ -105,7 +121,7 @@ public:
|
||||||
virtual void Move( const wxPoint& aMoveVector )
|
virtual void Move( const wxPoint& aMoveVector )
|
||||||
{
|
{
|
||||||
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
|
for( unsigned ii = 0; ii < GetCornerCount(); ii++ )
|
||||||
m_PolyPoints[ii] += aMoveVector;
|
m_points[ii] += aMoveVector;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -123,11 +139,26 @@ public:
|
||||||
|
|
||||||
virtual BITMAP_DEF GetMenuImage() const;
|
virtual BITMAP_DEF GetMenuImage() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function operator[]
|
||||||
|
* is used for read only access and returns the point at \a aIndex.
|
||||||
|
* @param aIndex The index of the list of points to return.
|
||||||
|
* @return A wxPoint object containing the point at \a aIndex.
|
||||||
|
*/
|
||||||
|
wxPoint operator[]( int aIndex ) const
|
||||||
|
{
|
||||||
|
// (unsigned) excludes aIndex<0 also
|
||||||
|
wxCHECK_MSG( (unsigned)aIndex < m_points.size(), wxDefaultPosition,
|
||||||
|
wxT( "Invalid SCH_POLYLINE point list index." ) );
|
||||||
|
|
||||||
|
return m_points[ aIndex ];
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy ) const;
|
virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy ) const;
|
||||||
virtual bool doHitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy ) const;
|
virtual bool doHitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy ) const;
|
||||||
virtual EDA_ITEM* doClone() const;
|
virtual EDA_ITEM* doClone() const;
|
||||||
virtual wxPoint doGetPosition() const { return m_PolyPoints[0]; }
|
virtual wxPoint doGetPosition() const { return m_points[0]; }
|
||||||
virtual void doSetPosition( const wxPoint& aPosition );
|
virtual void doSetPosition( const wxPoint& aPosition );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -720,7 +720,7 @@ SCH_SHEET* SCH_SCREEN::GetSheet( const wxString& aName )
|
||||||
|
|
||||||
SCH_SHEET* sheet = (SCH_SHEET*) item;
|
SCH_SHEET* sheet = (SCH_SHEET*) item;
|
||||||
|
|
||||||
if( aName.CmpNoCase( sheet->m_SheetName ) == 0 )
|
if( aName.CmpNoCase( sheet->GetName() ) == 0 )
|
||||||
return sheet;
|
return sheet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,50 +51,50 @@ SCH_SHEET::SCH_SHEET( const wxPoint& pos ) :
|
||||||
SCH_ITEM( NULL, SCH_SHEET_T )
|
SCH_ITEM( NULL, SCH_SHEET_T )
|
||||||
{
|
{
|
||||||
m_Layer = LAYER_SHEET;
|
m_Layer = LAYER_SHEET;
|
||||||
m_Pos = pos;
|
m_pos = pos;
|
||||||
m_Size = wxSize( MIN_SHEET_WIDTH, MIN_SHEET_HEIGHT );
|
m_size = wxSize( MIN_SHEET_WIDTH, MIN_SHEET_HEIGHT );
|
||||||
m_TimeStamp = GetNewTimeStamp();
|
m_TimeStamp = GetNewTimeStamp();
|
||||||
m_SheetNameSize = m_FileNameSize = 60;
|
m_sheetNameSize = m_fileNameSize = 60;
|
||||||
m_AssociatedScreen = NULL;
|
m_screen = NULL;
|
||||||
m_SheetName.Printf( wxT( "Sheet%8.8lX" ), m_TimeStamp );
|
m_name.Printf( wxT( "Sheet%8.8lX" ), m_TimeStamp );
|
||||||
m_FileName.Printf( wxT( "file%8.8lX.sch" ), m_TimeStamp );
|
m_fileName.Printf( wxT( "file%8.8lX.sch" ), m_TimeStamp );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SCH_SHEET::SCH_SHEET( const SCH_SHEET& aSheet ) :
|
SCH_SHEET::SCH_SHEET( const SCH_SHEET& aSheet ) :
|
||||||
SCH_ITEM( aSheet )
|
SCH_ITEM( aSheet )
|
||||||
{
|
{
|
||||||
m_Pos = aSheet.m_Pos;
|
m_pos = aSheet.m_pos;
|
||||||
m_Size = aSheet.m_Size;
|
m_size = aSheet.m_size;
|
||||||
m_Layer = aSheet.m_Layer;
|
m_Layer = aSheet.m_Layer;
|
||||||
m_TimeStamp = aSheet.m_TimeStamp;
|
m_TimeStamp = aSheet.m_TimeStamp;
|
||||||
m_SheetNameSize = aSheet.m_SheetNameSize;
|
m_sheetNameSize = aSheet.m_sheetNameSize;
|
||||||
m_FileNameSize = aSheet.m_FileNameSize;
|
m_fileNameSize = aSheet.m_fileNameSize;
|
||||||
m_AssociatedScreen = aSheet.m_AssociatedScreen;
|
m_screen = aSheet.m_screen;
|
||||||
m_SheetName = aSheet.m_SheetName;
|
m_name = aSheet.m_name;
|
||||||
m_FileName = aSheet.m_FileName;
|
m_fileName = aSheet.m_fileName;
|
||||||
m_pins = aSheet.m_pins;
|
m_pins = aSheet.m_pins;
|
||||||
|
|
||||||
for( size_t i = 0; i < m_pins.size(); i++ )
|
for( size_t i = 0; i < m_pins.size(); i++ )
|
||||||
m_pins[i].SetParent( this );
|
m_pins[i].SetParent( this );
|
||||||
|
|
||||||
if( m_AssociatedScreen )
|
if( m_screen )
|
||||||
m_AssociatedScreen->IncRefCount();
|
m_screen->IncRefCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SCH_SHEET::~SCH_SHEET()
|
SCH_SHEET::~SCH_SHEET()
|
||||||
{
|
{
|
||||||
wxLogDebug( wxT( "Destroying sheet " ) + m_SheetName );
|
wxLogDebug( wxT( "Destroying sheet " ) + m_name );
|
||||||
|
|
||||||
// also, look at the associated sheet & its reference count
|
// also, look at the associated sheet & its reference count
|
||||||
// perhaps it should be deleted also.
|
// perhaps it should be deleted also.
|
||||||
if( m_AssociatedScreen )
|
if( m_screen )
|
||||||
{
|
{
|
||||||
m_AssociatedScreen->DecRefCount();
|
m_screen->DecRefCount();
|
||||||
|
|
||||||
if( m_AssociatedScreen->GetRefCount() == 0 )
|
if( m_screen->GetRefCount() == 0 )
|
||||||
delete m_AssociatedScreen;
|
delete m_screen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,33 +107,33 @@ EDA_ITEM* SCH_SHEET::doClone() const
|
||||||
|
|
||||||
void SCH_SHEET::SetScreen( SCH_SCREEN* aScreen )
|
void SCH_SHEET::SetScreen( SCH_SCREEN* aScreen )
|
||||||
{
|
{
|
||||||
if( aScreen == m_AssociatedScreen )
|
if( aScreen == m_screen )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( m_AssociatedScreen != NULL )
|
if( m_screen != NULL )
|
||||||
{
|
{
|
||||||
m_AssociatedScreen->DecRefCount();
|
m_screen->DecRefCount();
|
||||||
|
|
||||||
if( m_AssociatedScreen->GetRefCount() == 0 )
|
if( m_screen->GetRefCount() == 0 )
|
||||||
{
|
{
|
||||||
delete m_AssociatedScreen;
|
delete m_screen;
|
||||||
m_AssociatedScreen = NULL;
|
m_screen = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_AssociatedScreen = aScreen;
|
m_screen = aScreen;
|
||||||
|
|
||||||
if( m_AssociatedScreen )
|
if( m_screen )
|
||||||
m_AssociatedScreen->IncRefCount();
|
m_screen->IncRefCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int SCH_SHEET::GetScreenCount() const
|
int SCH_SHEET::GetScreenCount() const
|
||||||
{
|
{
|
||||||
if( m_AssociatedScreen == NULL )
|
if( m_screen == NULL )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return m_AssociatedScreen->GetRefCount();
|
return m_screen->GetRefCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ bool SCH_SHEET::Save( FILE* aFile ) const
|
||||||
{
|
{
|
||||||
if( fprintf( aFile, "$Sheet\n" ) == EOF
|
if( fprintf( aFile, "$Sheet\n" ) == EOF
|
||||||
|| fprintf( aFile, "S %-4d %-4d %-4d %-4d\n",
|
|| fprintf( aFile, "S %-4d %-4d %-4d %-4d\n",
|
||||||
m_Pos.x, m_Pos.y, m_Size.x, m_Size.y ) == EOF )
|
m_pos.x, m_pos.y, m_size.x, m_size.y ) == EOF )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//save the unique timestamp, like other schematic parts.
|
//save the unique timestamp, like other schematic parts.
|
||||||
|
@ -149,17 +149,17 @@ bool SCH_SHEET::Save( FILE* aFile ) const
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Save schematic sheetname and filename. */
|
/* Save schematic sheetname and filename. */
|
||||||
if( !m_SheetName.IsEmpty() )
|
if( !m_name.IsEmpty() )
|
||||||
{
|
{
|
||||||
if( fprintf( aFile, "F0 %s %d\n", EscapedUTF8( m_SheetName ).c_str(),
|
if( fprintf( aFile, "F0 %s %d\n", EscapedUTF8( m_name ).c_str(),
|
||||||
m_SheetNameSize ) == EOF )
|
m_sheetNameSize ) == EOF )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !m_FileName.IsEmpty() )
|
if( !m_fileName.IsEmpty() )
|
||||||
{
|
{
|
||||||
if( fprintf( aFile, "F1 %s %d\n", EscapedUTF8( m_FileName ).c_str(),
|
if( fprintf( aFile, "F1 %s %d\n", EscapedUTF8( m_fileName ).c_str(),
|
||||||
m_FileNameSize ) == EOF )
|
m_fileNameSize ) == EOF )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ bool SCH_SHEET::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||||
/* Next line: must be "S xx yy nn mm" with xx, yy = sheet position
|
/* Next line: must be "S xx yy nn mm" with xx, yy = sheet position
|
||||||
* ( upper left corner ) et nn,mm = sheet size */
|
* ( upper left corner ) et nn,mm = sheet size */
|
||||||
if( ( sscanf( &((char*)aLine)[1], "%d %d %d %d",
|
if( ( sscanf( &((char*)aLine)[1], "%d %d %d %d",
|
||||||
&m_Pos.x, &m_Pos.y, &m_Size.x, &m_Size.y ) != 4 )
|
&m_pos.x, &m_pos.y, &m_size.x, &m_size.y ) != 4 )
|
||||||
|| ( ((char*)aLine)[0] != 'S' ) )
|
|| ( ((char*)aLine)[0] != 'S' ) )
|
||||||
{
|
{
|
||||||
aErrorMsg.Printf( wxT( " ** Eeschema file sheet struct error at line %d, aborted\n" ),
|
aErrorMsg.Printf( wxT( " ** Eeschema file sheet struct error at line %d, aborted\n" ),
|
||||||
|
@ -239,6 +239,7 @@ bool SCH_SHEET::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||||
* F1 and "text" for filename
|
* F1 and "text" for filename
|
||||||
*/
|
*/
|
||||||
ptcar = ((char*)aLine);
|
ptcar = ((char*)aLine);
|
||||||
|
|
||||||
while( *ptcar && ( *ptcar != '"' ) )
|
while( *ptcar && ( *ptcar != '"' ) )
|
||||||
ptcar++;
|
ptcar++;
|
||||||
|
|
||||||
|
@ -270,18 +271,19 @@ bool SCH_SHEET::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||||
|
|
||||||
aErrorMsg << FROM_UTF8( (char*) aLine );
|
aErrorMsg << FROM_UTF8( (char*) aLine );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( size == 0 )
|
if( size == 0 )
|
||||||
size = DEFAULT_SIZE_TEXT;
|
size = DEFAULT_SIZE_TEXT;
|
||||||
|
|
||||||
if( fieldNdx == 0 )
|
if( fieldNdx == 0 )
|
||||||
{
|
{
|
||||||
m_SheetName = sheetName;
|
m_name = sheetName;
|
||||||
m_SheetNameSize = size;
|
m_sheetNameSize = size;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetFileName( sheetName );
|
SetFileName( sheetName );
|
||||||
m_FileNameSize = size;
|
m_fileNameSize = size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -320,11 +322,11 @@ void SCH_SHEET::SwapData( SCH_ITEM* aItem )
|
||||||
|
|
||||||
SCH_SHEET* sheet = ( SCH_SHEET* ) aItem;
|
SCH_SHEET* sheet = ( SCH_SHEET* ) aItem;
|
||||||
|
|
||||||
EXCHG( m_Pos, sheet->m_Pos );
|
EXCHG( m_pos, sheet->m_pos );
|
||||||
EXCHG( m_Size, sheet->m_Size );
|
EXCHG( m_size, sheet->m_size );
|
||||||
EXCHG( m_SheetName, sheet->m_SheetName );
|
EXCHG( m_name, sheet->m_name );
|
||||||
EXCHG( m_SheetNameSize, sheet->m_SheetNameSize );
|
EXCHG( m_sheetNameSize, sheet->m_sheetNameSize );
|
||||||
EXCHG( m_FileNameSize, sheet->m_FileNameSize );
|
EXCHG( m_fileNameSize, sheet->m_fileNameSize );
|
||||||
m_pins.swap( sheet->m_pins );
|
m_pins.swap( sheet->m_pins );
|
||||||
|
|
||||||
// Ensure sheet labels have their .m_Parent member pointing really on their
|
// Ensure sheet labels have their .m_Parent member pointing really on their
|
||||||
|
@ -369,7 +371,7 @@ void SCH_SHEET::RemovePin( SCH_SHEET_PIN* aSheetPin )
|
||||||
}
|
}
|
||||||
|
|
||||||
wxLogDebug( wxT( "Fix me: attempt to remove label %s which is not in sheet %s." ),
|
wxLogDebug( wxT( "Fix me: attempt to remove label %s which is not in sheet %s." ),
|
||||||
GetChars( aSheetPin->m_Text ), GetChars( m_SheetName ) );
|
GetChars( aSheetPin->m_Text ), GetChars( m_name ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -401,7 +403,7 @@ bool SCH_SHEET::HasUndefinedPins()
|
||||||
BOOST_FOREACH( SCH_SHEET_PIN pin, m_pins )
|
BOOST_FOREACH( SCH_SHEET_PIN pin, m_pins )
|
||||||
{
|
{
|
||||||
/* Search the schematic for a hierarchical label corresponding to this sheet label. */
|
/* Search the schematic for a hierarchical label corresponding to this sheet label. */
|
||||||
EDA_ITEM* DrawStruct = m_AssociatedScreen->GetDrawItems();
|
EDA_ITEM* DrawStruct = m_screen->GetDrawItems();
|
||||||
SCH_HIERLABEL* HLabel = NULL;
|
SCH_HIERLABEL* HLabel = NULL;
|
||||||
|
|
||||||
for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Next() )
|
for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Next() )
|
||||||
|
@ -465,7 +467,7 @@ int SCH_SHEET::GetMinHeight() const
|
||||||
|
|
||||||
for( size_t i = 0; i < m_pins.size(); i++ )
|
for( size_t i = 0; i < m_pins.size(); i++ )
|
||||||
{
|
{
|
||||||
int pinY = m_pins[i].m_Pos.y - m_Pos.y;
|
int pinY = m_pins[i].m_Pos.y - m_pos.y;
|
||||||
|
|
||||||
if( pinY > height )
|
if( pinY > height )
|
||||||
height = pinY;
|
height = pinY;
|
||||||
|
@ -509,7 +511,7 @@ void SCH_SHEET::CleanupSheet()
|
||||||
while( i != m_pins.end() )
|
while( i != m_pins.end() )
|
||||||
{
|
{
|
||||||
/* Search the schematic for a hierarchical label corresponding to this sheet label. */
|
/* Search the schematic for a hierarchical label corresponding to this sheet label. */
|
||||||
EDA_ITEM* DrawStruct = m_AssociatedScreen->GetDrawItems();
|
EDA_ITEM* DrawStruct = m_screen->GetDrawItems();
|
||||||
SCH_HIERLABEL* HLabel = NULL;
|
SCH_HIERLABEL* HLabel = NULL;
|
||||||
|
|
||||||
for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Next() )
|
for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Next() )
|
||||||
|
@ -553,11 +555,12 @@ int SCH_SHEET::GetPenSize() const
|
||||||
|
|
||||||
wxPoint SCH_SHEET::GetSheetNamePosition()
|
wxPoint SCH_SHEET::GetSheetNamePosition()
|
||||||
{
|
{
|
||||||
wxPoint pos = m_Pos;
|
wxPoint pos = m_pos;
|
||||||
|
|
||||||
if( IsVerticalOrientation() )
|
if( IsVerticalOrientation() )
|
||||||
{
|
{
|
||||||
pos.x -= 8;
|
pos.x -= 8;
|
||||||
pos.y += m_Size.y;
|
pos.y += m_size.y;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -570,17 +573,17 @@ wxPoint SCH_SHEET::GetSheetNamePosition()
|
||||||
|
|
||||||
wxPoint SCH_SHEET::GetFileNamePosition()
|
wxPoint SCH_SHEET::GetFileNamePosition()
|
||||||
{
|
{
|
||||||
wxPoint pos = m_Pos;
|
wxPoint pos = m_pos;
|
||||||
int margin = GetPenSize() + 4;
|
int margin = GetPenSize() + 4;
|
||||||
|
|
||||||
if( IsVerticalOrientation() )
|
if( IsVerticalOrientation() )
|
||||||
{
|
{
|
||||||
pos.x += m_Size.x + margin;
|
pos.x += m_size.x + margin;
|
||||||
pos.y += m_Size.y;
|
pos.y += m_size.y;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pos.y += m_Size.y + margin;
|
pos.y += m_size.y + margin;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pos;
|
return pos;
|
||||||
|
@ -595,7 +598,7 @@ void SCH_SHEET::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
|
||||||
int color;
|
int color;
|
||||||
int name_orientation;
|
int name_orientation;
|
||||||
wxPoint pos_sheetname,pos_filename;
|
wxPoint pos_sheetname,pos_filename;
|
||||||
wxPoint pos = m_Pos + aOffset;
|
wxPoint pos = m_pos + aOffset;
|
||||||
int lineWidth = GetPenSize();
|
int lineWidth = GetPenSize();
|
||||||
|
|
||||||
if( aColor >= 0 )
|
if( aColor >= 0 )
|
||||||
|
@ -606,7 +609,7 @@ void SCH_SHEET::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
|
||||||
GRSetDrawMode( aDC, aDrawMode );
|
GRSetDrawMode( aDC, aDrawMode );
|
||||||
|
|
||||||
GRRect( &aPanel->m_ClipBox, aDC, pos.x, pos.y,
|
GRRect( &aPanel->m_ClipBox, aDC, pos.x, pos.y,
|
||||||
pos.x + m_Size.x, pos.y + m_Size.y, lineWidth, color );
|
pos.x + m_size.x, pos.y + m_size.y, lineWidth, color );
|
||||||
|
|
||||||
pos_sheetname = GetSheetNamePosition() + aOffset;
|
pos_sheetname = GetSheetNamePosition() + aOffset;
|
||||||
pos_filename = GetFileNamePosition() + aOffset;
|
pos_filename = GetFileNamePosition() + aOffset;
|
||||||
|
@ -622,10 +625,10 @@ void SCH_SHEET::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
|
||||||
else
|
else
|
||||||
txtcolor = ReturnLayerColor( LAYER_SHEETNAME );
|
txtcolor = ReturnLayerColor( LAYER_SHEETNAME );
|
||||||
|
|
||||||
Text = wxT( "Sheet: " ) + m_SheetName;
|
Text = wxT( "Sheet: " ) + m_name;
|
||||||
DrawGraphicText( aPanel, aDC, pos_sheetname,
|
DrawGraphicText( aPanel, aDC, pos_sheetname,
|
||||||
(EDA_Colors) txtcolor, Text, name_orientation,
|
(EDA_Colors) txtcolor, Text, name_orientation,
|
||||||
wxSize( m_SheetNameSize, m_SheetNameSize ),
|
wxSize( m_sheetNameSize, m_sheetNameSize ),
|
||||||
GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_BOTTOM, lineWidth,
|
GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_BOTTOM, lineWidth,
|
||||||
false, false );
|
false, false );
|
||||||
|
|
||||||
|
@ -635,10 +638,10 @@ void SCH_SHEET::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
|
||||||
else
|
else
|
||||||
txtcolor = ReturnLayerColor( LAYER_SHEETFILENAME );
|
txtcolor = ReturnLayerColor( LAYER_SHEETFILENAME );
|
||||||
|
|
||||||
Text = wxT( "File: " ) + m_FileName;
|
Text = wxT( "File: " ) + m_fileName;
|
||||||
DrawGraphicText( aPanel, aDC, pos_filename,
|
DrawGraphicText( aPanel, aDC, pos_filename,
|
||||||
(EDA_Colors) txtcolor, Text, name_orientation,
|
(EDA_Colors) txtcolor, Text, name_orientation,
|
||||||
wxSize( m_FileNameSize, m_FileNameSize ),
|
wxSize( m_fileNameSize, m_fileNameSize ),
|
||||||
GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_TOP, lineWidth,
|
GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_TOP, lineWidth,
|
||||||
false, false );
|
false, false );
|
||||||
|
|
||||||
|
@ -655,26 +658,26 @@ void SCH_SHEET::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
|
||||||
EDA_RECT SCH_SHEET::GetBoundingBox() const
|
EDA_RECT SCH_SHEET::GetBoundingBox() const
|
||||||
{
|
{
|
||||||
wxPoint end;
|
wxPoint end;
|
||||||
EDA_RECT box( m_Pos, m_Size );
|
EDA_RECT box( m_pos, m_size );
|
||||||
int lineWidth = GetPenSize();
|
int lineWidth = GetPenSize();
|
||||||
|
|
||||||
// Determine length of texts
|
// Determine length of texts
|
||||||
wxString text = wxT( "Sheet: " ) + m_SheetName;
|
wxString text = wxT( "Sheet: " ) + m_name;
|
||||||
int textlen = ReturnGraphicTextWidth( text, m_SheetNameSize, false, lineWidth );
|
int textlen = ReturnGraphicTextWidth( text, m_sheetNameSize, false, lineWidth );
|
||||||
text = wxT( "File: " ) + m_FileName;
|
text = wxT( "File: " ) + m_fileName;
|
||||||
int textlen2 = ReturnGraphicTextWidth( text, m_FileNameSize, false, lineWidth );
|
int textlen2 = ReturnGraphicTextWidth( text, m_fileNameSize, false, lineWidth );
|
||||||
|
|
||||||
// Calculate bounding box X size:
|
// Calculate bounding box X size:
|
||||||
textlen = MAX( textlen, textlen2 );
|
textlen = MAX( textlen, textlen2 );
|
||||||
end.x = MAX( m_Size.x, textlen );
|
end.x = MAX( m_size.x, textlen );
|
||||||
|
|
||||||
// Calculate bounding box pos:
|
// Calculate bounding box pos:
|
||||||
end.y = m_Size.y;
|
end.y = m_size.y;
|
||||||
end += m_Pos;
|
end += m_pos;
|
||||||
|
|
||||||
// Move upper and lower limits to include texts:
|
// Move upper and lower limits to include texts:
|
||||||
box.m_Pos.y -= wxRound( m_SheetNameSize * 1.3 ) + 8;
|
box.m_Pos.y -= wxRound( m_sheetNameSize * 1.3 ) + 8;
|
||||||
end.y += wxRound( m_FileNameSize * 1.3 ) + 8;
|
end.y += wxRound( m_fileNameSize * 1.3 ) + 8;
|
||||||
|
|
||||||
box.SetEnd( end );
|
box.SetEnd( end );
|
||||||
box.Inflate( lineWidth / 2 );
|
box.Inflate( lineWidth / 2 );
|
||||||
|
@ -687,11 +690,11 @@ int SCH_SHEET::ComponentCount()
|
||||||
{
|
{
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
if( m_AssociatedScreen )
|
if( m_screen )
|
||||||
{
|
{
|
||||||
EDA_ITEM* bs;
|
EDA_ITEM* bs;
|
||||||
|
|
||||||
for( bs = m_AssociatedScreen->GetDrawItems(); bs != NULL; bs = bs->Next() )
|
for( bs = m_screen->GetDrawItems(); bs != NULL; bs = bs->Next() )
|
||||||
{
|
{
|
||||||
if( bs->Type() == SCH_COMPONENT_T )
|
if( bs->Type() == SCH_COMPONENT_T )
|
||||||
{
|
{
|
||||||
|
@ -715,9 +718,9 @@ int SCH_SHEET::ComponentCount()
|
||||||
|
|
||||||
bool SCH_SHEET::SearchHierarchy( const wxString& aFilename, SCH_SCREEN** aScreen )
|
bool SCH_SHEET::SearchHierarchy( const wxString& aFilename, SCH_SCREEN** aScreen )
|
||||||
{
|
{
|
||||||
if( m_AssociatedScreen )
|
if( m_screen )
|
||||||
{
|
{
|
||||||
EDA_ITEM* item = m_AssociatedScreen->GetDrawItems();
|
EDA_ITEM* item = m_screen->GetDrawItems();
|
||||||
|
|
||||||
while( item )
|
while( item )
|
||||||
{
|
{
|
||||||
|
@ -725,10 +728,10 @@ bool SCH_SHEET::SearchHierarchy( const wxString& aFilename, SCH_SCREEN** aScreen
|
||||||
{
|
{
|
||||||
SCH_SHEET* sheet = (SCH_SHEET*) item;
|
SCH_SHEET* sheet = (SCH_SHEET*) item;
|
||||||
|
|
||||||
if( sheet->m_AssociatedScreen
|
if( sheet->m_screen
|
||||||
&& sheet->m_AssociatedScreen->GetFileName().CmpNoCase( aFilename ) == 0 )
|
&& sheet->m_screen->GetFileName().CmpNoCase( aFilename ) == 0 )
|
||||||
{
|
{
|
||||||
*aScreen = sheet->m_AssociatedScreen;
|
*aScreen = sheet->m_screen;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -746,14 +749,14 @@ bool SCH_SHEET::SearchHierarchy( const wxString& aFilename, SCH_SCREEN** aScreen
|
||||||
|
|
||||||
bool SCH_SHEET::LocatePathOfScreen( SCH_SCREEN* aScreen, SCH_SHEET_PATH* aList )
|
bool SCH_SHEET::LocatePathOfScreen( SCH_SCREEN* aScreen, SCH_SHEET_PATH* aList )
|
||||||
{
|
{
|
||||||
if( m_AssociatedScreen )
|
if( m_screen )
|
||||||
{
|
{
|
||||||
aList->Push( this );
|
aList->Push( this );
|
||||||
|
|
||||||
if( m_AssociatedScreen == aScreen )
|
if( m_screen == aScreen )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
EDA_ITEM* strct = m_AssociatedScreen->GetDrawItems();
|
EDA_ITEM* strct = m_screen->GetDrawItems();
|
||||||
|
|
||||||
while( strct )
|
while( strct )
|
||||||
{
|
{
|
||||||
|
@ -778,10 +781,10 @@ bool SCH_SHEET::Load( SCH_EDIT_FRAME* aFrame )
|
||||||
{
|
{
|
||||||
bool success = true;
|
bool success = true;
|
||||||
|
|
||||||
if( !m_AssociatedScreen )
|
if( !m_screen )
|
||||||
{
|
{
|
||||||
SCH_SCREEN* screen = NULL;
|
SCH_SCREEN* screen = NULL;
|
||||||
g_RootSheet->SearchHierarchy( m_FileName, &screen );
|
g_RootSheet->SearchHierarchy( m_fileName, &screen );
|
||||||
|
|
||||||
if( screen )
|
if( screen )
|
||||||
{
|
{
|
||||||
|
@ -792,11 +795,11 @@ bool SCH_SHEET::Load( SCH_EDIT_FRAME* aFrame )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetScreen( new SCH_SCREEN() );
|
SetScreen( new SCH_SCREEN() );
|
||||||
success = aFrame->LoadOneEEFile( m_AssociatedScreen, m_FileName );
|
success = aFrame->LoadOneEEFile( m_screen, m_fileName );
|
||||||
|
|
||||||
if( success )
|
if( success )
|
||||||
{
|
{
|
||||||
EDA_ITEM* bs = m_AssociatedScreen->GetDrawItems();
|
EDA_ITEM* bs = m_screen->GetDrawItems();
|
||||||
|
|
||||||
while( bs )
|
while( bs )
|
||||||
{
|
{
|
||||||
|
@ -822,9 +825,9 @@ int SCH_SHEET::CountSheets()
|
||||||
{
|
{
|
||||||
int count = 1; //1 = this!!
|
int count = 1; //1 = this!!
|
||||||
|
|
||||||
if( m_AssociatedScreen )
|
if( m_screen )
|
||||||
{
|
{
|
||||||
EDA_ITEM* strct = m_AssociatedScreen->GetDrawItems();
|
EDA_ITEM* strct = m_screen->GetDrawItems();
|
||||||
|
|
||||||
for( ; strct; strct = strct->Next() )
|
for( ; strct; strct = strct->Next() )
|
||||||
{
|
{
|
||||||
|
@ -841,18 +844,19 @@ int SCH_SHEET::CountSheets()
|
||||||
|
|
||||||
wxString SCH_SHEET::GetFileName( void ) const
|
wxString SCH_SHEET::GetFileName( void ) const
|
||||||
{
|
{
|
||||||
return m_FileName;
|
return m_fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_SHEET::DisplayInfo( EDA_DRAW_FRAME* frame )
|
void SCH_SHEET::DisplayInfo( EDA_DRAW_FRAME* frame )
|
||||||
{
|
{
|
||||||
frame->ClearMsgPanel();
|
frame->ClearMsgPanel();
|
||||||
frame->AppendMsgPanel( _( "Sheet name" ), m_SheetName, CYAN );
|
frame->AppendMsgPanel( _( "Sheet name" ), m_name, CYAN );
|
||||||
frame->AppendMsgPanel( _( "File name" ), m_FileName, BROWN );
|
frame->AppendMsgPanel( _( "File name" ), m_fileName, BROWN );
|
||||||
|
|
||||||
#if 0 // Set to 1 to display the sheet time stamp (mainly for test)
|
#if 0 // Set to 1 to display the sheet time stamp (mainly for test)
|
||||||
wxString msg;
|
wxString msg;
|
||||||
msg.Printf(wxT("%.8X"), m_TimeStamp );
|
msg.Printf( wxT( "%.8X" ), m_TimeStamp );
|
||||||
frame->AppendMsgPanel( _( "Time Stamp" ), msg, BLUE );
|
frame->AppendMsgPanel( _( "Time Stamp" ), msg, BLUE );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -860,19 +864,19 @@ void SCH_SHEET::DisplayInfo( EDA_DRAW_FRAME* frame )
|
||||||
|
|
||||||
void SCH_SHEET::Rotate(wxPoint rotationPoint)
|
void SCH_SHEET::Rotate(wxPoint rotationPoint)
|
||||||
{
|
{
|
||||||
RotatePoint( &m_Pos, rotationPoint, 900 );
|
RotatePoint( &m_pos, rotationPoint, 900 );
|
||||||
RotatePoint( &m_Size.x, &m_Size.y, 900 );
|
RotatePoint( &m_size.x, &m_size.y, 900 );
|
||||||
|
|
||||||
if( m_Size.x < 0 )
|
if( m_size.x < 0 )
|
||||||
{
|
{
|
||||||
m_Pos.x += m_Size.x;
|
m_pos.x += m_size.x;
|
||||||
NEGATE( m_Size.x );
|
NEGATE( m_size.x );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_Size.y < 0 )
|
if( m_size.y < 0 )
|
||||||
{
|
{
|
||||||
m_Pos.y += m_Size.y;
|
m_pos.y += m_size.y;
|
||||||
NEGATE( m_Size.y );
|
NEGATE( m_size.y );
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_pins )
|
BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_pins )
|
||||||
|
@ -884,10 +888,10 @@ void SCH_SHEET::Rotate(wxPoint rotationPoint)
|
||||||
|
|
||||||
void SCH_SHEET::Mirror_X( int aXaxis_position )
|
void SCH_SHEET::Mirror_X( int aXaxis_position )
|
||||||
{
|
{
|
||||||
m_Pos.y -= aXaxis_position;
|
m_pos.y -= aXaxis_position;
|
||||||
NEGATE( m_Pos.y );
|
NEGATE( m_pos.y );
|
||||||
m_Pos.y += aXaxis_position;
|
m_pos.y += aXaxis_position;
|
||||||
m_Pos.y -= m_Size.y;
|
m_pos.y -= m_size.y;
|
||||||
|
|
||||||
BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_pins )
|
BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_pins )
|
||||||
{
|
{
|
||||||
|
@ -898,10 +902,10 @@ void SCH_SHEET::Mirror_X( int aXaxis_position )
|
||||||
|
|
||||||
void SCH_SHEET::Mirror_Y( int aYaxis_position )
|
void SCH_SHEET::Mirror_Y( int aYaxis_position )
|
||||||
{
|
{
|
||||||
m_Pos.x -= aYaxis_position;
|
m_pos.x -= aYaxis_position;
|
||||||
NEGATE( m_Pos.x );
|
NEGATE( m_pos.x );
|
||||||
m_Pos.x += aYaxis_position;
|
m_pos.x += aYaxis_position;
|
||||||
m_Pos.x -= m_Size.x;
|
m_pos.x -= m_size.x;
|
||||||
|
|
||||||
BOOST_FOREACH( SCH_SHEET_PIN& label, m_pins )
|
BOOST_FOREACH( SCH_SHEET_PIN& label, m_pins )
|
||||||
{
|
{
|
||||||
|
@ -912,10 +916,10 @@ void SCH_SHEET::Mirror_Y( int aYaxis_position )
|
||||||
|
|
||||||
void SCH_SHEET::Resize( const wxSize& aSize )
|
void SCH_SHEET::Resize( const wxSize& aSize )
|
||||||
{
|
{
|
||||||
if( aSize == m_Size )
|
if( aSize == m_size )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_Size = aSize;
|
m_size = aSize;
|
||||||
|
|
||||||
/* Move the sheet labels according to the new sheet size. */
|
/* Move the sheet labels according to the new sheet size. */
|
||||||
BOOST_FOREACH( SCH_SHEET_PIN& label, m_pins )
|
BOOST_FOREACH( SCH_SHEET_PIN& label, m_pins )
|
||||||
|
@ -929,7 +933,7 @@ bool SCH_SHEET::Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint
|
||||||
{
|
{
|
||||||
wxLogTrace( traceFindReplace, wxT( " item " ) + GetSelectMenuText() );
|
wxLogTrace( traceFindReplace, wxT( " item " ) + GetSelectMenuText() );
|
||||||
|
|
||||||
if( SCH_ITEM::Matches( m_FileName, aSearchData ) )
|
if( SCH_ITEM::Matches( m_fileName, aSearchData ) )
|
||||||
{
|
{
|
||||||
if( aFindLocation )
|
if( aFindLocation )
|
||||||
*aFindLocation = GetFileNamePosition();
|
*aFindLocation = GetFileNamePosition();
|
||||||
|
@ -937,7 +941,7 @@ bool SCH_SHEET::Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( SCH_ITEM::Matches( m_SheetName, aSearchData ) )
|
if( SCH_ITEM::Matches( m_name, aSearchData ) )
|
||||||
{
|
{
|
||||||
if( aFindLocation )
|
if( aFindLocation )
|
||||||
*aFindLocation = GetSheetNamePosition();
|
*aFindLocation = GetSheetNamePosition();
|
||||||
|
@ -1056,7 +1060,7 @@ SEARCH_RESULT SCH_SHEET::Visit( INSPECTOR* aInspector, const void* aTestData,
|
||||||
wxString SCH_SHEET::GetSelectMenuText() const
|
wxString SCH_SHEET::GetSelectMenuText() const
|
||||||
{
|
{
|
||||||
wxString tmp;
|
wxString tmp;
|
||||||
tmp.Printf( _( "Hierarchical Sheet %s" ), GetChars( m_SheetName ) );
|
tmp.Printf( _( "Hierarchical Sheet %s" ), GetChars( m_name ) );
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1086,7 +1090,7 @@ bool SCH_SHEET::doHitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy
|
||||||
|
|
||||||
wxPoint SCH_SHEET::GetResizePosition() const
|
wxPoint SCH_SHEET::GetResizePosition() const
|
||||||
{
|
{
|
||||||
return wxPoint( m_Pos.x + m_Size.GetWidth(), m_Pos.y + m_Size.GetHeight() );
|
return wxPoint( m_pos.x + m_size.GetWidth(), m_pos.y + m_size.GetHeight() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1104,7 +1108,7 @@ void SCH_SHEET::GetNetListItem( vector<NETLIST_OBJECT*>& aNetListItems,
|
||||||
item->m_Comp = &m_pins[i];
|
item->m_Comp = &m_pins[i];
|
||||||
item->m_Link = this;
|
item->m_Link = this;
|
||||||
item->m_Type = NET_SHEETLABEL;
|
item->m_Type = NET_SHEETLABEL;
|
||||||
item->m_ElectricalType = m_pins[i].m_Shape;
|
item->m_ElectricalType = m_pins[i].GetShape();
|
||||||
item->m_Label = m_pins[i].m_Text;
|
item->m_Label = m_pins[i].m_Text;
|
||||||
item->m_Start = item->m_End = m_pins[i].m_Pos;
|
item->m_Start = item->m_End = m_pins[i].m_Pos;
|
||||||
aNetListItems.push_back( item );
|
aNetListItems.push_back( item );
|
||||||
|
@ -1129,37 +1133,38 @@ void SCH_SHEET::doPlot( PLOTTER* aPlotter )
|
||||||
int thickness = GetPenSize();
|
int thickness = GetPenSize();
|
||||||
aPlotter->set_current_line_width( thickness );
|
aPlotter->set_current_line_width( thickness );
|
||||||
|
|
||||||
aPlotter->move_to( m_Pos );
|
aPlotter->move_to( m_pos );
|
||||||
pos = m_Pos;
|
pos = m_pos;
|
||||||
pos.x += m_Size.x;
|
pos.x += m_size.x;
|
||||||
|
|
||||||
aPlotter->line_to( pos );
|
aPlotter->line_to( pos );
|
||||||
pos.y += m_Size.y;
|
pos.y += m_size.y;
|
||||||
|
|
||||||
aPlotter->line_to( pos );
|
aPlotter->line_to( pos );
|
||||||
pos = m_Pos;
|
pos = m_pos;
|
||||||
pos.y += m_Size.y;
|
pos.y += m_size.y;
|
||||||
|
|
||||||
aPlotter->line_to( pos );
|
aPlotter->line_to( pos );
|
||||||
aPlotter->finish_to( m_Pos );
|
aPlotter->finish_to( m_pos );
|
||||||
|
|
||||||
if( IsVerticalOrientation() )
|
if( IsVerticalOrientation() )
|
||||||
{
|
{
|
||||||
pos_sheetname = wxPoint( m_Pos.x - 8, m_Pos.y + m_Size.y );
|
pos_sheetname = wxPoint( m_pos.x - 8, m_pos.y + m_size.y );
|
||||||
pos_filename = wxPoint( m_Pos.x + m_Size.x + 4, m_Pos.y + m_Size.y );
|
pos_filename = wxPoint( m_pos.x + m_size.x + 4, m_pos.y + m_size.y );
|
||||||
name_orientation = TEXT_ORIENT_VERT;
|
name_orientation = TEXT_ORIENT_VERT;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pos_sheetname = wxPoint( m_Pos.x, m_Pos.y - 4 );
|
pos_sheetname = wxPoint( m_pos.x, m_pos.y - 4 );
|
||||||
pos_filename = wxPoint( m_Pos.x, m_Pos.y + m_Size.y + 4 );
|
pos_filename = wxPoint( m_pos.x, m_pos.y + m_size.y + 4 );
|
||||||
name_orientation = TEXT_ORIENT_HORIZ;
|
name_orientation = TEXT_ORIENT_HORIZ;
|
||||||
}
|
}
|
||||||
/* Draw texts: SheetName */
|
|
||||||
Text = m_SheetName;
|
|
||||||
size = wxSize( m_SheetNameSize, m_SheetNameSize );
|
|
||||||
|
|
||||||
//pos = m_Pos; pos.y -= 4;
|
/* Draw texts: SheetName */
|
||||||
|
Text = m_name;
|
||||||
|
size = wxSize( m_sheetNameSize, m_sheetNameSize );
|
||||||
|
|
||||||
|
//pos = m_pos; pos.y -= 4;
|
||||||
thickness = g_DrawDefaultLineThickness;
|
thickness = g_DrawDefaultLineThickness;
|
||||||
thickness = Clamp_Text_PenSize( thickness, size, false );
|
thickness = Clamp_Text_PenSize( thickness, size, false );
|
||||||
|
|
||||||
|
@ -1172,7 +1177,7 @@ void SCH_SHEET::doPlot( PLOTTER* aPlotter )
|
||||||
|
|
||||||
/*Draw texts : FileName */
|
/*Draw texts : FileName */
|
||||||
Text = GetFileName();
|
Text = GetFileName();
|
||||||
size = wxSize( m_FileNameSize, m_FileNameSize );
|
size = wxSize( m_fileNameSize, m_fileNameSize );
|
||||||
thickness = g_DrawDefaultLineThickness;
|
thickness = g_DrawDefaultLineThickness;
|
||||||
thickness = Clamp_Text_PenSize( thickness, size, false );
|
thickness = Clamp_Text_PenSize( thickness, size, false );
|
||||||
|
|
||||||
|
@ -1200,7 +1205,7 @@ void SCH_SHEET::Show( int nestLevel, std::ostream& os )
|
||||||
wxString s = GetClass();
|
wxString s = GetClass();
|
||||||
|
|
||||||
NestedSpace( nestLevel, os ) << '<' << s.Lower().mb_str() << ">" << " sheet_name=\""
|
NestedSpace( nestLevel, os ) << '<' << s.Lower().mb_str() << ">" << " sheet_name=\""
|
||||||
<< TO_UTF8( m_SheetName ) << '"' << ">\n";
|
<< TO_UTF8( m_name ) << '"' << ">\n";
|
||||||
|
|
||||||
// show all the pins, and check the linked list integrity
|
// show all the pins, and check the linked list integrity
|
||||||
BOOST_FOREACH( SCH_SHEET_PIN& label, m_pins )
|
BOOST_FOREACH( SCH_SHEET_PIN& label, m_pins )
|
||||||
|
|
|
@ -28,8 +28,8 @@
|
||||||
* @brief Definition of the SCH_SHEET class for Eeschema.
|
* @brief Definition of the SCH_SHEET class for Eeschema.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CLASS_DRAWSHEET_H
|
#ifndef SCH_SHEEET_H
|
||||||
#define CLASS_DRAWSHEET_H
|
#define SCH_SHEEET_H
|
||||||
|
|
||||||
#include <boost/ptr_container/ptr_vector.hpp>
|
#include <boost/ptr_container/ptr_vector.hpp>
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
|
@ -50,7 +50,8 @@ class SCH_EDIT_FRAME;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pin (label) used in sheets to create hierarchical schematics.
|
* Class SCH_SHEET_PIN
|
||||||
|
* defines 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
|
* 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
|
* pin is used in a component. It connects the objects in the sheet object
|
||||||
|
@ -59,23 +60,24 @@ class SCH_EDIT_FRAME;
|
||||||
* connected to a wire, bus, or label. In the schematic page represented by
|
* connected to a wire, bus, or label. In the schematic page represented by
|
||||||
* the sheet, it corresponds to a hierarchical label.
|
* the sheet, it corresponds to a hierarchical label.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class SCH_SHEET_PIN : public SCH_HIERLABEL
|
class SCH_SHEET_PIN : public SCH_HIERLABEL
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
int m_Number; ///< Label number use for saving sheet label to file.
|
int m_number; ///< Label number use for saving sheet label to file.
|
||||||
///< Sheet label numbering begins at 2.
|
///< Sheet label numbering begins at 2.
|
||||||
///< 0 is reserved for the sheet name.
|
///< 0 is reserved for the sheet name.
|
||||||
///< 1 is reserve for the sheet file name.
|
///< 1 is reserve for the sheet file name.
|
||||||
int m_Edge; /* For pin labels only: sheet edge (0 to 3) of the pin
|
|
||||||
* m_Edge define on which edge the pin is positioned:
|
/**
|
||||||
* 0: pin on left side
|
* Defines the edge of the sheet that the sheet pin is positioned
|
||||||
* 1: pin on right side
|
* 0: pin on left side
|
||||||
* 2: pin on top side
|
* 1: pin on right side
|
||||||
* 3: pin on bottom side
|
* 2: pin on top side
|
||||||
* for compatibility reasons, this does not follow same values as text
|
* 3: pin on bottom side
|
||||||
* orientation.
|
*
|
||||||
*/
|
* For compatibility reasons, this does not follow same values as text orientation.
|
||||||
|
*/
|
||||||
|
int m_edge;
|
||||||
|
|
||||||
virtual EDA_ITEM* doClone() const;
|
virtual EDA_ITEM* doClone() const;
|
||||||
|
|
||||||
|
@ -118,7 +120,7 @@ public:
|
||||||
*
|
*
|
||||||
* @return Number of the sheet label.
|
* @return Number of the sheet label.
|
||||||
*/
|
*/
|
||||||
int GetNumber() const { return m_Number; }
|
int GetNumber() const { return m_number; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the sheet label number.
|
* Set the sheet label number.
|
||||||
|
@ -202,15 +204,7 @@ public:
|
||||||
virtual void Mirror_X( int aXaxis_position );
|
virtual void Mirror_X( int aXaxis_position );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function Matches
|
* @copydoc EDA_ITEM::Matches(wxFindReplaceData&,void*,wxPoint*)
|
||||||
* Compare hierarchical pin name against search string.
|
|
||||||
*
|
|
||||||
* @param aSearchData - Criteria to search against.
|
|
||||||
* @param aAuxData - a pointer on auxiliary data, if needed.
|
|
||||||
* When searching string in REFERENCE field we must know the sheet path
|
|
||||||
* This param is used in this case
|
|
||||||
* @param aFindLocation - a wxPoint where to put the location of matched item. can be NULL.
|
|
||||||
* @return True if this item matches the search criteria.
|
|
||||||
*/
|
*/
|
||||||
virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
|
virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
|
||||||
|
|
||||||
|
@ -233,33 +227,40 @@ private:
|
||||||
typedef boost::ptr_vector<SCH_SHEET_PIN> SCH_SHEET_PINS;
|
typedef boost::ptr_vector<SCH_SHEET_PIN> SCH_SHEET_PINS;
|
||||||
|
|
||||||
|
|
||||||
/* class SCH_SHEET
|
/**
|
||||||
* This class is the sheet symbol placed in a schematic, and is the entry point
|
* Class SCH_SHEET
|
||||||
* for a sub schematic
|
* is the sheet symbol placed in a schematic, and is the entry point for a sub schematic.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class SCH_SHEET : public SCH_ITEM
|
class SCH_SHEET : public SCH_ITEM
|
||||||
{
|
{
|
||||||
SCH_SCREEN* m_AssociatedScreen; ///< Screen that contains the physical data for
|
/// Screen that contains the physical data for the sheet. In complex hierarchies
|
||||||
///< the sheet. In complex hierarchies multiple
|
/// multiple sheets can share a common screen.
|
||||||
///< sheets can share a common screen.
|
SCH_SCREEN* m_screen;
|
||||||
SCH_SHEET_PINS m_pins; ///< List of sheet connection points.
|
|
||||||
wxString m_FileName; /* also in SCH_SCREEN (redundant),
|
|
||||||
* but need it here for loading after
|
|
||||||
* reading the sheet description from
|
|
||||||
* file. */
|
|
||||||
|
|
||||||
public:
|
/// The list of sheet connection points.
|
||||||
wxString m_SheetName; /* this is equivalent to C101 for
|
SCH_SHEET_PINS m_pins;
|
||||||
* components: it is stored in F0 ...
|
|
||||||
* of the file. */
|
/// The file name is also in the #SCH_SCREEN object associated with the sheet. It is
|
||||||
public:
|
/// also needed here for loading after reading the sheet description from file.
|
||||||
int m_SheetNameSize; /* Size (height) of the text, used to
|
wxString m_fileName;
|
||||||
* draw the sheet name */
|
|
||||||
int m_FileNameSize; /* Size (height) of the text, used to
|
/// This is equivalent to the reference designator for components and is stored in F0
|
||||||
* draw the file name */
|
/// sheet pin in the schematic file.
|
||||||
wxPoint m_Pos;
|
wxString m_name;
|
||||||
wxSize m_Size; /* Position and Size of *sheet symbol */
|
|
||||||
|
/// The height of the text used to draw the sheet name.
|
||||||
|
int m_sheetNameSize;
|
||||||
|
|
||||||
|
/// The height of the text used to draw the file name.
|
||||||
|
int m_fileNameSize;
|
||||||
|
|
||||||
|
/// The position of the sheet.
|
||||||
|
wxPoint m_pos;
|
||||||
|
|
||||||
|
/// The size of the sheet.
|
||||||
|
wxSize m_size;
|
||||||
|
|
||||||
|
friend class SCH_SHEET_PIN;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SCH_SHEET( const wxPoint& pos = wxPoint( 0, 0 ) );
|
SCH_SHEET( const wxPoint& pos = wxPoint( 0, 0 ) );
|
||||||
|
@ -273,7 +274,24 @@ public:
|
||||||
return wxT( "SCH_SHEET" );
|
return wxT( "SCH_SHEET" );
|
||||||
}
|
}
|
||||||
|
|
||||||
SCH_SCREEN* GetScreen() { return m_AssociatedScreen; }
|
|
||||||
|
wxString GetName() const { return m_name; }
|
||||||
|
|
||||||
|
void SetName( const wxString& aName ) { m_name = aName; }
|
||||||
|
|
||||||
|
int GetSheetNameSize() const { return m_sheetNameSize; }
|
||||||
|
|
||||||
|
void SetSheetNameSize( int aSize ) { m_sheetNameSize = aSize; }
|
||||||
|
|
||||||
|
int GetFileNameSize() const { return m_fileNameSize; }
|
||||||
|
|
||||||
|
void SetFileNameSize( int aSize ) { m_fileNameSize = aSize; }
|
||||||
|
|
||||||
|
SCH_SCREEN* GetScreen() { return m_screen; }
|
||||||
|
|
||||||
|
wxSize GetSize() { return m_size; }
|
||||||
|
|
||||||
|
void SetSize( const wxSize& aSize ) { m_size = aSize; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function SetScreen
|
* Function SetScreen
|
||||||
|
@ -462,9 +480,9 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function Load.
|
* Function Load.
|
||||||
* for the sheet: load the file m_FileName
|
* for the sheet: load the file m_fileName
|
||||||
* if a screen already exists, the file is already read.
|
* if a screen already exists, the file is already read.
|
||||||
* m_AssociatedScreen point on the screen, and its m_RefCount is
|
* m_screen point on the screen, and its m_RefCount is
|
||||||
* incremented
|
* incremented
|
||||||
* else creates a new associated screen and load the data file.
|
* else creates a new associated screen and load the data file.
|
||||||
* @param aFrame = a SCH_EDIT_FRAME pointer to the maim schematic frame
|
* @param aFrame = a SCH_EDIT_FRAME pointer to the maim schematic frame
|
||||||
|
@ -483,14 +501,14 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function LocatePathOfScreen
|
* Function LocatePathOfScreen
|
||||||
* search the existing hierarchy for an instance of screen "FileName".
|
* search the existing hierarchy for an instance of screen "FileName".
|
||||||
* don't bother looking at the root sheet - it must be unique,
|
* don't bother looking at the root sheet - it must be unique,
|
||||||
* no other references to its m_AssociatedScreen otherwise there would be
|
* no other references to its m_screen otherwise there would be
|
||||||
* loops
|
* loops in the hierarchy.
|
||||||
* in the hierarchy.
|
*
|
||||||
* @param aScreen = the SCH_SCREEN* screen that we search for
|
* @param aScreen = the SCH_SCREEN* screen that we search for
|
||||||
* @param aList = the SCH_SHEET_PATH* that must be used
|
* @param aList = the SCH_SHEET_PATH* that must be used
|
||||||
* @return true if found
|
* @return true if found
|
||||||
*/
|
*/
|
||||||
bool LocatePathOfScreen( SCH_SCREEN* aScreen, SCH_SHEET_PATH* aList );
|
bool LocatePathOfScreen( SCH_SCREEN* aScreen, SCH_SHEET_PATH* aList );
|
||||||
|
|
||||||
|
@ -512,7 +530,7 @@ public:
|
||||||
// Set a new filename without changing anything else
|
// Set a new filename without changing anything else
|
||||||
void SetFileName( const wxString& aFilename )
|
void SetFileName( const wxString& aFilename )
|
||||||
{
|
{
|
||||||
m_FileName = aFilename;
|
m_fileName = aFilename;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChangeFileName( SCH_EDIT_FRAME* aFrame, const wxString& aFileName );
|
bool ChangeFileName( SCH_EDIT_FRAME* aFrame, const wxString& aFileName );
|
||||||
|
@ -529,7 +547,7 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void Move( const wxPoint& aMoveVector )
|
virtual void Move( const wxPoint& aMoveVector )
|
||||||
{
|
{
|
||||||
m_Pos += aMoveVector;
|
m_pos += aMoveVector;
|
||||||
|
|
||||||
BOOST_FOREACH( SCH_SHEET_PIN& pin, m_pins )
|
BOOST_FOREACH( SCH_SHEET_PIN& pin, m_pins )
|
||||||
{
|
{
|
||||||
|
@ -546,15 +564,7 @@ public:
|
||||||
virtual void Rotate( wxPoint rotationPoint );
|
virtual void Rotate( wxPoint rotationPoint );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compare schematic sheet file and sheet name against search string.
|
* @copydoc EDA_ITEM::Matches(wxFindReplaceData&,void*,wxPoint*)
|
||||||
*
|
|
||||||
* @param aSearchData - Criteria to search against.
|
|
||||||
* @param aAuxData - a pointer on auxiliary data, if needed.
|
|
||||||
* When searching string in REFERENCE field we must know the sheet path
|
|
||||||
* This param is used in this case
|
|
||||||
* @param aFindLocation - a wxPoint where to put the location of matched item. can be NULL.
|
|
||||||
*
|
|
||||||
* @return True if this item matches the search criteria.
|
|
||||||
*/
|
*/
|
||||||
virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
|
virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
|
||||||
|
|
||||||
|
@ -627,11 +637,11 @@ private:
|
||||||
virtual bool doHitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy ) const;
|
virtual bool doHitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy ) const;
|
||||||
virtual EDA_ITEM* doClone() const;
|
virtual EDA_ITEM* doClone() const;
|
||||||
virtual void doPlot( PLOTTER* aPlotter );
|
virtual void doPlot( PLOTTER* aPlotter );
|
||||||
virtual wxPoint doGetPosition() const { return m_Pos; }
|
virtual wxPoint doGetPosition() const { return m_pos; }
|
||||||
virtual void doSetPosition( const wxPoint& aPosition ) { m_Pos = aPosition; }
|
virtual void doSetPosition( const wxPoint& aPosition ) { m_pos = aPosition; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
typedef std::vector< SCH_SHEET* > SCH_SHEETS;
|
typedef std::vector< SCH_SHEET* > SCH_SHEETS;
|
||||||
|
|
||||||
#endif /* CLASS_DRAWSHEET_H */
|
#endif /* SCH_SHEEET_H */
|
||||||
|
|
|
@ -217,7 +217,7 @@ wxString SCH_SHEET_PATH::PathHumanReadable() const
|
||||||
// start at 1 to avoid the root sheet, as above.
|
// start at 1 to avoid the root sheet, as above.
|
||||||
for( unsigned i = 1; i< m_numSheets; i++ )
|
for( unsigned i = 1; i< m_numSheets; i++ )
|
||||||
{
|
{
|
||||||
s = s + m_sheets[i]->m_SheetName + wxT( "/" );
|
s = s + m_sheets[i]->GetName() + wxT( "/" );
|
||||||
}
|
}
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
|
|
|
@ -43,16 +43,6 @@
|
||||||
#include "kicad_string.h"
|
#include "kicad_string.h"
|
||||||
|
|
||||||
|
|
||||||
/* m_Edge define on which edge the pin is positioned:
|
|
||||||
*
|
|
||||||
* 0: pin on left side
|
|
||||||
* 1: pin on right side
|
|
||||||
* 2: pin on top side
|
|
||||||
* 3: pin on bottom side
|
|
||||||
* for compatibility reasons, this does not follow same values as text
|
|
||||||
* orientation.
|
|
||||||
*/
|
|
||||||
|
|
||||||
SCH_SHEET_PIN::SCH_SHEET_PIN( SCH_SHEET* parent, const wxPoint& pos, const wxString& text ) :
|
SCH_SHEET_PIN::SCH_SHEET_PIN( SCH_SHEET* parent, const wxPoint& pos, const wxString& text ) :
|
||||||
SCH_HIERLABEL( pos, text, SCH_SHEET_PIN_T )
|
SCH_HIERLABEL( pos, text, SCH_SHEET_PIN_T )
|
||||||
{
|
{
|
||||||
|
@ -66,17 +56,17 @@ SCH_SHEET_PIN::SCH_SHEET_PIN( SCH_SHEET* parent, const wxPoint& pos, const wxStr
|
||||||
else
|
else
|
||||||
SetEdge( 0 );
|
SetEdge( 0 );
|
||||||
|
|
||||||
m_Shape = NET_INPUT;
|
m_shape = NET_INPUT;
|
||||||
m_IsDangling = true;
|
m_isDangling = true;
|
||||||
m_Number = 2;
|
m_number = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SCH_SHEET_PIN::SCH_SHEET_PIN( const SCH_SHEET_PIN& aSheetLabel ) :
|
SCH_SHEET_PIN::SCH_SHEET_PIN( const SCH_SHEET_PIN& aSheetLabel ) :
|
||||||
SCH_HIERLABEL( aSheetLabel )
|
SCH_HIERLABEL( aSheetLabel )
|
||||||
{
|
{
|
||||||
m_Number = aSheetLabel.m_Number;
|
m_number = aSheetLabel.m_number;
|
||||||
m_Edge = aSheetLabel.m_Edge;
|
m_edge = aSheetLabel.m_edge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -132,7 +122,7 @@ void SCH_SHEET_PIN::SetNumber( int aNumber )
|
||||||
{
|
{
|
||||||
wxASSERT( aNumber >= 2 );
|
wxASSERT( aNumber >= 2 );
|
||||||
|
|
||||||
m_Number = aNumber;
|
m_number = aNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -168,27 +158,27 @@ void SCH_SHEET_PIN::SetEdge( int aEdge )
|
||||||
|
|
||||||
/* use -1 to adjust text orientation without changing edge*/
|
/* use -1 to adjust text orientation without changing edge*/
|
||||||
if( aEdge > -1 )
|
if( aEdge > -1 )
|
||||||
m_Edge = aEdge;
|
m_edge = aEdge;
|
||||||
|
|
||||||
switch( m_Edge )
|
switch( m_edge )
|
||||||
{
|
{
|
||||||
case 0: /* pin on left side*/
|
case 0: /* pin on left side*/
|
||||||
m_Pos.x = Sheet->m_Pos.x;
|
m_Pos.x = Sheet->m_pos.x;
|
||||||
SetOrientation( 2 ); /* Orientation horiz inverse */
|
SetOrientation( 2 ); /* Orientation horiz inverse */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: /* pin on right side*/
|
case 1: /* pin on right side*/
|
||||||
m_Pos.x = Sheet->m_Pos.x + Sheet->m_Size.x;
|
m_Pos.x = Sheet->m_pos.x + Sheet->m_size.x;
|
||||||
SetOrientation( 0 ); /* Orientation horiz normal */
|
SetOrientation( 0 ); /* Orientation horiz normal */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: /* pin on top side*/
|
case 2: /* pin on top side*/
|
||||||
m_Pos.y = Sheet->m_Pos.y;
|
m_Pos.y = Sheet->m_pos.y;
|
||||||
SetOrientation( 3 ); /* Orientation vert BOTTOM */
|
SetOrientation( 3 ); /* Orientation vert BOTTOM */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: /* pin on bottom side*/
|
case 3: /* pin on bottom side*/
|
||||||
m_Pos.y = Sheet->m_Pos.y + Sheet->m_Size.y;
|
m_Pos.y = Sheet->m_pos.y + Sheet->m_size.y;
|
||||||
SetOrientation( 1 ); /* Orientation vert UP */
|
SetOrientation( 1 ); /* Orientation vert UP */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -197,7 +187,7 @@ void SCH_SHEET_PIN::SetEdge( int aEdge )
|
||||||
|
|
||||||
int SCH_SHEET_PIN::GetEdge() const
|
int SCH_SHEET_PIN::GetEdge() const
|
||||||
{
|
{
|
||||||
return m_Edge;
|
return m_edge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -208,9 +198,9 @@ void SCH_SHEET_PIN::ConstrainOnEdge( wxPoint Pos )
|
||||||
if( Sheet == NULL )
|
if( Sheet == NULL )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( m_Edge<2 ) /*horizontal sheetpin*/
|
if( m_edge<2 ) /*horizontal sheetpin*/
|
||||||
{
|
{
|
||||||
if( Pos.x > ( Sheet->m_Pos.x + ( Sheet->m_Size.x / 2 ) ) )
|
if( Pos.x > ( Sheet->m_pos.x + ( Sheet->m_size.x / 2 ) ) )
|
||||||
{
|
{
|
||||||
SetEdge( 1 );
|
SetEdge( 1 );
|
||||||
}
|
}
|
||||||
|
@ -221,15 +211,15 @@ void SCH_SHEET_PIN::ConstrainOnEdge( wxPoint Pos )
|
||||||
|
|
||||||
m_Pos.y = Pos.y;
|
m_Pos.y = Pos.y;
|
||||||
|
|
||||||
if( m_Pos.y < Sheet->m_Pos.y )
|
if( m_Pos.y < Sheet->m_pos.y )
|
||||||
m_Pos.y = Sheet->m_Pos.y;
|
m_Pos.y = Sheet->m_pos.y;
|
||||||
|
|
||||||
if( m_Pos.y > (Sheet->m_Pos.y + Sheet->m_Size.y) )
|
if( m_Pos.y > (Sheet->m_pos.y + Sheet->m_size.y) )
|
||||||
m_Pos.y = Sheet->m_Pos.y + Sheet->m_Size.y;
|
m_Pos.y = Sheet->m_pos.y + Sheet->m_size.y;
|
||||||
}
|
}
|
||||||
else /* vertical sheetpin*/
|
else /* vertical sheetpin*/
|
||||||
{
|
{
|
||||||
if( Pos.y > ( Sheet->m_Pos.y + ( Sheet->m_Size.y / 2 ) ) )
|
if( Pos.y > ( Sheet->m_pos.y + ( Sheet->m_size.y / 2 ) ) )
|
||||||
{
|
{
|
||||||
SetEdge( 3 ); //bottom
|
SetEdge( 3 ); //bottom
|
||||||
}
|
}
|
||||||
|
@ -240,11 +230,11 @@ void SCH_SHEET_PIN::ConstrainOnEdge( wxPoint Pos )
|
||||||
|
|
||||||
m_Pos.x = Pos.x;
|
m_Pos.x = Pos.x;
|
||||||
|
|
||||||
if( m_Pos.x < Sheet->m_Pos.x )
|
if( m_Pos.x < Sheet->m_pos.x )
|
||||||
m_Pos.x = Sheet->m_Pos.x;
|
m_Pos.x = Sheet->m_pos.x;
|
||||||
|
|
||||||
if( m_Pos.x > (Sheet->m_Pos.x + Sheet->m_Size.x) )
|
if( m_Pos.x > (Sheet->m_pos.x + Sheet->m_size.x) )
|
||||||
m_Pos.x = Sheet->m_Pos.x + Sheet->m_Size.x;
|
m_Pos.x = Sheet->m_pos.x + Sheet->m_size.x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,7 +246,7 @@ bool SCH_SHEET_PIN::Save( FILE* aFile ) const
|
||||||
if( m_Text.IsEmpty() )
|
if( m_Text.IsEmpty() )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
switch( m_Edge )
|
switch( m_edge )
|
||||||
{
|
{
|
||||||
case 0: //pin on left side
|
case 0: //pin on left side
|
||||||
side = 'L';
|
side = 'L';
|
||||||
|
@ -275,7 +265,7 @@ bool SCH_SHEET_PIN::Save( FILE* aFile ) const
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( m_Shape )
|
switch( m_shape )
|
||||||
{
|
{
|
||||||
case NET_INPUT:
|
case NET_INPUT:
|
||||||
type = 'I'; break;
|
type = 'I'; break;
|
||||||
|
@ -293,7 +283,7 @@ bool SCH_SHEET_PIN::Save( FILE* aFile ) const
|
||||||
type = 'U'; break;
|
type = 'U'; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( fprintf( aFile, "F%d %s %c %c %-3d %-3d %-3d\n", m_Number,
|
if( fprintf( aFile, "F%d %s %c %c %-3d %-3d %-3d\n", m_number,
|
||||||
EscapedUTF8( m_Text ).c_str(), // supplies wrapping quotes
|
EscapedUTF8( m_Text ).c_str(), // supplies wrapping quotes
|
||||||
type, side, m_Pos.x, m_Pos.y,
|
type, side, m_Pos.x, m_Pos.y,
|
||||||
m_Size.x ) == EOF )
|
m_Size.x ) == EOF )
|
||||||
|
@ -359,23 +349,23 @@ bool SCH_SHEET_PIN::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||||
switch( connectType[0] )
|
switch( connectType[0] )
|
||||||
{
|
{
|
||||||
case 'I':
|
case 'I':
|
||||||
m_Shape = NET_INPUT;
|
m_shape = NET_INPUT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'O':
|
case 'O':
|
||||||
m_Shape = NET_OUTPUT;
|
m_shape = NET_OUTPUT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'B':
|
case 'B':
|
||||||
m_Shape = NET_BIDI;
|
m_shape = NET_BIDI;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'T':
|
case 'T':
|
||||||
m_Shape = NET_TRISTATE;
|
m_shape = NET_TRISTATE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'U':
|
case 'U':
|
||||||
m_Shape = NET_UNSPECIFIED;
|
m_shape = NET_UNSPECIFIED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -429,7 +419,7 @@ void SCH_SHEET_PIN::Mirror_X( int aXaxis_position )
|
||||||
|
|
||||||
m_Pos.y = aXaxis_position - p;
|
m_Pos.y = aXaxis_position - p;
|
||||||
|
|
||||||
switch( m_Edge )
|
switch( m_edge )
|
||||||
{
|
{
|
||||||
case 2:
|
case 2:
|
||||||
SetEdge( 3 );
|
SetEdge( 3 );
|
||||||
|
@ -448,7 +438,7 @@ void SCH_SHEET_PIN::Mirror_Y( int aYaxis_position )
|
||||||
|
|
||||||
m_Pos.x = aYaxis_position - p;
|
m_Pos.x = aYaxis_position - p;
|
||||||
|
|
||||||
switch( m_Edge )
|
switch( m_edge )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
SetEdge( 1 );
|
SetEdge( 1 );
|
||||||
|
@ -465,7 +455,7 @@ void SCH_SHEET_PIN::Rotate( wxPoint rotationPoint )
|
||||||
{
|
{
|
||||||
RotatePoint( &m_Pos, rotationPoint, 900 );
|
RotatePoint( &m_Pos, rotationPoint, 900 );
|
||||||
|
|
||||||
switch( m_Edge )
|
switch( m_edge )
|
||||||
{
|
{
|
||||||
case 0: //pin on left side
|
case 0: //pin on left side
|
||||||
SetEdge( 3 );
|
SetEdge( 3 );
|
||||||
|
@ -493,16 +483,16 @@ void SCH_SHEET_PIN::CreateGraphicShape( std::vector <wxPoint>& aPoints, const wx
|
||||||
* for INPUT type the icon is the OUTPUT shape of SCH_HIERLABEL
|
* for INPUT type the icon is the OUTPUT shape of SCH_HIERLABEL
|
||||||
* for OUTPUT type the icon is the INPUT shape of SCH_HIERLABEL
|
* for OUTPUT type the icon is the INPUT shape of SCH_HIERLABEL
|
||||||
*/
|
*/
|
||||||
int tmp = m_Shape;
|
int tmp = m_shape;
|
||||||
|
|
||||||
switch( m_Shape )
|
switch( m_shape )
|
||||||
{
|
{
|
||||||
case NET_INPUT:
|
case NET_INPUT:
|
||||||
m_Shape = NET_OUTPUT;
|
m_shape = NET_OUTPUT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NET_OUTPUT:
|
case NET_OUTPUT:
|
||||||
m_Shape = NET_INPUT;
|
m_shape = NET_INPUT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -510,7 +500,7 @@ void SCH_SHEET_PIN::CreateGraphicShape( std::vector <wxPoint>& aPoints, const wx
|
||||||
}
|
}
|
||||||
|
|
||||||
SCH_HIERLABEL::CreateGraphicShape( aPoints, aPos );
|
SCH_HIERLABEL::CreateGraphicShape( aPoints, aPos );
|
||||||
m_Shape = tmp;
|
m_shape = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -104,10 +104,10 @@ SCH_TEXT::SCH_TEXT( const wxPoint& pos, const wxString& text, KICAD_T aType ) :
|
||||||
{
|
{
|
||||||
m_Layer = LAYER_NOTES;
|
m_Layer = LAYER_NOTES;
|
||||||
m_Pos = pos;
|
m_Pos = pos;
|
||||||
m_Shape = 0;
|
m_shape = 0;
|
||||||
m_IsDangling = false;
|
m_isDangling = false;
|
||||||
m_MultilineAllowed = true;
|
m_MultilineAllowed = true;
|
||||||
m_SchematicOrientation = 0;
|
m_schematicOrientation = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -116,10 +116,10 @@ SCH_TEXT::SCH_TEXT( const SCH_TEXT& aText ) :
|
||||||
EDA_TEXT( aText )
|
EDA_TEXT( aText )
|
||||||
{
|
{
|
||||||
m_Pos = aText.m_Pos;
|
m_Pos = aText.m_Pos;
|
||||||
m_Shape = aText.m_Shape;
|
m_shape = aText.m_shape;
|
||||||
m_MultilineAllowed = aText.m_MultilineAllowed;
|
m_MultilineAllowed = aText.m_MultilineAllowed;
|
||||||
m_SchematicOrientation = aText.m_SchematicOrientation;
|
m_schematicOrientation = aText.m_schematicOrientation;
|
||||||
m_IsDangling = false;
|
m_isDangling = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ wxPoint SCH_TEXT::GetSchematicTextOffset() const
|
||||||
|
|
||||||
// add a small offset (TXTMARGE) to x ( or y) position to allow a text to
|
// add a small offset (TXTMARGE) to x ( or y) position to allow a text to
|
||||||
// be on a wire or a line and be readable
|
// be on a wire or a line and be readable
|
||||||
switch( m_SchematicOrientation )
|
switch( m_schematicOrientation )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case 0: /* Horiz Normal Orientation (left justified) */
|
case 0: /* Horiz Normal Orientation (left justified) */
|
||||||
|
@ -301,9 +301,9 @@ void SCH_TEXT::Rotate( wxPoint rotationPoint )
|
||||||
|
|
||||||
void SCH_TEXT::SetOrientation( int aOrientation )
|
void SCH_TEXT::SetOrientation( int aOrientation )
|
||||||
{
|
{
|
||||||
m_SchematicOrientation = aOrientation;
|
m_schematicOrientation = aOrientation;
|
||||||
|
|
||||||
switch( m_SchematicOrientation )
|
switch( m_schematicOrientation )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case 0: /* Horiz Normal Orientation (left justified) */
|
case 0: /* Horiz Normal Orientation (left justified) */
|
||||||
|
@ -341,14 +341,14 @@ void SCH_TEXT::SwapData( SCH_ITEM* aItem )
|
||||||
EXCHG( m_Pos, item->m_Pos );
|
EXCHG( m_Pos, item->m_Pos );
|
||||||
EXCHG( m_Size, item->m_Size );
|
EXCHG( m_Size, item->m_Size );
|
||||||
EXCHG( m_Thickness, item->m_Thickness );
|
EXCHG( m_Thickness, item->m_Thickness );
|
||||||
EXCHG( m_Shape, item->m_Shape );
|
EXCHG( m_shape, item->m_shape );
|
||||||
EXCHG( m_Orient, item->m_Orient );
|
EXCHG( m_Orient, item->m_Orient );
|
||||||
|
|
||||||
EXCHG( m_Layer, item->m_Layer );
|
EXCHG( m_Layer, item->m_Layer );
|
||||||
EXCHG( m_HJustify, item->m_HJustify );
|
EXCHG( m_HJustify, item->m_HJustify );
|
||||||
EXCHG( m_VJustify, item->m_VJustify );
|
EXCHG( m_VJustify, item->m_VJustify );
|
||||||
EXCHG( m_IsDangling, item->m_IsDangling );
|
EXCHG( m_isDangling, item->m_isDangling );
|
||||||
EXCHG( m_SchematicOrientation, item->m_SchematicOrientation );
|
EXCHG( m_schematicOrientation, item->m_schematicOrientation );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -390,7 +390,7 @@ void SCH_TEXT::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& aOffset,
|
||||||
EDA_TEXT::Draw( panel, DC, text_offset, color, DrawMode, FILLED, UNSPECIFIED_COLOR );
|
EDA_TEXT::Draw( panel, DC, text_offset, color, DrawMode, FILLED, UNSPECIFIED_COLOR );
|
||||||
EXCHG( linewidth, m_Thickness ); // set initial value
|
EXCHG( linewidth, m_Thickness ); // set initial value
|
||||||
|
|
||||||
if( m_IsDangling )
|
if( m_isDangling )
|
||||||
DrawDanglingSymbol( panel, DC, m_Pos + aOffset, color );
|
DrawDanglingSymbol( panel, DC, m_Pos + aOffset, color );
|
||||||
|
|
||||||
// Enable these line to draw the bounding box (debug tests purposes only)
|
// Enable these line to draw the bounding box (debug tests purposes only)
|
||||||
|
@ -403,12 +403,6 @@ void SCH_TEXT::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& aOffset,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function Save
|
|
||||||
* 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_TEXT::Save( FILE* aFile ) const
|
bool SCH_TEXT::Save( FILE* aFile ) const
|
||||||
{
|
{
|
||||||
bool success = true;
|
bool success = true;
|
||||||
|
@ -439,7 +433,7 @@ bool SCH_TEXT::Save( FILE* aFile ) const
|
||||||
|
|
||||||
|
|
||||||
if( fprintf( aFile, "Text Notes %-4d %-4d %-4d %-4d %s %d\n%s\n",
|
if( fprintf( aFile, "Text Notes %-4d %-4d %-4d %-4d %s %d\n%s\n",
|
||||||
m_Pos.x, m_Pos.y, m_SchematicOrientation, m_Size.x,
|
m_Pos.x, m_Pos.y, m_schematicOrientation, m_Size.x,
|
||||||
shape, m_Thickness, TO_UTF8( text ) ) == EOF )
|
shape, m_Thickness, TO_UTF8( text ) ) == EOF )
|
||||||
{
|
{
|
||||||
success = false;
|
success = false;
|
||||||
|
@ -494,6 +488,7 @@ bool SCH_TEXT::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString val = FROM_UTF8( text );
|
wxString val = FROM_UTF8( text );
|
||||||
|
|
||||||
for( ; ; )
|
for( ; ; )
|
||||||
{
|
{
|
||||||
int i = val.find( wxT( "\\n" ) );
|
int i = val.find( wxT( "\\n" ) );
|
||||||
|
@ -540,8 +535,8 @@ bool SCH_TEXT::IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemLi
|
||||||
if( Type() == SCH_TEXT_T )
|
if( Type() == SCH_TEXT_T )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
bool previousState = m_IsDangling;
|
bool previousState = m_isDangling;
|
||||||
m_IsDangling = true;
|
m_isDangling = true;
|
||||||
|
|
||||||
for( unsigned ii = 0; ii < aItemList.size(); ii++ )
|
for( unsigned ii = 0; ii < aItemList.size(); ii++ )
|
||||||
{
|
{
|
||||||
|
@ -556,7 +551,7 @@ bool SCH_TEXT::IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemLi
|
||||||
case LABEL_END:
|
case LABEL_END:
|
||||||
case SHEET_LABEL_END:
|
case SHEET_LABEL_END:
|
||||||
if( m_Pos == item.GetPosition() )
|
if( m_Pos == item.GetPosition() )
|
||||||
m_IsDangling = false;
|
m_isDangling = false;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -567,11 +562,11 @@ bool SCH_TEXT::IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemLi
|
||||||
// a paranoid programmer, I'll check just in case.
|
// a paranoid programmer, I'll check just in case.
|
||||||
ii++;
|
ii++;
|
||||||
|
|
||||||
wxCHECK_MSG( ii < aItemList.size(), previousState != m_IsDangling,
|
wxCHECK_MSG( ii < aItemList.size(), previousState != m_isDangling,
|
||||||
wxT( "Dangling end type list overflow. Bad programmer!" ) );
|
wxT( "Dangling end type list overflow. Bad programmer!" ) );
|
||||||
|
|
||||||
DANGLING_END_ITEM & nextItem = aItemList[ii];
|
DANGLING_END_ITEM & nextItem = aItemList[ii];
|
||||||
m_IsDangling = !SegmentIntersect( item.GetPosition(), nextItem.GetPosition(), m_Pos );
|
m_isDangling = !SegmentIntersect( item.GetPosition(), nextItem.GetPosition(), m_Pos );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -579,11 +574,11 @@ bool SCH_TEXT::IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemLi
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_IsDangling == false )
|
if( m_isDangling == false )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return previousState != m_IsDangling;
|
return previousState != m_isDangling;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -744,8 +739,8 @@ void SCH_TEXT::Show( int nestLevel, std::ostream& os )
|
||||||
|
|
||||||
NestedSpace( nestLevel, os ) << '<' << s.Lower().mb_str()
|
NestedSpace( nestLevel, os ) << '<' << s.Lower().mb_str()
|
||||||
<< " layer=\"" << m_Layer << '"'
|
<< " layer=\"" << m_Layer << '"'
|
||||||
<< " shape=\"" << m_Shape << '"'
|
<< " shape=\"" << m_shape << '"'
|
||||||
<< " dangling=\"" << m_IsDangling << '"'
|
<< " dangling=\"" << m_isDangling << '"'
|
||||||
<< '>'
|
<< '>'
|
||||||
<< TO_UTF8( m_Text )
|
<< TO_UTF8( m_Text )
|
||||||
<< "</" << s.Lower().mb_str() << ">\n";
|
<< "</" << s.Lower().mb_str() << ">\n";
|
||||||
|
@ -758,8 +753,8 @@ SCH_LABEL::SCH_LABEL( const wxPoint& pos, const wxString& text ) :
|
||||||
SCH_TEXT( pos, text, SCH_LABEL_T )
|
SCH_TEXT( pos, text, SCH_LABEL_T )
|
||||||
{
|
{
|
||||||
m_Layer = LAYER_LOCLABEL;
|
m_Layer = LAYER_LOCLABEL;
|
||||||
m_Shape = NET_INPUT;
|
m_shape = NET_INPUT;
|
||||||
m_IsDangling = true;
|
m_isDangling = true;
|
||||||
m_MultilineAllowed = false;
|
m_MultilineAllowed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -819,7 +814,7 @@ bool SCH_LABEL::Save( FILE* aFile ) const
|
||||||
shape = "Italic";
|
shape = "Italic";
|
||||||
|
|
||||||
if( fprintf( aFile, "Text Label %-4d %-4d %-4d %-4d %s %d\n%s\n",
|
if( fprintf( aFile, "Text Label %-4d %-4d %-4d %-4d %s %d\n%s\n",
|
||||||
m_Pos.x, m_Pos.y, m_SchematicOrientation, m_Size.x, shape,
|
m_Pos.x, m_Pos.y, m_schematicOrientation, m_Size.x, shape,
|
||||||
m_Thickness, TO_UTF8( m_Text ) ) == EOF )
|
m_Thickness, TO_UTF8( m_Text ) ) == EOF )
|
||||||
{
|
{
|
||||||
success = false;
|
success = false;
|
||||||
|
@ -909,7 +904,7 @@ EDA_RECT SCH_LABEL::GetBoundingBox() const
|
||||||
height = m_Size.y + width;
|
height = m_Size.y + width;
|
||||||
dx = dy = 0;
|
dx = dy = 0;
|
||||||
|
|
||||||
switch( m_SchematicOrientation )
|
switch( m_schematicOrientation )
|
||||||
{
|
{
|
||||||
case 0: /* Horiz Normal Orientation (left justified) */
|
case 0: /* Horiz Normal Orientation (left justified) */
|
||||||
dx = 2 * DANGLING_SYMBOL_SIZE + length;
|
dx = 2 * DANGLING_SYMBOL_SIZE + length;
|
||||||
|
@ -966,8 +961,8 @@ SCH_GLOBALLABEL::SCH_GLOBALLABEL( const wxPoint& pos, const wxString& text ) :
|
||||||
SCH_TEXT( pos, text, SCH_GLOBAL_LABEL_T )
|
SCH_TEXT( pos, text, SCH_GLOBAL_LABEL_T )
|
||||||
{
|
{
|
||||||
m_Layer = LAYER_GLOBLABEL;
|
m_Layer = LAYER_GLOBLABEL;
|
||||||
m_Shape = NET_BIDI;
|
m_shape = NET_BIDI;
|
||||||
m_IsDangling = true;
|
m_isDangling = true;
|
||||||
m_MultilineAllowed = false;
|
m_MultilineAllowed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -993,8 +988,8 @@ bool SCH_GLOBALLABEL::Save( FILE* aFile ) const
|
||||||
shape = "Italic";
|
shape = "Italic";
|
||||||
|
|
||||||
if( fprintf( aFile, "Text GLabel %-4d %-4d %-4d %-4d %s %s %d\n%s\n",
|
if( fprintf( aFile, "Text GLabel %-4d %-4d %-4d %-4d %s %s %d\n%s\n",
|
||||||
m_Pos.x, m_Pos.y, m_SchematicOrientation, m_Size.x,
|
m_Pos.x, m_Pos.y, m_schematicOrientation, m_Size.x,
|
||||||
SheetLabelType[m_Shape], shape, m_Thickness, TO_UTF8( m_Text ) ) == EOF )
|
SheetLabelType[m_shape], shape, m_Thickness, TO_UTF8( m_Text ) ) == EOF )
|
||||||
{
|
{
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
|
@ -1013,6 +1008,7 @@ bool SCH_GLOBALLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||||
Name1[0] = 0; Name2[0] = 0; Name3[0] = 0;
|
Name1[0] = 0; Name2[0] = 0; Name3[0] = 0;
|
||||||
|
|
||||||
char* sline = (char*) aLine;
|
char* sline = (char*) aLine;
|
||||||
|
|
||||||
while( (*sline != ' ' ) && *sline )
|
while( (*sline != ' ' ) && *sline )
|
||||||
sline++;
|
sline++;
|
||||||
|
|
||||||
|
@ -1049,21 +1045,21 @@ bool SCH_GLOBALLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||||
m_Text = FROM_UTF8( text );
|
m_Text = FROM_UTF8( text );
|
||||||
m_Size.x = m_Size.y = size;
|
m_Size.x = m_Size.y = size;
|
||||||
SetOrientation( orient );
|
SetOrientation( orient );
|
||||||
m_Shape = NET_INPUT;
|
m_shape = NET_INPUT;
|
||||||
m_Bold = ( thickness != 0 );
|
m_Bold = ( thickness != 0 );
|
||||||
m_Thickness = m_Bold ? GetPenSizeForBold( size ) : 0;
|
m_Thickness = m_Bold ? GetPenSizeForBold( size ) : 0;
|
||||||
|
|
||||||
if( stricmp( Name2, SheetLabelType[NET_OUTPUT] ) == 0 )
|
if( stricmp( Name2, SheetLabelType[NET_OUTPUT] ) == 0 )
|
||||||
m_Shape = NET_OUTPUT;
|
m_shape = NET_OUTPUT;
|
||||||
|
|
||||||
if( stricmp( Name2, SheetLabelType[NET_BIDI] ) == 0 )
|
if( stricmp( Name2, SheetLabelType[NET_BIDI] ) == 0 )
|
||||||
m_Shape = NET_BIDI;
|
m_shape = NET_BIDI;
|
||||||
|
|
||||||
if( stricmp( Name2, SheetLabelType[NET_TRISTATE] ) == 0 )
|
if( stricmp( Name2, SheetLabelType[NET_TRISTATE] ) == 0 )
|
||||||
m_Shape = NET_TRISTATE;
|
m_shape = NET_TRISTATE;
|
||||||
|
|
||||||
if( stricmp( Name2, SheetLabelType[NET_UNSPECIFIED] ) == 0 )
|
if( stricmp( Name2, SheetLabelType[NET_UNSPECIFIED] ) == 0 )
|
||||||
m_Shape = NET_UNSPECIFIED;
|
m_shape = NET_UNSPECIFIED;
|
||||||
|
|
||||||
if( stricmp( Name3, "Italic" ) == 0 )
|
if( stricmp( Name3, "Italic" ) == 0 )
|
||||||
m_Italic = 1;
|
m_Italic = 1;
|
||||||
|
@ -1131,7 +1127,7 @@ wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset() const
|
||||||
int HalfSize = m_Size.x / 2;
|
int HalfSize = m_Size.x / 2;
|
||||||
int offset = width;
|
int offset = width;
|
||||||
|
|
||||||
switch( m_Shape )
|
switch( m_shape )
|
||||||
{
|
{
|
||||||
case NET_INPUT:
|
case NET_INPUT:
|
||||||
case NET_BIDI:
|
case NET_BIDI:
|
||||||
|
@ -1148,7 +1144,7 @@ wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset() const
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( m_SchematicOrientation )
|
switch( m_schematicOrientation )
|
||||||
{
|
{
|
||||||
case 0: /* Orientation horiz normal */
|
case 0: /* Orientation horiz normal */
|
||||||
text_offset.x -= offset;
|
text_offset.x -= offset;
|
||||||
|
@ -1173,9 +1169,9 @@ wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset() const
|
||||||
|
|
||||||
void SCH_GLOBALLABEL::SetOrientation( int aOrientation )
|
void SCH_GLOBALLABEL::SetOrientation( int aOrientation )
|
||||||
{
|
{
|
||||||
m_SchematicOrientation = aOrientation;
|
m_schematicOrientation = aOrientation;
|
||||||
|
|
||||||
switch( m_SchematicOrientation )
|
switch( m_schematicOrientation )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case 0: /* Horiz Normal Orientation */
|
case 0: /* Horiz Normal Orientation */
|
||||||
|
@ -1231,7 +1227,7 @@ void SCH_GLOBALLABEL::Draw( EDA_DRAW_PANEL* panel,
|
||||||
CreateGraphicShape( Poly, m_Pos + aOffset );
|
CreateGraphicShape( Poly, m_Pos + aOffset );
|
||||||
GRPoly( &panel->m_ClipBox, DC, Poly.size(), &Poly[0], 0, linewidth, color, color );
|
GRPoly( &panel->m_ClipBox, DC, Poly.size(), &Poly[0], 0, linewidth, color, color );
|
||||||
|
|
||||||
if( m_IsDangling )
|
if( m_isDangling )
|
||||||
DrawDanglingSymbol( panel, DC, m_Pos + aOffset, color );
|
DrawDanglingSymbol( panel, DC, m_Pos + aOffset, color );
|
||||||
|
|
||||||
// Enable these line to draw the bounding box (debug tests purposes only)
|
// Enable these line to draw the bounding box (debug tests purposes only)
|
||||||
|
@ -1271,7 +1267,7 @@ void SCH_GLOBALLABEL::CreateGraphicShape( std::vector <wxPoint>& aPoints, const
|
||||||
|
|
||||||
int x_offset = 0;
|
int x_offset = 0;
|
||||||
|
|
||||||
switch( m_Shape )
|
switch( m_shape )
|
||||||
{
|
{
|
||||||
case NET_INPUT:
|
case NET_INPUT:
|
||||||
x_offset = -HalfSize;
|
x_offset = -HalfSize;
|
||||||
|
@ -1296,7 +1292,7 @@ void SCH_GLOBALLABEL::CreateGraphicShape( std::vector <wxPoint>& aPoints, const
|
||||||
|
|
||||||
int angle = 0;
|
int angle = 0;
|
||||||
|
|
||||||
switch( m_SchematicOrientation )
|
switch( m_schematicOrientation )
|
||||||
{
|
{
|
||||||
case 0: /* Orientation horiz normal */
|
case 0: /* Orientation horiz normal */
|
||||||
break;
|
break;
|
||||||
|
@ -1318,8 +1314,10 @@ void SCH_GLOBALLABEL::CreateGraphicShape( std::vector <wxPoint>& aPoints, const
|
||||||
for( unsigned ii = 0; ii < aPoints.size(); ii++ )
|
for( unsigned ii = 0; ii < aPoints.size(); ii++ )
|
||||||
{
|
{
|
||||||
aPoints[ii].x += x_offset;
|
aPoints[ii].x += x_offset;
|
||||||
|
|
||||||
if( angle )
|
if( angle )
|
||||||
RotatePoint( &aPoints[ii], angle );
|
RotatePoint( &aPoints[ii], angle );
|
||||||
|
|
||||||
aPoints[ii] += Pos;
|
aPoints[ii] += Pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1341,7 +1339,7 @@ EDA_RECT SCH_GLOBALLABEL::GetBoundingBox() const
|
||||||
// text X size add height for triangular shapes(bidirectional)
|
// text X size add height for triangular shapes(bidirectional)
|
||||||
length = LenSize( m_Text ) + height + DANGLING_SYMBOL_SIZE;
|
length = LenSize( m_Text ) + height + DANGLING_SYMBOL_SIZE;
|
||||||
|
|
||||||
switch( m_SchematicOrientation ) // respect orientation
|
switch( m_schematicOrientation ) // respect orientation
|
||||||
{
|
{
|
||||||
case 0: /* Horiz Normal Orientation (left justified) */
|
case 0: /* Horiz Normal Orientation (left justified) */
|
||||||
dx = -length;
|
dx = -length;
|
||||||
|
@ -1398,8 +1396,8 @@ SCH_HIERLABEL::SCH_HIERLABEL( const wxPoint& pos, const wxString& text, KICAD_T
|
||||||
SCH_TEXT( pos, text, aType )
|
SCH_TEXT( pos, text, aType )
|
||||||
{
|
{
|
||||||
m_Layer = LAYER_HIERLABEL;
|
m_Layer = LAYER_HIERLABEL;
|
||||||
m_Shape = NET_INPUT;
|
m_shape = NET_INPUT;
|
||||||
m_IsDangling = true;
|
m_isDangling = true;
|
||||||
m_MultilineAllowed = false;
|
m_MultilineAllowed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1425,8 +1423,8 @@ bool SCH_HIERLABEL::Save( FILE* aFile ) const
|
||||||
shape = "Italic";
|
shape = "Italic";
|
||||||
|
|
||||||
if( fprintf( aFile, "Text HLabel %-4d %-4d %-4d %-4d %s %s %d\n%s\n",
|
if( fprintf( aFile, "Text HLabel %-4d %-4d %-4d %-4d %s %s %d\n%s\n",
|
||||||
m_Pos.x, m_Pos.y, m_SchematicOrientation, m_Size.x,
|
m_Pos.x, m_Pos.y, m_schematicOrientation, m_Size.x,
|
||||||
SheetLabelType[m_Shape], shape, m_Thickness, TO_UTF8( m_Text ) ) == EOF )
|
SheetLabelType[m_shape], shape, m_Thickness, TO_UTF8( m_Text ) ) == EOF )
|
||||||
{
|
{
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
|
@ -1482,21 +1480,21 @@ bool SCH_HIERLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||||
m_Text = FROM_UTF8( text );
|
m_Text = FROM_UTF8( text );
|
||||||
m_Size.x = m_Size.y = size;
|
m_Size.x = m_Size.y = size;
|
||||||
SetOrientation( orient );
|
SetOrientation( orient );
|
||||||
m_Shape = NET_INPUT;
|
m_shape = NET_INPUT;
|
||||||
m_Bold = ( thickness != 0 );
|
m_Bold = ( thickness != 0 );
|
||||||
m_Thickness = m_Bold ? GetPenSizeForBold( size ) : 0;
|
m_Thickness = m_Bold ? GetPenSizeForBold( size ) : 0;
|
||||||
|
|
||||||
if( stricmp( Name2, SheetLabelType[NET_OUTPUT] ) == 0 )
|
if( stricmp( Name2, SheetLabelType[NET_OUTPUT] ) == 0 )
|
||||||
m_Shape = NET_OUTPUT;
|
m_shape = NET_OUTPUT;
|
||||||
|
|
||||||
if( stricmp( Name2, SheetLabelType[NET_BIDI] ) == 0 )
|
if( stricmp( Name2, SheetLabelType[NET_BIDI] ) == 0 )
|
||||||
m_Shape = NET_BIDI;
|
m_shape = NET_BIDI;
|
||||||
|
|
||||||
if( stricmp( Name2, SheetLabelType[NET_TRISTATE] ) == 0 )
|
if( stricmp( Name2, SheetLabelType[NET_TRISTATE] ) == 0 )
|
||||||
m_Shape = NET_TRISTATE;
|
m_shape = NET_TRISTATE;
|
||||||
|
|
||||||
if( stricmp( Name2, SheetLabelType[NET_UNSPECIFIED] ) == 0 )
|
if( stricmp( Name2, SheetLabelType[NET_UNSPECIFIED] ) == 0 )
|
||||||
m_Shape = NET_UNSPECIFIED;
|
m_shape = NET_UNSPECIFIED;
|
||||||
|
|
||||||
if( stricmp( Name3, "Italic" ) == 0 )
|
if( stricmp( Name3, "Italic" ) == 0 )
|
||||||
m_Italic = 1;
|
m_Italic = 1;
|
||||||
|
@ -1507,9 +1505,9 @@ bool SCH_HIERLABEL::Load( LINE_READER& aLine, wxString& aErrorMsg )
|
||||||
|
|
||||||
void SCH_HIERLABEL::SetOrientation( int aOrientation )
|
void SCH_HIERLABEL::SetOrientation( int aOrientation )
|
||||||
{
|
{
|
||||||
m_SchematicOrientation = aOrientation;
|
m_schematicOrientation = aOrientation;
|
||||||
|
|
||||||
switch( m_SchematicOrientation )
|
switch( m_schematicOrientation )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case 0: /* Horiz Normal Orientation */
|
case 0: /* Horiz Normal Orientation */
|
||||||
|
@ -1566,7 +1564,7 @@ void SCH_HIERLABEL::Draw( EDA_DRAW_PANEL* panel,
|
||||||
CreateGraphicShape( Poly, m_Pos + offset );
|
CreateGraphicShape( Poly, m_Pos + offset );
|
||||||
GRPoly( &panel->m_ClipBox, DC, Poly.size(), &Poly[0], 0, linewidth, color, color );
|
GRPoly( &panel->m_ClipBox, DC, Poly.size(), &Poly[0], 0, linewidth, color, color );
|
||||||
|
|
||||||
if( m_IsDangling )
|
if( m_isDangling )
|
||||||
DrawDanglingSymbol( panel, DC, m_Pos + offset, color );
|
DrawDanglingSymbol( panel, DC, m_Pos + offset, color );
|
||||||
|
|
||||||
// Enable these line to draw the bounding box (debug tests purposes only)
|
// Enable these line to draw the bounding box (debug tests purposes only)
|
||||||
|
@ -1581,7 +1579,7 @@ void SCH_HIERLABEL::Draw( EDA_DRAW_PANEL* panel,
|
||||||
|
|
||||||
void SCH_HIERLABEL::CreateGraphicShape( std::vector <wxPoint>& aPoints, const wxPoint& Pos )
|
void SCH_HIERLABEL::CreateGraphicShape( std::vector <wxPoint>& aPoints, const wxPoint& Pos )
|
||||||
{
|
{
|
||||||
int* Template = TemplateShape[m_Shape][m_SchematicOrientation];
|
int* Template = TemplateShape[m_shape][m_schematicOrientation];
|
||||||
int HalfSize = m_Size.x / 2;
|
int HalfSize = m_Size.x / 2;
|
||||||
|
|
||||||
int imax = *Template; Template++;
|
int imax = *Template; Template++;
|
||||||
|
@ -1616,10 +1614,9 @@ EDA_RECT SCH_HIERLABEL::GetBoundingBox() const
|
||||||
+ height // add height for triangular shapes
|
+ height // add height for triangular shapes
|
||||||
+ 2 * DANGLING_SYMBOL_SIZE;
|
+ 2 * DANGLING_SYMBOL_SIZE;
|
||||||
|
|
||||||
switch( m_SchematicOrientation ) // respect orientation
|
switch( m_schematicOrientation ) // respect orientation
|
||||||
{
|
{
|
||||||
case 0: /* Horiz Normal Orientation (left
|
case 0: /* Horiz Normal Orientation (left justified) */
|
||||||
*justified) */
|
|
||||||
dx = -length;
|
dx = -length;
|
||||||
dy = height;
|
dy = height;
|
||||||
x += DANGLING_SYMBOL_SIZE;
|
x += DANGLING_SYMBOL_SIZE;
|
||||||
|
@ -1662,7 +1659,7 @@ wxPoint SCH_HIERLABEL::GetSchematicTextOffset() const
|
||||||
|
|
||||||
int ii = m_Size.x + TXTMARGE + width;
|
int ii = m_Size.x + TXTMARGE + width;
|
||||||
|
|
||||||
switch( m_SchematicOrientation )
|
switch( m_schematicOrientation )
|
||||||
{
|
{
|
||||||
case 0: /* Orientation horiz normale */
|
case 0: /* Orientation horiz normale */
|
||||||
text_offset.x = -ii;
|
text_offset.x = -ii;
|
||||||
|
|
|
@ -56,27 +56,23 @@ extern const char* SheetLabelType[]; /* names of types of labels */
|
||||||
|
|
||||||
class SCH_TEXT : public SCH_ITEM, public EDA_TEXT
|
class SCH_TEXT : public SCH_ITEM, public EDA_TEXT
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
int m_Shape;
|
|
||||||
bool m_IsDangling; // true if not connected (used to draw the "not
|
|
||||||
// connected" symbol
|
|
||||||
protected:
|
protected:
|
||||||
int m_SchematicOrientation; /* orientation of texts (comments) and
|
int m_shape;
|
||||||
* labels in schematic
|
|
||||||
* 0 = normal (horizontal, left
|
/// True if not connected to another object if the object derive from SCH_TEXT
|
||||||
* justified).
|
/// supports connections.
|
||||||
* 1 = up (vertical)
|
bool m_isDangling;
|
||||||
* 2 = (horizontal, right justified).
|
|
||||||
* This can be seen as the mirrored
|
/**
|
||||||
* position of 0
|
* The orientation of text and any associated drawing elements of derived objects.
|
||||||
* 3 = bottom . This can be seen as the
|
* 0 is the horizontal and left justified.
|
||||||
* mirrored position of up
|
* 1 is vertical and top justified.
|
||||||
* this is perhaps a duplicate of m_Orient
|
* 2 is horizontal and right justified. It is the equivalent of the mirrored 0 orentation.
|
||||||
* and m_HJustified or m_VJustified,
|
* 3 is veritcal and bottom justifiend. It is the equivalent of the mirrored 1 orentation.
|
||||||
* but is more easy to handle that 3
|
* This is a duplicattion of m_Orient, m_HJustified, and m_VJustified in #EDA_TEXT but is
|
||||||
* parameters in editions, Reading and
|
* easier to handle that 3 parameters when editing and reading and saving files.
|
||||||
* Saving file
|
*/
|
||||||
*/
|
int m_schematicOrientation;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SCH_TEXT( const wxPoint& pos = wxPoint( 0, 0 ),
|
SCH_TEXT( const wxPoint& pos = wxPoint( 0, 0 ),
|
||||||
|
@ -100,10 +96,10 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function SetOrientation
|
* Function SetOrientation
|
||||||
* Set m_SchematicOrientation, and initialize
|
* Set m_schematicOrientation, and initialize
|
||||||
* m_orient,m_HJustified and m_VJustified, according to the value of
|
* m_orient,m_HJustified and m_VJustified, according to the value of
|
||||||
* m_SchematicOrientation (for a text )
|
* m_schematicOrientation (for a text )
|
||||||
* must be called after changing m_SchematicOrientation
|
* must be called after changing m_schematicOrientation
|
||||||
* @param aSchematicOrientation =
|
* @param aSchematicOrientation =
|
||||||
* 0 = normal (horizontal, left justified).
|
* 0 = normal (horizontal, left justified).
|
||||||
* 1 = up (vertical)
|
* 1 = up (vertical)
|
||||||
|
@ -113,15 +109,18 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void SetOrientation( int aSchematicOrientation );
|
virtual void SetOrientation( int aSchematicOrientation );
|
||||||
|
|
||||||
int GetOrientation() { return m_SchematicOrientation; }
|
int GetOrientation() { return m_schematicOrientation; }
|
||||||
|
|
||||||
|
int GetShape() const { return m_shape; }
|
||||||
|
|
||||||
|
void SetShape( int aShape ) { m_shape = aShape; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetSchematicTextOffset (virtual)
|
* Function GetSchematicTextOffset (virtual)
|
||||||
* @return the offset between the SCH_TEXT position and the text itself
|
* @return the offset between the SCH_TEXT position and the text itself position
|
||||||
* position
|
*
|
||||||
* This offset depend on orientation, and the type of text
|
* This offset depends on the orientation, the type of text, and the area required to
|
||||||
* (room to draw an associated graphic symbol, or put the text above a
|
* draw the associated graphic symbol or to put the text above a wire.
|
||||||
* wire)
|
|
||||||
*/
|
*/
|
||||||
virtual wxPoint GetSchematicTextOffset() const;
|
virtual wxPoint GetSchematicTextOffset() const;
|
||||||
|
|
||||||
|
@ -203,12 +202,7 @@ public:
|
||||||
virtual void Mirror_X( int aXaxis_position );
|
virtual void Mirror_X( int aXaxis_position );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compare schematic text entry against search string.
|
* @copydoc EDA_ITEM::Matches(wxFindReplaceData&,void*,wxPoint*)
|
||||||
*
|
|
||||||
* @param aSearchData - Criterial to search against.
|
|
||||||
* @param aAuxData - a pointer on auxiliary data, if needed. Can be null
|
|
||||||
* @param aFindLocation - a wxPoint where to put the location of matched item. can be NULL.
|
|
||||||
* @return True if this schematic text item matches the search criteria.
|
|
||||||
*/
|
*/
|
||||||
virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
|
virtual bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );
|
||||||
|
|
||||||
|
@ -216,7 +210,7 @@ public:
|
||||||
|
|
||||||
virtual bool IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemList );
|
virtual bool IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemList );
|
||||||
|
|
||||||
virtual bool IsDangling() const { return m_IsDangling; }
|
virtual bool IsDangling() const { return m_isDangling; }
|
||||||
|
|
||||||
virtual bool IsSelectStateChanged( const wxRect& aRect );
|
virtual bool IsSelectStateChanged( const wxRect& aRect );
|
||||||
|
|
||||||
|
@ -267,10 +261,10 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function SetOrientation
|
* Function SetOrientation
|
||||||
* Set m_SchematicOrientation, and initialize
|
* Set m_schematicOrientation, and initialize
|
||||||
* m_orient,m_HJustified and m_VJustified, according to the value of
|
* m_orient,m_HJustified and m_VJustified, according to the value of
|
||||||
* m_SchematicOrientation (for a label)
|
* m_schematicOrientation (for a label)
|
||||||
* must be called after changing m_SchematicOrientation
|
* must be called after changing m_schematicOrientation
|
||||||
* @param aSchematicOrientation =
|
* @param aSchematicOrientation =
|
||||||
* 0 = normal (horizontal, left justified).
|
* 0 = normal (horizontal, left justified).
|
||||||
* 1 = up (vertical)
|
* 1 = up (vertical)
|
||||||
|
@ -362,10 +356,10 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function SetOrientation
|
* Function SetOrientation
|
||||||
* Set m_SchematicOrientation, and initialize
|
* Set m_schematicOrientation, and initialize
|
||||||
* m_orient,m_HJustified and m_VJustified, according to the value of
|
* m_orient,m_HJustified and m_VJustified, according to the value of
|
||||||
* m_SchematicOrientation
|
* m_schematicOrientation
|
||||||
* must be called after changing m_SchematicOrientation
|
* must be called after changing m_schematicOrientation
|
||||||
* @param aSchematicOrientation =
|
* @param aSchematicOrientation =
|
||||||
* 0 = normal (horizontal, left justified).
|
* 0 = normal (horizontal, left justified).
|
||||||
* 1 = up (vertical)
|
* 1 = up (vertical)
|
||||||
|
@ -468,10 +462,10 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function SetOrientation
|
* Function SetOrientation
|
||||||
* Set m_SchematicOrientation, and initialize
|
* Set m_schematicOrientation, and initialize
|
||||||
* m_orient,m_HJustified and m_VJustified, according to the value of
|
* m_orient,m_HJustified and m_VJustified, according to the value of
|
||||||
* m_SchematicOrientation
|
* m_schematicOrientation
|
||||||
* must be called after changing m_SchematicOrientation
|
* must be called after changing m_schematicOrientation
|
||||||
* @param aSchematicOrientation =
|
* @param aSchematicOrientation =
|
||||||
* 0 = normal (horizontal, left justified).
|
* 0 = normal (horizontal, left justified).
|
||||||
* 1 = up (vertical)
|
* 1 = up (vertical)
|
||||||
|
|
|
@ -50,12 +50,12 @@ bool SCH_EDIT_FRAME::EditSheet( SCH_SHEET* aSheet, wxDC* aDC )
|
||||||
wxString units = GetUnitsLabel( g_UserUnit );
|
wxString units = GetUnitsLabel( g_UserUnit );
|
||||||
dlg.SetFileName( aSheet->GetFileName() );
|
dlg.SetFileName( aSheet->GetFileName() );
|
||||||
dlg.SetFileNameTextSize( ReturnStringFromValue( g_UserUnit,
|
dlg.SetFileNameTextSize( ReturnStringFromValue( g_UserUnit,
|
||||||
aSheet->m_FileNameSize,
|
aSheet->GetFileNameSize(),
|
||||||
m_InternalUnits ) );
|
m_InternalUnits ) );
|
||||||
dlg.SetFileNameTextSizeUnits( units );
|
dlg.SetFileNameTextSizeUnits( units );
|
||||||
dlg.SetSheetName( aSheet->m_SheetName );
|
dlg.SetSheetName( aSheet->GetName() );
|
||||||
dlg.SetSheetNameTextSize( ReturnStringFromValue( g_UserUnit,
|
dlg.SetSheetNameTextSize( ReturnStringFromValue( g_UserUnit,
|
||||||
aSheet->m_SheetNameSize,
|
aSheet->GetSheetNameSize(),
|
||||||
m_InternalUnits ) );
|
m_InternalUnits ) );
|
||||||
dlg.SetSheetNameTextSizeUnits( units );
|
dlg.SetSheetNameTextSizeUnits( units );
|
||||||
|
|
||||||
|
@ -192,16 +192,16 @@ bool SCH_EDIT_FRAME::EditSheet( SCH_SHEET* aSheet, wxDC* aDC )
|
||||||
else if( loadFromFile )
|
else if( loadFromFile )
|
||||||
aSheet->Load( this );
|
aSheet->Load( this );
|
||||||
|
|
||||||
aSheet->m_FileNameSize = ReturnValueFromString( g_UserUnit,
|
aSheet->SetFileNameSize( ReturnValueFromString( g_UserUnit,
|
||||||
dlg.GetFileNameTextSize(),
|
dlg.GetFileNameTextSize(),
|
||||||
m_InternalUnits );
|
m_InternalUnits ) );
|
||||||
aSheet->m_SheetName = dlg.GetSheetName();
|
aSheet->SetName( dlg.GetSheetName() );
|
||||||
aSheet->m_SheetNameSize = ReturnValueFromString( g_UserUnit,
|
aSheet->SetSheetNameSize( ReturnValueFromString( g_UserUnit,
|
||||||
dlg.GetSheetNameTextSize(),
|
dlg.GetSheetNameTextSize(),
|
||||||
m_InternalUnits );
|
m_InternalUnits ) );
|
||||||
|
|
||||||
if( aSheet->m_SheetName.IsEmpty() )
|
if( aSheet->GetName().IsEmpty() )
|
||||||
aSheet->m_SheetName.Printf( wxT( "Sheet%8.8lX" ), aSheet->GetTimeStamp() );
|
aSheet->SetName( wxString::Format( wxT( "Sheet%8.8lX" ), aSheet->GetTimeStamp() ) );
|
||||||
|
|
||||||
DrawPanel->MoveCursorToCrossHair();
|
DrawPanel->MoveCursorToCrossHair();
|
||||||
DrawPanel->m_IgnoreMouseEvents = false;
|
DrawPanel->m_IgnoreMouseEvents = false;
|
||||||
|
@ -225,10 +225,12 @@ static void MoveOrResizeSheet( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint&
|
||||||
if( aErase )
|
if( aErase )
|
||||||
sheet->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode );
|
sheet->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode );
|
||||||
|
|
||||||
|
wxPoint pos = sheet->GetPosition();
|
||||||
|
|
||||||
if( sheet->IsResized() )
|
if( sheet->IsResized() )
|
||||||
{
|
{
|
||||||
int width = screen->GetCrossHairPosition().x - sheet->m_Pos.x;
|
int width = screen->GetCrossHairPosition().x - sheet->GetPosition().x;
|
||||||
int height = screen->GetCrossHairPosition().y - sheet->m_Pos.y;
|
int height = screen->GetCrossHairPosition().y - sheet->GetPosition().y;
|
||||||
|
|
||||||
// If the sheet doesn't have any pins, clamp the minimum size to the default values.
|
// If the sheet doesn't have any pins, clamp the minimum size to the default values.
|
||||||
width = ( width < MIN_SHEET_WIDTH ) ? MIN_SHEET_WIDTH : width;
|
width = ( width < MIN_SHEET_WIDTH ) ? MIN_SHEET_WIDTH : width;
|
||||||
|
@ -241,18 +243,17 @@ static void MoveOrResizeSheet( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint&
|
||||||
|
|
||||||
// If the sheet has pins, use the pin positions to clamp the minimum height.
|
// If the sheet has pins, use the pin positions to clamp the minimum height.
|
||||||
height = ( height < sheet->GetMinHeight() + gridSizeY ) ?
|
height = ( height < sheet->GetMinHeight() + gridSizeY ) ?
|
||||||
sheet->GetMinHeight() + gridSizeY : height;
|
sheet->GetMinHeight() + gridSizeY : height;
|
||||||
width = ( width < sheet->GetMinWidth() + gridSizeX ) ?
|
width = ( width < sheet->GetMinWidth() + gridSizeX ) ?
|
||||||
sheet->GetMinWidth() + gridSizeX : width;
|
sheet->GetMinWidth() + gridSizeX : width;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxPoint grid = screen->GetNearestGridPosition( wxPoint( sheet->m_Pos.x + width,
|
wxPoint grid = screen->GetNearestGridPosition( wxPoint( pos.x + width, pos.y + height ) );
|
||||||
sheet->m_Pos.y + height ) );
|
sheet->Resize( wxSize( grid.x - pos.x, grid.y - pos.y ) );
|
||||||
sheet->Resize( wxSize( grid.x - sheet->m_Pos.x, grid.y - sheet->m_Pos.y ) );
|
|
||||||
}
|
}
|
||||||
else if( sheet->IsMoving() )
|
else if( sheet->IsMoving() )
|
||||||
{
|
{
|
||||||
moveVector = screen->GetCrossHairPosition() - sheet->m_Pos;
|
moveVector = screen->GetCrossHairPosition() - pos;
|
||||||
sheet->Move( moveVector );
|
sheet->Move( moveVector );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,7 +362,7 @@ void SCH_EDIT_FRAME::StartMoveSheet( SCH_SHEET* aSheet, wxDC* aDC )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DrawPanel->CrossHairOff( aDC );
|
DrawPanel->CrossHairOff( aDC );
|
||||||
GetScreen()->SetCrossHairPosition( aSheet->m_Pos );
|
GetScreen()->SetCrossHairPosition( aSheet->GetPosition() );
|
||||||
DrawPanel->MoveCursorToCrossHair();
|
DrawPanel->MoveCursorToCrossHair();
|
||||||
|
|
||||||
if( !aSheet->IsNew() )
|
if( !aSheet->IsNew() )
|
||||||
|
|
|
@ -60,7 +60,7 @@ int SCH_EDIT_FRAME::EditSheetPin( SCH_SHEET_PIN* aSheetPin, wxDC* aDC )
|
||||||
dlg.SetTextHeightUnits( GetUnitsLabel( g_UserUnit ) );
|
dlg.SetTextHeightUnits( GetUnitsLabel( g_UserUnit ) );
|
||||||
dlg.SetTextWidth( ReturnStringFromValue( g_UserUnit, aSheetPin->m_Size.x, m_InternalUnits ) );
|
dlg.SetTextWidth( ReturnStringFromValue( g_UserUnit, aSheetPin->m_Size.x, m_InternalUnits ) );
|
||||||
dlg.SetTextWidthUnits( GetUnitsLabel( g_UserUnit ) );
|
dlg.SetTextWidthUnits( GetUnitsLabel( g_UserUnit ) );
|
||||||
dlg.SetConnectionType( aSheetPin->m_Shape );
|
dlg.SetConnectionType( aSheetPin->GetShape() );
|
||||||
|
|
||||||
/* This ugly hack fixes a bug in wxWidgets 2.8.7 and likely earlier versions for
|
/* This ugly hack fixes a bug in wxWidgets 2.8.7 and likely earlier versions for
|
||||||
* the flex grid sizer in wxGTK that prevents the last column from being sized
|
* the flex grid sizer in wxGTK that prevents the last column from being sized
|
||||||
|
@ -86,7 +86,7 @@ int SCH_EDIT_FRAME::EditSheetPin( SCH_SHEET_PIN* aSheetPin, wxDC* aDC )
|
||||||
aSheetPin->m_Text = dlg.GetLabelName();
|
aSheetPin->m_Text = dlg.GetLabelName();
|
||||||
aSheetPin->m_Size.y = ReturnValueFromString( g_UserUnit, dlg.GetTextHeight(), m_InternalUnits );
|
aSheetPin->m_Size.y = ReturnValueFromString( g_UserUnit, dlg.GetTextHeight(), m_InternalUnits );
|
||||||
aSheetPin->m_Size.x = ReturnValueFromString( g_UserUnit, dlg.GetTextWidth(), m_InternalUnits );
|
aSheetPin->m_Size.x = ReturnValueFromString( g_UserUnit, dlg.GetTextWidth(), m_InternalUnits );
|
||||||
aSheetPin->m_Shape = dlg.GetConnectionType();
|
aSheetPin->SetShape( dlg.GetConnectionType() );
|
||||||
|
|
||||||
if( aDC )
|
if( aDC )
|
||||||
aSheetPin->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE );
|
aSheetPin->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE );
|
||||||
|
@ -103,7 +103,7 @@ SCH_SHEET_PIN* SCH_EDIT_FRAME::CreateSheetPin( SCH_SHEET* aSheet, wxDC* aDC )
|
||||||
sheetPin = new SCH_SHEET_PIN( aSheet, wxPoint( 0, 0 ), line );
|
sheetPin = new SCH_SHEET_PIN( aSheet, wxPoint( 0, 0 ), line );
|
||||||
sheetPin->SetFlags( IS_NEW );
|
sheetPin->SetFlags( IS_NEW );
|
||||||
sheetPin->m_Size = m_lastSheetPinTextSize;
|
sheetPin->m_Size = m_lastSheetPinTextSize;
|
||||||
sheetPin->m_Shape = m_lastSheetPinType;
|
sheetPin->SetShape( m_lastSheetPinType );
|
||||||
|
|
||||||
int response = EditSheetPin( sheetPin, NULL );
|
int response = EditSheetPin( sheetPin, NULL );
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ SCH_SHEET_PIN* SCH_EDIT_FRAME::CreateSheetPin( SCH_SHEET* aSheet, wxDC* aDC )
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_lastSheetPinType = sheetPin->m_Shape;
|
m_lastSheetPinType = sheetPin->GetShape();
|
||||||
m_lastSheetPinTextSize = sheetPin->m_Size;
|
m_lastSheetPinTextSize = sheetPin->m_Size;
|
||||||
|
|
||||||
MoveItem( (SCH_ITEM*) sheetPin, aDC );
|
MoveItem( (SCH_ITEM*) sheetPin, aDC );
|
||||||
|
@ -157,7 +157,8 @@ SCH_SHEET_PIN* SCH_EDIT_FRAME::ImportSheetPin( SCH_SHEET* aSheet, wxDC* aDC )
|
||||||
sheetPin = new SCH_SHEET_PIN( aSheet, wxPoint( 0, 0 ), label->m_Text );
|
sheetPin = new SCH_SHEET_PIN( aSheet, wxPoint( 0, 0 ), label->m_Text );
|
||||||
sheetPin->SetFlags( IS_NEW );
|
sheetPin->SetFlags( IS_NEW );
|
||||||
sheetPin->m_Size = m_lastSheetPinTextSize;
|
sheetPin->m_Size = m_lastSheetPinTextSize;
|
||||||
m_lastSheetPinType = sheetPin->m_Shape = label->m_Shape;
|
m_lastSheetPinType = label->GetShape();
|
||||||
|
sheetPin->SetShape( label->GetShape() );
|
||||||
|
|
||||||
MoveItem( (SCH_ITEM*) sheetPin, aDC );
|
MoveItem( (SCH_ITEM*) sheetPin, aDC );
|
||||||
|
|
||||||
|
|
|
@ -162,16 +162,16 @@ public:
|
||||||
/**
|
/**
|
||||||
* Function Inspect
|
* Function Inspect
|
||||||
* is the examining function within the INSPECTOR which is passed to the
|
* is the examining function within the INSPECTOR which is passed to the
|
||||||
* Iterate function. It is used primarily for searching, but not limited
|
* EDA_ITEM::Iterate() function. It is used primarily for searching, but
|
||||||
* to that. It can also collect or modify the scanned objects.
|
* not limited to that. It can also collect or modify the scanned objects.
|
||||||
*
|
*
|
||||||
* @param testItem An EDA_ITEM to examine.
|
* @param aItem An EDA_ITEM to examine.
|
||||||
* @param testData is arbitrary data needed by the inspector to determine
|
* @param aTestData is arbitrary data needed by the inspector to determine
|
||||||
* if the EDA_ITEM under test meets its match criteria.
|
* if the EDA_ITEM under test meets its match criteria.
|
||||||
* @return SEARCH_RESULT SEARCH_QUIT if the Iterator is to stop the scan,
|
* @return A #SEARCH_RESULT type #SEARCH_QUIT if the iterator function is to
|
||||||
* else SCAN_CONTINUE;
|
* stop the scan, else #SEARCH_CONTINUE;
|
||||||
*/
|
*/
|
||||||
SEARCH_RESULT virtual Inspect( EDA_ITEM* testItem, const void* testData ) = 0;
|
SEARCH_RESULT virtual Inspect( EDA_ITEM* aItem, const void* aTestData ) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue